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)
GET /checkpoint— latest signed checkpoint (text/plain)GET /tile/...— C2SP tlog-tiles (immutable full tiles cached forever)GET /v1/anchors?limit=n— recent external anchors:{ "anchors": [ { "tree_size", "checkpoint_hash", "tsa": "digicert"|"freetsa", "time", "token_url" } ] }GET /v1/anchors/{id}/token.tsr— the anchor's RFC 3161 token
Service info
GET /v1/clock— clock source, stated accuracy, recent cross-check offsetsGET /.well-known/existence-proof-keys—{ "root_cert_pem", "tsa_cert_pem", "chain_pem", "checkpoint_vkey", "log_origin", "policy_oid", "extension_oid", "history": [] }