---
title: "Render a template to an MP4 with a share link"
method: POST
path: "/v1/templates/{id}/renders"
tags: ["templates"]
---

# Render a template to an MP4 with a share link

`POST /v1/templates/{id}/renders`

## Request

- Base URL: `https://api.cueframe.ai`
- URL: `https://api.cueframe.ai/v1/templates/{id}/renders`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.cueframe.ai/api/auth/mcp/authorize`, token URL `https://api.cueframe.ai/api/auth/mcp/token`, scopes: `renders:write`)
  - API key in header `PAYMENT-SIGNATURE`

Bind the template's parameters and render the result under the org's system project, without touching any project of yours: one row per request, rendered through the render pipeline and reachable at `shareUrl` (302 to the MP4 while it is complete) and `posterUrl`. Media values are `{ mediaId }` (must be complete), `{ url }` (https, imported once per org) or `{ sample: true }`; imports are awaited by the render. Priced as a render; an x402 caller's render expires with their workspace. Send an Idempotency-Key per row to make retries safe.

## Path parameters

- `id` string, required

## Request body

- TemplateRenderCreateRequest
  - `values` object, required
  - `media` object, required
  - `preset` string
  - `brandKitId` string
  - `posterAt` number: Seconds into the render for the poster still; default 1.

## Response `201`

The render, preparing.

- TemplateRenderResponse
  - `id` string, required
  - `status` 'preparing' | 'rendering' | 'complete' | 'failed' | 'cancelled' | 'revoked', required
  - `templateId` string, required
  - `version` integer, required
  - `preset` string
  - `brandKitId` string
  - `shareUrl` string, nullable, required
  - `posterUrl` string, nullable, required
  - `renderId` string, nullable, required
  - `errorCode` string
  - `errorMessage` string
  - `expiresAt` string
  - `createdAt` string, required
  - `updatedAt` string, required

## Other responses

- `400`: Bad request — validation_error / invalid_cursor / invalid_query.
- `401`: Missing or invalid Authorization header.
- `402`: Payment required — billing_required or x402 payment_*.
- `403`: Forbidden — permission insufficient.
- `404`: Resource not found.
- `409`: Conflict — stale_etag / idempotency_conflict / suggestions_already_complete.
- `422`: Unprocessable — invalid_composition / media_in_use / session_in_use / render_not_cancellable.
- `429`: Rate limited. Retry-After header present.
- `500`: Internal error.
- `503`: Service unavailable — billing_unavailable / honest-503 for runtime deps.

---

[API](https://skmtc.dev/cueframe/apis/cueframe-api.md) · [All operations](https://skmtc.dev/cueframe/apis/cueframe-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cueframe/apis/cueframe-api/revisions/8f9bfe362b4a?raw)
