> ## Documentation Index
> Fetch the complete documentation index at: https://developer.omni.z-api.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Crear plantilla

> Crea una plantilla nueva y envíala a la aprobación de Meta

## Conceptos

<Warning>
  Este endpoint está limitado por **WABA**, así que hoy cubre solo **WhatsApp Oficial**.

  Instagram y Messenger también tienen plantilla preaprobada: la **Utility Template**, con alcance de página. La compatibilidad con ellos en Omni Z-API está **en implementación**. Consulta la [comparación de los tres tipos de plantilla](/es/templates/introduction).
</Warning>

Crea una plantilla de mensaje nueva y la envía a la aprobación de Meta. La plantilla arranca con el estado `PENDING` y pasa a `APPROVED` o `REJECTED` tras la revisión.

Usa el endpoint [Sincronizar plantillas](/es/templates/sync-templates) para forzar la actualización del estado.

<Warning>
  El nombre de la plantilla debe estar en `snake_case`, sin espacios ni caracteres especiales. Una vez creada, el nombre no se puede cambiar.
</Warning>

<Note>
  El `wabaId` se obtiene a través del endpoint [Listar WABAs](/es/templates/list-businesses).
</Note>


## OpenAPI

````yaml es/templates/openapi.json POST /whatsapp/businesses/{wabaId}/templates
openapi: 3.1.0
info:
  title: Omni Z-API - API de plantillas
  description: API para gestionar las plantillas de mensaje de WhatsApp Business
  version: 1.0.0
servers:
  - url: https://api.omni.z-api.io
security:
  - bearerAuth: []
paths:
  /whatsapp/businesses/{wabaId}/templates:
    post:
      tags:
        - Plantillas
      summary: Crear plantilla
      description: Crea una plantilla de mensaje nueva y la envía a la aprobación de Meta.
      operationId: createTemplate
      parameters:
        - name: wabaId
          in: path
          required: true
          description: ID de la WABA (obtenido con Listar WABAs)
          schema:
            type: string
            example: '428083093730937'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTemplateRequest'
            examples:
              utility:
                summary: Utility - Actualización de pedido
                value:
                  name: actualizacion_pedido_v1
                  category: UTILITY
                  language: es_ES
                  components:
                    - type: BODY
                      text: >-
                        Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.
                        ¡Hasta pronto!
                      example:
                        body_text:
                          - - Ana
                            - PED-1024
                            - em transporte
              marketing:
                summary: Marketing - Campaña de descuento
                value:
                  name: campana_descuento_v1
                  category: MARKETING
                  language: es_ES
                  components:
                    - type: BODY
                      text: >-
                        Aprovecha un {{1}} de descuento en el plan {{2}} hasta
                        el {{3}}.
                      example:
                        body_text:
                          - - 20%
                            - Premium
                            - 30/04
                    - type: BUTTONS
                      buttons:
                        - type: URL
                          text: Ver oferta
                          url: https://sitio.ejemplo.com/oferta
              authentication:
                summary: Authentication - Código OTP
                value:
                  name: otp_login_v1
                  category: AUTHENTICATION
                  language: es_ES
                  components:
                    - type: BODY
                      text: >-
                        Tu código de verificación es *{{1}}*. Por tu seguridad,
                        no lo compartas.
                      add_security_recommendation: true
                      example:
                        body_text:
                          - - '123456'
                    - type: BUTTONS
                      buttons:
                        - type: URL
                          text: Copiar código
                          url: >-
                            https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code=otp{{1}}
                          example:
                            - >-
                              https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code=otp123456
      responses:
        '200':
          description: Plantilla creada y enviada a aprobación
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateTemplateResponse'
              example:
                id: '1613165359891625'
                status: PENDING
                category: UTILITY
        '400':
          $ref: '#/components/responses/MetaError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
components:
  schemas:
    CreateTemplateRequest:
      type: object
      required:
        - name
        - category
        - language
        - components
      properties:
        name:
          type: string
          description: Nombre de la plantilla (snake_case, sin espacios)
        category:
          type: string
          description: Categoría de la plantilla
          enum:
            - UTILITY
            - MARKETING
            - AUTHENTICATION
        language:
          type: string
          description: 'Idioma de la plantilla (p. ej.: es_ES, en_US)'
        components:
          type: array
          description: Componentes de la plantilla (HEADER, BODY, FOOTER, BUTTONS)
          items:
            type: object
    CreateTemplateResponse:
      type: object
      properties:
        id:
          type: string
          description: ID de la plantilla creada
        status:
          type: string
          description: Estado inicial (normalmente PENDING)
          enum:
            - PENDING
            - APPROVED
            - REJECTED
        category:
          type: string
          description: Categoría de la plantilla creada
          enum:
            - UTILITY
            - MARKETING
            - AUTHENTICATION
    MetaError:
      type: object
      properties:
        error:
          type: string
          description: Descripción general del error
        value:
          type: object
          properties:
            errors:
              type: array
              items:
                type: object
                properties:
                  description:
                    type: string
                  name:
                    type: string
                    description: 'Tipo de error (p. ej.: META_WHATSAPP_ERROR)'
                  message:
                    type: string
                    description: Mensaje de error de Meta
                  code:
                    type: string
                    description: Código de error de Meta
    Error:
      type: object
      properties:
        error:
          type: integer
          description: Código del error
        message:
          type: string
          description: Descripción del error
    UnprocessableEntity:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
              name:
                type: string
              subCode:
                type: string
              message:
                type: string
              description:
                type: string
  responses:
    MetaError:
      description: Error devuelto por Meta al procesar la petición.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/MetaError'
          example:
            error: Newport request failed
            value:
              errors:
                - description: ''
                  name: META_WHATSAPP_ERROR
                  message: >-
                    Tu mensaje no se puede enviar porque incluye contenido que
                    otras personas en Facebook denunciaron como abusivo.
                  code: '368'
    Unauthorized:
      description: Token no válido o ausente.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: 401
            message: Unauthorized
    UnprocessableEntity:
      description: La petición no se pudo procesar debido a un error de validación.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UnprocessableEntity'
          example:
            error:
              errors:
                - code: '100'
                  name: META_WHATSAPP_ERROR
                  subCode: '2388024'
                  message: Invalid parameter
                  description: >-
                    There is already Portuguese (BR) content for this template.
                    You can create a new template and try again.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Secret Key generada en el panel de Seguridad de Omni Z-API

````