Dyspatch Blocks API

The Blocks API from Dyspatch — 6 operation(s) for blocks.

OpenAPI Specification

dyspatch-blocks-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  version: '2026.06'
  title: Dyspatch Blocks 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: Blocks
paths:
  /blocks:
    get:
      operationId: getBlocks
      security:
      - Bearer: []
      summary: List Blocks
      description: Gets a list of Blocks
      tags:
      - Blocks
      parameters:
      - $ref: '#/components/parameters/version'
      responses:
        '200':
          description: A list of blocks
          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/BlocksRead'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /blocks/{blockId}:
    get:
      operationId: getBlock
      security:
      - Bearer: []
      summary: Get Block by ID
      description: Gets a block with the matching ID.
      tags:
      - Blocks
      parameters:
      - $ref: '#/components/parameters/version'
      - $ref: '#/components/parameters/blockId'
      responses:
        '200':
          description: A block
          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/BlockRead'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /blocks/{blockId}/localizations:
    get:
      operationId: getLocalizationsForBlock
      security:
      - Bearer: []
      summary: Get localizations on a block
      description: Returns localization metadata for the block
      tags:
      - Blocks
      parameters:
      - $ref: '#/components/parameters/blockId'
      - $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'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /blocks/{blockId}/localizationKeys:
    get:
      operationId: getBlockLocalizationKeys
      security:
      - Bearer: []
      summary: Get localization keys
      description: Returns the list of values that need to be translated for the block.
      tags:
      - Blocks
      parameters:
      - $ref: '#/components/parameters/blockId'
      - $ref: '#/components/parameters/version'
      responses:
        '200':
          description: Localization keys
          content:
            application/vnd.dyspatch.2026.06+json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LocalizationKeyRead'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        default:
          $ref: '#/components/responses/InternalError'
  /blocks/{blockId}/localizations/{languageId}:
    put:
      operationId: saveBlockLocalization
      security:
      - Bearer: []
      summary: Create or update a block localization
      description: Inserts a localization or sets the name on an existing localization that already uses the languageId
      tags:
      - Blocks
      parameters:
      - $ref: '#/components/parameters/blockId'
      - $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
    delete:
      operationId: deleteBlockLocalization
      security:
      - Bearer: []
      summary: Remove a localization
      description: Deletes the localization with the given language ID if it exists
      tags:
      - Blocks
      parameters:
      - $ref: '#/components/parameters/blockId'
      - $ref: '#/components/parameters/languageId'
      - $ref: '#/components/parameters/version'
      responses:
        '200':
          description: Successful delete
  /blocks/{blockId}/localizations/{languageId}/translations:
    get:
      operationId: getBlockTranslations
      security:
      - Bearer: []
      summary: Get Block Translations for Language
      description: Returns the translations for the given language in key/value pairs.
      tags:
      - Blocks
      parameters:
      - $ref: '#/components/parameters/blockId'
      - $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: setBlockTranslations
      security:
      - Bearer: []
      summary: Set 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.
      tags:
      - Blocks
      parameters:
      - $ref: '#/components/parameters/blockId'
      - $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
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    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'
    tagId:
      type: string
      example: /An opaque, unique identifier for a tag
      description: tag_01gpe172x7p6aa1c9grr48efq8
    localizationName:
      type: string
      example: English (US)
      description: The user-specified name of a localization
    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.

        '
    localizationUrl:
      type: string
      example: /localizations/loc_g3L7Cw6Hp5wUaf395LehwK
      description: The API url for a specific localization
    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
    BlocksRead:
      type: object
      description: list of blocks
      properties:
        cursor:
          $ref: '#/components/schemas/cursor'
        data:
          type: array
          items:
            $ref: '#/components/schemas/BlockRead'
          description: A list of block objects
    tagName:
      type: string
      example: My Tag
      description: The user-specified name of a tag
    blockName:
      type: string
      example: Header Block
      description: The user-specified name of a block
    blockId:
      type: string
      description: An opaque, unique identifier for a block
      example: blk_01gpe172x7p6aa1c9grr48efq8
    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
    AssignedTagsMetaRead:
      type: object
      description: assigned tags metadata
      properties:
        id:
          $ref: '#/components/schemas/tagId'
        name:
          $ref: '#/components/schemas/tagName'
    blockUrl:
      type: string
      example: /blocks/blk_01gpe172x7p6aa1c9grr48efq8
      description: The API url for a specific block
    LocalizationKeyRead:
      type: object
      description: localization key
      properties:
        key:
          type: string
        comment:
          type: string
    localizationId:
      type: string
      description: An opaque, unique identifier for a localization
      example: loc_g3L7Cw6Hp5wUaf395LehwK
    BlockRead:
      type: object
      description: block data
      properties:
        id:
          $ref: '#/components/schemas/blockId'
        name:
          $ref: '#/components/schemas/blockName'
        description:
          $ref: '#/components/schemas/blockDescription'
        createdAt:
          $ref: '#/components/schemas/createdAt'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/AssignedTagsMetaRead'
        updatedAt:
          $ref: '#/components/schemas/updatedAt'
        url:
          $ref: '#/components/schemas/blockUrl'
    updatedAt:
      type: string
      format: date-time
      description: The time of last update
    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
    createdAt:
      type: string
      format: date-time
      description: The time of initial creation
    blockDescription:
      type: string
      description: The user-specified description of a block
  responses:
    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'
    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'
    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'
    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'
  parameters:
    languageId:
      name: languageId
      in: path
      description: 'A language ID (eg: en-US)'
      required: true
      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
    blockId:
      name: blockId
      in: path
      description: A block ID
      required: true
      schema:
        type: string
  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