Call the same generation engines that power Studio directly from your own code, agency workflow, or Zap. Public endpoints, bearer-token auth, JSON in and JSON out.
Every request must include an API key as a Bearer token. Keys are Agency-plan only — create one on the API keys page.
# All endpoints accept either header: Authorization: Bearer wk_live_YOUR_KEY_HERE # or, equivalently: x-workova-key: wk_live_YOUR_KEY_HERE
https://workova.coapplication/json/api/v1/studio/documents/generateGenerates a full multi-block document (ebook, report, proposal, lead magnet, presentation, or brief) from a prompt. Returns structured blocks that can be piped into your own renderer or paired with the docx/pdf/epub export endpoints.
prompt(string, required) 6 – 2000 characters. The pitch, angle, or brief.deck(string, optional) One of `ebook`, `report`, `proposal`, `lead-magnet`, `presentation`, `brief`. Defaults to `ebook`.{ ok: true, projectId, documentId, title, blocks: [{ type, content, ...}], estimatedWords, estimatedPages, provider, model, ms }curl -X POST https://workova.co/api/v1/studio/documents/generate \
-H "Authorization: Bearer wk_live_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A 12-page investor update template for a Series A SaaS company",
"deck": "report"
}'/api/v1/studio/graphics/generateGenerates layered canvas data for a single graphic (quote card, thumbnail, one-pager, story graphic, infographic, book cover).
prompt(string, required) Design brief. 4 – 800 characters.presetId(string, required) One of `quote-card`, `youtube-thumb`, `one-pager`, `story-graphic`, `infographic`, `book-cover`.{ ok: true, canvasData: { width, height, background, elements[] }, preset, provider, model, ms }curl -X POST https://workova.co/api/v1/studio/graphics/generate \
-H "Authorization: Bearer wk_live_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A quote card for a design agency, warm cream and navy palette",
"presetId": "quote-card"
}'/api/v1/studio/website/generateReturns a JSON spec you can render into a static single-page site. The AI chooses which sections fit the prompt.
prompt(string, required) 6 – 1500 characters. Describe the pitch, audience, and any explicit no’s (“no pricing” etc.).{ ok: true, spec: { title, theme, sections[] }, provider, model, ms }curl -X POST https://workova.co/api/v1/studio/website/generate \
-H "Authorization: Bearer wk_live_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Landing page for a boutique payroll SaaS. Show hero, features, pricing, FAQ, closing CTA."
}'Register a webhookUrl on any API key and every successful (2xx) generation will POST its result to that URL — in addition to being returned in the original response. Useful for long-running batches or fire-and-forget agency integrations that don't want to hold the connection open.
{
"event": "generation.completed",
"endpoint": "/api/studio/website/generate",
"status": 200,
"keyId": "<uuid of the API key>",
"payload": { /* the original API response body */ }
}user-agent: Workova-Studio-Webhook/1.0 x-workova-key-id: <uuid of the API key> x-workova-endpoint: /api/studio/website/generate content-type: application/json
https:// — plain http is rejected.{ "ok": false, "error": string, "message": string }400invalid_json / prompt_too_short / prompt_too_long / invalid_presetClient input problem.401unauthorized / invalid_keyMissing or revoked API key.402plan_requiredNot on the Agency plan.429rate_limitedPlan quota exceeded. Retry after the window.502ai_error / ai_empty / upstream_errorAI provider issue — retry.503ai_unavailableAI service key not configured on the server.
/api/v1/studio/social/generateGenerate social media graphic(s)
Generates one image or a multi-slide carousel of coherent slides for a social platform.
prompt(string, required) Content brief.presetId(string, required) `square-1080`, `portrait-1080`, `story-1920`, `linkedin-banner`, `x-header`, `youtube-thumb`.slideCount(number, optional) 1 – 10. Only supported for post and story kinds. Defaults to 1.{ ok: true, slides: [{ width, height, elements[] }], preset, provider, model, ms }curl -X POST https://workova.co/api/v1/studio/social/generate \ -H "Authorization: Bearer wk_live_YOUR_KEY_HERE" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Launch announcement for a new feature: real-time collaboration", "presetId": "square-1080", "slideCount": 3 }'