The node, documented.
Everything the capture node knows is served from this domain: the format, the verifier, the keys, and the live records themselves. No accounts, no API keys, no rate cards: it is a read-only public surface with open CORS, because evidence that hides behind a login is worth less. Every endpoint below runs live from this page.
Eight endpoints. Try each one from here.
/api/v0/ The index: service description and the endpoint map. Machines get JSON; a browser lands on this page.
curl https://lentra.io/api/v0/
/api/v0/spec The passport format specification, v0.1, as markdown. The canonical copy of the format lives at this URL.
curl https://lentra.io/api/v0/spec
/api/v0/verifier.mjs The reference verifier: one file, zero dependencies, Node 18+. Library exports plus a CLI. Exit code 0 means the signature held.
curl https://lentra.io/api/v0/verifier.mjs
/api/v0/keys The issuer key registry: every key that ever signed records for this site, retired keys included, demo keys labelled.
curl https://lentra.io/api/v0/keys
/api/v0/records/recent?n=50 Recent machine visits. Forward-confirmed visitors as full signed records; unverified visitors as masked summaries. n up to 200.
curl https://lentra.io/api/v0/records/recent
/api/v0/records/stats Aggregates: chain position, capture counters, claimed agents ranked by volume with their verification share.
curl https://lentra.io/api/v0/records/stats
/api/v0/records/head The current chain head: sequence and digest. Pin this anywhere durable and the node's history is pinned for you. That is public witnessing, and you do not need our permission.
curl https://lentra.io/api/v0/records/head
/api/v0/verify Verify any passport JSON against the published keys, server-side. The same check the reference verifier runs locally; use whichever trust posture suits you.
curl -X POST -H 'content-type: application/json' --data @record.json https://lentra.io/api/v0/verify
Paste a passport. The node answers.
Prefilled with this site's specimen record. Send it as-is for a valid verdict, break one character for an invalid one. The same request works from curl, and the same check runs offline with the downloaded verifier.
What this surface promises.
Read-only and open
GET everywhere except /verify, CORS open, no state changed by anything you send. The node records its edge, not its API callers.
Stable under versioning
The /v0/ prefix is the envelope. Fields may be added inside responses; meanings never change under a name. Breaking changes arrive as /v1/, and /v0/ keeps answering.
Honest about status
This is a v0 prototype node: capture by access log tail, no heartbeats, no qualified countersignatures yet. The records say so themselves, in their method group.