Availability
The staging API has its stateful template store, private dispatcher, renderer, and managed artifact registration enabled. Production availability is separate: check that environment’s live response before enabling a production automation. A render still requires a published template owned by the API account’s studio; an unknown or unpublished template fails without dispatching work.Create a render
POST /v1/templates/{template_id}/renders requires a studio-owned API account,
print_orders:write, and an Idempotency-Key. Inputs are keyed by immutable
slot IDs. Every input contains exactly one of asset_id or value; the API
never infers input order from a template label.
Omit revision_id to use the latest published revision. The response always
returns the exact immutable template.revision_id chosen for this job. Save it
to repeat the same edition later; pass it explicitly when you must pin a render.
asset_id is a managed private asset reference. Create or resolve one with
POST /v1/assets/ingest, then reuse that ID instead of re-supplying its original
URL for each render. URL ingestion copies bytes into private temporary
fulfillment storage; ingesting an existing asset_id reuses its bytes without a
copy. Raw R2 keys and private delivery lease URLs are never render inputs.
Each returned render artifact is a managed asset_id. Once the render reaches
succeeded, place that ID into the matching public print-order asset role. A
double-sided output must attach both the front and back artifacts.
Poll the render and use all surfaces
ReadGET /v1/renders/{render_id} with print_orders:read. artifacts is
always an array: a normal print commonly returns one artwork member, while a
double-sided product can return front and back atomically. Treat surface_id
as the output identity and fulfillment_role as the placement contract.