<!-- kernel -->
> Creatomate AI reference — topic page "API reference"; the index of all pages is https://creatomate.com/llms.txt
<!-- /kernel -->

## API reference

Base URL `https://api.creatomate.com`. Auth on every request: `Authorization: Bearer <project API key>`.

- `POST /v2/renders` — `{template_id, modifications}` or raw RenderScript at the top level (`output_format`, `width`, `elements`, …). 202; returns one render (with advisory `errors`/`warnings` when present). Add `dry_run: true` to validate only: 200 with `{valid, errors, warnings, source}`, no credits, nothing queued — see Quick start (https://creatomate.com/llms/quick-start.md).
- `GET /v2/renders/:id` — status + result; the render and its file expire 30 days after creation.
- `POST /v2/templates` — `{name, source, tags?}` (name and source required). 201.
- `GET /v2/templates/:id` — full template including `source`.
- `GET /v2/templates` — compact list (never includes sources); optional `?tags=a,b` filter.
- `PATCH /v2/templates/:id` — partial update `{name?, tags?, source?}`.
- `DELETE /v2/templates/:id` — soft delete; recoverable for 30 days.
- `POST /v1/renders` — like v2 but returns an **array**; extras: `tags` (renders every template carrying those tags — built-in batch rendering) and `transcripts` (bring your own subtitle timings).
- `GET /v1/feeds`, `GET /v1/feeds/:id`, `GET /v1/feeds/:id/sample` — read feeds (the sample returns the last rows).

**Errors:** every failure returns `{ "hint": "...", "documentation": "..." }` — on 400 (validation), 401 (bad key), 402 (out of credits), 404 (missing template/render ID), and 429 (rate limit). Read the hint; it is written for exactly this. The rate limit is 30 requests per 10 seconds per account, counted across all of its projects, so pace bulk work and batch your reads instead of retrying hot. Every response carries `X-RateLimit-Remaining`; a 429 also carries `Retry-After` in seconds — wait that long, do not retry immediately.
