REST API
The automation-friendly surface: generate and revise on-brand content, render images/video, publish to X, schedule posts, and score results. Every endpoint below is POST except where noted, requires an X-API-Key header (see Authentication), and resolves your business by name.
What each call costs
API calls spend Zolt Credits from the same pool as the app — there is no separate API meter. A call is charged when it produces a generation; calls that only move data around (scheduling, publishing, uploading, reading results) are free, and so are the automatic quality check and the video status poll.
The table is generated from the price map the meter itself uses, so it cannot drift from what you are actually billed.
| Endpoint | Credits | Notes |
|---|---|---|
/api/v1/generate | 30 | Per call, whatever the asset type. |
/api/v1/idea | 30 | One idea/plan step. |
/api/v1/revise | 30 | Each revision is its own generation. |
/api/v1/render-image | 30 | Image generation. |
/api/v1/render-video | 15 | Starts the render. |
/api/v1/render-video-status | 0 | Free — polling a render you already paid for. |
/api/v1/score | 0 | Free — Zolt's own quality check, not your work. |
/api/v1/publish-x | 0 | Free — publishing, not generating. |
/api/v1/schedule | 0 | Free — scheduling only. |
/api/v1/upload-media | 0 | Free — upload only. |
/api/v1/generations | 0 | Free — reads stored results. |
Note that /api/v1/generate is priced per call, not per asset type — an API-generated carousel or presentation costs the same as a social post, where the in-app equivalents are priced higher.
Running out of credits returns 402. Usage, including which business spent what, is on your Credit usage page.
Resolving business and board
Most endpoints take a business name and an optional board name. Names are matched case-insensitively against a normalized slug (lowercased, non-letters/digits collapsed to -), so "Acme Co." matches a business named acme-co. If boardis omitted, your business's default board is used (or its first board, if none is marked default).
If your API key is unscoped, business must still name a business your key belongs to — a business that resolves to a different business than your key's own returns 403. A business/board that doesn't resolve at all returns 404.
Asset types and fields
asset_type accepts video, image, carousel, presentation, or landing_page — matched by prefix and case-insensitively, so a value like "Video – Short Form" from a spreadsheet dropdown still resolves to video. Each asset type generates a fixed set of string fields:
| asset_type | Fields |
|---|---|
| video | hook, script_copy, caption_tiktok, caption_ig, caption_fb, yt_title, yt_description, yt_tags |
| image | hook, image_generation_prompt, caption_ig, caption_fb, caption_x (≤280), caption_linkedin, pinterest_title (≤100), pinterest_description (≤500), pinterest_board |
| carousel | hook, slide_prompts (5 newline-separated image prompts), caption_ig, caption_fb, caption_x (≤280), caption_linkedin |
| presentation | hook, slide_content (newline-separated "Title — body" slides), caption_linkedin, caption_x (≤280) |
| landing_page | headline, subheadline, body_sections, cta_copy, seo_meta_description (≤160) |

