Prezent Template Converter API

Apply a target brand template to an uploaded presentation, including review suggestions, work-area adjustment, layout change, and download.

OpenAPI Specification

prezent-template-converter-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Prezent Platform Audiences Template Converter API
  version: 1.0.0
  summary: Agent-ready REST API for Prezent's content-generation and template-conversion services.
  description: "The Prezent Platform API exposes Prezent's AutoGenerator, Template Converter,\nAudiences, Themes, and File-upload services as a uniform JSON HTTP API.\n\nThis contract describes the **target agent-ready shape** of the API: every\ndocumented endpoint returns a uniform success envelope `{ \"success\": true,\n\"data\": { ... } }` or a uniform error envelope `{ \"success\": false,\n\"data\": null, \"error\": { \"code\": \"...\", \"message\": \"...\", \"details\": { ... } } }`.\nError codes are drawn from a stable catalog (see `ErrorCode`). The contract\nis additive: handlers may continue to emit legacy keys alongside the\ndocumented ones for backwards compatibility, so schemas explicitly allow\nadditional properties at the envelope and data levels.\n\nSeveral endpoints kick off long-running background work and return a\n`callback_id` that the client polls against a corresponding status\nendpoint. The canonical async polling endpoint for the Template Converter\nfamily is **`GET /api/v2/template-converter/status/{callback_id}`** which\nuses strict HTTP-status mapping (200 only on workflow success, 4xx/5xx on\nworkflow failure). The v1 polling endpoint at\n`/api/v1/template-converter/status/{callbackId}` (and its REST alias\n`GET /api/v1/template-conversions/{callback_id}`) continues to be served\nwith legacy semantics (HTTP 200 with `status` field) and is intentionally\nomitted from this documentation.\n\n**REST resource aliases (v1.1).** AutoGenerator and Template Converter\nendpoints are documented here under their REST-resource path names\n(`/api/v1/autogenerations`, `/api/v1/template-conversions`). The legacy\nRPC-style paths under `/api/v1/autogenerator/*` and\n`/api/v1/template-converter/*` continue to be served indefinitely; they\nreturn a `Deprecation: true` header pointing to the successor alias.\n\n**Conventions that apply to every endpoint** (full reference in the\ncompanion guides on this documentation site):\n\n- **Auth:** API key as a Bearer token — `Authorization: Bearer <key>`.\n  Each key is scoped to an allow-list of endpoint paths; an out-of-scope\n  call returns `404 ENDPOINT_NOT_FOUND`.\n- **Rate limits:** gateway throttle 10 req/s sustained, 5 burst,\n  1,000 req/day per key; per-company per-category 60-second sliding\n  windows; annual quotas (50,000 slide generations/yr, 1,000,000\n  downloads/yr). Limit breaches return `429` with `error.code`\n  `TOO_MANY_REQUESTS` (gateway), `RATE_LIMIT_EXCEEDED` (per-category),\n  or `USAGE_LIMIT_EXCEEDED` (annual).\n- **Errors:** every error uses the `{ success:false, data:null, error:{\n  code, message, details } }` envelope with stable, documented `code`\n  values.\n- **Idempotency & pagination:** mutating requests accept an\n  `Idempotency-Key`; list endpoints accept opt-in `limit`/`cursor`\n  paging.\n\n**Building with an AI agent?** Prezent ships a first-class Model Context\nProtocol (MCP) server. The hosted endpoint is\n`https://mcp.myprezent.com/mcp` (OAuth 2.1, works with Claude.ai Custom\nConnectors); a local stdio server is published on PyPI as\n`prezent-mcp-server` and plugs into Claude Desktop, Cursor, Cline,\nContinue, and Zed. The MCP tools wrap the same REST endpoints\ndescribed here.\n\n**Official SDKs.** Typed REST clients are published for Python and\nTypeScript (`prezent-sdk`) — generated from and versioned against this\nspec. For other languages, generate a client from this document.\n\n**Out of scope of this document:** SCIM endpoints under `/api/v1/scim/*`.\nThose endpoints conform to RFC 7644 (SCIM 2.0) and follow a different\nenvelope (`schemas`, `Resources`, `totalResults`, etc.). They are\ndocumented separately at /docs/scim-user-management.\n"
  x-out-of-scope-note: 'SCIM endpoints (`/api/v1/scim/*`) are NOT included in this spec. They

    follow RFC 7644 (SCIM 2.0) and are documented in a separate document at

    /docs/scim-user-management.

    '
  contact:
    name: Prezent API Support
    email: support@prezent.ai
    url: https://prezent.ai
  license:
    name: Proprietary - Prezent, Inc.
    url: https://prezent.ai/terms
servers:
- url: https://api.prezent.ai
  description: Production (canonical)
- url: https://uatstage-api.myprezent.com
  description: UAT (user acceptance testing)
- url: https://devstage-api.myprezent.com
  description: Development
security:
- BearerAuth: []
tags:
- name: Template Converter
  description: Apply a target brand template to an uploaded presentation, including review suggestions, work-area adjustment, layout change, and download.
paths:
  /api/v1/template-conversions:
    post:
      tags:
      - Template Converter
      summary: Create a template-conversion job
      description: '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.

        '
      operationId: createTemplateConversion
      x-rate-limit-category: template_converter
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateConverterStartRequest'
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      responses:
        '200':
          description: Job accepted; client must poll for completion.
          headers:
            Idempotency-Replayed:
              $ref: '#/components/headers/IdempotencyReplayed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterStartResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/IdempotencyConflict'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v2/template-converter/status/{callback_id}:
    get:
      tags:
      - Template Converter
      summary: Poll a template-conversion job (strict status mapping)
      description: '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.

        '
      operationId: getTemplateConverterStatusV2
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      - in: query
        name: source
        required: false
        description: Pass `nexus` to include the full `outputs` blob in the response (intended for Prezent's Nexus front-end).
        schema:
          type: string
          enum:
          - nexus
      responses:
        '200':
          description: Conversion completed successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterStatusV2SuccessResponse'
        '202':
          description: Conversion is still in progress.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterStatusV2InProgressResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/preprocessings:
    post:
      tags:
      - Template Converter
      summary: Create a preprocessing chunk for a template-conversion input
      description: '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`.

        '
      operationId: createTemplateConversionPreprocessing
      x-rate-limit-category: template_converter
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PreprocessFileRequest'
      responses:
        '200':
          description: Chunk received.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreprocessFileResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '415':
          $ref: '#/components/responses/UnsupportedFileType'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/finalisations:
    post:
      tags:
      - Template Converter
      summary: Create a finalisation for a chunked PPTX upload
      description: '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.

        '
      operationId: createTemplateConversionFinalisation
      x-rate-limit-category: template_converter
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateConverterFinalprocessRequest'
      responses:
        '200':
          description: File assembled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterFinalprocessResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '415':
          $ref: '#/components/responses/UnsupportedFileType'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/{callback_id}/review-suggestions:
    get:
      tags:
      - Template Converter
      summary: Read review suggestions for a template-conversion
      description: '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.

        '
      operationId: listTemplateConversionReviewSuggestions
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      responses:
        '200':
          description: Suggestions returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterReviewSuggestionsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
    patch:
      tags:
      - Template Converter
      summary: Update review suggestions on a template-conversion
      description: '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.

        '
      operationId: updateTemplateConversionReviewSuggestions
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateConverterReviewSuggestionsPatchRequest'
      responses:
        '200':
          description: Pipeline accepted; poll the returned `callback_id`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterAsyncProcessingResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/{callback_id}/template-changes:
    post:
      tags:
      - Template Converter
      summary: Create a template change on a template-conversion
      description: 'Re-runs the conversion pipeline for an already-converted deck

        against a new target `templateName`. Returns a new `callback_id`

        to poll.

        '
      operationId: createTemplateConversionTemplateChange
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateConverterTemplateChangeRequest'
      responses:
        '200':
          description: Pipeline accepted; poll the returned `callback_id`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterAsyncProcessingResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/{callback_id}/download:
    get:
      tags:
      - Template Converter
      summary: Read the download URL for a template-conversion
      description: 'Returns a signed download URL for the converted deck identified

        by `callback_id`. Counted against the `TC_DOWNLOAD` usage limit.

        '
      operationId: getTemplateConversionDownload
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      responses:
        '200':
          description: Signed download URL returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterDownloadResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/{callback_id}/comply-metrics:
    post:
      tags:
      - Template Converter
      summary: Create a Comply metrics record on a template-conversion
      description: '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.

        '
      operationId: createTemplateConversionComplyMetrics
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
              description: Arbitrary metrics payload forwarded to the ComplyMetrics service.
      responses:
        '200':
          description: Metrics recorded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterGenericResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/{callback_id}/reactions:
    put:
      tags:
      - Template Converter
      summary: Upsert a reaction on a template-conversion
      description: '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.

        '
      operationId: putTemplateConversionReaction
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateConverterReactionFeedbackRequest'
      responses:
        '200':
          description: Reaction/feedback stored.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterReactionFeedbackResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/{callback_id}/work-area-options:
    get:
      tags:
      - Template Converter
      summary: Read work-area options for a template-conversion slide
      description: 'Returns the available work-area adjustment options for the given

        slide of the given conversion job.

        '
      operationId: listTemplateConversionWorkAreaOptions
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      - in: query
        name: slide_index
        required: true
        description: Zero-based slide index.
        schema:
          type: integer
          minimum: 0
      responses:
        '200':
          description: Work-area options returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterWorkAreaOptionsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/{callback_id}/work-area-adjustments:
    post:
      tags:
      - Template Converter
      summary: Create a work-area adjustment on a template-conversion
      description: 'Applies a selected work-area adjustment to the given slide of a

        conversion job.

        '
      operationId: createTemplateConversionWorkAreaAdjustment
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateConverterAdjustWorkAreaRequest'
      responses:
        '200':
          description: Adjustment applied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterGenericResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/{callback_id}/layouts:
    get:
      tags:
      - Template Converter
      summary: Read layout options for a template-conversion
      description: 'Returns the layout options available for the target template

        and, optionally, the input deck''s layouts for the given slide.

        '
      operationId: listTemplateConversionLayouts
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      - in: query
        name: slide_index
        required: false
        description: Zero-based slide index. If omitted, returns layouts for every slide.
        schema:
          type: integer
          minimum: 0
      responses:
        '200':
          description: Layout options returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterLayoutsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/{callback_id}/layout-updates:
    post:
      tags:
      - Template Converter
      summary: Create a layout update on a template-conversion
      description: 'Updates the layout of a slide and re-renders the affected portion

        of the converted deck. Returns a new `callback_id` to poll.

        '
      operationId: createTemplateConversionLayoutUpdate
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateConverterUpdateLayoutRequest'
      responses:
        '200':
          description: Pipeline accepted; poll the returned `callback_id`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterAsyncProcessingResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/{callback_id}/format-modifications:
    post:
      tags:
      - Template Converter
      summary: Create a format modification on a template-conversion
      description: '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.

        '
      operationId: createTemplateConversionFormatModification
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateConverterModifyFormatRequest'
      responses:
        '200':
          description: Pipeline accepted; poll the returned `callback_id`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterAsyncProcessingResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /api/v1/template-conversions/{callback_id}/format-modifications/settings:
    get:
      tags:
      - Template Converter
      summary: Read available format-modification settings for a template-conversion
      description: 'Returns the available formatting controls (font sizes, weight,

        alignment) that may be applied to title/body text in a converted

        deck.

        '
      operationId: getTemplateConversionFormatModificationSettings
      x-rate-limit-category: template_converter
      parameters:
      - $ref: '#/components/parameters/CallbackIdPath'
      responses:
        '200':
          description: Settings returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateConverterModifyFormatSettingsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: 'Optional client-generated key (a UUID is ideal) that makes a

        write request safe to retry. The first request is processed and

        its response cached for 24 hours; an identical retry with the

        same key returns the cached response plus an

        `Idempotency-Replayed: true` header, so the job is never created

        twice. Reusing a key with a **different** body returns

        `409 IDEMPOTENCY_KEY_REUSED_WITH_DIFFERENT_BODY`.

        '
      schema:
        type: string
        example: 8e6df756-18f6-4f16-8e12-7d7a5c5cb181
    CallbackIdPath:
      name: callback_id
      in: path
      required: true
      description: Server-issued opaque identifier returned by an async kick-off endpoint. Used to poll status or fetch derived artefacts.
      schema:
        type: string
        minLength: 1
  schemas:
    TemplateConverterReviewSuggestionsPatchRequest:
      type: object
      description: Request body for `PATCH /api/v1/template-converter/{callback_id}/review-suggestions`.
      required:
      - suggestions
      properties:
        suggestions:
          type: array
          description: Suggestion patches to apply.
          items:
            type: object
            additionalProperties: true
      additionalProperties: true
    TemplateConverterStartResponse:
      description: Response body for `POST /api/v1/template-converter/start`.
      allOf:
      - $ref: '#/components/schemas/SuccessEnvelope'
      - type: object
        properties:
          data:
            type: object
            required:
            - callback_id
            properties:
          

# --- truncated at 32 KB (61 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/prezent/refs/heads/main/openapi/prezent-template-converter-api-openapi.yml