POST
https://api.craftkit.dev/v1/templates/:slug/renderdata against the template’s published manifest and enqueues a render job. Returns
202 with a poll URL. Rendering is asynchronous — there is no synchronous mode (see
Render lifecycle).
Authorization
Bearer ck_live_… — a project API key.Optional. Retrying with the same key returns the original render instead of creating a duplicate.
Takes precedence over the body
jobId. See Idempotency.Path parameters
The template slug.
Body
Variable values. Scalars nest by dot-path (
{ "customer": { "name": "…" } }); loops are keyed
by their dot-free top-level key. Keys absent from the manifest are stripped. Loop arrays are
capped at 10,000 items. See Variables & loops.Optional idempotency key (fallback when no
Idempotency-Key header is sent).Response
202 when a new render is queued, or 200 when an idempotency key matched an existing render.
queued for a fresh render; the existing render’s current status on an idempotent replay.GET this to poll the render.null until the render succeeds.Errors
| Status | code | Meaning |
|---|---|---|
| 400 | invalid_json | Body is not valid JSON. |
| 400 | invalid_request | Body failed schema validation (issues included). |
| 400 | invalid_input_data | data did not match the manifest (issues included). |
| 401 | unauthorized | Missing/invalid/revoked key. |
| 404 | template_not_found | No such template in this key’s project. |
| 404 | version_not_found | Pinned versionNumber does not exist. |
| 409 | no_published_version | Template has no published version. |
| 503 | queue_unavailable | Render queue is temporarily unreachable — retry. |
cURL
202