{
"statusCode": 401,
"message": "Invalid API key",
"error": true,
"url": "https://api.zebratruth.ai/v1/whoami",
"statusMessage": "Invalid API key"
}
Video
Poll video job status + retrieve report
Returns the current state of a video compliance job. When the job is
terminal (status: completed | failed), the full report payload is
inlined in the response — no extra fetch needed.
Polling cadence: every 2 seconds is recommended; the engine has a
3-minute upper bound on a single job’s worker time.
reportFetchFailed. Blob storage is eventually-consistent — a
read immediately after the worker completes can occasionally miss.
Rather than 500, the response surfaces reportFetchFailed: true so
the client can retry the same endpoint shortly.
Tenant scoping. A requestId belonging to a different tenant
returns 404 (no info leak about another tenant’s jobs).
Internal worker phase name (e.g. transcribeAudio, analyzeFrames, done).
Useful for showing live progress UI. Not part of the stability contract —
new phases may be added without notice.
Present + true when the row is terminal but the report blob could
not be fetched (eventually-consistent storage edge). Retry the same
endpoint in 1-2 seconds.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ZebraTruth — Runtime Compliance for AI Agents","colors":{"primary":"#3FB2FE","light":"#3FB2FE","dark":"#3FB2FE"},"logo":{"light":"https://mintcdn.com/zebratruthai/gsHY39_GGp7teBef/logo/light.svg?fit=max\u0026auto=format\u0026n=gsHY39_GGp7teBef\u0026q=85\u0026s=a0210573e206e7c10145de436da1dab1","dark":"https://mintcdn.com/zebratruthai/gsHY39_GGp7teBef/logo/dark.svg?fit=max\u0026auto=format\u0026n=gsHY39_GGp7teBef\u0026q=85\u0026s=43489640c220a2f492f4d203e72392af"},"favicon":"https://mintcdn.com/zebratruthai/53nDj18I-jVMHwMl/favicon.png?fit=max\u0026auto=format\u0026n=53nDj18I-jVMHwMl\u0026q=85\u0026s=d17d051b30e8720f47448f94af058918","api":{"playground":{}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"zebratruthai","hasAudioNarration":false,"actualSubdomain":"zebratruthai","customDomains":["docs.zebratruth.ai"],"gitSource":{"type":"github","owner":"dafstar76","repo":"zebratruth-ai-labs","deployBranch":"master","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ab71fdcbc2c56bfa72d6aca","collectionId":"00df67d9-1f04-4b9c-8e32-28dcda9d3798","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ab71fdcbc2c56bfa72d6aca"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ab71fdcbc2c56bfa72d6aca","clientVersion":"0.0.3964","searchFilterCounts":[{"language":"default","tag":"API Reference","count":44},{"language":"default","tag":"Documentation","count":14},{"language":"default","tag":"Guides","count":9},{"language":"default","tag":"Text, Images \u0026 Integration","count":8},{"language":"default","tag":"Corpus","count":7},{"language":"default","tag":"Concepts","count":6},{"language":"default","tag":"Video","count":6},{"language":"default","tag":"Account \u0026 Usage","count":6},{"language":"default","tag":"Provenance","count":6},{"language":"default","tag":"Jobs \u0026 Reports","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/video-compliance/poll-video-job-status-+-retrieve-report","slug":"/api-reference/video-compliance/poll-video-job-status-+-retrieve-report","pageMetadata":{"title":"Poll video job status + retrieve report","description":"Returns the current state of a video compliance job. When the job is\nterminal (`status: completed | failed`), the full `report` payload is\ninlined in the response — no extra fetch needed.\n\n**Polling cadence:** every 2 seconds is recommended; the engine has a\n3-minute upper bound on a single job's worker time.\n\n**`reportFetchFailed`.** Blob storage is eventually-consistent — a\nread immediately after the worker completes can occasionally miss.\nRather than 500, the response surfaces `reportFetchFailed: true` so\nthe client can retry the same endpoint shortly.\n\n**Tenant scoping.** A `requestId` belonging to a different tenant\nreturns 404 (no info leak about another tenant's jobs).\n","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/check-video/{requestId}","href":"/api-reference/video-compliance/poll-video-job-status-+-retrieve-report","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Returns the current state of a video compliance job. When the job is\\nterminal (\", _jsx(_components.code, {\n children: \"status: completed | failed\"\n }), \"), the full \", _jsx(_components.code, {\n children: \"report\"\n }), \" payload is\\ninlined in the response — no extra fetch needed.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Polling cadence:\"\n }), \" every 2 seconds is recommended; the engine has a\\n3-minute upper bound on a single job’s worker time.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsxs(_components.strong, {\n children: [_jsx(_components.code, {\n children: \"reportFetchFailed\"\n }), \".\"]\n }), \" Blob storage is eventually-consistent — a\\nread immediately after the worker completes can occasionally miss.\\nRather than 500, the response surfaces \", _jsx(_components.code, {\n children: \"reportFetchFailed: true\"\n }), \" so\\nthe client can retry the same endpoint shortly.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Tenant scoping.\"\n }), \" A \", _jsx(_components.code, {\n children: \"requestId\"\n }), \" belonging to a different tenant\\nreturns 404 (no info leak about another tenant’s jobs).\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Poll video job status + retrieve report","description":"Returns the current state of a video compliance job. When the job is\nterminal (`status: completed | failed`), the full `report` payload is\ninlined in the response — no extra fetch needed.\n\n**Polling cadence:** every 2 seconds is recommended; the engine has a\n3-minute upper bound on a single job's worker time.\n\n**`reportFetchFailed`.** Blob storage is eventually-consistent — a\nread immediately after the worker completes can occasionally miss.\nRather than 500, the response surfaces `reportFetchFailed: true` so\nthe client can retry the same endpoint shortly.\n\n**Tenant scoping.** A `requestId` belonging to a different tenant\nreturns 404 (no info leak about another tenant's jobs).\n","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/check-video/{requestId}","href":"/api-reference/video-compliance/poll-video-job-status-+-retrieve-report","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"getVideoCheckStatus","summary":"Poll video job status + retrieve report","description":"Returns the current state of a video compliance job. When the job is\nterminal (`status: completed | failed`), the full `report` payload is\ninlined in the response — no extra fetch needed.\n\n**Polling cadence:** every 2 seconds is recommended; the engine has a\n3-minute upper bound on a single job's worker time.\n\n**`reportFetchFailed`.** Blob storage is eventually-consistent — a\nread immediately after the worker completes can occasionally miss.\nRather than 500, the response surfaces `reportFetchFailed: true` so\nthe client can retry the same endpoint shortly.\n\n**Tenant scoping.** A `requestId` belonging to a different tenant\nreturns 404 (no info leak about another tenant's jobs).\n","tags":["Video Compliance"],"parameters":["96a47dad-d8b8-4442-ad19-e32e0ca986f6"],"responses":{"200":"be259168-58e9-4af6-89fa-9f876d02c620","400":"52399c29-3bb9-4d1d-b952-a0d3e7ac5cdb","401":"643e5898-9853-4c18-b558-f06484165e05","404":"c748a827-39c7-4d65-b845-476c7a548e45"},"method":"get","type":"path","servers":["e4860b08-abe2-46de-8ff2-cf13ac5f2eef"],"security":["2150c869-c80e-45b2-aa80-21ce646b4401"],"path":"/compliance/check-video/{requestId}","baseUrlOptions":["https://api.zebratruth.ai/v1"],"title":"Poll video job status + retrieve report","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"96a47dad-d8b8-4442-ad19-e32e0ca986f6":{"name":"requestId","in":"path","required":true,"schema":{"type":"string","isRequired":true,"description":"The requestId returned by `POST /compliance/check-video`","uniqueKey":"","typeLabel":"string"},"description":"The requestId returned by `POST /compliance/check-video`","example":"82b68316-ed85-489c-991e-2ff0f2b95f29"}},"responses":{"be259168-58e9-4af6-89fa-9f876d02c620":{"description":"Current status + report (when terminal)","content":{"application/json":{"schema":{"type":"object","required":["requestId","tenantId","status"],"properties":{"requestId":{"type":"string","isRequired":true,"uniqueKey":"requestId","typeLabel":"string"},"tenantId":{"type":"string","isRequired":true,"uniqueKey":"tenantId","typeLabel":"string"},"status":{"type":"string","description":"Public 4-state contract. `queued` + `processing` mean the worker is\nin-flight (continue polling). `completed` + `failed` are terminal.\n","enum":["queued","processing","completed","failed","unknown"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","description":"Internal worker phase name (e.g. `transcribeAudio`, `analyzeFrames`, `done`).\nUseful for showing live progress UI. Not part of the stability contract —\nnew phases may be added without notice.\n","uniqueKey":"phase","typeLabel":"string"},"reportStatus":{"type":"string","description":"Terminal status of the analysis. Absent until terminal.","enum":["complete","insufficient_evidence","analysis_failed"],"uniqueKey":"reportStatus","typeLabel":"enum\u003cstring>"},"billingStatus":{"type":"string","description":"Reservation lifecycle. Absent until the worker resolves billing.","enum":["reserved","committed","released"],"uniqueKey":"billingStatus","typeLabel":"enum\u003cstring>"},"workerCompletedAt":{"type":"string","format":"date-time","uniqueKey":"workerCompletedAt","typeLabel":"string\u003cdate-time>"},"completedAt":{"type":"string","format":"date-time","uniqueKey":"completedAt","typeLabel":"string\u003cdate-time>"},"durationMs":{"type":"integer","description":"Total worker pipeline duration in milliseconds.","uniqueKey":"durationMs","typeLabel":"integer"},"error":{"type":"string","description":"Failure reason. Present when status is `failed`.","uniqueKey":"error","typeLabel":"string"},"reportBlobPath":{"type":"string","description":"Path to the persisted report.json in blob storage. Informational — content is inlined in `report`.","uniqueKey":"reportBlobPath","typeLabel":"string"},"report":{"type":"object","description":"The contents of the persisted report.json blob, inlined into status responses.","required":["schemaVersion","preprocessorVersion","evidenceVersion","tenantId","requestId","generatedAt","status","checks","preprocessing"],"properties":{"schemaVersion":{"type":"string","enum":["video-report.v1"],"isRequired":true,"uniqueKey":"report.schemaVersion","typeLabel":"enum\u003cstring>"},"preprocessorVersion":{"type":"string","enum":["video-preprocessor.v1"],"isRequired":true,"uniqueKey":"report.preprocessorVersion","typeLabel":"enum\u003cstring>"},"evidenceVersion":{"type":"string","enum":["evidence-timeline.v1"],"isRequired":true,"uniqueKey":"report.evidenceVersion","typeLabel":"enum\u003cstring>"},"tenantId":{"type":"string","isRequired":true,"uniqueKey":"report.tenantId","typeLabel":"string"},"requestId":{"type":"string","isRequired":true,"uniqueKey":"report.requestId","typeLabel":"string"},"generatedAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"report.generatedAt","typeLabel":"string\u003cdate-time>"},"status":{"type":"string","enum":["complete","insufficient_evidence","analysis_failed"],"isRequired":true,"uniqueKey":"report.status","typeLabel":"enum\u003cstring>"},"checks":{"type":"array","items":{"type":"object","description":"Same shape as `ComplianceCheck` (text/image) with two optional\nvideo-mode fields. Frame-level deterministic findings (logos,\non-screen text, restricted-category labels) carry `evidenceIds` +\n`timelineLocation`; broader LLM-derived findings may omit them.\n","properties":{"id":{"type":"string","pattern":"^chk_[0-9a-f]{8}$","description":"Stable check identifier. Format: `chk_\u003c8 lowercase hex>`. Generated as a\nSHA-256 hash of (agentId, checkName, citation, sorted jurisdictions,\nsorted platforms, primaryCategory) — stable across reruns of identical\ncontent + scope + engine version. NOT stable across taxonomy\nreclassifications (primaryCategory change) or content/scope changes.\n","example":"chk_a1b2c3d4","uniqueKey":"report.checks.items.[INDEX].id","typeLabel":"string"},"agentId":{"type":"string","enum":["ai-laws","jurisdiction-detection","advertising-law","platform-policy","metadata-labeling","rights-clearance","rights-clearance-text","rights-clearance-image","compliance-score","fs-compliance-financial-promotion","fs-compliance-advisory-suitability","fs-compliance-credit-servicing","fs-compliance-markets-trading","fs-compliance-financial-crime","fs-compliance-ai-governance","financial-services-compliance","pharma-healthcare-compliance"],"description":"Agent identifier. Use `GET /agents` to discover all available agents dynamically.\nThe list is filtered to the industries your workspace has selected.\n\n**Financial services.** The six `fs-compliance-*` agents correspond one-to-one to the\nreview scopes (`financial_promotion` → `fs-compliance-financial-promotion`, and so on).\nIn a full check they are selected with `reviewScopes`. Via `POST /agents/{agentId}`\nonly `fs-compliance-financial-promotion` can be invoked directly today; the other five\nreturn 400 `review_scope_not_enabled` on direct invocation and must run through\n`POST /compliance/check`. `financial-services-compliance` is a read-only alias of\n`fs-compliance-financial-promotion` accepted for older clients.\n\n**Pharma and healthcare.** `pharma-healthcare-compliance` runs for workspaces on the\n`pharma_healthcare` industry and honours `regulatedActor`.\n\n`ai-laws` is the canonical id; `jurisdiction-detection` is accepted as an\ninput alias for backward compatibility with historical clients. New\nintegrations should use `ai-laws`.\n\n**Note on rights-clearance variants.** `GET /agents` exposes two registered agents\nfor rights clearance: `rights-clearance-text` and `rights-clearance-image` — invoke\nthem via `POST /agents/{agentId}` using those qualified IDs. On **check response\nobjects**, however, text rights-clearance findings carry the bare `agentId:\n\"rights-clearance\"`. Treat bare `rights-clearance` and `rights-clearance-text` as\nthe same logical pipeline — the bare form is the value that appears on `checks[]`\nentries from that agent.\n","uniqueKey":"report.checks.items.[INDEX].agentId","typeLabel":"enum\u003cstring>"},"checkName":{"type":"string","description":"Human-readable check name","example":"Unsubstantiated Health Claim - 'Cure Cancer'","uniqueKey":"report.checks.items.[INDEX].checkName","typeLabel":"string"},"status":{"type":"string","enum":["pass","flag","block","escalate"],"description":"- `pass` — No issue found\n- `flag` — Issue found, review recommended\n- `block` — Critical issue, must fix\n- `escalate` — Needs human review\n","uniqueKey":"report.checks.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"severity":{"type":"string","enum":["critical","high","medium","low","info"],"description":"- `critical` — Legal liability risk (-25 points)\n- `high` — Likely violation (-15 points)\n- `medium` — Potential issue (-8 points)\n- `low` — Minor concern (-3 points)\n- `info` — Informational only (0 points)\n","uniqueKey":"report.checks.items.[INDEX].severity","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable description of the issue","example":"'Guaranteed to cure cancer' is an unsubstantiated health claim under FTC and EU UCPD.","uniqueKey":"report.checks.items.[INDEX].message","typeLabel":"string"},"recommendation":{"type":"string","description":"Specific action to fix the issue","example":"Remove the guarantee or substantiate with peer-reviewed clinical evidence.","uniqueKey":"report.checks.items.[INDEX].recommendation","typeLabel":"string"},"citation":{"type":"string","description":"Legal or policy reference","example":"FTC Endorsement Guides, 16 CFR Part 255","uniqueKey":"report.checks.items.[INDEX].citation","typeLabel":"string"},"metadata":{"type":"string","description":"Optional JSON string with agent-specific data","uniqueKey":"report.checks.items.[INDEX].metadata","typeLabel":"string"},"jurisdictions":{"type":"array","items":{"type":"string","uniqueKey":"report.checks.items.[INDEX].jurisdictions.items.[INDEX]","typeLabel":"string"},"description":"Canonical jurisdiction codes (us, eu, uk, india, china) this check\napplies to. May be empty when `scope` is `global` or `platform-specific`.\nAlways a subset of the request's jurisdiction list.\n","example":["us","eu"],"uniqueKey":"report.checks.items.[INDEX].jurisdictions","typeLabel":"string[]"},"platforms":{"type":"array","items":{"type":"string","uniqueKey":"report.checks.items.[INDEX].platforms.items.[INDEX]","typeLabel":"string"},"description":"Canonical platform codes (youtube, instagram, facebook, tiktok, linkedin)\nthis check applies to. May be empty when `scope` is `global` or\n`jurisdiction-specific`. Always a subset of the request's platform list.\n","example":["youtube","instagram"],"uniqueKey":"report.checks.items.[INDEX].platforms","typeLabel":"string[]"},"scope":{"type":"string","enum":["global","jurisdiction-specific","platform-specific","cross-cutting"],"description":"Disambiguates the empty-array case for `jurisdictions` and `platforms`:\n- `global` — universal; both arrays empty\n- `jurisdiction-specific` — jurisdictions populated, platforms empty\n- `platform-specific` — platforms populated, jurisdictions empty\n- `cross-cutting` — both populated; check applies at the intersection\n","uniqueKey":"report.checks.items.[INDEX].scope","typeLabel":"enum\u003cstring>"},"primaryCategory":{"type":"string","enum":["celebrity-endorsement","expert-authority","fabricated-testimonial","material-connection-disclosure","unsubstantiated-health-claim","medical-efficacy-claim","safety-claim","performance-claim","comparative-advertising","right-of-publicity","trademark-infringement","copyright-infringement","music-licensing","ai-disclosure-missing","watermark-missing","c2pa-missing","deepfake-impersonation","disguised-advertising","sponsored-content-labeling","consumer-information-disclosure","scarcity-urgency","aggressive-practice","algorithmic-amplification","minor-targeting","vulnerable-audience","platform-policy-violation","data-privacy","jurisdiction-coverage-gap","other"],"description":"Top-level breach taxonomy. New categories may be added in minor versions\n(additive only); renaming and removal are forbidden. Clients MUST accept\nunknown enum values gracefully (forward-compat). `other` is the fallback\nbucket for findings that don't fit any specific category.\n","uniqueKey":"report.checks.items.[INDEX].primaryCategory","typeLabel":"enum\u003cstring>"},"categories":{"type":"array","minItems":1,"items":{"type":"string","enum":["celebrity-endorsement","expert-authority","fabricated-testimonial","material-connection-disclosure","unsubstantiated-health-claim","medical-efficacy-claim","safety-claim","performance-claim","comparative-advertising","right-of-publicity","trademark-infringement","copyright-infringement","music-licensing","ai-disclosure-missing","watermark-missing","c2pa-missing","deepfake-impersonation","disguised-advertising","sponsored-content-labeling","consumer-information-disclosure","scarcity-urgency","aggressive-practice","algorithmic-amplification","minor-targeting","vulnerable-audience","platform-policy-violation","data-privacy","jurisdiction-coverage-gap","other"],"description":"Top-level breach taxonomy. New categories may be added in minor versions\n(additive only); renaming and removal are forbidden. Clients MUST accept\nunknown enum values gracefully (forward-compat). `other` is the fallback\nbucket for findings that don't fit any specific category.\n","uniqueKey":"report.checks.items.[INDEX].categories.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"All matched categories, with `primaryCategory` first. A finding may\napply to multiple categories (e.g. a deepfake celebrity check matches\nboth `deepfake-impersonation` and `right-of-publicity`).\n","example":["unsubstantiated-health-claim","performance-claim"],"uniqueKey":"report.checks.items.[INDEX].categories","typeLabel":"enum\u003cstring>[]"},"evidenceIds":{"type":"array","description":"Stable evidence IDs this check cites. Pattern `\u003ctrack>_NNN` where track is `audio`, `frame`, `ocr`, or `signal`.","items":{"type":"string","pattern":"^(audio|frame|ocr|signal)_\\d+$","uniqueKey":"report.checks.items.[INDEX].evidenceIds.items.[INDEX]","typeLabel":"string"},"example":["frame_007","ocr_012"],"uniqueKey":"report.checks.items.[INDEX].evidenceIds","typeLabel":"string[]"},"timelineLocation":{"type":"object","required":["startMs","endMs","track"],"properties":{"startMs":{"type":"integer","minimum":0,"description":"Start of the evidence range in milliseconds from video start.","isRequired":true,"uniqueKey":"report.checks.items.[INDEX].timelineLocation.startMs","typeLabel":"integer"},"endMs":{"type":"integer","minimum":0,"description":"End of the evidence range (>= startMs). Equal to startMs for instant signals.","isRequired":true,"uniqueKey":"report.checks.items.[INDEX].timelineLocation.endMs","typeLabel":"integer"},"track":{"type":"string","description":"Which video track the evidence lives on. Sub-source granularity\n(frame vs ocr vs signal) lives in `evidenceIds`.\n","enum":["audio","video","mixed"],"isRequired":true,"uniqueKey":"report.checks.items.[INDEX].timelineLocation.track","typeLabel":"enum\u003cstring>"}},"uniqueKey":"report.checks.items.[INDEX].timelineLocation","typeLabel":"object"}},"uniqueKey":"report.checks.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"report.checks","typeLabel":"object[]"},"preprocessing":{"type":"object","required":["transcriptionStatus","frameAnalysisStatus","degraded","evidenceTruncated"],"properties":{"transcriptionStatus":{"type":"string","enum":["complete","skipped","failed"],"isRequired":true,"uniqueKey":"report.preprocessing.transcriptionStatus","typeLabel":"enum\u003cstring>"},"frameAnalysisStatus":{"type":"string","enum":["ok","partial","failed"],"isRequired":true,"uniqueKey":"report.preprocessing.frameAnalysisStatus","typeLabel":"enum\u003cstring>"},"degraded":{"type":"boolean","description":"True when any diagnostic was emitted.","isRequired":true,"uniqueKey":"report.preprocessing.degraded","typeLabel":"boolean"},"evidenceTruncated":{"type":"boolean","description":"True when the evidence renderer hit a size ceiling.","isRequired":true,"uniqueKey":"report.preprocessing.evidenceTruncated","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"report.preprocessing","typeLabel":"object"},"reason":{"type":"string","description":"Failure / no-evidence reason. Present when status is not `complete`.","uniqueKey":"report.reason","typeLabel":"string"},"analysisDiagnostics":{"type":"array","description":"Pipeline diagnostics (boundary-validation drops, evidence truncation, etc.). Empty for clean runs.","items":{"type":"object","description":"First-class pipeline diagnostic. Surfaces non-compliance signals like\nrenderer overflow or boundary-validation drops without polluting\nthe compliance findings array.\n","required":["code","message","severity"],"properties":{"code":{"type":"string","description":"Stable machine-readable code (e.g. `evidence_truncated`, `video_check_missing_evidence_ids`).","example":"evidence_truncated","isRequired":true,"uniqueKey":"report.analysisDiagnostics.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation.","isRequired":true,"uniqueKey":"report.analysisDiagnostics.items.[INDEX].message","typeLabel":"string"},"severity":{"type":"string","enum":["info","warning","error"],"isRequired":true,"uniqueKey":"report.analysisDiagnostics.items.[INDEX].severity","typeLabel":"enum\u003cstring>"},"evidenceIds":{"type":"array","items":{"type":"string","uniqueKey":"report.analysisDiagnostics.items.[INDEX].evidenceIds.items.[INDEX]","typeLabel":"string"},"uniqueKey":"report.analysisDiagnostics.items.[INDEX].evidenceIds","typeLabel":"string[]"}},"uniqueKey":"report.analysisDiagnostics.items.[INDEX]","typeLabel":"object"},"uniqueKey":"report.analysisDiagnostics","typeLabel":"object[]"},"detections":{"description":"Raw vision-detection signals (logos, OCR, labels, safe-search). Forensic only.","uniqueKey":"report.detections","typeLabel":"any"}},"uniqueKey":"report","typeLabel":"object"},"reportFetchFailed":{"type":"boolean","description":"Present + `true` when the row is terminal but the report blob could\nnot be fetched (eventually-consistent storage edge). Retry the same\nendpoint in 1-2 seconds.\n","uniqueKey":"reportFetchFailed","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"requestId":"\u003cstring>","tenantId":"\u003cstring>","status":"queued","phase":"\u003cstring>","reportStatus":"complete","billingStatus":"reserved","workerCompletedAt":"2023-11-07T05:31:56Z","completedAt":"2023-11-07T05:31:56Z","durationMs":123,"error":"\u003cstring>","reportBlobPath":"\u003cstring>","report":{"schemaVersion":"video-report.v1","preprocessorVersion":"video-preprocessor.v1","evidenceVersion":"evidence-timeline.v1","tenantId":"\u003cstring>","requestId":"\u003cstring>","generatedAt":"2023-11-07T05:31:56Z","status":"complete","checks":[{"id":"chk_a1b2c3d4","agentId":"ai-laws","checkName":"Unsubstantiated Health Claim - 'Cure Cancer'","status":"pass","severity":"critical","message":"'Guaranteed to cure cancer' is an unsubstantiated health claim under FTC and EU UCPD.","recommendation":"Remove the guarantee or substantiate with peer-reviewed clinical evidence.","citation":"FTC Endorsement Guides, 16 CFR Part 255","metadata":"\u003cstring>","jurisdictions":["us","eu"],"platforms":["youtube","instagram"],"scope":"global","primaryCategory":"celebrity-endorsement","categories":["unsubstantiated-health-claim","performance-claim"],"evidenceIds":["frame_007","ocr_012"],"timelineLocation":{"startMs":1,"endMs":1,"track":"audio"}}],"preprocessing":{"transcriptionStatus":"complete","frameAnalysisStatus":"ok","degraded":true,"evidenceTruncated":true},"reason":"\u003cstring>","analysisDiagnostics":[{"code":"evidence_truncated","message":"\u003cstring>","severity":"info","evidenceIds":["\u003cstring>"]}],"detections":"\u003cunknown>"},"reportFetchFailed":true}}},"exampleType":"generated"}},"exampleType":"generated"},"52399c29-3bb9-4d1d-b952-a0d3e7ac5cdb":{"description":"Missing or malformed requestId","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"643e5898-9853-4c18-b558-f06484165e05":{"description":"Invalid, missing, or expired API key. Standard error envelope —\nread `message` for the human-readable reason.\n","content":{"application/json":{"schema":{"type":"object","description":"Standard error envelope.","required":["statusCode","message"],"properties":{"statusCode":{"type":"integer","example":401,"isRequired":true,"uniqueKey":"statusCode","typeLabel":"integer"},"message":{"type":"string","description":"Canonical human-readable reason — pattern-match on this field.","example":"Invalid API key","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"error":{"type":"boolean","example":true,"uniqueKey":"error","typeLabel":"boolean"},"url":{"type":"string","format":"uri","example":"https://api.zebratruth.ai/v1/whoami","uniqueKey":"url","typeLabel":"string\u003curi>"},"statusMessage":{"type":"string","example":"Invalid API key","uniqueKey":"statusMessage","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":401,"message":"Invalid API key","error":true,"url":"https://api.zebratruth.ai/v1/whoami","statusMessage":"Invalid API key"}}},"exampleType":"generated"}},"exampleType":"generated"},"c748a827-39c7-4d65-b845-476c7a548e45":{"description":"No video compliance job for this tenant + requestId","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"2150c869-c80e-45b2-aa80-21ce646b4401":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key starting with `zt_live_` (production) or `zt_test_` (sandbox).\nGet your key at https://developers.zebratruth.ai\n","scopes":[]}}},"servers":{"e4860b08-abe2-46de-8ff2-cf13ac5f2eef":{"url":"https://api.zebratruth.ai/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API key starting with `zt_live_` (production) or `zt_test_` (sandbox).\nGet your key at https://developers.zebratruth.ai\n","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key starting with `zt_live_` (production) or `zt_test_` (sandbox).\nGet your key at https://developers.zebratruth.ai\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi/zebratruth-v1.yaml"},"subdomain":"zebratruthai","siteName":"ZebraTruth — Runtime Compliance for AI Agents","title":"Poll video job status + retrieve report - ZebraTruth — Runtime Compliance for AI Agents","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-26T01:29:05.833Z","originalFileLocation":"api-reference/video-compliance/poll-video-job-status-+-retrieve-report.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Returns the current state of a video compliance job. When the job is terminal (status: completed | failed), the full report payload is inlined in the response — no extra fetch needed. Polling cadence: every 2 seconds is recommended; the engine has a 3-minute upper bound on a single job\u0026#x27;s worker time. reportFetchFailed. Blob storage is eventually-consistent — a read immediately after the worker completes can occasionally miss. Rather than 500, the response surfaces reportFetchFailed: true so the client can retry the same endpoint shortly. Tenant scoping. A requestId belonging to a different tenant returns 404 (no info leak about another tenant\u0026#x27;s jobs).\">\u003cmeta data-mint-head name=\"application-name\" content=\"ZebraTruth — Runtime Compliance for AI Agents\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Poll video job status + retrieve report - ZebraTruth — Runtime Compliance for AI Agents\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns the current state of a video compliance job. When the job is terminal (status: completed | failed), the full report payload is inlined in the response — no extra fetch needed. Polling cadence: every 2 seconds is recommended; the engine has a 3-minute upper bound on a single job\u0026#x27;s worker time. reportFetchFailed. Blob storage is eventually-consistent — a read immediately after the worker completes can occasionally miss. Rather than 500, the response surfaces reportFetchFailed: true so the client can retry the same endpoint shortly. Tenant scoping. A requestId belonging to a different tenant returns 404 (no info leak about another tenant\u0026#x27;s jobs).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ZebraTruth — Runtime Compliance for AI Agents\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.zebratruth.ai/api-reference/video-compliance/poll-video-job-status-+-retrieve-report\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://zebratruthai.mintlify.app/_mintlify/api/og/v2?division=Video\u0026amp;title=Poll+video+job+status+%2B+retrieve+report\u0026amp;description=Returns+the+current+state+of+a+video+compliance+job.+When+the+job+is%0Aterminal+%28%60status%3A+completed+%7C+failed%60%29%2C+the+full+%60report%60+payload+is%0Ainlined+in+the+respon\u0026amp;theme=a5a701a9b75e19dc4c00f206\u0026amp;signature=378179ee14f1e0c664f54bc01210ac9b50a0d4f844e2f21aeab1a66ac6e050a7\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Poll video job status + retrieve report - ZebraTruth — Runtime Compliance for AI Agents\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns the current state of a video compliance job. When the job is terminal (status: completed | failed), the full report payload is inlined in the response — no extra fetch needed. Polling cadence: every 2 seconds is recommended; the engine has a 3-minute upper bound on a single job\u0026#x27;s worker time. reportFetchFailed. Blob storage is eventually-consistent — a read immediately after the worker completes can occasionally miss. Rather than 500, the response surfaces reportFetchFailed: true so the client can retry the same endpoint shortly. Tenant scoping. A requestId belonging to a different tenant returns 404 (no info leak about another tenant\u0026#x27;s jobs).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://zebratruthai.mintlify.app/_mintlify/api/og/v2?division=Video\u0026amp;title=Poll+video+job+status+%2B+retrieve+report\u0026amp;description=Returns+the+current+state+of+a+video+compliance+job.+When+the+job+is%0Aterminal+%28%60status%3A+completed+%7C+failed%60%29%2C+the+full+%60report%60+payload+is%0Ainlined+in+the+respon\u0026amp;theme=a5a701a9b75e19dc4c00f206\u0026amp;signature=378179ee14f1e0c664f54bc01210ac9b50a0d4f844e2f21aeab1a66ac6e050a7\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/zebratruthai/rTMeP4-q-BuDeEQw/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ZebraTruth — Runtime Compliance for AI Agents\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3FB2FE\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.zebratruth.ai/api-reference/video-compliance/poll-video-job-status-+-retrieve-report\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/video-compliance/poll-video-job-status-%2B-retrieve-report.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.zebratruth.ai/#organization\",\"name\":\"ZebraTruth — Runtime Compliance for AI Agents\",\"url\":\"https://docs.zebratruth.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/zebratruthai/gsHY39_GGp7teBef/logo/light.svg?fit=max\u0026auto=format\u0026n=gsHY39_GGp7teBef\u0026q=85\u0026s=a0210573e206e7c10145de436da1dab1\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.zebratruth.ai#website\",\"name\":\"ZebraTruth — Runtime Compliance for AI Agents\",\"url\":\"https://docs.zebratruth.ai\",\"publisher\":{\"@id\":\"https://docs.zebratruth.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.zebratruth.ai/api-reference/video-compliance/poll-video-job-status-+-retrieve-report#webpage\",\"url\":\"https://docs.zebratruth.ai/api-reference/video-compliance/poll-video-job-status-+-retrieve-report\",\"name\":\"Poll video job status + retrieve report\",\"description\":\"Returns the current state of a video compliance job. When the job is terminal (status: completed | failed), the full report payload is inlined in the response — no extra fetch needed. Polling cadence: every 2 seconds is recommended; the engine has a 3-minute upper bound on a single job's worker time. reportFetchFailed. Blob storage is eventually-consistent — a read immediately after the worker completes can occasionally miss. Rather than 500, the response surfaces reportFetchFailed: true so the client can retry the same endpoint shortly. Tenant scoping. A requestId belonging to a different tenant returns 404 (no info leak about another tenant's jobs).\",\"dateModified\":\"2026-09-26T01:29:05.833Z\",\"isPartOf\":{\"@id\":\"https://docs.zebratruth.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.zebratruth.ai/api-reference/video-compliance/poll-video-job-status-+-retrieve-report#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.zebratruth.ai/api-reference/video-compliance/poll-video-job-status-+-retrieve-report#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Video\",\"item\":\"https://docs.zebratruth.ai/api-reference/video-compliance/mint-a-video-upload-url\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Poll video job status + retrieve report\",\"item\":\"https://docs.zebratruth.ai/api-reference/video-compliance/poll-video-job-status-+-retrieve-report\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.zebratruth.ai/api-reference/video-compliance/poll-video-job-status-+-retrieve-report#apireference\",\"headline\":\"Poll video job status + retrieve report\",\"name\":\"Poll video job status + retrieve report\",\"description\":\"Returns the current state of a video compliance job. When the job is terminal (status: completed | failed), the full report payload is inlined in the response — no extra fetch needed. Polling cadence: every 2 seconds is recommended; the engine has a 3-minute upper bound on a single job's worker time. reportFetchFailed. Blob storage is eventually-consistent — a read immediately after the worker completes can occasionally miss. Rather than 500, the response surfaces reportFetchFailed: true so the client can retry the same endpoint shortly. Tenant scoping. A requestId belonging to a different tenant returns 404 (no info leak about another tenant's jobs).\",\"url\":\"https://docs.zebratruth.ai/api-reference/video-compliance/poll-video-job-status-+-retrieve-report\",\"mainEntityOfPage\":{\"@id\":\"https://docs.zebratruth.ai/api-reference/video-compliance/poll-video-job-status-+-retrieve-report#webpage\"},\"dateModified\":\"2026-09-26T01:29:05.833Z\",\"publisher\":{\"@id\":\"https://docs.zebratruth.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.zebratruth.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ZebraTruth — Runtime Compliance for AI Agents\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ZebraTruth — Runtime Compliance for AI Agents","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/video-compliance-check"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Reference","href":"/api-reference/overview"}]},{"group":"Compliance Checks","pages":[{"title":"Run compliance check","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/check","href":"/api-reference/compliance/run-compliance-check"},{"title":"Check image rights","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/check-image","href":"/api-reference/compliance/check-image-rights"},{"title":"Extract text from a PDF or Word document","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/documents/extract","href":"/api-reference/documents/extract-text-from-a-pdf-or-word-document"}]},{"group":"Video","pages":[{"title":"Mint a video upload URL","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/media/upload-url","href":"/api-reference/video-compliance/mint-a-video-upload-url"},{"title":"Submit a video for compliance analysis","description":"Submits an uploaded video (referenced by `requestId` + `blobPath` from\na prior `POST /compliance/media/upload-url`) for compliance analysis.\n**Asynchronous** — returns 202 immediately with a `jobId`. Poll\n`GET /compliance/check-video/{requestId}` for status + the inlined\nreport when terminal, OR set `webhookUrl` to receive a signed callback.\n\n**Required:** `jurisdictions` + `platforms` (mirror text/image checks —\nsame canonical codes, e.g. `[\"us\", \"eu\"]`, `[\"youtube\", \"instagram\"]`).\nInputs are canonicalized (trim + lowercase + sort) before storage and\nhashed — case-only differences are treated as the same request.\n\n**Idempotency.** The request is keyed on\n`(blobPath, feature, inputHash)`. Re-posting with the same `requestId`\nAND the same inputs returns 202 with `idempotent: true`. Different\ninputs on the same `requestId` returns 409 `idempotency_conflict`\nwith `reason` set to the field that differs.\n\n**Billing.** Credits are reserved at submit time\n(`estimatedCredits` returned). They are committed when the job\ncompletes with a real report, OR released for `insufficient_evidence`\n/ `analysis_failed` / poison-queue failures — tenants only pay for\nvalid reports.\n\n**Latency.** Typical: 8–30 seconds for a 5–30s video. Longer videos\nand dense-content frames take proportionally longer.\n","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/check-video","href":"/api-reference/video-compliance/submit-a-video-for-compliance-analysis"},{"title":"Poll video job status + retrieve report","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/check-video/{requestId}","href":"/api-reference/video-compliance/poll-video-job-status-+-retrieve-report"},{"title":"Retrieve the tenant's video webhook signing secret","description":"Returns the tenant-level HMAC signing secret used to sign outbound\nvideo webhook payloads. **Auto-creates the secret on the first call**\nand persists it — subsequent calls return the same value.\n\n**Verification.** Use this secret in your webhook receiver to verify\nthe `x-zt-webhook-signature` header on each delivery:\n```\nsignature == HMAC_SHA256(secret,\n \"POST\" + \"\\n\" + url + \"\\n\" + timestamp + \"\\n\" + sha256(body))\n```\nThe signature is computed once at delivery enqueue and stays\nstable across all retries for a given delivery — so your verifier\nsees the same signature regardless of which attempt arrives.\n\n**One-time visibility.** This is the ONLY surface that returns the\nsecret. It never appears in `POST /compliance/check-video` responses\nor anywhere else. Treat it like an API key; store it in your\nsecret manager.\n","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/webhooks/video/secret","href":"/api-reference/video-compliance/retrieve-the-tenants-video-webhook-signing-secret"},{"title":"Rotate the tenant's video webhook signing secret","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /compliance/webhooks/video/secret/rotate","href":"/api-reference/video-compliance/rotate-the-tenants-video-webhook-signing-secret"}]},{"group":"Agents","pages":[{"title":"List available agents","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /agents","href":"/api-reference/agents/list-available-agents"},{"title":"Invoke a single agent","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /agents/{agentId}","href":"/api-reference/agents/invoke-a-single-agent"}]},{"group":"Jobs \u0026 Reports","pages":[{"title":"Poll job status","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/jobs/{jobId}","href":"/api-reference/jobs/poll-job-status"},{"title":"Get agent execution trace","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/jobs/{jobId}/trace","href":"/api-reference/jobs/get-agent-execution-trace"},{"title":"Resume SSE stream","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/jobs/{jobId}/stream","href":"/api-reference/jobs/resume-sse-stream"},{"title":"Get compliance report","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /reports/{reportId}","href":"/api-reference/reports/get-compliance-report"},{"title":"Replay a compliance check","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /reports/{reportId}/replay","href":"/api-reference/reports/replay-a-compliance-check"}]},{"group":"Check History","pages":[{"title":"List past compliance checks","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/checks","href":"/api-reference/check-history/list-past-compliance-checks"},{"title":"Get a past check with its full report","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /compliance/checks/{requestId}","href":"/api-reference/check-history/get-a-past-check-with-its-full-report"},{"title":"Query request logs","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /logs","href":"/api-reference/observability/query-request-logs"}]},{"group":"Provenance","pages":[{"title":"Inspect Content Credentials on an image or video","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /media/provenance/inspect","href":"/api-reference/provenance/inspect-content-credentials-on-an-image-or-video"},{"title":"Sign an image or video with Content Credentials","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /media/provenance/sign","href":"/api-reference/provenance/sign-an-image-or-video-with-content-credentials"},{"title":"Poll a video signing job","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /media/provenance/jobs/{jobId}","href":"/api-reference/provenance/poll-a-video-signing-job"},{"title":"List registered signers","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /media/provenance/signers","href":"/api-reference/provenance/list-registered-signers"},{"title":"Register a signer","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /media/provenance/signers","href":"/api-reference/provenance/register-a-signer"},{"title":"Get the keys ZebraTruth signs endpoint requests with","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /media/provenance/signing-keys","href":"/api-reference/provenance/get-the-keys-zebratruth-signs-endpoint-requests-with"}]},{"group":"Account \u0026 Usage","pages":[{"title":"Validate API key","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /whoami","href":"/api-reference/authentication/validate-api-key"},{"title":"Get credit usage","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /usage","href":"/api-reference/authentication/get-credit-usage"},{"title":"Get usage totals by feature","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /usage/summary","href":"/api-reference/billing/get-usage-totals-by-feature"},{"title":"Get usage for one externalId","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /usage/project/{projectId}","href":"/api-reference/billing/get-usage-for-one-externalid"},{"title":"Get subscription status","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /subscription","href":"/api-reference/billing/get-subscription-status"},{"title":"Get engine version","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /version","href":"/api-reference/authentication/get-engine-version"}]},{"group":"Billing","pages":[{"title":"Start a subscription","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /billing/checkout","href":"/api-reference/billing/start-a-subscription"},{"title":"Upgrade Individual to Pro","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /billing/upgrade","href":"/api-reference/billing/upgrade-individual-to-pro"}]},{"group":"Webhooks","pages":[{"title":"List saved webhook endpoints","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /webhooks","href":"/api-reference/webhooks/list-saved-webhook-endpoints"},{"title":"Register a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /webhooks","href":"/api-reference/webhooks/register-a-webhook-endpoint"},{"title":"Remove a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml delete /webhooks/{webhookId}","href":"/api-reference/webhooks/remove-a-webhook-endpoint"},{"title":"Get webhook delivery logs","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /webhooks/deliveries","href":"/api-reference/webhooks/get-webhook-delivery-logs"}]},{"group":"Corpus","pages":[{"title":"Force refresh of legal corpus rows","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /corpus/refresh","href":"/api-reference/compliance/force-refresh-of-legal-corpus-rows"},{"title":"List corpus proposals awaiting review","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /memory/review-queue","href":"/api-reference/corpus/list-corpus-proposals-awaiting-review"},{"title":"Get the review packet for a proposal","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /memory/review-queue/{proposalId}","href":"/api-reference/corpus/get-the-review-packet-for-a-proposal"},{"title":"Approve a proposal","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /memory/review-queue/{proposalId}/approve","href":"/api-reference/corpus/approve-a-proposal"},{"title":"Reject a proposal","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /memory/review-queue/{proposalId}/reject","href":"/api-reference/corpus/reject-a-proposal"},{"title":"Send a proposal back for changes","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml post /memory/review-queue/{proposalId}/request_changes","href":"/api-reference/corpus/send-a-proposal-back-for-changes"},{"title":"Get the caller's reviewer profile","deprecated":null,"version":null,"openapi":"/openapi/zebratruth-v1.yaml get /memory/reviewer/me","href":"/api-reference/corpus/get-the-callers-reviewer-profile"}]}]}]},"title":"Poll video job status + retrieve report - ZebraTruth — Runtime Compliance for AI Agents","buildId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","deploymentId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-BRm_l__d.js","utils-f1l1Oc-G.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BlhqDhJO.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DHCB7rsC.js","snippetPresets-CYXLx6Hv.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-B78P2dEq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C4YLPVAh.js","shallow-vlLnTDkQ.js","getApiPlaygroundDisplay-D_98hhvf.js","CodeSnippet-DtnZHGqq.js","CodeSnippets-CLFb8KJt.js","Page-kQh739Uz.js","getPastedJson-Cq-zlbnU.js","icon-sN3t983t.js","MethodPill-P_YQ2s09.js","DuplicateIcon-BVzyNsGJ.js","createIcon-B3jqgqC6.js","DynamicMarkdown-Crwq6WG_.js","SectionHeading-C7pGS2Bb.js","axios-vUo_bRtp.js","Markdown-BuPH8yuW.js","clsx-CCOYKgaU.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BnkC_6oA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BM4S31-f.js"]}