Dyspatch Drafts API

Drafts represent unpublished versions of templates that are still mutable. There could be many in progress drafts for a template.

Operations 16

GET /drafts List Drafts #
POST /drafts/{draftId}/publishRequest Submit Draft for Approval #
POST /drafts/{draftId}/publish/approve Approve Draft #
POST /drafts/{draftId}/publish/approveAll Approve Draft For All Reviewers #
POST /drafts/{draftId}/publish/reject Reject Draft #
POST /drafts/{draftId}/duplicate Duplicate Draft #
PUT /drafts/{draftId}/lockForTranslation Lock Draft for Translation #
DELETE /drafts/{draftId}/lockForTranslation Unlock Draft for Translation #
GET /drafts/{draftId} Get Draft by ID #
DELETE /drafts/{draftId} Archive Draft #
GET /drafts/{draftId}/localizations Get Localizations on a Draft #
PUT /drafts/{draftId}/localizations/{languageId} Create or Update a Localization #
DELETE /drafts/{draftId}/localizations/{languageId} Remove a Localization from Draft #
GET /drafts/{draftId}/localizations/{languageId}/translations Get Draft Translations for Language #
PUT /drafts/{draftId}/localizations/{languageId}/translations Set Draft Translations for Language #
GET /drafts/{draftId}/localizationKeys Get Draft Localization Keys #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/dyspatch-drafts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

dyspatch-drafts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: '2026.06'
  title: Dyspatch Blocks Drafts API
  description: '# Introduction


    The Dyspatch API is based on the REST paradigm, and features resource based URLs with standard HTTP response

    codes to indicate errors. We use standard HTTP authentication and request verbs, and all responses are JSON formatted.

    See our [Implementation Guide](https://docs.dyspatch.io/development/implementing_dyspatch/) for more details on

    how to implement Dyspatch.


    ## Generating API Clients

    Dyspatch provides OpenAPI specifications for our API which can be used to generate API clients in various programming languages. We recommend using [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator). To download the latest OpenAPI specifications, click the Download button at the top of this page. To download a specific version, view the [changelog](https://docs.dyspatch.io/api/changelog.html) and select the desired version.

    '
  contact:
    name: Dyspatch Support
    url: https://docs.dyspatch.io
    email: support@dyspatch.io
  termsOfService: https://www.dyspatch.io/legal/terms-of-service/
servers:
- url: https://api.dyspatch.io
tags:
- name: Drafts
  description: 'Drafts represent unpublished versions of templates that are still mutable. There could be many in progress drafts for a template.

    '
paths:
  /drafts:
    get:
      operationId: getDrafts
      security:
      - Bearer: []
      summary: List Drafts
      description: Returns all Email drafts for your organization.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/cursor'
      - $ref: '#/components/parameters/status'
      - $ref: '#/components/parameters/draftTemplateFilter'
      - $ref: '#/components/parameters/version'
      responses:
        '200':
          description: Drafts
          headers:
            X-RateLimit-Remaining:
              description: The number of requests left for the time window.
              schema:
                type: integer
          content:
            application/vnd.dyspatch.2026.06+json:
              schema:
                $ref: '#/components/schemas/DraftsRead'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /drafts/{draftId}/publishRequest:
    post:
      operationId: submitDraftForApproval
      security:
      - Bearer: []
      summary: Submit Draft for Approval
      description: Moves the Email draft into submitted state.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/version'
      responses:
        '200':
          description: Successfully submitted
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /drafts/{draftId}/publish/approve:
    post:
      operationId: approveDraft
      security:
      - Bearer: []
      summary: Approve Draft
      description: Approves an Email draft that is in Design or Publish review.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/version'
      requestBody:
        description: Optional Feedback for the approval
        content:
          text/plain:
            schema:
              type: string
        required: false
      responses:
        '200':
          description: Successfully submitted
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /drafts/{draftId}/publish/approveAll:
    post:
      operationId: approveDraftForAll
      security:
      - Bearer: []
      summary: Approve Draft For All Reviewers
      description: Approves an Email draft that is in Design or Publish review for all reviewers.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/version'
      requestBody:
        description: Optional Feedback for the approval
        content:
          text/plain:
            schema:
              type: string
        required: false
      responses:
        '200':
          description: Successfully submitted
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /drafts/{draftId}/publish/reject:
    post:
      operationId: rejectDraft
      security:
      - Bearer: []
      summary: Reject Draft
      description: Rejects an Email draft that is in Design or Publish review.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/version'
      requestBody:
        description: Optional Feedback for the rejection
        content:
          text/plain:
            schema:
              type: string
        required: false
      responses:
        '200':
          description: Successfully submitted
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /drafts/{draftId}/duplicate:
    post:
      operationId: duplicateDraft
      security:
      - Bearer: []
      summary: Duplicate Draft
      description: Creates a copy of an Email draft with a new name.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/version'
      requestBody:
        description: Name for the new draft
        content:
          application/json:
            schema:
              type: object
              required:
              - name
              properties:
                name:
                  type: string
                  description: Name of the new draft
        required: true
      responses:
        '200':
          description: Successfully duplicated draft
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: ID of the newly created draft
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /drafts/{draftId}/lockForTranslation:
    put:
      operationId: lockDraftForTranslation
      security:
      - Bearer: []
      summary: Lock Draft for Translation
      description: Locks an Email draft to prevent edits while translations are being completed.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/version'
      responses:
        '204':
          description: Successfully locked draft for translation
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
    delete:
      operationId: unlockDraftForTranslation
      security:
      - Bearer: []
      summary: Unlock Draft for Translation
      description: Unlocks an Email draft to allow edits after translations are completed.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/version'
      responses:
        '204':
          description: Successfully unlocked draft for translation
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /drafts/{draftId}:
    get:
      operationId: getDraftById
      security:
      - Bearer: []
      summary: Get Draft by ID
      description: Gets a Email draft object with the matching ID. The "compiled" field will contain the template in the default, unlocalized form.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/targetLanguage'
      - $ref: '#/components/parameters/renderThemeId'
      - $ref: '#/components/parameters/version'
      responses:
        '200':
          description: A draft object with the requested ID.
          headers:
            X-RateLimit-Remaining:
              description: The number of requests left for the current time window
              schema:
                type: integer
          content:
            application/vnd.dyspatch.2026.06+json:
              schema:
                $ref: '#/components/schemas/DraftRead'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
    delete:
      operationId: archiveDraft
      security:
      - Bearer: []
      summary: Archive Draft
      description: Archives an Email draft by marking it as deleted.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/version'
      responses:
        '204':
          description: Successfully archived draft
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /drafts/{draftId}/localizations:
    get:
      operationId: getLocalizationForDraft
      security:
      - Bearer: []
      summary: Get Localizations on a Draft
      description: Returns localization metadata for the Email draft
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/version'
      responses:
        '200':
          description: A list of localizations
          headers:
            X-RateLimit-Remaining:
              description: The number of requests left for the current time window
              schema:
                type: integer
          content:
            application/vnd.dyspatch.2026.06+json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LocalizationMetaRead'
        '400':
          $ref: '#/components/responses/InvalidRequest'
  /drafts/{draftId}/localizations/{languageId}:
    put:
      operationId: saveLocalization
      security:
      - Bearer: []
      summary: Create or Update a Localization
      description: Inserts a localization or sets the name on an existing localization that already uses the languageId
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/languageId'
      - $ref: '#/components/parameters/version'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: English (US)
        required: true
      responses:
        '200':
          description: Successful upsert
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
    delete:
      operationId: deleteLocalization
      security:
      - Bearer: []
      summary: Remove a Localization from Draft
      description: Deletes the localization with the given language ID if it exists
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/languageId'
      - $ref: '#/components/parameters/version'
      responses:
        '200':
          description: Successful delete
        '400':
          $ref: '#/components/responses/InvalidRequest'
  /drafts/{draftId}/localizations/{languageId}/translations:
    get:
      operationId: getTranslations
      security:
      - Bearer: []
      summary: Get Draft Translations for Language
      description: Returns the translations for the given language in key/value pairs.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/languageId'
      - $ref: '#/components/parameters/version'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: string
                example:
                  Hello %(name)s: Bonjour %(name)s
                  Welcome: Bienvenue
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: setTranslation
      security:
      - Bearer: []
      summary: Set Draft Translations for Language
      description: Completely replaces any existing translations for the given language with those provided in request body. Variables embedded in keys or values are expected to be in the format `%(my_variable)s` and will automatically convert to the correct Dyspatch format depending on the type of template. Accepts key/value pairs in JSON format or in gettext PO file format. For JSON set `Content-Type` header to `application/json`. For gettext PO format set `Content-Type` header to `text/x-gettext-translation`.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/languageId'
      - $ref: '#/components/parameters/version'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties:
                type: string
              example:
                Hello %(name)s: Bonjour %(name)s
                Welcome: Bienvenue
        required: true
      responses:
        '200':
          description: Successful
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /drafts/{draftId}/localizationKeys:
    get:
      operationId: getDraftLocalizationKeys
      security:
      - Bearer: []
      summary: Get Draft Localization Keys
      description: Returns the list of values that need to be translated for the draft. Set the `Accept` header to `application/vnd.dyspatch.2026.06+json` to get a JSON object, or `text/vnd.dyspatch.2026.06+x-gettext-translation` to get the POT file.
      tags:
      - Drafts
      parameters:
      - $ref: '#/components/parameters/draftId'
      - $ref: '#/components/parameters/version'
      responses:
        '200':
          description: Localization keys
          content:
            application/vnd.dyspatch.2026.06+json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LocalizationKeyRead'
            text/vnd.dyspatch.2026.06+x-gettext-translation:
              schema:
                type: string
                format: binary
        '400':
          $ref: '#/components/responses/InvalidRequest'
components:
  schemas:
    workspaceId:
      type: string
      description: The workspace this object belongs to
      example: fdr_01gb8vd6pz
    LocalizationKeyRead:
      type: object
      description: localization key
      properties:
        key:
          type: string
        comment:
          type: string
    localizationUrl:
      type: string
      example: /localizations/loc_g3L7Cw6Hp5wUaf395LehwK
      description: The API url for a specific localization
    draftId:
      type: string
      description: An opaque, unique identifier for a draft
      example: tdft_g3L7Cw6Hp5wU
    localeGroupId:
      description: the locale group this localization belongs to, if this field is empty the localization does not belong to any locale group
      type: string
      example: lgr_alka38ajla301
    AssignedTagsMetaRead:
      type: object
      description: assigned tags metadata
      properties:
        id:
          $ref: '#/components/schemas/tagId'
        name:
          $ref: '#/components/schemas/tagName'
    templateName:
      type: string
      description: The name of a template
      example: Template Name
    DraftRead:
      type: object
      description: template draft metadata included latest draft revision
      properties:
        id:
          $ref: '#/components/schemas/draftId'
        template:
          $ref: '#/components/schemas/templateId'
        name:
          $ref: '#/components/schemas/draftName'
        url:
          $ref: '#/components/schemas/draftUrl'
        path:
          $ref: '#/components/schemas/path'
        workspaceId:
          $ref: '#/components/schemas/workspaceId'
        compiled:
          $ref: '#/components/schemas/CompiledRead'
        createdAt:
          $ref: '#/components/schemas/createdAt'
        updatedAt:
          $ref: '#/components/schemas/updatedAt'
        localizations:
          type: array
          items:
            $ref: '#/components/schemas/LocalizationMetaRead'
          description: A list of the Template's available localizations
        status:
          $ref: '#/components/schemas/status'
        templateName:
          $ref: '#/components/schemas/templateName'
        designApprovedDate:
          $ref: '#/components/schemas/designApprovedDate'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/AssignedTagsMetaRead'
          description: A list of Tags assigned to the Draft
    createdAt:
      type: string
      format: date-time
      description: The time of initial creation
    DraftsRead:
      type: object
      description: list of draft metadata
      properties:
        cursor:
          $ref: '#/components/schemas/cursor'
        data:
          type: array
          items:
            $ref: '#/components/schemas/DraftMetaRead'
          description: A list of draft metadata objects
    templateId:
      type: string
      description: An opaque, unique identifier for a template
      example: tem_g3L7Cw6Hp5wU
    draftUrl:
      type: string
      example: /drafts/tdft_g3L7Cw6Hp5wUaf395LehwK/dft_g3L7Cw6Hp5wU
      description: The API url for a specific draft
    localizationName:
      type: string
      example: English (US)
      description: The user-specified name of a localization
    tagName:
      type: string
      example: My Tag
      description: The user-specified name of a tag
    DraftMetaRead:
      type: object
      description: draft metadata
      properties:
        id:
          $ref: '#/components/schemas/draftId'
        templateId:
          $ref: '#/components/schemas/templateId'
        name:
          $ref: '#/components/schemas/draftName'
        url:
          $ref: '#/components/schemas/draftUrl'
        path:
          $ref: '#/components/schemas/path'
        workspaceId:
          $ref: '#/components/schemas/workspaceId'
        createdAt:
          $ref: '#/components/schemas/createdAt'
        updatedAt:
          $ref: '#/components/schemas/updatedAt'
        status:
          $ref: '#/components/schemas/status'
        templateName:
          $ref: '#/components/schemas/templateName'
        designApprovedDate:
          $ref: '#/components/schemas/designApprovedDate'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/AssignedTagsMetaRead'
          description: A list of Tags assigned to the Draft
    variables:
      type: array
      items:
        type: string
        example: myVar
      description: 'a list of variables used in the template

        '
    APIError:
      type: object
      description: possible errors from the api
      properties:
        code:
          type: string
          enum:
          - server_error
          - invalid_parameter
          - invalid_body
          - invalid_request
          - unauthorized
          - unauthenticated
          - not_found
          - rate_limited
          - prohibited_action
          description: "Error code:\n  * server_error - Internal server error.\n  * invalid_parameter - Validation error, parameter will contain invalid field and message will contain the reason.\n  * invalid_body - Body could not be parsed, message will contain the reason.\n  * invalid_request - Validation error, the protocol used to make the request was not https.\n  * unauthorized - Credentials were found but permissions were not sufficient.\n  * unauthenticated - Credentials were not found or were not valid.\n  * not_found - The requested resource was not found.\n  * rate_limited - The request was refused because a rate limit was exceeded. There is an account wide rate limit of 3600 requests per-minute, although that is subject to change. The current remaining rate limit can be viewed by checking the X-Ratelimit-Remaining header.\n  * prohibited_action - The request was refused because an action was not valid for the requested resource. Typically this will happen if you try to make changes to a locked resource.\n"
        message:
          type: string
          description: Human readable error message
        parameter:
          type: string
          description: The invalid parameter, if 'code' is invalid_parameter
    localizationId:
      type: string
      description: An opaque, unique identifier for a localization
      example: loc_g3L7Cw6Hp5wUaf395LehwK
    languages:
      type: array
      items:
        type: string
        example: fr-FR
      description: 'a list of locale codes that are available in the localization. See [supported languages](https://docs.dyspatch.io/localization/supported_languages/) for an exhaustive list of locale codes.

        '
    cursor:
      type: object
      description: Information about paginated results
      properties:
        next:
          type: string
          description: A cursor to fetch the next page of results
        hasMore:
          type: boolean
          description: Whether there is a next page of results
    draftName:
      type: string
      description: The name of a draft
      example: Draft Name
    tagId:
      type: string
      example: /An opaque, unique identifier for a tag
      description: tag_01gpe172x7p6aa1c9grr48efq8
    path:
      type: string
      description: The folder path location for this object
      example: fdr_01gb8vd6pz/fdr_01gqjmdbq/fdr_01gqjmg1
    designApprovedDate:
      type: string
      format: date-time
      description: 'If using the design approval workflow this is the date the template draft design was approved, otherwise it will be empty.

        '
    updatedAt:
      type: string
      format: date-time
      description: The time of last update
    CompiledRead:
      type: object
      description: revision data
      properties:
        sender:
          type: string
          example: example@example.com
          description: Sender address
        replyTo:
          type: string
          example: example@example.com
          description: Reply-To address
        subject:
          type: string
          format: byte
          example: PGh0bWw+PC9odG1sPgo=
          description: Base64 encoded template subject line
        html:
          type: string
          format: byte
          example: PGh0bWw+PC9odG1sPgo=
          description: Base64 encoded template HTML body
        ampHtml:
          type: string
          format: byte
          example: PGh0bWwg4pqhNGVtYWlsPjwvaHRtbD4=
          description: Base64 encoded template AMP body
        text:
          type: string
          format: byte
          example: dGV4dCBjb250ZW50
          description: Base64 encoded template text body
        variables:
          $ref: '#/components/schemas/variables'
    status:
      type: string
      example: LOCKED_FOR_TRANSLATION
      enum:
      - IN_PROGRESS
      - PENDING_APPROVAL
      - LOCKED_FOR_TRANSLATION
      - UNKNOWN
      description: 'The status of the current draft:

        - `IN_PROGRESS`: Draft is actively being edited

        - `PENDING_APPROVAL`: Draft is awaiting approval

        - `LOCKED_FOR_TRANSLATION`: Draft is locked pending translation

        - `UNKNOWN`: Status cannot be determined at this time

        '
    LocalizationMetaRead:
      type: object
      description: localization metadata
      properties:
        id:
          $ref: '#/components/schemas/localizationId'
        name:
          $ref: '#/components/schemas/localizationName'
        url:
          $ref: '#/components/schemas/localizationUrl'
        localeGroup:
          $ref: '#/components/schemas/localeGroupId'
        languages:
          $ref: '#/components/schemas/languages'
        updatedAt:
          $ref: '#/components/schemas/updatedAt'
  responses:
    Unauthorized:
      description: Unauthorized
      headers:
        X-RateLimit-Remaining:
          description: The number of requests left for the time window.
          schema:
            type: integer
      content:
        '*/*':
          schema:
            $ref: '#/components/schemas/APIError'
    InternalError:
      description: Server error
      headers:
        X-RateLimit-Remaining:
          description: The number of requests left for the time window.
          schema:
            type: integer
      content:
        '*/*':
          schema:
            $ref: '#/components/schemas/APIError'
    RateLimited:
      description: Rate limit exceeded
      headers:
        X-RateLimit-Remaining:
          description: The number of requests left for the time window.
          schema:
            type: integer
      content:
        '*/*':
          schema:
            $ref: '#/components/schemas/APIError'
    NotFound:
      description: Resource not found
      headers:
        X-RateLimit-Remaining:
          description: The number of requests left for the time window.
          schema:
            type: integer
      content:
        '*/*':
          schema:
            $ref: '#/components/schemas/APIError'
    InvalidRequest:
      description: Invalid request
      headers:
        X-RateLimit-Remaining:
          description: The number of requests left for the time window.
          schema:
            type: integer
      content:
        '*/*':
          schema:
            $ref: '#/components/schemas/APIError'
    Forbidden:
      description: Forbidden
      headers:
        X-RateLimit-Remaining:
          description: The number of requests left for the time window.
          schema:
            type: integer
      content:
        '*/*':
          schema:
            $ref: '#/components/schemas/APIError'
  parameters:
    renderThemeId:
      name: themeId
      in: query
      description: A theme ID to use when rendering
      required: false
      schema:
        type: string
    draftId:
      name: draftId
      in: path
      description: A draft ID
      required: true
      schema:
        type: string
    languageId:
      name: languageId
      in: path
      description: 'A language ID (eg: en-US)'
      required: true
      schema:
        type: string
    draftTemplateFilter:
      name: templateId
      in: query
      description: Filter drafts by template ID
      required: false
      schema:
        type: string
    version:
      in: header
      name: Accept
      required: true
      description: A version of the API that should be used for the request. For example, to use version "2026.06", set the value to "application/vnd.dyspatch.2026.06+json"
      schema:
        type: string
    cursor:
      name: cursor
      in: query
      description: A cursor value used to retrieve a specific page from a paginated result set.
      required: false
      schema:
        type: string
    targetLanguage:
      name: targetLanguage
      in: query
      description: The type of templating language to use when compiling the content.
      required: true
      schema:
        type: string
        enum:
        - html
        - handlebars
        - ampscript
        - freemarker
        - cheetah
        - jinja
        - liquid
        - mandrillhandlebars
        - handlebarsjava
    status:
      name: status
      in: query
      description: Filter the list of drafts by a particular status
      required: false
      schema:
        type: string
        enum:
        - LOCKED_FOR_TRANSLATION
  securitySchemes:
    Bearer:
      type: apiKey
      name: Authorization
      in: header
      description: 'Set Bearer followed by your API key as the Authorization header in your

        API requests.


        ```shell

        Authorization: Bearer EXAMPLEAPIKEYXXXXXXXX12345678

        ```


        Below is an example curl request with an API key in the Authorization header.


        ```shell

        curl --request GET \

        --url https://api.dyspatch.io/templates \

        --header ''Authorization: Bearer EXAMPLEAPIKEYXXXXXXXX12345678'' \

        --header ''Accept: application/vnd.dyspatch.2026.06+json''

        ```

        '
x-tagGroups:
- name: Email
  tags:
  - Templates
  - Drafts
  - Localizations
- name: Platform
  tags:
  - Workspaces
  - Blocks
  - Tags
  - Customer Profiles
  - Themes
- name: Other Communication Channels
  tags:
  - SMS Templates
  - SMS Drafts
  - SMS Localizations
  - Push Templates
  - Push Drafts
  - Push Localizations
  - Live Activity Templates
  - Live Activity Drafts
  - Live Activity Localizations
  - Voice Templates
  - Voice Drafts
  - Voice Localizations