Skip to content

API Reference

Base URL
https://stampapi.veristamp.in/api/v1

Submit a file hash for timestamping and receive a signed cryptographic receipt. The file itself is never transmitted — only the hash is sent.

HTTP
POST /api/v1/timestamp Content-Type: application/json
hashstring
required

Hex-encoded SHA-256 digest of the file (64 hex characters).

noncestring
required

Base64url-encoded random 16-byte nonce. Generate a fresh nonce per request to prevent brute-force matching of the leaf hash.

filenamestring
optional

Original filename. Metadata only — not part of the cryptographic proof.

sizenumber
optional

File size in bytes. Metadata only — not part of the cryptographic proof.

{
"hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"nonce": "xK9mP2vL8nQ4wR7j",
"filename": "contract.pdf",
"size": 2048576
}
{
"receipt": {
"veristamp_version": "1.0",
"type": "veristamp.receipt",
"receipt_id": "vst_r_7f3a2b1c",
"issued_at": "2026-06-05T12:00:00.000Z",
"hash": {
"algorithm": "SHA-256",
"value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
"nonce": "xK9mP2vL8nQ4wR7j",
"issuer": {
"name": "Veristamp",
"key_id": "vst_sign_2026_q2_01"
},
"signature": {
"algorithm": "Ed25519",
"value": "aBcDeFgHiJkLmNoPqRsTuVwXyZ..."
},
"verification": {
"public_key_registry": "https://stamp.veristamp.in/.well-known/veristamp-keyring.json",
"verifier": "https://stamp.veristamp.in/verify"
},
"transparency": {
"log": "https://stamp.veristamp.in/transparency",
"current_root": "https://roots.veristamp.in/.well-known/veristamp-roots/current.json",
"monthly_archive": "https://roots.veristamp.in/.well-known/veristamp-roots/2026-06.json",
"yearly_archive": "https://roots.veristamp.in/.well-known/veristamp-roots/2026.json",
"status": "pending_next_root"
}
}
}
StatusCodeDescription
400BAD_REQUESTInvalid request body — not valid JSON or unrecognized fields
400MISSING_NONCENonce is missing or shorter than 16 bytes
400INVALID_HASH_FORMATHash is not a valid 64-character hex string
400UNSUPPORTED_HASH_ALGORITHMOnly SHA-256 is supported
429RATE_LIMITEDReturned by Cloudflare WAF before the Worker is invoked.
503SERVICE_UNAVAILABLEInternal service error — retry later

Error responses follow a consistent format:

{
"error": {
"code": "MISSING_NONCE",
"message": "Human-readable description of the error"
}
}

The current keyring containing all active and retired public keys is available as a static file — no API call needed:

URL
https://stamp.veristamp.in/.well-known/veristamp-keyring.json

The keyring supports conditional requests via ETag/If-None-Match headers and can be cached indefinitely for offline verification. See the Keyring reference for the full structure and verification guide.