---
title: "Crear una plantilla de WhatsApp en la cuenta (WABA) del canal — queda disponible para TODOS los números de esa cuenta"
method: POST
path: "/channels/{channelId}/templates"
tags: ["Channels"]
---

# Crear una plantilla de WhatsApp en la cuenta (WABA) del canal — queda disponible para TODOS los números de esa cuenta

`POST /channels/{channelId}/templates`

## Request

- Base URL: `https://api.met.meteor.com.co/api/v1`
- URL: `https://api.met.meteor.com.co/api/v1/channels/{channelId}/templates`
- Auth: one of:
  - `bearer` (a scheme the document does not define)
  - HTTP bearer

Crea la plantilla en Meta y la deja **en revisión**: hasta que Meta la apruebe, `POST /channels/{channelId}/whatsapp/send-template` la rechaza. El estado se consulta con `GET /channels/{channelId}/templates?status=all`.

**Una plantilla pertenece a la cuenta de WhatsApp (WABA), no al número.** Queda disponible para todos los números de esa cuenta y para ninguno de las otras. Si el workspace tiene varias cuentas conectadas, `waba_id` elige en cuál crearla; omitirlo la crea en la primaria, que puede no ser la del número desde el que piensas enviar.

**Crear plantillas no es gratis para el cliente**: una rechazada le baja la calificación de calidad a su cuenta de WhatsApp, y una WABA sin portafolio de negocio verificado solo admite 250 plantillas en total. Por eso hay un tope de creación por workspace y por hora; al superarlo la respuesta es `429` con código `rate_limited`, y la salida no es reintentar en bucle sino revisar lo que ya se creó.

## Path parameters

- `channelId` string, required

## Request body

- CreateTemplateDto
  - `category` string, required: Categoría de Meta: `UTILITY`, `MARKETING` o `AUTHENTICATION`. Elegir mal la categoría es de las causas más comunes de rechazo, y **un rechazo le baja la calificación de calidad a la cuenta de WhatsApp del cliente**, no a quien la creó.
  - `components` object[], required: Los bloques de la plantilla, con la forma que define Meta (`HEADER`, `BODY`, `FOOTER`, `BUTTONS`). La forma más segura de armarlos es copiar los `components` de una plantilla que ya existe, que devuelve `GET /channels/{channelId}/templates`. **Encabezado con imagen, video o documento**: Meta exige una muestra subida a sus servidores. No hay que subirla aparte — basta con mandar la URL pública del archivo en `sample_url` dentro del componente `HEADER`, y el backend la descarga y la convierte en el `header_handle` que Meta pide.
  - `language` string, required: Código de idioma de Meta (`es`, `es_CO`, `en_US`).
  - `name` string, required: Nombre de la plantilla. Es el identificador con el que después se envía (`POST /channels/{channelId}/whatsapp/send-template`), así que **no se puede cambiar**: para renombrarla hay que crear otra y pasar de nuevo por revisión. Meta lo quiere en minúsculas, sin espacios y con `_` como separador.
  - `waba_id` string: En qué **cuenta de WhatsApp (WABA)** crearla. Omitido = la cuenta primaria del workspace. Una plantilla NO pertenece a un número: pertenece a la cuenta. Creada aquí, queda disponible para **todos los números de esa cuenta** — y para ninguno de las otras. Un workspace puede tener varias cuentas conectadas, así que si el número desde el que piensas enviar cuelga de otra WABA, la plantilla no va a existir para él por más que el canal sea el mismo. Los `waba_id` conectados, con su alias, salen en `GET /channels/{channelId}/templates` (campos `waba_id` y `waba_alias`).

## Response `201`

- object: Sobre en el que viaja toda respuesta correcta de la API. El recurso está en `data`. Los SDKs oficiales lo desenvuelven por ti; un cliente hecho a mano tiene que leer `.data`.
  - `success` true, required: Siempre `true` en una respuesta 2xx.
  - `data` CreateTemplateResponseDto, required
    - `id` string: Id de la plantilla en Meta. Es el mismo `id` que devuelve `GET /channels/{channelId}/templates`.
    - `status` string, required: `ok`. Un fallo no llega aquí: sale como error del contrato.
    - `template_status` string: Estado de revisión con el que Meta la recibió — casi siempre `PENDING`. **Crear no es poder enviar.** Hasta que Meta la apruebe, `POST /channels/{channelId}/whatsapp/send-template` la rechaza. La revisión tarda, y el resultado no llega por esta respuesta: se consulta con `GET /channels/{channelId}/templates?status=all`.

## Other responses

- `400`: La request no es válida: un campo no pasa validación, falta un parámetro requerido o el recurso no admite la transición solicitada.
- `401`: API key ausente, inválida, revocada o expirada — o el workspace está bloqueado.
- `403`: La key está autenticada pero no puede ejecutar esta operación: scope faltante, capacidad deshabilitada, modo test restringido o recurso fuera de su cartera.
- `404`: El recurso no existe o no está disponible dentro del alcance de la key. No revela la existencia de recursos de otros tenants.
- `409`: La operación entra en conflicto con el estado actual o con un Idempotency-Key en uso. No reintentes con el mismo key y un body distinto.
- `429`: Se superó el límite por minuto de la key o la cuota del plan. Respeta `Retry-After`; el SDK ya reintenta solo.
- `500`: Error del servidor o del Met que ejecutaba. El SDK reintenta los 5xx con backoff.

---

[API](https://skmtc.dev/meteor/apis/met-public-api.md) · [All operations](https://skmtc.dev/meteor/apis/met-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meteor/apis/met-public-api/revisions/5d9ca294295c?raw)
