CaptionPass
ProductConvertLearnPricingComplianceEnterpriseDocs
Sign inCreate accountDashboardConvert & fix free
CaptionPass

Professional caption delivery QA for editors and producers.

Product

  • Free caption converter
  • Fix captions
  • Pricing
  • What is CaptionPass?
  • API
  • Sign in
  • Dashboard
  • Compliance
  • Accessibility
  • Enterprise
  • Verify a receipt
  • About
  • Changelog

Learn

  • SRT vs VTT
  • YouTube caption upload issues
  • Why your captions are not showing
  • Fix overlapping subtitles
  • Educators
  • All guides →

Legal

  • info@captionpass.com
  • Privacy
  • Terms

© 2026 CaptionPass. Caption reliability layer for delivery.CaptionPass is in early access — features and limits may change. Spotted something off? Use Send feedback above.

Sample evidence

A conformance receipt, in full

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.

Signature valid

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.

Lecture 1 — Accessibility Law and Practice (sample)

Issued
Sun, 23 Aug 2026 09:00:00 GMT
Files
1
Revision
3
Engine
0.1.0 / presets 2

Spoken text preserved: verified

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.

WCAG 2.1 Level AA

W3C Web Content Accessibility Guidelines 2.1, Level AA (W3C Recommendation, 5 June 2018)

  • 1.2.2 Captions (Prerecorded)

    Not met

    Captions are provided for all prerecorded audio content in synchronized media.

    • caption_gap · cue 4 207.9s with no captions between cue 3 and cue 4.
    • caption_gap · cue 5 Captions end 492.0s before the programme does.
    • coverage_low Captions span 32% of the programme (expected at least 80%).

    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 evaluated

    Captions 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.

The JSON

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"
  }
}

The library-wide version of this evidence is the sample conformance report. What we can and cannot establish is set out on the compliance page.