---
title: "Render a template (templateId or inline DSL) to PDF"
method: POST
path: "/api/v1/render"
tags: ["x402"]
---

# Render a template (templateId or inline DSL) to PDF

`POST /api/v1/render`

## Request

- Base URL: `https://makespdf.com`
- URL: `https://makespdf.com/api/v1/render`
- Auth: none required

The billed production render. Provide exactly one of templateId or dsl, plus data. Authed callers pay 1 credit per 10 pages; wallet callers pay $0.02 per render via x402. Failed renders are never billed.

## Request body

- union
  - object
    - `templateId` string, required: Curated-library or saved template id. Browse the library at GET /api/v1/templates?owner=library.
    - `data` object: Values substituted into {{placeholders}}.
    - `options` object
      - `title` string
  - object
    - `dsl` string, required: Builder DSL script (bring your own template). Reference: https://makespdf.com/skills/pdf-template-author.md
    - `data` object: Values substituted into {{placeholders}}.
    - `options` object
      - `title` string

## Response `200`

Rendered PDF (PDF/A-2A + PDF/UA-1 dual-compliant, tagged). Send `Accept: application/json` for metadata instead of bytes.

- RenderMetadata: Returned instead of PDF bytes when the request sends `Accept: application/json`.
  - `success` true, required
  - `templateId` string: Stored template rendered (/render only).
  - `pageCount` integer, required
  - `sizeBytes` integer, required
  - `renderMs` integer, required
  - `artifactId` string: Render artifact id; download again via GET /api/v1/artifacts/{id}/pdf.
  - `templateWarnings` unknown[]
    - unknown
  - `layoutWarnings` unknown[]
    - unknown
  - `credits_deducted` integer
  - `remaining_balance` integer
  - `paid` object
    - `payer` string
    - `txHash` string

## Other responses

- `400`: Malformed body or failed validation. Never billed.
- `402`: Insufficient credits (authed callers) or an x402 challenge (wallet callers, PAYMENT-REQUIRED header).
- `404`: Not found, or not visible to this caller.
- `429`: Rate limit exceeded.
- `500`: Unexpected server error. Never billed.

---

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