Skip to content

API Overview

The Zandovi public API lets you generate personalized images from your saved templates directly from your own code — e-commerce platforms, email systems, print-on-demand workflows, and automations.

The API is render-focused: you design and save templates in the app, then call the API to produce images. Each generate call returns the image bytes directly (not a link to a hosted file).

https://app.zandovi.com/api/v1

All endpoints are HTTPS-only and versioned under /api/v1.

CapabilityEndpointNotes
List your projectsGET /projectsPaginated
List templates in a projectGET /projects/{projectId}/templatesPaginated
Inspect a template’s variablesGET /templates/{templateId}Use this to discover what to send
Generate an imagePOST /templates/{templateId}/generateReturns binary image data

Templates are authored visually in the app — the public API is read-and-generate only. Bulk/batch generation is not part of the public API; render in bulk by looping the generate endpoint, or use the in-app batch tools.

Every request is authenticated with an API key sent in the X-Api-Key header:

X-Api-Key: your_api_key

See Authentication for how to create and manage keys.

  • Send Content-Type: application/json for request bodies.
  • All timestamps in responses are ISO 8601 in UTC: 2026-06-17T10:00:00Z.
  • Template and project IDs are UUIDs, e.g. 019463b8-1234-7890-abcd-ef1234567890.
  • GET endpoints return JSON.
  • POST /generate returns the raw image bytes with the matching Content-Type (image/png, image/jpeg, image/webp, or application/pdf) and a Content-Disposition: attachment header — write the response body straight to a file or stream it onward.

Error responses use RFC 9457 application/problem+json:

{
"type": "about:blank",
"title": "Variable validation failed",
"status": 400,
"code": "VALIDATION_ERROR",
"detail": "Required variable 'discount_code' was not supplied.",
"requestId": "req_01J9Z..."
}

See Errors, quotas & rate limits for the full status-code and error-code reference.

CodeMeaning
200Success (image or JSON)
400Validation error — missing or invalid variables / body
401Missing or invalid API key
404Template or project not found / not accessible
429Monthly quota or rate limit exceeded
502 / 503Rendering service error / temporarily unavailable

Image generation consumes your organization’s monthly render quota. Every generate response carries X-Quota-Limit, X-Quota-Remaining, and X-Quota-Reset headers, and requests are additionally subject to a short-term rate limit. See Errors, quotas & rate limits.

The API is versioned in the URL (/api/v1). Backwards-incompatible changes ship under a new version; we aim to keep a previous version available for at least 6 months after a new one is released.