Sample evidence
Not a mock-up. This page runs a sample caption file through the same engine that processes customer deliveries and issues the receipt with the same code, on every load. It is signed with this deployment's live key, so the verifier below really does check it.
The sample lecture has a real defect — three minutes in the middle were never captioned — so you can see what a finding looks like rather than an empty pass. Note the row for Captions (Live): it is reported as not evaluated, permanently, because nothing in a caption file can settle it.
This receipt is byte-for-byte what CaptionPass issued. Nothing in it has been edited since.
We store no copy of this sample, deliberately. It verifies from the JSON alone — which is the property being demonstrated, not a gap.
Every non-whitespace character of the spoken text was compared in timeline order before and after processing. Line breaks, cue boundaries and timing may change; the words may not.
W3C Web Content Accessibility Guidelines 2.1, Level AA (W3C Recommendation, 5 June 2018)
1.2.2 Captions (Prerecorded)
Not metCaptions are provided for all prerecorded audio content in synchronized media.
A caption file proves captions exist, and can show they start late or skip stretches of the programme. It cannot prove they cover all audio, because that comparison needs the audio.
1.2.4 Captions (Live)
Not evaluatedCaptions are provided for all live audio content in synchronized media.
Live captioning is a property of the broadcast, not of a delivered file. Nothing in a sidecar can settle it.
Check it yourself
This posts the receipt above to our verifier as raw JSON — not by looking it up. Then try the second button, which changes one word in the project title first.
This is the whole document a customer forwards. The signature covers every field of it except itself, so changing any one of them — a verdict, a project name, a single finding — makes it stop verifying.
{
"version": 2,
"receiptId": "sample-lecture-1-wcag21aa",
"kind": "single_export",
"issuedAt": "2026-08-23T09:00:00.000Z",
"project": {
"id": "sample-lecture-1",
"title": "Lecture 1 — Accessibility Law and Practice (sample)",
"irRevision": 3
},
"artifacts": [
{
"preset": "youtube",
"filename": "lecture-1-youtube.srt",
"exportId": "sample-export-1",
"bytes": 412,
"irRevision": 3
}
],
"engine": {
"engineVersion": "0.1.0",
"presetSchemaVersion": "2"
},
"spokenText": {
"result": "verified",
"method": "Every non-whitespace character of the spoken text was compared in timeline order before and after processing. Line breaks, cue boundaries and timing may change; the words may not.",
"artifactsChecked": 1,
"artifactsTotal": 1
},
"conformance": {
"standardId": "wcag-2.1-aa",
"label": "WCAG 2.1 Level AA",
"citation": "W3C Web Content Accessibility Guidelines 2.1, Level AA (W3C Recommendation, 5 June 2018)",
"url": "https://www.w3.org/TR/WCAG21/",
"clauses": [
{
"id": "1.2.2",
"title": "Captions (Prerecorded)",
"requirement": "Captions are provided for all prerecorded audio content in synchronized media.",
"coverage": "partial",
"status": "fail",
"limitation": "A caption file proves captions exist, and can show they start late or skip stretches of the programme. It cannot prove they cover all audio, because that comparison needs the audio.",
"evidence": [
{
"code": "caption_gap",
"message": "207.9s with no captions between cue 3 and cue 4.",
"cueIndex": 4
},
{
"code": "caption_gap",
"message": "Captions end 492.0s before the programme does.",
"cueIndex": 5
},
{
"code": "coverage_low",
"message": "Captions span 32% of the programme (expected at least 80%)."
}
]
},
{
"id": "1.2.4",
"title": "Captions (Live)",
"requirement": "Captions are provided for all live audio content in synchronized media.",
"coverage": "not_checkable",
"status": "not_evaluated",
"limitation": "Live captioning is a property of the broadcast, not of a delivered file. Nothing in a sidecar can settle it.",
"evidence": []
}
],
"evaluatedClausesPassed": false,
"notEvaluatedCount": 1
},
"signature": {
"algorithm": "HMAC-SHA256",
"keyId": "ad1",
"value": "c44e7af6ff2568ce80a3cffe72a52c955403b9e1ca7019669265d1e05877e0c9"
}
}