Docs API

API reference

Every endpoint, with its fields and what it returns.

Updated November 2026

Basics

  • Send your key as Authorization: Bearer cvc_live_... or X-API-Key: cvc_live_...
  • Requests and replies are JSON, apart from the PDF report and the file upload.
  • Times are in UTC, in ISO 8601 format.

For tools that read API descriptions, the full OpenAPI description is at https://complyvideochecker.in/v1/openapi.json. It needs no key.

Endpoints

RequestWhat it doesKey needs
GET /v1/accountYour plan, checks used this month and limitsRead
GET /v1/clientsYour clients, to use as client_idRead
POST /v1/uploadsAn address to upload a video toWrite
POST /v1/checksStart a check. Uses 1 check, or 2 for several platformsWrite
GET /v1/checksList checks, newest first, without findingsRead
GET /v1/checks/{id}One check, with its findings once completeRead
GET /v1/checks/{id}/reportThe PDF report, once completeRead

POST /v1/uploads

FieldRequiredMeaning
content_typeYesvideo/mp4, video/quicktime or video/webm
file_size_bytesYesThe file's size. Refused if it's over your plan's limit
duration_secondsNoGives a quick error if it's too long. We also measure the real file

Returns upload_url, video_uri and expires_in_minutes. Upload with PUT, using the same Content-Type.

POST /v1/checks

FieldRequiredMeaning
video_uriYesFrom POST /v1/uploads
kindsYesOne or more of paid_ad, sponsored, organic, footage. Footage is checked only for what's in the frame
ad_platformsFor paid_admeta, tiktok, google
organic_platformsFor organicinstagram, youtube, tiktok, linkedin, facebook, twitter, snapchat
marketsFor sponsoredus, in, ae, uk, eu, au, ca
client_idNoAlso checks this client's brand rules. With no client, your team approves the video
titleNoUp to 140 characters
captionNoThe post's caption, up to 2,200 characters
landing_pageNoFor paid ads
briefNoWhat the video should deliver, one point per line, up to 6,000 characters
scan_frameNoAlso look for logos, bystanders, plates and watermarks. On unless you set it to false
report_languageNoThe language's English name, such as Hindi. See report languages
previous_check_idNoA completed check this video is a fixed version of. Shows what was fixed

Returns 202 with id, status and replayed. Fields we don't recognise are refused, so a typo can't quietly change what gets checked.

One platform uses 1 check. Several platforms in one request, counting ad and organic platforms together, use 2.

GET /v1/checks

QueryMeaning
limitHow many, from 1 to 100. 20 if you leave it out
cursorThe next_cursor from the previous page
check_statuspending, processing, complete or failed
client_idOnly this client's checks

Returns data, has_more and next_cursor. Keep asking with the cursor until has_more is false.

A check

{
  "id": "6725f0c1a7b3d2e1f0a9c8b7",
  "title": "November launch reel",
  "status": "complete",
  "stage": "done",
  "error": null,
  "client_id": null,
  "client_name": "",
  "kinds": ["organic"],
  "ad_platforms": [],
  "organic_platforms": ["instagram"],
  "markets": [],
  "duration_seconds": 28.4,
  "version": 1,
  "series_id": "6725f0c1a7b3d2e1f0a9c8b7",
  "previous_check_id": null,
  "approval_status": null,
  "created_by": "API key: Nightly upload",
  "created_at": "2026-11-02T10:15:00+00:00",
  "completed_at": "2026-11-02T10:17:12+00:00",
  "report_url": "/v1/checks/6725f0c1a7b3d2e1f0a9c8b7/report",
  "result": {
    "verdict": "ready",
    "counts": { "blocker": 0, "fix": 0, "advisory": 0 },
    "findings": []
  }
}

status moves from pending to processing, then complete or failed. A failed check explains why in error, and isn't charged. result stays empty until the check is complete. See how to read a report for what the verdict and findings mean.

Was this page helpful?