API

Base URL: https://existence-proof.com. All JSON responses use content-type: application/json. Errors are { "error": "<message>" } with a 4xx/5xx status.

Stamping

POST /v1/stamp

Request:

{ "sha256": "<64 hex chars>" }

Response 200:

{
  "index": 1234,
  "sha256": "…",
  "time": "2026-10-26T18:30:00.123Z",
  "accuracy_ms": 1000,
  "clock_source": "Cloudflare edge clock (…)",
  "drand": { "chain": "<hex>", "round": 123456, "randomness": "<hex>" },
  "tree_size": 1235,
  "checkpoint": "<signed note text>",
  "inclusion_proof": ["<hex>", "…"],
  "token": "<base64 DER RFC 3161 TimeStampToken (ContentInfo), with proof in unsigned attrs>",
  "links": {
    "token": "/v1/stamps/1234/token.tsr",
    "evidence": "/v1/stamps/1234/evidence.zip",
    "self": "/v1/stamps/1234"
  }
}

The request returns once the entry is in the tree (≈1 s batching).

POST /tsa

Standard RFC 3161. Body application/timestamp-query (DER TimeStampReq), response application/timestamp-reply (DER TimeStampResp). Only SHA-256 imprints are accepted. Honors nonce and certReq. Works with:

openssl ts -query -data file.pdf -sha256 -cert -out req.tsq
curl -s -H 'content-type: application/timestamp-query' --data-binary @req.tsq https://existence-proof.com/tsa -o resp.tsr

Lookup

GET /v1/stamps/{index}

Same shape as the POST /v1/stamp response, with inclusion_proof and checkpoint against the latest checkpoint.

GET /v1/stamps/{index}/token.tsr

DER TimeStampToken (application/timestamp-reply body is not used here; this is the bare token, application/octet-stream).

GET /v1/stamps/{index}/evidence.zip

Evidence package: token.tsr, tstinfo.der, certs/*.pem, checkpoint.txt, inclusion-proof.json, anchors/* (anchor tokens covering this entry, once available), stamp.json, VERIFY.md (step-by-step instructions).

GET /v1/hash/{sha256}

{ "sha256": "…", "stamps": [ { "index": 1234, "time": "…" } ] }

Empty stamps array (status 200) if never stamped. Rate-limited, free.

GET /v1/log?start={index}&limit={n}

Browse entries in order. limit ≤ 256.

{ "tree_size": 1235, "entries": [ { "index": 0, "sha256": "…", "time": "…" } ] }

Log (transparency)

Service info