Video Compliance — Concept
ZebraTruth runs compliance checks on video ads through a server-side async pipeline. Your client uploads the video, submits a job, and either polls or receives a webhook when the report is ready. No client-side ffmpeg, no preprocessing, no transcript provisioning — ZebraTruth handles everything.Primary endpoint
POST
https://api.zebratruth.ai/v1/compliance/check-videoRead the full guide with curl, Node, and Python examples →Endpoint family
| Endpoint | Method | Purpose |
|---|---|---|
/v1/compliance/media/upload-url | POST | Get a signed Azure Blob upload URL (15-min TTL) |
/v1/compliance/check-video | POST | Submit for analysis (returns 202 with jobId + estimatedCredits) |
/v1/compliance/check-video/{requestId} | GET | Poll for status + inlined report |
/v1/compliance/webhooks/video/secret | GET | Get/create your tenant’s webhook signing secret |
/v1/compliance/webhooks/video/secret/rotate | POST | Rotate the secret (in-flight deliveries keep old signature) |
The 3-step flow
Evidence IDs — how findings cite the source
Every check in the report carries anevidenceIds[] array referencing stable IDs from the evidence timeline:
| ID format | What it cites |
|---|---|
audio_NNN | A transcript segment from the audio track (sentence-level) |
frame_NNN | A sampled video frame (with timestamp) |
ocr_NNN | A specific OCR detection within a frame |
signal_NNN | A controlled-vocab signal (brand, watermark, restricted category, regulatory disclosure) |
timelineLocation:
VideoComplianceCheck schema
evidenceIds or timelineLocation are dropped + emitted as analysisDiagnostics — never leaked as fake compliance findings. Enforced at the Stage C boundary.
Report envelope
status | Meaning | Billing |
|---|---|---|
complete | Stage A→C ran, real findings produced | Committed (charged) |
insufficient_evidence | Pipeline ran but no meaningful content to analyze (silent video, no OCR, no signals) | Released (no charge) |
analysis_failed | Engine error — failure recorded for audit | Released (no charge) |
Limits
| Duration | 3 to 180 seconds |
| File size | 200 MB |
| Content types | video/mp4, video/webm, video/quicktime |
| Frame sample cap | 20 frames per video (scene-change-aware + claim-aware) |
| Mode | fast (V1 only — full pipeline) |
What it detects
ZebraTruth’s video compliance checks span 5 specialized agents:| Agent | Detects |
|---|---|
| AI Laws | Jurisdiction applicability (FTC, EU UCPD, UK ASA, India ASCI, China Ad Law) + AI disclosure rules |
| Advertising Law | Unsubstantiated claims, missing disclaimers, comparative ad rules, endorsement / influencer marketing rules |
| Platform Policy | TikTok, YouTube, Instagram, Meta, LinkedIn AI-disclosure + monetization rules |
| Metadata & Labeling | Required visible labels, watermarks, C2PA metadata |
| Rights Clearance | Brand logos, restricted-category content safety (alcohol/tobacco/firearm/gambling/pharmaceutical), watermarks, regulatory disclosure presence |
Webhooks vs polling
Polling is the default. PollGET /v1/compliance/check-video/{requestId} every 2 seconds. Stop when status is completed or failed.
Webhooks are recommended for production. Submit with webhookUrl set, configure a tenant signing secret via /v1/compliance/webhooks/video/secret, and receive HMAC-signed POSTs with stable signatures across retries (5 attempts, exponential backoff 0/1m/5m/15m/1h).
See Async + Webhooks for HMAC verification.
Idempotency
SubmittingPOST /v1/compliance/check-video with the same (requestId, blobPath, jurisdictions, platforms, mode) tuple returns 202 with idempotent: true — no extra charge. Different inputs with the same requestId return 409 idempotency_conflict.
Cost
Per-second pricing. A 60-second video costs ~600 credits. Sub-3-second videos are floored at 30 credits (3-second minimum). See Cost & Credits for the math + tier multipliers.Next
Run a video check now
Full step-by-step guide.Open the guide →
Async + Webhooks
HMAC verification, retry semantics, replay protection.Read the webhooks guide →