Docs

One key, eight endpoints, honest errors

LIVE1,240 / 10,000 today
A

Quick start

1

Get a key

Sign in with Google — your first ogt_live_ key is created automatically. Manage and rotate keys under API Keys.

2

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_•••"
3

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

Per-minute rate limitSliding window per key. Exceeding it returns 429 rate_limit_exceeded with a Retry-After header (seconds).
Daily quotaFixed window, resets at 00:00 UTC. Every request consumes 1 unit — cached or not (prevents gaming via rapid cached requests).
Batch accountingEach successful template in a batch costs 1 unit; failed ones are free.
Force-refreshPOST /v1/creator/:id/refresh with fresh=true costs 2 units (Pro+).
Where to lookGET /v1/usage is free and returns quota + rate-limit state; _meta.quota_remaining rides every response.

Error codes

HTTPerrorMeaning
400invalid_template_idID format invalid — expected 15-20 digits
400invalid_creator_idCannot resolve the identifier
400batch_too_largeExceeded plan batch limit (3/50/100/200)
401unauthorizedMissing or invalid API key
401key_revokedKey was revoked — revocation is immediate
402plan_requiredFeature requires a higher plan (e.g. force-refresh is Pro+)
403ip_blockedIP not in the key's allowlist
404template_not_foundPrivate, deleted, or invalid template
404creator_not_foundCreator not found
429rate_limit_exceededPer-minute limit hit — read Retry-After
429quota_exceededDaily quota exhausted — resets 00:00 UTC
503extractor_unavailable / upstream_unavailableExtractor 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.

API reference