Download OpenAPI specification:Download
Agent-ready REST API for Prezent's content-generation and template-conversion services.
The Prezent Platform API exposes Prezent's AutoGenerator, Template Converter, Audiences, Themes, and File-upload services as a uniform JSON HTTP API.
This contract describes the target agent-ready shape of the API: every
documented endpoint returns a uniform success envelope { "success": true, "data": { ... } } or a uniform error envelope { "success": false, "data": null, "error": { "code": "...", "message": "...", "details": { ... } } }.
Error codes are drawn from a stable catalog (see ErrorCode). The contract
is additive: handlers may continue to emit legacy keys alongside the
documented ones for backwards compatibility, so schemas explicitly allow
additional properties at the envelope and data levels.
Several endpoints kick off long-running background work and return a
callback_id that the client polls against a corresponding status
endpoint. The canonical async polling endpoint for the Template Converter
family is GET /api/v2/template-converter/status/{callback_id} which
uses strict HTTP-status mapping (200 only on workflow success, 4xx/5xx on
workflow failure). The v1 polling endpoint at
/api/v1/template-converter/status/{callbackId} (and its REST alias
GET /api/v1/template-conversions/{callback_id}) continues to be served
with legacy semantics (HTTP 200 with status field) and is intentionally
omitted from this documentation.
REST resource aliases (v1.1). AutoGenerator and Template Converter
endpoints are documented here under their REST-resource path names
(/api/v1/autogenerations, /api/v1/template-conversions). The legacy
RPC-style paths under /api/v1/autogenerator/* and
/api/v1/template-converter/* continue to be served indefinitely; they
return a Deprecation: true header pointing to the successor alias.
Further documentation is published at https://docs.prezent.ai.
Building with an AI agent? Prezent ships a first-class Model Context
Protocol (MCP) server. The hosted endpoint is
https://mcp.myprezent.com/mcp (OAuth 2.1, works with Claude.ai Custom
Connectors); a local stdio server is published on PyPI as
prezent-mcp-server and plugs into Claude Desktop, Cursor, Cline,
Continue, and Zed. See https://docs.prezent.ai/docs/agents-and-mcp for
setup. The MCP tools wrap the same REST endpoints described here.
Out of scope of this document: SCIM endpoints under /api/v1/scim/*.
Those endpoints conform to RFC 7644 (SCIM 2.0) and follow a different
envelope (schemas, Resources, totalResults, etc.). They are
documented separately at https://docs.prezent.ai/scim.
Long-running and synchronous endpoints that generate and manipulate AI-authored presentations from prompts, files, and assets.
Kicks off a background pipeline that turns the supplied prompt,
context files, and assets into a Prezent presentation. Returns a
callback_id that the caller polls via
GET /api/v1/autogenerations/{callback_id} until status is
success or failed.
| prompt required | string Natural-language description of the deck to generate. |
| text | string Additional free-text context to ground the deck. |
| files | Array of strings Previously uploaded supporting files (by id). |
| web_links | Array of strings <uri> [ items <uri > ] Web URLs to ingest as additional context. |
| image_ids | Array of strings Image identifiers to source from the caller's library. |
| audience | string Target audience id or persona name. |
| template_id | string Target theme/template id. |
object Per-generation settings. | |
| property name* additional property | any |
{- "prompt": "string",
- "text": "string",
- "files": [
- "string"
], - "image_ids": [
- "string"
], - "audience": "string",
- "template_id": "string",
- "settings": {
- "add_sources_to_footer": true,
- "add_sources_to_slides_note": true,
- "generate_speaker_notes": true,
- "extract_graph_data": true
}
}{- "success": true,
- "data": {
- "callback_id": "string",
- "token": "string"
}
}Returns the current state of a previously started AutoGenerator job.
The status field in the response data is one of
in_progress, success, or failed. Once success, the payload
also contains the generated slides, extracted images, theme/audience
metadata, and other context required to display or further edit
the deck.
For the same callback_id, polling after status=success returns
the same cached payload.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| deck_callback_id | string Original deck callback id when polling a regenerate sub-job. |
| operation | string Sub-operation hint (used by regenerate flows). |
| status_auto_polling | string Enum: "true" "false" Pass |
{- "success": true,
- "data": {
- "status": "in_progress",
- "callback_id": "string",
- "prompt": "string",
- "fileName": "string",
- "allSlides": [
- { }
], - "extracted_images": [
- { }
], - "company": "string",
- "companyDisplayName": "string",
- "final_output": { },
- "template_code": "string",
- "audience": "string",
- "execution_start": "2019-08-24T14:15:22Z",
- "execution_end": "2019-08-24T14:15:22Z",
- "presentation_theme": { },
- "voice_settings": { },
- "speaker_notes": { },
- "cached": true,
- "cached_at": "2019-08-24T14:15:22Z"
}
}Returns layout metadata for each callback_id in the request. Use
when rendering a list view that needs many decks at once.
| callback_ids required | Array of strings non-empty Callback ids to look up. |
| property name* additional property | any |
{- "callback_ids": [
- "string"
]
}{- "success": true,
- "data": [
- {
- "slide_id": "string",
- "layouts": [
- { }
]
}
]
}Returns slide-level metadata (titles, layout codes, thumbnails) for each asset id provided. Used by editors that need to enrich a slide list without re-running generation.
| assetIds required | Array of strings non-empty Asset ids to look up metadata for. |
| callbackID required | string Parent deck callback id. (Legacy camelCase preserved for backwards compatibility; new clients should also continue to send this field.) |
| property name* additional property | any |
{- "assetIds": [
- "string"
], - "callbackID": "string"
}{- "success": true,
- "data": { }
}Synchronously merges all slides for the given callback_id into a
single PowerPoint (or PDF, depending on outputFormat) and returns
a signed download URL. The merge step can take up to 60 seconds.
Subject to the AUTO_GEN_DOWNLOAD usage limit in addition to the
normal rate limits.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| callback_id required | string non-empty Deck callback id to merge & download. |
object Source-attribution configuration for the merged output. | |
object Speaker-notes configuration for the merged output. | |
| outputPath | string Optional S3 key (path) for the merged output. |
| sections | Array of strings Optional list of sections to include (defaults to all). |
| outputFormat | string Output format (for example |
| outputBucket | string Optional S3 bucket for the merged output. |
| property name* additional property | any |
{- "callback_id": "string",
- "sources": {
- "add_sources_to_slides_note": true
}, - "speaker_notes": {
- "add_speaker_notes_to_slides_note": true,
- "speaker_notes_type": "string"
}, - "outputPath": "string",
- "sections": [
- "string"
], - "outputFormat": "string",
- "outputBucket": "string"
}{- "success": true,
- "data": {
- "status": "success",
- "output_file": "string",
- "message": "string"
}
}Re-runs a portion of an existing AutoGenerator deck — typically a
slide, node, or section — and returns a new callback_id to poll.
Counted as a fresh generation against the AUTO_GEN usage cap.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| operation required | string The regenerate sub-operation (for example |
| callback_id required | string Existing deck callback id. |
| audience | string Override audience for the regenerated portion. |
| template_code | string Override template code for the regenerated portion. |
object Slide-level overrides. | |
object Narrative-content overrides. | |
object Additional context to inject into the regenerate pass. | |
| duration | string Desired duration for the regenerated section. |
object Voice/tone settings. | |
object Data-source configuration. | |
| preserve_text | boolean Preserve existing text where possible. |
| property name* additional property | any |
{- "callback_id": "string",
- "audience": "string",
- "template_code": "string",
- "slide_override": { },
- "story_content_override": { },
- "context": { },
- "duration": "string",
- "voice_settings": { },
- "data_sources_settings": { },
- "preserve_text": true
}{- "success": true,
- "data": {
- "new_callback_id": "string",
- "message": "string"
}
}Mutates a single node (text, image, shape) within a slide of an existing deck. Returns the updated slide payload synchronously.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| callback_id required | string Deck callback id. |
| slide_callback_id required | string Slide callback id to modify. |
object Node-level changes to apply to the slide. | |
| property name* additional property | any |
{- "callback_id": "string",
- "slide_callback_id": "string",
- "slide_override": { }
}{- "success": true,
- "data": { }
}Returns the raw slide-data document (text, images, layout,
speaker notes) for the given slide_callback_id.
| slide_callback_id required | string Slide callback id whose data to return. |
| property name* additional property | any |
{- "slide_callback_id": "string"
}{- "success": true,
- "data": { }
}Reads the PowerPoint at the given S3 location and returns the list
of embedded images. If force_update is true, re-runs extraction
even when cached results exist.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| s3_bucket required | string S3 bucket containing the PowerPoint. |
| s3_path required | string S3 key (path) of the PowerPoint. |
| force_update | boolean Re-extract even if cached results exist. |
| property name* additional property | any |
{- "s3_bucket": "string",
- "s3_path": "string",
- "force_update": true
}{- "success": true,
- "data": { }
}Returns brand images that match the query string, ordered by
relevance. Supports skip and limit for pagination.
| callback_id required | string Deck callback id (used for scoping to the right company). |
| query | string Search query. Defaults to |
| skip | integer >= 0 Number of results to skip (pagination offset). |
| limit | integer [ 1 .. 100 ] Maximum number of results to return. |
| property name* additional property | any |
{- "callback_id": "string",
- "query": "string",
- "skip": 0,
- "limit": 1
}{- "success": true,
- "data": { }
}Searches the configured stock image provider (Adobe Stock or
Freepik, depending on company configuration). Supports
limit/offset pagination. If searchKey is omitted, the
handler infers it from the supplied slide context.
| searchKey | string Search query. If blank, derived from the supplied slide context. |
| limit | integer Default: 30 Maximum number of results. |
| offset | integer Default: 0 Result offset. |
| slide_callback_id | string Optional slide callback id used to infer |
| property name* additional property | any |
{- "searchKey": "string",
- "limit": 30,
- "offset": 0,
- "slide_callback_id": "string"
}{- "success": true,
- "data": { }
}Swaps an image on a slide with a new image sourced from the caller's workspace, Adobe Stock, Freepik, a previously uploaded file, an extracted image, or S3.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
required | object Description of the existing image being replaced. |
required | object Description of the replacement image. |
| slide_callback_id required | string Slide callback id where the image lives. |
| duplicate_slide_callback_id | string Optional duplicate slide id to mirror the replacement onto. |
| property name* additional property | any |
{- "oldImage": {
- "meta": { },
- "shapeType": "string"
}, - "newImage": {
- "imageIndex": 0,
- "source": "myWorkspace",
- "s3_path": "string",
- "s3_bucket": "string",
- "id": "string",
- "image": "string",
- "extension": "string"
}, - "slide_callback_id": "string",
- "duplicate_slide_callback_id": "string"
}{- "success": true,
- "data": { }
}Persists a user reaction (like) or qualitative feedback against a
previously generated deck/slide. When type is feedback,
shareDetails must be provided.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| uuid required | string Target asset uuid (deck or slide). |
| type required | string Enum: "liked" "feedback" Reaction kind. |
required | boolean or string When |
object Additional details. Required when | |
| property name* additional property | any |
{- "uuid": "string",
- "type": "liked",
- "value": true,
- "shareDetails": { }
}{- "success": true,
- "data": {
- "uuid": "string",
- "type": "liked",
- "value": true,
- "message": "string"
}
}Performs one of four actions against a slide: duplicate,
delete, add_sources_to_slides_note, or speaker_notes. The
required body fields depend on action.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| action required | string Enum: "duplicate" "delete" "add_sources_to_slides_note" "speaker_notes" Sub-action to perform. |
| deck_callback_id | string Deck callback id (required for |
| slide_callback_id | string Slide callback id (required for |
| uuid | string Target uuid (required for note-style actions). |
| type | string Note-style sub-type (required for note-style actions). |
object Action-specific payload (required for note-style actions). | |
| property name* additional property | any |
{- "action": "duplicate",
- "deck_callback_id": "string",
- "slide_callback_id": "string",
- "uuid": "string",
- "type": "string",
- "data": { }
}{- "success": true,
- "data": {
- "new_callback_id": "string",
- "deleted_slide_id": "string",
- "message": "string"
}
}Apply a target brand template to an uploaded presentation, including review suggestions, work-area adjustment, layout change, and download.
Kicks off a pipeline that applies the target brand template
(templateName) to the input PowerPoint (fileId or
inputDeck). Returns a callback_id to poll. Counted against
the TC_START usage limit.
Subsequent calls in the same conversion lifecycle: poll the v2
status endpoint at
GET /api/v2/template-converter/status/{callback_id} until the
pipeline reaches a terminal state.
| fileId | string Identifier of a previously uploaded input deck. Mutually exclusive with |
object Inline reference to the input deck (S3 path / chunk identifier). Mutually exclusive with | |
| templateName required | string Name of the target brand template. |
| includeImageWithoutData | boolean Carry over images that have no associated data. |
| includeImageWithData | boolean Carry over images that have associated data. |
| includeIcons | boolean Carry over icons. |
| includeSpecialColor | boolean Preserve special color treatments from the source deck. |
object Per-conversion settings. | |
object Optional top-level format overrides (legacy placement). | |
| property name* additional property | any |
{- "fileId": "string",
- "inputDeck": { },
- "templateName": "string",
- "includeImageWithoutData": true,
- "includeImageWithData": true,
- "includeIcons": true,
- "includeSpecialColor": true,
- "settings": {
- "ai_mode": "string",
- "work_area_option": "string",
- "modifyFormat": { },
- "color_preference": "string",
- "content_formatting": "string"
}, - "modifyFormat": { }
}{- "success": true,
- "data": {
- "callback_id": "string",
- "token": "string",
- "presentation_name": "string",
- "status": "in_progress"
}
}v2 polling endpoint with strict HTTP-status mapping: returns
HTTP 200 only when the conversion has completed successfully.
While the pipeline is still running the status is in_progress
and the response is HTTP 202. On workflow failure the
endpoint returns a 4xx or 5xx with the standard error
envelope.
Use this endpoint instead of the v1 polling endpoint
(/api/v1/template-converter/status/{callbackId}) whenever
possible — agents can rely on the HTTP status alone to branch on
success vs failure, without inspecting body fields.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| source | string Value: "nexus" Pass |
{- "success": true,
- "data": {
- "callback_id": "string",
- "status": "success",
- "presentation_name": "string",
- "template_name": "string",
- "outputs": { }
}
}Accepts one chunk of a multi-chunk PPTX upload, used as the
inputDeck for a subsequent template-conversion job. Only .pptx
files are accepted. Collection-level — the upload is grouped by
the body's fileIdentifier and precedes the creation of the
conversion's callback_id.
| fileContent required | string Chunk content as base64 / |
| fileName required | string Original filename including extension. |
| chunkIndex required | integer >= 0 Zero-based index of this chunk. |
| totalChunks required | integer >= 1 Total number of chunks for this upload. |
| requestIdentifier required | string Caller-supplied identifier that groups chunks of the same upload. |
| property name* additional property | any |
{- "fileContent": "string",
- "fileName": "string",
- "chunkIndex": 0,
- "totalChunks": 1,
- "requestIdentifier": "string"
}{- "success": true,
- "data": {
- "request_identifier": "string",
- "file_name": "string",
- "message": "string"
}
}Concludes a chunked upload identified by fileIdentifier. The
finalised file must be a .pptx, no larger than 200 MB, and no
more than 100 pages. Collection-level — runs before the conversion's
callback_id exists.
| fileIdentifier required | string Identifier shared across all chunks of this upload. |
| fileName required | string Final filename. Must end in |
| property name* additional property | any |
{- "fileIdentifier": "string",
- "fileName": "string"
}{- "success": true,
- "data": {
- "file_id": "string",
- "s3_prefix": "string",
- "s3_bucket": "string",
- "type": "string",
- "size_kb": 0,
- "num_of_pages": 0
}
}Returns the list of editorial suggestions produced for the
converted deck identified by callback_id. Each suggestion may
be applied via the corresponding PATCH endpoint.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
{- "success": true,
- "data": {
- "callback_id": "string",
- "presentation_name": "string",
- "suggestions": [
- { }
]
}
}Applies a subset of editorial suggestions to the converted deck
identified by callback_id. Kicks off a background pipeline that
produces a new derived deck; the response carries a new
callback_id to poll.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
required | Array of objects Suggestion patches to apply. |
| property name* additional property | any |
{- "suggestions": [
- { }
]
}{- "success": true,
- "data": {
- "callback_id": "string",
- "token": "string"
}
}Re-runs the conversion pipeline for an already-converted deck
against a new target templateName. Returns a new callback_id
to poll.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| templateName required | string New target brand template name. |
object Override conversion settings (same shape as | |
| property name* additional property | any |
{- "templateName": "string",
- "settings": { }
}{- "success": true,
- "data": {
- "callback_id": "string",
- "token": "string"
}
}Returns a signed download URL for the converted deck identified
by callback_id. Counted against the TC_DOWNLOAD usage limit.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
{- "success": true,
}Records compliance metrics for a converted deck. The body is
forwarded to the ComplyMetrics service. Typically invoked via a
callback_id + token URL handed back to the caller after a
conversion.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| property name* additional property | any |
{ }{- "success": true,
- "data": {
- "message": "string"
}
}Records a like or qualitative feedback against a converted deck.
When type is liked the value must be a boolean; when
feedback the value must be a string. Uses PUT (legacy quirk
preserved from the original endpoint) rather than POST.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| callback_id required | string Converted-deck callback id. |
| type required | string Enum: "liked" "feedback" Reaction kind. |
required | boolean or string When |
| property name* additional property | any |
{- "callback_id": "string",
- "type": "liked",
- "value": true
}{- "success": true,
- "data": {
- "callback_id": "string",
- "type": "liked",
- "message": "string",
- "warnings": [
- "string"
]
}
}Returns the available work-area adjustment options for the given slide of the given conversion job.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| slide_index required | integer >= 0 Zero-based slide index. |
{- "success": true,
- "data": {
- "callback_id": "string",
- "work_area_adjustments": [
- { }
]
}
}Applies a selected work-area adjustment to the given slide of a conversion job.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| callback_id required | string Conversion job id. |
| slide_index required | integer >= 0 Zero-based slide index. |
required | object Selected work-area-option payload. |
| property name* additional property | any |
{- "callback_id": "string",
- "slide_index": 0,
- "selection": { }
}{- "success": true,
- "data": {
- "message": "string"
}
}Returns the layout options available for the target template and, optionally, the input deck's layouts for the given slide.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| slide_index | integer >= 0 Zero-based slide index. If omitted, returns layouts for every slide. |
{- "success": true,
- "data": {
- "callback_id": "string",
- "status": "success",
- "layouts": {
- "target_template_layouts": [
- { }
], - "input_deck_layouts": [
- { }
]
}
}
}Updates the layout of a slide and re-renders the affected portion
of the converted deck. Returns a new callback_id to poll.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| callback_id required | string Conversion job id. |
| slide_index required | integer >= 0 Zero-based slide index. |
| layout_id required | string Target layout id (from |
| property name* additional property | any |
{- "callback_id": "string",
- "slide_index": 0,
- "layout_id": "string"
}{- "success": true,
- "data": {
- "callback_id": "string",
- "token": "string"
}
}Applies a batch of format modifications (title-formatting,
body-formatting) to a converted deck and re-renders the affected
slides. Returns a new callback_id to poll.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
| callback_id required | string Conversion job id. |
required | Array of objects Per-slide formatting modifications. |
| property name* additional property | any |
{- "callback_id": "string",
- "modify_format_config": [
- {
- "title": { },
- "body": { }
}
]
}{- "success": true,
- "data": {
- "callback_id": "string",
- "token": "string"
}
}Returns the available formatting controls (font sizes, weight, alignment) that may be applied to title/body text in a converted deck.
| callback_id required | string non-empty Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts. |
{- "success": true,
- "data": {
- "callback_id": "string",
- "modify_format_settings": [
- { }
]
}
}Returns the audiences configured for the caller's company. Pagination is not yet implemented; the full list is returned. Cursor pagination is planned for a future minor version.
| feature | string Filter by feature scope. |
| id | string Filter to a single audience by id. |
| sort | string Sort expression (for example |
{- "success": true,
- "data": {
- "items": [
- {
- "id": "string",
- "name": "string"
}
], - "next_cursor": "string"
}
}Free-text and field-filtered search across audience profiles. The
request supports limit and filterBy* parameters. Cursor
pagination is planned for a future minor version.
| feature | string Filter by feature scope. |
| query | string Free-text search query. |
| id | string Filter to a single audience by id. |
| sort | string Sort expression (for example |
object Field-level filter. | |
object Collection-level filter. | |
| fields | Array of strings Subset of fields to return. |
| extraFields | Array of strings Additional fields to include beyond defaults. |
| limit | integer Default: 15 Maximum number of results. |
| property name* additional property | any |
{- "query": "string",
- "id": "string",
- "sort": "string",
- "filterBy": { },
- "filterByCollection": { },
- "fields": [
- "string"
], - "extraFields": [
- "string"
], - "limit": 15
}{- "success": true,
- "data": {
- "items": [
- {
- "id": "string",
- "name": "string"
}
], - "next_cursor": "string"
}
}Returns the themes/templates available to the caller's company,
optionally filtered to a specific feature. This single endpoint
replaces the legacy GET /api/v1/autogenerator/templates and
GET /api/v1/template-converter/templates aliases — pass the
feature query parameter to scope results.
Pagination is not yet implemented; the full set is returned. Cursor pagination is planned for a future minor version.
| feature | string Enum: "auto_generator" "template_converter" Filter to templates enabled for a specific feature. |
| name | string Optional case-insensitive name filter. |
| sort | string Sort expression (for example |
| source | string Source filter (e.g. brand vs prezent). |
| enabledFeature | string Optional feature flag filter. |
{- "success": true,
- "data": {
- "items": [
- {
- "id": "string",
- "name": "string",
- "code": "string",
- "source": "string"
}
], - "next_cursor": "string"
}
}Returns the presentation themes available to the caller's company. Pagination is not yet implemented; the full list is returned. Cursor pagination is planned for a future minor version.
| name | string Optional case-insensitive name filter. |
| feature | string Filter by feature scope. |
| enabledFeature | string Optional feature flag filter. |
| sort | string Sort expression (for example |
| source | string Source filter. |
{- "success": true,
- "data": {
- "items": [
- {
- "id": "string",
- "name": "string",
- "code": "string",
- "source": "string"
}
], - "next_cursor": "string"
}
}Accepts a single file as a base64 string or data: URL in the
request body. The response contains the uploaded file's id, S3
path, and metadata.
| fileContent required | string File content as a base64 string or |
| fileName required | string Original filename including extension. |
| property name* additional property | any |
{- "fileContent": "string",
- "fileName": "string"
}{- "success": true,
- "data": {
- "file": {
- "file_id": "string",
- "file_name": "string",
- "file_type": "string",
- "s3_path": "string",
- "s3_bucket": "string"
}, - "message": "string"
}
}Accepts one chunk of a multi-chunk file upload. The caller drives
chunking via chunkIndex and totalChunks; chunks for the same
upload share a requestIdentifier. Once all chunks for a
requestIdentifier have arrived the file is assembled and made
available to downstream operations.
| fileContent required | string Chunk content as base64 / |
| fileName required | string Original filename including extension. |
| chunkIndex required | integer >= 0 Zero-based index of this chunk. |
| totalChunks required | integer >= 1 Total number of chunks for this upload. |
| requestIdentifier required | string Caller-supplied identifier that groups chunks of the same upload. |
| property name* additional property | any |
{- "fileContent": "string",
- "fileName": "string",
- "chunkIndex": 0,
- "totalChunks": 1,
- "requestIdentifier": "string"
}{- "success": true,
- "data": {
- "request_identifier": "string",
- "file_name": "string",
- "message": "string"
}
}Validates a set of previously uploaded files (referenced by
fileIdentifiers) and/or a list of web links. At least one of
fileIdentifiers or webLinks must be non-empty.
object Map of | |
| webLinks | Array of strings <uri> [ items <uri > ] List of URLs to validate. |
| property name* additional property | any |
{- "fileIdentifiers": {
- "property1": "string",
- "property2": "string"
},
}{- "success": true,
- "data": {
- "files": [
- {
- "uuid": "string",
- "file_name": "string",
- "valid": true,
- "reason": "string"
}
], - "web_links": [
- {
- "url": "string",
- "valid": true,
- "reason": "string"
}
], - "message": "string"
}
}Returns short-lived per-file access tokens that allow the caller to download the referenced files from the underlying storage backend.
| filePaths required | Array of strings non-empty List of stored file paths to mint tokens for. |
| source | string Enum: "betaimages" "magikarp" Storage backend source. |
| property name* additional property | any |
{- "filePaths": [
- "string"
], - "source": "betaimages"
}{- "success": true,
- "data": {
- "access_tokens": {
- "property1": "string",
- "property2": "string"
}, - "message": "string"
}
}Receive signed HTTPS callbacks when Prezent jobs complete or fail. Subscriptions are scoped per API key, retried over a 21h window, and auto-disabled after 50 consecutive failures. See the Webhooks guide for the signature format and verification examples.
Registers a new HTTPS endpoint to receive signed delivery
callbacks for the listed event types. Returns the HMAC secret
ONCE — store it securely. Subsequent reads only expose the
secret_prefix.
| url required | string <uri> HTTPS endpoint to receive deliveries. Must use |
| events | Array of strings (WebhookEventType) Default: ["*"] Items Enum: "autogeneration.completed" "autogeneration.failed" "template_conversion.completed" "template_conversion.failed" "webhook.test" Event types to subscribe to. Defaults to |
| description | string or null |
| status | string (WebhookSubscriptionStatus) Enum: "active" "disabled"
|
{- "events": [
- "autogeneration.completed",
- "autogeneration.failed"
], - "description": "Push completions into our deal-room worker.",
- "status": "active"
}{- "success": true,
- "data": {
- "id": "whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c",
- "secret_prefix": "whsec_",
- "events": [
- "autogeneration.completed",
- "autogeneration.failed"
], - "description": "Push completions into our deal-room worker.",
- "status": "active",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "last_delivery_at": "2019-08-24T14:15:22Z",
- "last_failure_at": "2019-08-24T14:15:22Z",
- "consecutive_failure_count": 0,
- "secret": "whsec_4mZkV8t9oFp1qR3sT7uW9xY2zA5bCdEfGhI"
}
}Returns the subscriptions owned by the calling API key. Excludes soft-deleted rows. Use the standard cursor-pagination parameters — see Developer Guide → Pagination.
| limit | integer <int32> [ 1 .. 100 ] Default: 25 |
| cursor | string |
{- "success": true,
- "data": {
- "items": [
- {
- "id": "whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c",
- "secret_prefix": "whsec_",
- "events": [
- "autogeneration.completed",
- "autogeneration.failed"
], - "description": "Push completions into our deal-room worker.",
- "status": "active",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "last_delivery_at": "2019-08-24T14:15:22Z",
- "last_failure_at": "2019-08-24T14:15:22Z",
- "consecutive_failure_count": 0
}
], - "next_cursor": "string"
}
}Returns one subscription. secret_prefix (the first 6 chars of
the HMAC secret) is exposed for human disambiguation; the full
secret is never returned by a read.
| id required | string^whsub_[a-f0-9]{32}$ Example: whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c The public subscription id returned by |
{- "success": true,
- "data": {
- "id": "whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c",
- "secret_prefix": "whsec_",
- "events": [
- "autogeneration.completed",
- "autogeneration.failed"
], - "description": "Push completions into our deal-room worker.",
- "status": "active",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "last_delivery_at": "2019-08-24T14:15:22Z",
- "last_failure_at": "2019-08-24T14:15:22Z",
- "consecutive_failure_count": 0
}
}Partial update. Any combination of url, events, description,
or status may be supplied. Changes to url are re-validated
against the SSRF / scheme / port rules. Setting status to
"active" re-enables an auto-disabled subscription.
| id required | string^whsub_[a-f0-9]{32}$ Example: whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c The public subscription id returned by |
| url | string <uri> |
| events | Array of strings (WebhookEventType) non-empty Items Enum: "autogeneration.completed" "autogeneration.failed" "template_conversion.completed" "template_conversion.failed" "webhook.test" |
| description | string or null |
| status | string (WebhookSubscriptionStatus) Enum: "active" "disabled"
|
{- "events": [
- "autogeneration.completed"
], - "description": "string",
- "status": "active"
}{- "success": true,
- "data": {
- "id": "whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c",
- "secret_prefix": "whsec_",
- "events": [
- "autogeneration.completed",
- "autogeneration.failed"
], - "description": "Push completions into our deal-room worker.",
- "status": "active",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "last_delivery_at": "2019-08-24T14:15:22Z",
- "last_failure_at": "2019-08-24T14:15:22Z",
- "consecutive_failure_count": 0
}
}Soft-deletes the subscription. The id is permanently retired
— no future deliveries will be attempted, and the row is
excluded from list responses.
| id required | string^whsub_[a-f0-9]{32}$ Example: whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c The public subscription id returned by |
{- "success": true,
- "data": {
- "id": "whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c",
- "deleted": true
}
}Generates a new HMAC secret and invalidates the old one
immediately. Returns the new secret ONCE — store it before
responding to the caller. There is no grace window during which
both secrets verify; if you need an overlap, stand up a second
subscription on a distinct path, switch over, then delete the
old one.
| id required | string^whsub_[a-f0-9]{32}$ Example: whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c The public subscription id returned by |
{- "success": true,
- "data": {
- "id": "whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c",
- "secret": "whsec_NewlyGeneratedSecretMaterial",
- "secret_prefix": "whsec_",
- "rotated_at": "2019-08-24T14:15:22Z"
}
}Immediately POSTs a synthetic webhook.test event to the
subscription's URL (signed with the current secret, 5s timeout,
no retries) and returns the response status + body verbatim.
Use this to verify the receiver's signature-verification path
before real traffic flows.
| id required | string^whsub_[a-f0-9]{32}$ Example: whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c The public subscription id returned by |
{- "success": true,
- "data": {
- "subscription_id": "whsub_3f7a9b1c8d2e4f5a6b7c8d9e0f1a2b3c",
- "event": {
- "id": "evt_8c2a1f7e6d3b4a5c9e0f8d7b6a5c4d3e",
- "type": "autogeneration.completed",
- "api_version": "1.0",
- "created_at": "2019-08-24T14:15:22Z",
- "data": { }
}, - "delivery": {
- "ok": true,
- "status": 200,
- "error": "string",
- "response_body_preview": "string",
- "delivery_id": "string"
}
}
}Returns a fixed greeting payload. Exists to allow clients to verify connectivity and credentials. Does not consult any downstream services.
{- "success": true,
- "data": {
- "message": "string"
}
}Reports the status of downstream services. With no category
parameter, returns a simple "alive" greeting. With
category=autogenerator or category=scim, reports
per-component status and returns 503 if any required service is
unhealthy.
| category | string Enum: "autogenerator" "scim" Component group to check. Omit for a generic liveness response. |
{- "success": true,
- "data": {
- "message": "string",
- "category": "string",
- "services": [
- {
- "name": "string",
- "status": "string",
- "detail": "string"
}
], - "timestamp": "2019-08-24T14:15:22Z"
}
}