Exact HTTP Request settings
For a single render, use POST, your workspace origin plus /api/v1/render-jobs, Generic Credential Type Header Auth, Send Body on, Body Content Type JSON and Using JSON. Use an expression to build an object from upstream fields. Return JSON for submission and status, and File for the download. A multipart upload instead uses Form-Data with a binary part whose name is the slot key.
{
"template_id": "REPLACE_TEMPLATE_ID",
"options": {
"format": "png",
"mode": "full",
"slots": {
"REPLACE_SLOT_ID": {
"asset_id": "REPLACE_ASSET_ID",
"fit": "contain"
}
}
}
}
Official platform documentation for this setup
Two collection paths
The updated simple collection maps a design role to an explicit slot ID, then preflights and submits the identical legacy spec. This supports stable resubmission without generating a new review token. For the app's current assignment planner, preflight templates[].areas with a generation policy, inspect warnings and a sample, and persist plan_id plus plan_hash. Use the separate reviewed-plan workflow to submit that unchanged token and key. Creating a new review before every retry can produce a 409 even when your intended artwork looks the same.
Completion events and Wait nodes
The supplied workflows use polling and a time-based Wait node. An ordinary Webhook trigger starts another execution; it does not automatically resume a waiting one. For callbacks, use an intentional separate receiver or a configured Wait node resume URL, and verify the raw-body HMAC before processing. If verification is unavailable, use the event only to wake an authenticated status lookup for a known job. Deduplicate event_id.
Verify completion and move a real file
Treat 202 as acceptance. Persist id, then poll the canonical job endpoint with the same bearer credential. queued, running and cancelling mean wait; done means download; error and cancelled need a recovery branch. A protected result URL cannot be pasted into a destination that has no way to send your API key. Download the bytes through an authenticated action, then upload a file to your destination. A temporary signed link can expire, so refresh it or use the canonical result endpoint. Do not forward the bearer key across a redirect to another origin.
Retries, duplicate events and interrupted runs
Use one key for one intended operation, such as order-1042-artwork-v1. Keep it stable on a lost-response retry. The same inputs and key return the same render job; changed inputs return 409 and need an explicit new version. Do not repeat a synchronous paid render just because the previous step timed out. Retry reads and idempotent submissions with bounded backoff for temporary network or 5xx errors. Fix 401 credentials, 404 ownership, 402 allowance and 422 validation before retrying. When a polling deadline is reached, save the job ID and resume checking it later; the server continues independently.
Troubleshooting checklist
Check the actual HTTP status and detail field before changing the workflow. Test a single ready template and saved asset first, then add multi-area placements and collection output. Avoid enabling schedules until the downloaded file and its destination record have both been inspected.
| Field or condition | Mapping or action |
|---|
| 401 | Use the full Bearer value and a non-revoked API key; a website key is for the iframe only. |
|---|
| 404 | Confirm the template, asset or job belongs to this account or is an accessible public template. |
|---|
| 409 | Read detail: result not ready, changed inputs, stale revision and expired review need different actions. |
|---|
| 402 / 429 | Check account allowance / reduce concurrency and back off for rate limits. |
|---|
| 422 | Inspect the slot ID, ready status, nested options and direct-image URL. JSON options must be an object. |
|---|
| Broken destination image | Download with authentication and upload bytes; protected URLs are not public attachments. |
|---|