Key concepts

Response format

Every response on the API is wrapped in a consistent envelope.

Success
{
  "success": true,
  "data": { /* ... */ }
}
Error
{
  "success": false,
  "statusCode": 403,
  "code": "INSUFFICIENT_SCOPE",
  "message": "This credential is missing the render:write scope",
  "path": "/v1/templates/tpl_123/render",
  "timestamp": "2026-09-08T12:00:00.000Z"
}

A render response — the shape returned inside data — looks like:

Render response
{
  "id": "rnd_789",
  "templateId": "tpl_123",
  "format": "png",
  "url": "https://.../rnd_789.png",
  "byteSize": 482113,
  "width": 1080,
  "height": 1080,
  "createdAt": "...",
  "credits": { "charged": 1, "balanceAfter": 1879 }
}
ParamTypeNotes
idstringUnique id of this render.
templateIdstringThe template that was rendered.
format"png" | "jpeg" | "pdf"
urlstringHosted URL of the rendered file.
byteSizenumber
width / heightnumberPixel dimensions of the rendered file.
createdAtstring (ISO 8601)
credits.chargednumber0 if this exact render already existed (see idempotencyKey).
credits.balanceAfternumberRemaining credits on the plan.

Requesting allPages with a raster format (png/jpeg) returns an array under pages instead of a single render object — one entry per page, each shaped like the response above.