Las plantillas son mensajes con formato preaprobado por Meta. Son la única forma de escribirle primero a un cliente o de retomar un chat frío (ver la ventana de 24 horas).
Se crean en el panel, no por API
Listar plantillas
/templatesscope: templates:readAPPROVED.Parámetros de consulta
| Campo | Tipo | Descripción |
|---|---|---|
status | string | APPROVED (por defecto), PENDING, REJECTED, PAUSED, DISABLED o all. |
category | string | MARKETING, UTILITY o AUTHENTICATION. |
limit | number | 1 a 100. Por defecto 20. |
cursor | string | Paginación por cursor. |
curl "https://www.flujoschat.foo/api/public/v1/templates?category=UTILITY" \
-H "Authorization: Bearer fjc_live_..."{
"success": true,
"data": {
"templates": [
{
"id": "b7f1c3e0-…",
"name": "pedido_enviado",
"displayName": "Pedido enviado",
"category": "UTILITY",
"language": "es",
"status": "APPROVED",
"headerType": null,
"headerContent": null,
"body": "Hola {{1}}, tu pedido #{{2}} salió y llega {{3}}.",
"footer": "Gracias por tu compra",
"buttons": null,
"variableMapping": {
"1": { "type": "system", "systemKey": "customerName" },
"2": { "type": "manual", "fieldName": "pedido" },
"3": { "type": "manual", "fieldName": "entrega" }
},
"createdAt": "2026-07-01T10:00:00.000Z",
"updatedAt": "2026-07-02T12:00:00.000Z"
}
],
"nextCursor": null
}
}Cómo funcionan las variables
El body tiene marcadores {{1}}, {{2}}… y variableMapping dice de dónde sale cada uno:
type: "system"— lo resuelve FlujosChat (por ejemplo el nombre del cliente). No hace falta mandarlo.type: "field"— sale de un campo personalizado del contacto. También se resuelve solo, si el cliente lo tiene cargado.type: "manual"— lo pone tu sistema, en el objetovariablesdel envío.
Para la plantilla del ejemplo, alcanza con mandar las dos manuales:
curl -X POST https://www.flujoschat.foo/api/public/v1/messages \
-H "Authorization: Bearer fjc_live_..." \
-H "Content-Type: application/json" \
-d '{
"to": "+51987654321",
"type": "template",
"templateId": "b7f1c3e0-…",
"variables": { "2": "4512", "3": "mañana entre 9 y 12" }
}'Si mandás una posición que el mapping ya resolvía, gana tu valor.
Detalle
/templates/{id}scope: templates:read404 TEMPLATE_NOT_FOUND.Preguntas frecuentes
¿Cómo sé qué valores mandar en las variables de una plantilla?
GET /templates devuelve variableMapping: dice qué espera cada {{n}}. Las posiciones mapeadas a un campo del contacto o a un dato del sistema se resuelven solas; el resto las mandás en el objeto variables al enviar.
¿Puedo crear plantillas de WhatsApp desde la API?
No. La API pública es de solo lectura para plantillas: se crean en el panel y las aprueba Meta, que puede tardar. La API sirve para descubrir las que ya tenés aprobadas y enviarlas.
¿Por qué GET /templates no me devuelve todas mis plantillas?
Por defecto solo devuelve las APPROVED, porque son las únicas que Meta permite enviar. Pasá ?status=all para ver también las pendientes, rechazadas o pausadas.