Verify a credential
Paste a credential ID or receipt. We show the result and the raw materials, so you can re-check it yourself — no DCS account needed.
/verify.html?cid=sha256:… to deep-link straight to a result.Paste a credential ID or receipt. We show the result and the raw materials, so you can re-check it yourself — no DCS account needed.
/verify.html?cid=sha256:… to deep-link straight to a result.Three kinds of input — no account needed. Everything here is public and independently re-checkable.
1e477d1d-abed-4248-86d6-bff63c41aa04
A build's ID (a UUID). Returns the full receipt chain for that build — “verified · N in chain · signed · anchored” — with every run linked together. Find it in your dashboard history under the Project / build column, or on the build's certificate.
bafkreigdygiu7qgglx6qi6c3izcqkgyxwimft446utcvvg5n75ivy3fzau
An IPFS address for a single receipt (starts with bafk/bafy). Returns “content verified — these bytes hash to this CID” plus the receipt's kind, runs, signature, and chain links. This check runs in your browser, so it works even when our servers are down. Find CIDs on the certificate PDF, the Explorer feed, or any “View on IPFS” link.
{ "kind": "build_complete", "session_id": "…", "signature": { … } }
Paste the whole receipt object to re-check its hash and signature. Optionally paste the original document too, to confirm it still matches the stored hash.
✓ Content-address match — the bytes are exactly what the CID commits to (tamper-evident).
✓ Signature valid — signed by the issuer's Ed25519 key.
✓ Anchored on Base — the chain's root is written to Base mainnet.
N in chain — how many linked receipts that build produced (one per run, plus lifecycle receipts like build_complete).
“Could not reach the verification service” → the credential API is briefly down. Use a Receipt CID instead — it verifies in-browser with no server — or retry shortly.
“Couldn't load that CID from the gateway” → check the CID for typos, or open the raw JSON link directly. A brand-new receipt can take ~1 minute to propagate to IPFS.
“Content hash does NOT match this CID” → those bytes were altered — don't trust that copy. Re-fetch from the official source.
“That's a receipt CID, not an issuer” → you're on the Registry. A receipt belongs on Verify or the Explorer; the Registry is for issuer profiles (e.g. ?issuer=dcslabs).
Receipts, chains, IDs, and how independent verification works.
bafk…) is the IPFS address of a single receipt. A sha256:… value is a content fingerprint. Rule of thumb: paste a Session ID to verify a whole build, a CID to verify one receipt.build_complete, memory_write). So 10 runs ≈ 11–12 in chain, and 50 runs ≈ 52–53 in chain. The count tracks actions, not agents — one agent can take several actions.prev_receipt_cid), forming a tamper-evident chain — change any receipt and every later link breaks.gateway.lighthouse.storage/ipfs/<cid>), recompute its SHA-256 to confirm it matches the CID, and check the Ed25519 signature against the issuer's published key. The reference verifier is open — our servers are a convenience, not a dependency.