Evidence and certificates
Somebody disputing a signature three years from now does not get a database. They get a PDF and a claim.
When a document completes, a certificate is issued: the document and its hash, every signer with the method and value of their signature, and the whole event chain with the address and browser at each step. It is frozen at issue and hashed.
Frozen, and checked against the live record
Freezing sounds like the wrong instinct — a derived value that has drifted is the one somebody quotes. But a certificate is evidence, and evidence says what was true at a moment. Deriving it later means the document somebody holds and the document we render can differ with nothing to compare.
So both properties are kept. The payload is frozen and hashed at issue, and verification re-derives it from the live record and reports any divergence:
{
"certificate_found": true,
"document_matches": true,
"still_matches_record": false,
"divergence": "The document text has changed since this certificate was issued."
}
A divergence is a finding, not a correction. We report it and change nothing. A verification service that quietly re-derived would be unable to answer the one question it exists for.
The sealed PDF
GET /v1/documents/{id}/pdf returns the certificate as a PDF
sealed with a PAdES detached signature and an RFC 3161 timestamp — over the
signature, not over the document, which is what lets a reader tell when the
seal was applied rather than when the file was made.
Public verification
Every certificate carries a sixteen-character code, printable and typable: no I, L, O or U, because those are the four that get mistyped as 1, 1, 0 and V. Anybody holding it can check the certificate without an account.
Ready to build? An API key takes a minute in the portal, and the free plan covers the first 25 agreements a month.
Get an API key