Quick start
Get a key
Sign in with Google — your first ogt_live_ key is created automatically. Manage and rotate keys under API Keys.
Make your first request
Every /v1/* endpoint takes the X-API-Key header (or ?key= for quick tests).
curl https://api.capcutapi.dev/v1/template/7382934719283746123 \ -H "X-API-Key: ogt_live_•••"
Read the response
media.video_url and media.cover_url are live and inside the ~24h window. _meta carries quota + cache state.
{
"template_id": "7382934719283746123",
"title": "Aesthetic Reels",
"media": { "video_url": "https://…/fresh.mp4" },
"_meta": { "quota_remaining": 8760, "cache_hit": false }
}Authentication
All /v1/* endpoints authenticate with your API key — either the X-API-Key header or the ?key= query parameter. Live keys (ogt_live_…) hit real upstreams and consume quota; test keys (ogt_test_…) return deterministic fixtures and never touch CapCut. Dashboard endpoints (/dashboard/*) use your browser session cookie instead.
Rate limiting & quota
Error codes
| HTTP | error | Meaning |
|---|---|---|
| 400 | invalid_template_id | ID format invalid — expected 15-20 digits |
| 400 | invalid_creator_id | Cannot resolve the identifier |
| 400 | batch_too_large | Exceeded plan batch limit (3/50/100/200) |
| 401 | unauthorized | Missing or invalid API key |
| 401 | key_revoked | Key was revoked — revocation is immediate |
| 402 | plan_required | Feature requires a higher plan (e.g. force-refresh is Pro+) |
| 403 | ip_blocked | IP not in the key's allowlist |
| 404 | template_not_found | Private, deleted, or invalid template |
| 404 | creator_not_found | Creator not found |
| 429 | rate_limit_exceeded | Per-minute limit hit — read Retry-After |
| 429 | quota_exceeded | Daily quota exhausted — resets 00:00 UTC |
| 503 | extractor_unavailable / upstream_unavailable | Extractor or all upstream sources down |
Every error body carries ok: false, the machine code, a human message, retry_after when relevant, and a _meta.request_id for support.
Webhooks Pro+
Configure a URL and per-event filters in Settings. We POST a signed payload (HMAC-SHA256, verify with your webhook secret) and retry with backoff on non-2xx. Events: template.cached, media.expiring, quota.warning.