Skip to main content

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

The 3-step flow

See Quickstart or the full guide for working curl commands at each step.

Evidence IDs — how findings cite the source

Every check in the report carries an evidenceIds[] array referencing stable IDs from the evidence timeline: Plus every check carries a timelineLocation:
So findings always pin to a specific moment in the source video, enabling timestamped UI annotations in your video editor.

VideoComplianceCheck schema

Checks that fail to populate evidenceIds or timelineLocation are dropped + emitted as analysisDiagnostics — never leaked as fake compliance findings. Enforced at the Stage C boundary.

Report envelope

The 3 terminal report statuses:

Limits

What it detects

ZebraTruth’s video compliance checks span 5 specialized agents: Plus deterministic checks emitted by the per-frame analysis (brand-detected, watermark-detected, restricted-label, safesearch-flag, regulatory-disclosure) that don’t require LLM calls.

Webhooks vs polling

Polling is the default. Poll GET /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

Submitting POST /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 →