---
title: "Validate (free) -> reserve the estimate (402 when short) -> snapshot"
method: POST
path: "/api/v1/template-jobs/{draft_id}/render"
tags: ["Video Templates"]
---

# Validate (free) -> reserve the estimate (402 when short) -> snapshot

`POST /api/v1/template-jobs/{draft_id}/render`

## Request

- Base URL: `https://api.avatarfactory.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.avatarfactory.io/api/v1/template-jobs/{draft_id}/render`
- Auth: one of:
  - API key in cookie `session`
  - HTTP bearer

the job onto a pending Video -> queue the lifecycle; returns 202 with<br/>the video id and redirect. Nothing spends on a refusal. The template's<br/>plan floor is checked first (403 naming the floor): the paywall sits at<br/>Generate, so this is where a plan below the floor meets it.<br/><br/>Trial gate (2026-09-30): this is the SECOND render entry point (the<br/>Studio's Animate, the split window's, the copy flow's), so it carries<br/>the same `require_paid_creation` as the UGC finalize. Until the wall<br/>moved to the last click only the SPA kept a trialing user away from<br/>here; the product rule now lives on the route, where a hand-made<br/>request meets it too.

## Path parameters

- `draft_id` integer, required

## Other responses

- `422`: Unprocessable Entity

---

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