The format is open by design.
Anyone may emit passports, read them, or build a verifier, and data providers are expected to issue their own. What is sold is responsible issuance: keys, operational discipline and accountability. Never access to the format. The canonical copies live on this site's own API: GET /api/v0/spec and GET /api/v0/verifier.mjs, alongside the live records they govern.
Six groups inside one signed container.
| Member | Meaning |
|---|---|
| passport_version | Format version. A verifier must reject versions it does not implement. |
| id | Globally unique, sortable identifier of this record. |
| issuer | Issuer name and the key id used to sign. |
| claims | The six groups: source, observation, method, context, quality, rights. |
| chain | Sequence number and digest of the preceding record. This is the tamper-evidence. |
| signature | Algorithm, key id and the detached signature over the canonical body. |
| countersignatures · planned v0.2 | Qualified-timestamp countersignature (RFC 3161) over the signed record, for jurisdictions where legal presumption attaches to qualified time. |
One envelope. Three directions of capture.
The six groups keep their meaning in every profile: who, when, how, against what, with which result, under which rights. A profile only fixes the vocabulary inside each group for one direction of capture.
ingress
A crawler visit recorded at a publisher's edge: the claimed agent, the real network, what was fetched, and the robots.txt and license state at that moment. The specimen below is an ingress record.
session
A model session recorded at the API boundary: prompt chain, model and version, parameters, output digests. The answer to “the examples were engineered”.
observation
An outbound fetch: what a machine consumed from the open web, from where, and under which rights.
Determinism is the whole trick.
Two parties must derive byte-identical input from the same record, or a signature proves nothing. The rules are deliberately few: strip the signature, sort keys, emit no insignificant whitespace, and never re-encode a number that was measured.
body = passport without "signature" canonical = sortedKeys(JSON(body)) // UTF-8 bytes signature = ed25519.sign(canonical, k) // base64 verify = ed25519.verify(sig, canonical, pub)
Four steps, and the last one is yours.
Resolve the key
Look up signature.key_id in a published issuer registry.
Check the signature
Recompute the canonical body and verify Ed25519 over those exact bytes.
Follow the chain
Check chain.prev against the record it claims to follow.
Apply your policy
Decide whether this freshness, corroboration and rights are enough for you.
Step four is deliberately yours. A passport states what was observed and what is permitted. It does not decide whether that is sufficient for a given decision; that judgement stays with the party who answers for it.
Retired keys stay published forever.
Public keys live at /keys/issuers.json, versioned by key_id and rotated on a fixed schedule. A key that stops issuing is never removed: records signed under it must remain verifiable long after it is retired.
The whole object, exactly as issued.
{
"passport_version": "0.1",
"id": "lp_01J9AC5K8Q2RD7MW4XE1VBT6HN",
"issuer": {
"name": "LENTRA",
"key_id": "lentra-demo-2026-08"
},
"claims": {
"source": {
"claimed_agent": "ExampleBot/2.4 (+https://ai.example.com/bot)",
"peer_ip": "198.51.100.23",
"peer_asn": "AS64511",
"reverse_dns": "none",
"forward_confirmed": false
},
"observation": {
"observed_at": "2026-08-19T09:14:52.104Z",
"observed_at_source": "roughtime+ntp-consensus",
"capture_point": "edge_mirror",
"duration_ms": 63
},
"method": {
"transport": "https_get",
"capture": "passive_mirror",
"interference": "none",
"site": "daily-ledger.example"
},
"context": {
"requested_url": "https://daily-ledger.example/analysis/2026-08-19/rates",
"robots_txt_sha256": "sha256:5b0e…77c1",
"robots_state": "disallowed_for_agent",
"license_signals": [
"rsl:v1",
"tdm-reservation"
]
},
"quality": {
"http_status": 200,
"content_sha256": "sha256:c9d4…12aa",
"content_bytes": 48211,
"response": "served",
"anomalies": [
"agent_network_mismatch"
]
},
"rights": {
"basis": "publisher_terms",
"terms_url": "https://daily-ledger.example/terms",
"terms_sha256": "sha256:7a19…0f55",
"reserved": [
"tdm",
"model_training"
],
"jurisdiction": "EU"
}
},
"chain": {
"seq": 51402,
"prev": "sha256:aa03…4f6d"
},
"signature": {
"alg": "ed25519",
"key_id": "lentra-demo-2026-08",
"value": "PzppiIltEetr9BXf09qSohp6qkE/9GPdYRsPkFuSH+665jQptbIYKoNiZ2L+Ppl0WNjR/X9HXKGkuLlfJNVJAQ=="
}
} Specimen record. Field values are illustrative; the signature over them is real and verifiable.