AutoGenerator API
The AutoGenerator API turns natural-language prompts, supporting
files, and asset references into a Prezent-quality deck. Generation is
asynchronous: kick off a job with POST /api/v1/autogenerations, then
poll GET /api/v1/autogenerations/{callback_id} until the status
reaches success (or failed).
REST resource paths (v1.1). This page documents the REST-resource path names (
/api/v1/autogenerations/...). The legacy RPC-style paths under/api/v1/autogenerator/*continue to be served indefinitely — they return aDeprecation: trueheader pointing to the successor alias documented here. New integrations should use the paths shown on this page.
Full schemas, request/response examples, and per-field documentation live in the interactive API Reference.
Skip the polling loop. If you can expose an HTTPS endpoint, subscribe to
autogeneration.completed/autogeneration.failedvia the Webhooks API and receive signed completion callbacks instead of pollingGET /api/v1/autogenerations/{callback_id}.
Authentication
All endpoints require a Bearer token:
Authorization: Bearer YOUR_API_KEY
See Getting Started → Authentication for details.
Response envelope
Every endpoint on this page returns the canonical envelope:
{ "success": true, "data": { "..." } }
…or, on error:
{ "success": false, "data": null, "error": { "code": "...", "message": "..." } }
See Developer Guide → Error codes for the full code catalog.
Endpoint summary
| Method | Path | Description | Sync/Async |
|---|---|---|---|
POST | /api/v1/autogenerations | Create an AutoGenerator job | Async |
GET | /api/v1/autogenerations/{callback_id} | Read an AutoGenerator job | Sync |
POST | /api/v1/autogenerations/lookups | Look up multiple jobs in one call | Sync |
POST | /api/v1/autogenerations/{callback_id}/downloads | Create a download artefact for a deck | Sync (up to ~60s) |
POST | /api/v1/autogenerations/{callback_id}/regenerations | Create a regeneration of a deck | Async |
POST | /api/v1/autogenerations/{callback_id}/node-changes | Create a node-level change on a slide | Sync |
POST | /api/v1/autogenerations/{callback_id}/image-extractions | Create an image-extraction for a deck | Sync |
POST | /api/v1/autogenerations/{callback_id}/image-replacements | Create an image replacement on a slide | Sync |
POST | /api/v1/autogenerations/{callback_id}/reactions | Create a like / feedback reaction | Sync |
POST | /api/v1/autogenerations/{callback_id}/slide-actions | Duplicate, delete, or annotate a slide | Sync |
GET | /api/v1/templates?feature=auto_generator | List templates available to AutoGenerator | Sync |
Utility operations
These endpoints are read/lookup utilities, not resource operations.
Their RPC-style paths are kept verbatim because REST-ifying them
produces awkward names. They are still in the auto_generator
rate-limit category.
| Method | Path | Description | Sync/Async |
|---|---|---|---|
POST | /api/v1/autogenerator/meta | Fetch slide metadata for asset ids | Sync |
POST | /api/v1/autogenerator/slide-data | Fetch slide data for one slide | Sync |
POST | /api/v1/autogenerator/brand-image-search | Search the caller's brand-image library | Sync |
POST | /api/v1/autogenerator/library-image-search | Search the configured stock-image library | Sync |
All AutoGenerator endpoints are in the auto_generator rate-limit
category. The slide-generation and presentation-download operations
also count against per-key annual usage quotas (50,000 / year and
1,000,000 / year respectively, configurable per company). See
Developer Guide → Usage quotas and rate limits.
POST /api/v1/autogenerations — Create a job
Kicks off the AutoGenerator pipeline. Returns a callback_id to poll
via GET /api/v1/autogenerations/{callback_id}.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
prompt | string | yes | Natural-language description of the deck to generate. |
text | string | no | Additional free-text context to ground the deck. |
files | array of string | no | IDs of previously uploaded supporting files. |
web_links | array of URI | no | Web URLs to ingest as additional context. |
image_ids | array of string | no | Image identifiers from the caller's library. |
audience | string | no | Target audience id or persona name. |
template_id | string | no | Target theme/template id. |
settings | object | no | Per-generation settings (sources/footer/speaker-notes toggles, extract_graph_data, etc.). |
Example
- cURL
- Python
- Node.js
curl -X POST https://api.prezent.ai/api/v1/autogenerations \
-H "Authorization: Bearer $PREZENT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Generate a presentation on AI trends",
"template_id": "tmpl_corp_2024",
"audience": "executives",
"settings": {
"generate_speaker_notes": true,
"add_sources_to_footer": true
}
}'
import os
import requests
url = "https://api.prezent.ai/api/v1/autogenerations"
headers = {
"Authorization": f"Bearer {os.environ['PREZENT_API_KEY']}",
"Content-Type": "application/json",
}
payload = {
"prompt": "Generate a presentation on AI trends",
"template_id": "tmpl_corp_2024",
"audience": "executives",
"settings": {
"generate_speaker_notes": True,
"add_sources_to_footer": True,
},
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
const axios = require('axios');
const { data } = await axios.post(
'https://api.prezent.ai/api/v1/autogenerations',
{
prompt: 'Generate a presentation on AI trends',
template_id: 'tmpl_corp_2024',
audience: 'executives',
settings: {
generate_speaker_notes: true,
add_sources_to_footer: true,
},
},
{
headers: {
Authorization: `Bearer ${process.env.PREZENT_API_KEY}`,
'Content-Type': 'application/json',
},
}
);
console.log(data);
Success response (200)
{
"success": true,
"data": {
"callback_id": "cb_a1b2c3d4"
}
}
GET /api/v1/autogenerations/{callback_id} — Read a job
Returns the current state of an AutoGenerator job.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
callback_id | string | yes | Callback id returned by POST /api/v1/autogenerations. |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
deck_callback_id | string | no | Original deck callback id when polling a regenerate sub-job. |
operation | string | no | Sub-operation hint (used by regenerate flows). |
status_auto_polling | string (true / false) | no | Pass true to indicate the caller is auto-polling. |
Example
- cURL
- Python
- Node.js
curl "https://api.prezent.ai/api/v1/autogenerations/cb_a1b2c3d4" \
-H "Authorization: Bearer $PREZENT_API_KEY"
import os
import requests
url = "https://api.prezent.ai/api/v1/autogenerations/cb_a1b2c3d4"
headers = {
"Authorization": f"Bearer {os.environ['PREZENT_API_KEY']}",
}
response = requests.get(url, headers=headers)
response.raise_for_status()
print(response.json())
const axios = require('axios');
const { data } = await axios.get(
'https://api.prezent.ai/api/v1/autogenerations/cb_a1b2c3d4',
{
headers: {
Authorization: `Bearer ${process.env.PREZENT_API_KEY}`,
},
}
);
console.log(data);
Success response (200)
{
"success": true,
"data": {
"status": "success",
"callback_id": "cb_a1b2c3d4",
"prompt": "Generate a presentation on AI trends",
"fileName": "ai-trends.pptx",
"allSlides": [ { "..." : "..." } ],
"extracted_images": [ { "..." : "..." } ],
"company": "co_xyz",
"template_code": "tmpl_corp_2024",
"audience": "executives",
"execution_start": "2026-05-18T10:14:00Z",
"execution_end": "2026-05-18T10:14:42Z",
"cached": false
}
}
data.status is one of in_progress, success, or failed. Once
success, polling the same callback_id returns the same cached payload.
POST /api/v1/autogenerations/lookups — Bulk lookup
Returns layout metadata for many callbacks in one call. Useful for list-view rendering.
Request body
{
"callback_ids": ["cb_1", "cb_2", "cb_3"]
}
Success response (200)
{
"success": true,
"data": [
{ "slide_id": "...", "layouts": [ { "..." : "..." } ] },
{ "slide_id": "...", "layouts": [ { "..." : "..." } ] }
]
}
POST /api/v1/autogenerations/{callback_id}/downloads — Merge & download
Synchronously merges all slides for the given callback_id into a
single deck (PPTX or PDF) and returns a signed download URL. May take
up to 60 seconds. Counts against the presentation-download annual
quota (default 1,000,000 / year, configurable per company).
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
callback_id | string | yes | Deck callback id to merge. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
sources | object | no | Source-attribution config (add_sources_to_slides_note). |
speaker_notes | object | no | Speaker-notes config (add_speaker_notes_to_slides_note, speaker_notes_type). |
outputFormat | string | no | pptx or pdf. |
outputPath | string | no | Optional S3 key for the merged output. |
outputBucket | string | no | Optional S3 bucket. |
sections | array of string | no | Section ids to include. |
Success response (200)
{
"success": true,
"data": {
"status": "success",
"output_file": "exports/cb_a1b2c3d4.pptx",
"download_url": "https://...signed-url...",
"message": "Deck merged successfully."
}
}
POST /api/v1/autogenerations/{callback_id}/regenerations — Regenerate
Re-runs part of an existing deck — typically a slide, node, or
section — and returns a new callback_id. Counted as a fresh
generation.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
callback_id | string | yes | Existing deck callback id. |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
operation | string | yes | Sub-operation (for example node_change, slide_regenerate). |
Request body (selected fields)
| Field | Type | Required | Description |
|---|---|---|---|
audience | string | no | Override audience for the regenerated portion. |
template_code | string | no | Override template code. |
slide_override | object | no | Slide-level overrides. |
story_content_override | object | no | Narrative-content overrides. |
preserve_text | boolean | no | Preserve existing text where possible. |
Success response (200)
{
"success": true,
"data": {
"new_callback_id": "cb_regen_xyz",
"message": "Regenerate job started."
}
}
Poll GET /api/v1/autogenerations/cb_regen_xyz (with optional
deck_callback_id set to the original deck's id and operation to
the same value used in this call).
POST /api/v1/autogenerations/{callback_id}/node-changes — Apply a node change
Mutates a single node (text, image, shape) on one slide. Returns the updated slide payload synchronously.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
callback_id | string | yes | Deck callback id. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
slide_callback_id | string | yes | Slide to modify. |
slide_override | object | no | Node-level changes to apply. |
Success response (200)
{ "success": true, "data": { "..." : "..." } }
POST /api/v1/autogenerations/{callback_id}/image-extractions — Extract images
Extracts embedded images from a PowerPoint stored in S3.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
callback_id | string | yes | Deck callback id. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
s3_bucket | string | yes | Bucket containing the PowerPoint. |
s3_path | string | yes | S3 key of the PowerPoint. |
force_update | boolean | no | Re-extract even when cached results exist. |
Success response (200)
{ "success": true, "data": { "..." : "..." } }
POST /api/v1/autogenerations/{callback_id}/image-replacements — Replace an image
Swaps an image on a slide with a new image from one of the supported sources.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
callback_id | string | yes | Deck callback id. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
oldImage | object | yes | Existing image being replaced (meta, shapeType). |
newImage | object | yes | Replacement image. newImage.source is one of myWorkspace, adobe, freepik, upload, extracted, s3, brand-images. Additional fields depend on the source (id, s3_path, s3_bucket, image, extension, imageIndex). |
slide_callback_id | string | yes | Slide where the image lives. |
duplicate_slide_callback_id | string | no | Optional duplicate slide id to mirror the replacement onto. |
Success response (200)
{ "success": true, "data": { "..." : "..." } }
POST /api/v1/autogenerations/{callback_id}/reactions — Like / feedback
Records a like or qualitative feedback against a deck or slide.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
callback_id | string | yes | Deck callback id. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
uuid | string | yes | Target asset uuid. |
type | string | yes | liked or feedback. |
value | boolean or string | yes | Boolean when type=liked; string when type=feedback. |
shareDetails | object | conditional | Required when type=feedback. |
Success response (200)
{
"success": true,
"data": {
"uuid": "asset_42",
"type": "liked",
"value": true,
"message": "Reaction recorded."
}
}
POST /api/v1/autogenerations/{callback_id}/slide-actions — Slide actions
Performs one of four per-slide actions: duplicate, delete,
add_sources_to_slides_note, or speaker_notes.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
callback_id | string | yes | Deck callback id. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
action | string | yes | One of duplicate, delete, add_sources_to_slides_note, speaker_notes. |
deck_callback_id | string | conditional | Required for duplicate / delete. |
slide_callback_id | string | conditional | Required for duplicate / delete. |
uuid | string | conditional | Required for note-style actions. |
type | string | conditional | Note-style sub-type. |
data | object | conditional | Action-specific payload (required for note-style actions). |
Success response (200)
For duplicate:
{
"success": true,
"data": { "new_callback_id": "cb_dup_xyz", "message": "Slide duplicated." }
}
For delete:
{
"success": true,
"data": { "deleted_slide_id": "slide_42", "message": "Slide deleted." }
}
For note-style actions, data carries the downstream service's
payload.
GET /api/v1/templates?feature=auto_generator — List templates
Returns themes/templates available to AutoGenerator. This single
endpoint replaces the legacy /api/v1/autogenerator/templates and
/api/v1/template-converter/templates paths — pass feature to
scope results.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
feature | string (auto_generator / template_converter) | no | Filter to templates enabled for a specific feature. |
name | string | no | Case-insensitive name filter. |
sort | string | no | Sort expression (for example name:asc). |
source | string | no | Source filter (brand vs prezent). |
enabledFeature | string | no | Optional feature flag filter. |
Success response (200)
{
"success": true,
"data": {
"items": [
{ "id": "tmpl_corp_2024", "name": "Corporate 2024", "code": "CORP24", "source": "brand" }
],
"next_cursor": null
}
}
next_cursor is null on the last page (or when pagination was not
requested). Send limit to page; pass next_cursor back as cursor.
See Developer Guide → Pagination.
Utility operations
These endpoints are read/lookup utilities, not resource operations.
Their RPC-style paths are kept verbatim because REST-ifying them
produces awkward names (/image-search-queries, /slide-metadata-fetches).
POST /api/v1/autogenerator/meta — Slide metadata
Returns slide-level metadata (titles, layout codes, thumbnails) for each asset id.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
assetIds | array of string | yes | Asset ids to look up. |
callbackID | string | yes | Parent deck callback id (legacy camelCase preserved for backwards compatibility). |
Success response (200)
{
"success": true,
"data": {
"...": "passthrough payload from the SlideMeta service"
}
}
POST /api/v1/autogenerator/slide-data — Fetch one slide
Returns the raw slide-data document (text, images, layout, speaker notes) for a slide.
Request body
{ "slide_callback_id": "slide_42" }
Success response (200)
{ "success": true, "data": { "..." : "..." } }
POST /api/v1/autogenerator/brand-image-search — Brand image search
Searches the caller's brand-image library.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
callback_id | string | yes | Deck callback id (scopes the search to the right company). |
query | string | no | Search query. Defaults to * (return all). |
skip | integer | no | Number of results to skip. |
limit | integer | no | Maximum number of results (max 100). |
Success response (200)
{ "success": true, "data": { "..." : "..." } }
POST /api/v1/autogenerator/library-image-search — Stock image search
Searches the configured stock image provider (Adobe Stock or Freepik, depending on company configuration).
Request body
| Field | Type | Required | Description |
|---|---|---|---|
searchKey | string | no | Search query. If blank, derived from the supplied slide context. |
limit | integer | no | Max results (default 30). |
offset | integer | no | Result offset (default 0). |
slide_callback_id | string | no | Optional slide callback id used to infer searchKey. |
Success response (200)
{ "success": true, "data": { "..." : "..." } }
Errors
All endpoints on this page return the standard error envelope. Common codes:
400—MISSING_PROMPT,MISSING_TEMPLATE_ID,MISSING_CALLBACK_ID,MISSING_SHARE_DETAILS,INVALID_INPUT,INVALID_PAYLOAD.401—INVALID_API_KEY,EXPIRED_API_KEY,UNAUTHORIZED.404—ENDPOINT_NOT_FOUND,RESOURCE_NOT_FOUND.429—RATE_LIMIT_EXCEEDED,USAGE_LIMIT_EXCEEDED.500/502/503/504— standard server-side codes.
See the full catalog in Developer Guide → Error codes.