live example · response captured 2026-07-09 · hashes shortened
curl -s https://pith.science/pith/34BOUJ2M/integrity.json
{
"pith_number": "34BOUJ2M",
"arxiv_id": "34BOUJ2M",
"integrity": {
"available": true,
"summary": {"critical": 0, "advisory": 0, "informational": 0},
"clean": true,
"findings": [],
"snapshot_sha256": "c28c3603d3b5d939..."
},
"events": [],
"protocol_url": "https://pith.science/pith-integrity-protocol"
}
open this response in the browser · the paper it describes
Journals, repositories, crawlers, and agents can consume these records directly. Every endpoint on this page is an unauthenticated HTTP GET returning JSON or SVG; findings and events come back with the hashes and Ed25519 signatures needed to re-verify them offline.
GET/pith/{id}/integrity.json
Detector summary, findings, and the signed pith.integrity.v1 event replay for one paper. Each event carries its payload, payload_sha256, signature_b64, and signing_key_id, so the whole record re-verifies offline. Clean papers return "clean": true with empty findings, as in the live example above.
event schema · live example · also accepts a raw arXiv ID
GET/pith/{id}/bundle.json
The full Open Graph Bundle: canonical record, source aliases, every signed event, timestamp proofs, mirror hints, and the public keys needed to check it all. The same bundle is served at /.well-known/pith/{id}/bundle.json.
{
"bundle_type": "pith_open_graph_bundle",
"bundle_version": "1.0",
"pith_number": "pith:2026:34BOUJ2MZM6ASZFWKVDHL2BAZ3",
"short_pith_number": "pith:34BOUJ2M",
"canonical_sha256": "df02ea274ccb3c09...",
"source": {"kind": "arxiv", "id": "2605.13860", "version": "1"},
"events": [
{
"event_type": "record_created",
"content_sha256": "8c1f94ae05e1b73e...",
"signature": {"...": "..."},
"created_at": "2026-05-17T23:39:19Z"
}
],
"mirror_hints": ["..."],
"public_keys": [{"key_id": "pith-v1-2026-05", "algorithm": "ed25519", "...": "..."}]
}
response captured 2026-07-09, truncated
bundle schema · live example
GET/pith/{id}/state.json
Current state computed from the bundle's events by the deterministic merge pith-open-graph-merge-v1: event counts, validity tallies, and the merged current record. Recompute it yourself from the bundle; the answers must match.
state schema · live example
GET/pith/{id}.json
The full Pith Number record: canonical record, signed receipt, graph snapshot, events, aliases, and link targets. GET /pith/{id} with Accept: application/json returns the same payload as application/ld+json.
record schema · live example
GET/pith/{id}/claims.json
The machine-readable claim ledger for one paper, with provenance anchors (cited works, locations, formal-bridge modules) per claim.
live example · also accepts a raw arXiv ID
GET/badge/{id}.svg
Embeddable SVG badge for author, lab, or journal pages. See embed the badge below for the snippet and a live render.
live example · also accepts a raw arXiv ID
GET/api/pith-number/{id}/graph.json
The graph snapshot alone: paper metadata, references, and integrity block without the record envelope.
live example
GET/api/pith-number/{id}/events.json
The signed event list alone, for replay without downloading the full bundle.
live example
GET/api/pith-number/resolve
Alias resolution: ?arxiv=2605.13860&json=true or ?doi=...&json=true returns the full record for that paper; without json=true it 302s to the HTML resolver page.
live example