SignalWire WhatsApp Templates API

Create and manage the Meta-approved templates required to start WhatsApp conversations.

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/signalwire-whatsapp-templates-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

signalwire-whatsapp-templates-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: SignalWire REST WhatsApp Templates API
  version: 1.0.0
  contact:
    name: SignalWire
    url: https://support.signalwire.com/portal/en/newticket?departmentId=1029313000000006907&layoutId=1029313000000074011
    email: support@signalwire.com
  license:
    name: MIT
    url: https://github.com/signalwire/docs/blob/main/LICENSE
  termsOfService: https://signalwire.com/legal/signalwire-cloud-agreement
  description: Create and manage the Meta-approved templates required to start WhatsApp conversations.
servers:
- url: https://{space_name}.signalwire.com
  description: SignalWire API
  variables:
    space_name:
      default: '{Your_Space_Name}'
      description: Your SignalWire Space name
security:
- SignalWireBasicAuth: []
tags:
- name: WhatsApp Templates
  description: Create and manage the Meta-approved templates required to start WhatsApp conversations.
  externalDocs:
    url: https://signalwire.com/docs/apis
    description: Developer documentation on Message API endpoints
paths:
  /api/messaging/whatsapp/templates:
    get:
      operationId: list_whatsapp_templates
      summary: List message templates
      description: 'Returns the message templates for your Space, optionally filtered by WhatsApp Business Account or approval status. A template must have `template_status` of `approved` before it can be used to send messages.


        #### Permissions


        The API token used to authenticate must have the following scope(s) enabled to make a successful request: _Numbers_.


        [Learn more about API scopes](/docs/platform/your-signalwire-api-space).'
      parameters:
      - $ref: '#/components/parameters/ListWhatsAppTemplatesQuery.whatsapp_business_id'
      - $ref: '#/components/parameters/ListWhatsAppTemplatesQuery.status'
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsAppTemplateListResponse'
        '400':
          description: The request is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode400'
        '401':
          description: Access is unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode401'
        '500':
          description: An internal server error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode500'
      tags:
      - WhatsApp Templates
    post:
      operationId: create_whatsapp_template
      summary: Create a message template
      description: 'Creates a message template and submits it to Meta for review. Approval typically takes from a few minutes to a few hours; poll the template''s `template_status` until it becomes `approved`.


        #### Permissions


        The API token used to authenticate must have the following scope(s) enabled to make a successful request: _Numbers_.


        [Learn more about API scopes](/docs/platform/your-signalwire-api-space).'
      parameters: []
      responses:
        '201':
          description: Response returned when a template is successfully created and submitted to Meta.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsAppTemplate'
        '400':
          description: The request is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode400'
        '401':
          description: Access is unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode401'
        '422':
          description: The request contains invalid parameters. See errors for details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode422'
        '500':
          description: An internal server error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode500'
      tags:
      - WhatsApp Templates
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWhatsAppTemplateRequest'
  /api/messaging/whatsapp/templates/{id}:
    get:
      operationId: retrieve_whatsapp_template
      summary: Get a message template
      description: 'Retrieves a single message template by SignalWire ID or Meta template ID.


        #### Permissions


        The API token used to authenticate must have the following scope(s) enabled to make a successful request: _Numbers_.


        [Learn more about API scopes](/docs/platform/your-signalwire-api-space).'
      parameters:
      - $ref: '#/components/parameters/WhatsAppTemplatePathID'
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsAppTemplateResponse'
        '401':
          description: Access is unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode401'
        '404':
          description: The server cannot find the requested resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode404'
        '500':
          description: An internal server error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode500'
      tags:
      - WhatsApp Templates
    patch:
      operationId: update_whatsapp_template
      summary: Update a message template
      description: 'Updates a template''s `category` or `components`. A template can only be updated while it is **not yet approved** — once approved, delete and recreate it to make changes.


        #### Permissions


        The API token used to authenticate must have the following scope(s) enabled to make a successful request: _Numbers_.


        [Learn more about API scopes](/docs/platform/your-signalwire-api-space).'
      parameters:
      - $ref: '#/components/parameters/WhatsAppTemplatePathID'
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsAppTemplateResponse'
        '400':
          description: The request is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode400'
        '401':
          description: Access is unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode401'
        '404':
          description: The server cannot find the requested resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode404'
        '422':
          description: The request contains invalid parameters. See errors for details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode422'
        '500':
          description: An internal server error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode500'
      tags:
      - WhatsApp Templates
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateWhatsAppTemplateRequest'
    delete:
      operationId: delete_whatsapp_template
      summary: Delete a message template
      description: 'Deletes a message template.


        #### Permissions


        The API token used to authenticate must have the following scope(s) enabled to make a successful request: _Numbers_.


        [Learn more about API scopes](/docs/platform/your-signalwire-api-space).'
      parameters:
      - $ref: '#/components/parameters/WhatsAppTemplatePathID'
      responses:
        '200':
          description: Response returned when a template has been deleted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsAppTemplateDeleteResponse'
        '401':
          description: Access is unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode401'
        '404':
          description: The server cannot find the requested resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode404'
        '500':
          description: An internal server error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode500'
      tags:
      - WhatsApp Templates
components:
  schemas:
    WhatsAppTemplateCategory:
      type: string
      enum:
      - utility
      - marketing
      - authentication
      description: The category of a WhatsApp message template.
    WhatsAppTemplateResponse:
      type: object
      required:
      - id
      - name
      - category
      - components
      - language
      - parameter_format
      - template_id
      - template_status
      - whatsapp_business_id
      - created_at
      - updated_at
      properties:
        id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: The SignalWire identifier of the template.
          examples:
          - 3fa85f64-5717-4562-b3fc-2c963f66afa6
        name:
          type: string
          description: The template name. Lowercase letters, numbers, and underscores only.
          examples:
          - order_update
        category:
          allOf:
          - $ref: '#/components/schemas/WhatsAppTemplateCategory'
          description: The template category.
          examples:
          - utility
        components:
          type: array
          items:
            $ref: '#/components/schemas/WhatsAppTemplateComponent'
          description: The template's components (header, body, footer, buttons).
        language:
          type: string
          description: The template language code.
          examples:
          - en_US
        parameter_format:
          allOf:
          - $ref: '#/components/schemas/WhatsAppTemplateParameterFormat'
          description: How the template's variable placeholders are referenced.
          examples:
          - positional
        template_id:
          type: string
          description: Meta's identifier for the template.
          examples:
          - '1164792772433648'
        template_status:
          allOf:
          - $ref: '#/components/schemas/WhatsAppTemplateStatus'
          description: The Meta approval status of the template.
          examples:
          - approved
        whatsapp_business_id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: The SignalWire identifier of the WhatsApp Business Account the template belongs to.
          examples:
          - 3fa85f64-5717-4562-b3fc-2c963f66afa6
        created_at:
          type: string
          description: The date and time when the template was created.
          examples:
          - '2024-01-15T10:30:00Z'
        updated_at:
          type: string
          description: The date and time when the template was last updated.
          examples:
          - '2024-01-15T10:30:00Z'
        discarded_at:
          type: string
          description: The date and time when the template was discarded, if applicable.
          examples:
          - '2024-01-15T10:30:00Z'
      unevaluatedProperties:
        not: {}
      description: Response containing a single message template.
    Types.StatusCodes.StatusCode401:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Unauthorized
      unevaluatedProperties:
        not: {}
      description: Access is unauthorized.
    WhatsAppTemplateParameterFormat:
      type: string
      enum:
      - named
      - positional
      description: How a template's variable placeholders are referenced.
    WhatsAppTemplateComponent:
      type: object
      required:
      - type
      properties:
        type:
          type: string
          description: 'The component type: `HEADER`, `BODY`, `FOOTER`, or `BUTTONS`.'
          examples:
          - BODY
      unevaluatedProperties: {}
      description: A template component. The `type` is one of `HEADER`, `BODY`, `FOOTER`, or `BUTTONS`. Additional fields depend on the component type — for example, a `BODY` carries `text`, while `BUTTONS` carries a `buttons` array. See the create example for the full shape.
    WhatsAppTemplateListResponse:
      type: object
      required:
      - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/WhatsAppTemplate'
          description: List of message templates.
      unevaluatedProperties:
        not: {}
      description: Response containing a list of message templates.
    Types.StatusCodes.StatusCode400:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Bad Request
      unevaluatedProperties:
        not: {}
      description: The request is invalid.
    UpdateWhatsAppTemplateRequest:
      type: object
      properties:
        category:
          allOf:
          - $ref: '#/components/schemas/WhatsAppTemplateCategory'
          description: The updated template category. Required if `components` is omitted.
          examples:
          - marketing
        components:
          type: array
          items:
            $ref: '#/components/schemas/WhatsAppTemplateComponent'
          description: The updated components. Required if `category` is omitted.
      unevaluatedProperties:
        not: {}
      description: Request body for updating a template. Provide `category`, `components`, or both. A template can only be updated while it is not yet approved.
    WhatsAppTemplateStatus:
      type: string
      enum:
      - approved
      - archived
      - deleted
      - disabled
      - flagged
      - in_appeal
      - limit_exceeded
      - locked
      - paused
      - pending
      - reinstated
      - pending_deletion
      - rejected
      description: The Meta approval status of a template. A template must be `approved` before it can be used to send messages.
    uuid:
      type: string
      format: uuid
      description: Universal Unique Identifier.
    Types.StatusCodes.StatusCode404:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Not Found
      unevaluatedProperties:
        not: {}
      description: The server cannot find the requested resource.
    WhatsAppTemplate:
      type: object
      required:
      - id
      - name
      - category
      - components
      - language
      - parameter_format
      - template_id
      - template_status
      - whatsapp_business_id
      - created_at
      - updated_at
      properties:
        id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: The SignalWire identifier of the template.
          examples:
          - 3fa85f64-5717-4562-b3fc-2c963f66afa6
        name:
          type: string
          description: The template name. Lowercase letters, numbers, and underscores only.
          examples:
          - order_update
        category:
          allOf:
          - $ref: '#/components/schemas/WhatsAppTemplateCategory'
          description: The template category.
          examples:
          - utility
        components:
          type: array
          items:
            $ref: '#/components/schemas/WhatsAppTemplateComponent'
          description: The template's components (header, body, footer, buttons).
        language:
          type: string
          description: The template language code.
          examples:
          - en_US
        parameter_format:
          allOf:
          - $ref: '#/components/schemas/WhatsAppTemplateParameterFormat'
          description: How the template's variable placeholders are referenced.
          examples:
          - positional
        template_id:
          type: string
          description: Meta's identifier for the template.
          examples:
          - '1164792772433648'
        template_status:
          allOf:
          - $ref: '#/components/schemas/WhatsAppTemplateStatus'
          description: The Meta approval status of the template.
          examples:
          - approved
        whatsapp_business_id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: The SignalWire identifier of the WhatsApp Business Account the template belongs to.
          examples:
          - 3fa85f64-5717-4562-b3fc-2c963f66afa6
        created_at:
          type: string
          description: The date and time when the template was created.
          examples:
          - '2024-01-15T10:30:00Z'
        updated_at:
          type: string
          description: The date and time when the template was last updated.
          examples:
          - '2024-01-15T10:30:00Z'
        discarded_at:
          type: string
          description: The date and time when the template was discarded, if applicable.
          examples:
          - '2024-01-15T10:30:00Z'
      unevaluatedProperties:
        not: {}
      description: A WhatsApp message template.
    Types.StatusCodes.StatusCode500:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          enum:
          - Internal Server Error
      unevaluatedProperties:
        not: {}
      description: An internal server error occurred.
    Types.StatusCodes.StatusCode422:
      type: object
      required:
      - errors
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Types.StatusCodes.RestApiErrorItem'
          description: List of validation errors.
      unevaluatedProperties:
        not: {}
      description: The request contains invalid parameters. See errors for details.
    CreateWhatsAppTemplateRequest:
      type: object
      required:
      - whatsapp_business_id
      - name
      - language
      - category
      - parameter_format
      - components
      properties:
        whatsapp_business_id:
          allOf:
          - $ref: '#/components/schemas/uuid'
          description: The WhatsApp Business Account the template belongs to. List your accounts at `GET /api/messaging/whatsapp/businesses`.
          examples:
          - 3fa85f64-5717-4562-b3fc-2c963f66afa6
        name:
          type: string
          maxLength: 512
          pattern: ^[a-z0-9_]*$
          description: The template name. Maximum 512 characters; lowercase letters, numbers, and underscores only.
          examples:
          - order_update
        language:
          type: string
          description: The template language code.
          examples:
          - en_US
        category:
          allOf:
          - $ref: '#/components/schemas/WhatsAppTemplateCategory'
          description: The template category.
          examples:
          - utility
        parameter_format:
          allOf:
          - $ref: '#/components/schemas/WhatsAppTemplateParameterFormat'
          description: How the template's variable placeholders are referenced.
          examples:
          - positional
        components:
          type: array
          items:
            $ref: '#/components/schemas/WhatsAppTemplateComponent'
          description: The template's components. Must include a `BODY` component. Each component is an object whose fields depend on its `type` — see the request example.
          examples:
          - - type: HEADER
              format: TEXT
              text: Order Update for {{1}}
              example:
                header_text:
                - Jane Smith
            - type: BODY
              text: Your order {{1}} is currently {{2}}.
              example:
                body_text:
                - - ORD-9821
                  - out for delivery
            - type: FOOTER
              text: Thank you for shopping with us.
            - type: BUTTONS
              buttons:
              - type: QUICK_REPLY
                text: Track Order
              - type: URL
                text: Contact Support
                url: https://example.com/support
      unevaluatedProperties:
        not: {}
      description: Request body for creating a message template.
    Types.StatusCodes.RestApiErrorItem:
      type: object
      required:
      - type
      - code
      - message
      - url
      properties:
        type:
          type: string
          description: The category of error.
          examples:
          - validation_error
        code:
          type: string
          description: A specific error code.
          examples:
          - invalid_parameter
        message:
          type: string
          description: A description of what caused the error.
          examples:
          - Name must be present
        attribute:
          anyOf:
          - type: string
          - type: 'null'
          description: The request parameter that caused the error, if applicable.
          examples:
          - name
        url:
          type: string
          description: A link to documentation about this error.
          examples:
          - https://signalwire.com/docs/apis/error-codes
      unevaluatedProperties:
        not: {}
      description: Details about a specific error.
    WhatsAppTemplateDeleteResponse:
      type: object
      required:
      - success
      - errors
      properties:
        success:
          type: boolean
          description: Whether the template was deleted successfully at Meta.
        errors:
          description: Empty array when the deletion succeeds; otherwise the error details returned by Meta.
      unevaluatedProperties:
        not: {}
      description: Response returned when a template has been deleted.
  parameters:
    ListWhatsAppTemplatesQuery.whatsapp_business_id:
      name: whatsapp_business_id
      in: query
      required: false
      description: Filter to templates belonging to a specific WhatsApp Business Account.
      schema:
        $ref: '#/components/schemas/uuid'
      explode: false
    ListWhatsAppTemplatesQuery.status:
      name: status
      in: query
      required: false
      description: Filter by approval status.
      schema:
        $ref: '#/components/schemas/WhatsAppTemplateStatus'
      explode: false
    WhatsAppTemplatePathID:
      name: id
      in: path
      required: true
      description: The template ID — either the SignalWire ID (a UUID) or the Meta template ID (a numeric string). Both are accepted.
      schema:
        type: string
  securitySchemes:
    SignalWireBasicAuth:
      type: http
      scheme: Basic
      description: 'SignalWire Basic Authentication using Project ID and API Token.


        The client sends HTTP requests with the Authorization header containing

        the word Basic followed by a space and a base64-encoded string of project_id:token.

        The project ID will be used as the username and the API token as the password.


        Example:

        ```

        Authorization: Basic base64(project_id:token)

        ```'
      x-fern-basic:
        username:
          name: project_id
          env: SIGNALWIRE_PROJECT_ID
        password:
          name: api_token
          env: SIGNALWIRE_API_TOKEN
    SignalWireBearerAuth:
      type: http
      scheme: Bearer
      description: 'SignalWire Bearer Token Authentication for subscriber endpoints.

        The client sends HTTP requests with the Authorization header containing

        the word Bearer followed by a space and the subscriber token.


        Example:

        ```

        Authorization: Bearer <subscriber_token>

        ```'