> ## Documentation Index
> Fetch the complete documentation index at: https://docs.visitoai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a WhatsApp template for Meta review

> Requires `whatsapp_templates:write`.



## OpenAPI

````yaml /openapi.json post /whatsapp-templates/{channelId}
openapi: 3.0.3
info:
  title: Visito M2M API
  version: 1.0.0
  description: >-
    Tenant-scoped server-to-server API for channels, conversations, commerce,
    custom AI tools, and WhatsApp templates. Send operations are asynchronous
    and return queued acknowledgements. Expansion adds conversation controls,
    knowledge, sales opportunities, delivery status, reporting, and signed
    webhooks.
servers:
  - url: https://platform-api.visitoai.com/m2m/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Channels
  - name: Conversations
  - name: Commerce
  - name: Custom tools
  - name: WhatsApp templates
  - name: Properties
  - name: Knowledge
  - name: Sales CRM
  - name: Delivery
  - name: Reporting
  - name: Webhooks
paths:
  /whatsapp-templates/{channelId}:
    post:
      tags:
        - WhatsApp templates
      summary: Create a WhatsApp template for Meta review
      description: Requires `whatsapp_templates:write`.
      operationId: createWhatsappTemplate
      parameters:
        - $ref: '#/components/parameters/ChannelId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WhatsappTemplateCreateRequest'
      responses:
        '201':
          description: Template submitted to Meta
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsappTemplateResponse'
        default:
          $ref: '#/components/responses/Error'
components:
  parameters:
    ChannelId:
      name: channelId
      in: path
      required: true
      schema:
        type: string
  schemas:
    WhatsappTemplateCreateRequest:
      type: object
      required:
        - template
      properties:
        template:
          type: object
          required:
            - name
            - language
            - category
            - components
          properties:
            name:
              type: string
              pattern: ^[a-z0-9_]+$
            language:
              type: string
            category:
              type: string
              enum:
                - UTILITY
                - MARKETING
                - AUTHENTICATION
            components:
              type: array
              minItems: 1
              items:
                type: object
                additionalProperties: true
      additionalProperties: false
    WhatsappTemplateResponse:
      type: object
      required:
        - template
      properties:
        template:
          $ref: '#/components/schemas/WhatsappTemplate'
    WhatsappTemplate:
      type: object
      required:
        - name
        - status
      properties:
        id:
          type: string
        name:
          type: string
        status:
          type: string
        language:
          type: string
        category:
          type: string
          enum:
            - UTILITY
            - MARKETING
            - AUTHENTICATION
        components:
          type: array
          items:
            type: object
            additionalProperties: true
      additionalProperties: true
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              example: M2M_AUTH_INSUFFICIENT_SCOPE
            message:
              type: string
            details:
              type: object
              additionalProperties: true
      example:
        error:
          code: M2M_AUTH_INSUFFICIENT_SCOPE
          message: M2M credential does not have required scope.
          details:
            requiredScopes:
              - conversations:write
            missingScopes:
              - conversations:write
  responses:
    Error:
      description: Structured error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Visito M2M API key
      description: Server-side tenant-scoped credential created from Build > API Keys.

````