Connect your application to the deck engine.
Use MCP when an assistant should reason about a deck and edit it conversationally. Use REST when your application needs predictable endpoints, webhooks, or direct control over generation.
01 / Quickstart
Choose the connection your app needs.
Create a key
Make a workspace key with decks:read and/or decks:write scopes.
Connect
Use OAuth for hosted MCP clients or a Bearer key for your own backend.
Work the deck
Create a plan, adjust slides, generate, then return a permanent file URL.
02 / Authentication
One workspace, two auth paths.
API keys act for the workspace that created them. Keep them server-side, never expose them in a browser bundle, and request only the scopes your integration needs.
Bearer API key
Best for your own backend, automation, and REST calls.
Authorization: Bearer sk_live_…OAuth 2.1 + PKCE
Best for hosted assistants that discover and authorize the MCP server.
GET /.well-known/oauth-protected-resourcecurl https://your-domain.example/api/v1/me \
-H "Authorization: Bearer sk_live_…"03 / MCP integration
Let an agent operate the whole workflow.
The advanced server is the best fit when the other application should inspect a plan, change a caption, replay a slide, or ask for a new version. The simple server exposes only the shortest path from request to finished file.
https://your-domain.example/api/mcp/advancedmake_deckCreate, render, wait, and publish a finished deck in one call.get_deckRead the current plan, slide statuses, images, and export links.edit_slideChange the caption or visual prompt for one slide.regenerate_slideReplay one slide with a correction note.revert_slideRestore the previous image without spending credits.refine_deckAsk the planner to rewrite the deck from feedback.1. get_deck({ id: "deck-id" })
2. edit_slide({ id, position: 2, caption: "Updated copy" })
3. regenerate_slide({ id, position: 2, note: "Keep the layout; fix the percentage." })
4. get_deck_files({ id })04 / REST API
Predictable HTTP for production systems.
Import the OpenAPI document into your HTTP client or build directly against the versioned routes. Every deck starts as a plan and can finish asynchronously through polling or a webhook.
GET https://your-domain.example/api/openapi.jsonPOST /api/v1/decks — plan and optionally start generationGET /api/v1/decks/{id} — read progress and slide dataPATCH /api/v1/decks/{id}/slides/{n} — edit a slidePOST /api/v1/decks/{id}/wait — wait for all pages to settlePOST /api/v1/decks/{id}/files — publish permanent PDF and ZIP URLsPOST /api/v1/decks/{id}/remake — render the same plan in another formatcurl -X POST https://your-domain.example/api/v1/decks \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{
"content": "Why mid-market CFOs stall on AI",
"mode": "slide",
"slides": 8,
"quality": "low"
}'05 / Edit and replay
Reload, modify, regenerate, or undo.
A deck remains addressable after it is created. Read it again at any time, update the exact caption or visual prompt, replay only the affected slide, and revert if the new image is worse.
Reload
get_deck returns the current deck state, including pending, done, error, and blocked slides.
Modify
edit_slide changes text or the image prompt. Without regenerate, the current image is preserved and marked stale.
Replay
regenerate_slide redraws one page with its current instructions plus an optional correction note.
Undo
revert_slide restores the previous image and costs no credits.
curl -X PATCH https://your-domain.example/api/v1/decks/deck-id/slides/2 \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{
"caption": "The corrected caption",
"imagePrompt": "Keep the same composition; use a warmer chart",
"regenerate": true
}'06 / Webhooks
Stop polling when your system is event-driven.
Pass an HTTPS webhookUrl when you create a deck. You will receive deck.planned, deck.completed, and deck.failed events. Verify the timestamp and HMAC signature before processing the payload.
POST https://your-domain.example/api/v1/decks
{
"content": "Quarterly product review",
"mode": "slide",
"webhookUrl": "https://your-app.example/hooks/studio"
}For the full endpoint list and response shapes, open the developer reference. This page is the integration-first guide.