# Crear, listar y sincronizar plantillas

`POST /v1/templates`

Ya podés administrar plantillas desde Connect: `GET /v1/templates` (listar por número/estado/categoría), `POST /v1/templates` (crear — corre el **pre-chequeador ANTES** de Meta: si hay un bloqueante ni se intenta, así no gastás el ciclo de rechazo, que es lento), `POST /v1/templates/precheck` (validar un borrador en vivo), `GET /v1/templates/catalog` + `POST /v1/templates/seed` (adoptar plantillas por rubro que sabemos que se aprueban), `POST /v1/templates/bulk` (aplicarlas a varios números), `POST /v1/templates/sync` y `DELETE /v1/templates/:id`. La plantilla nace `PENDING`; suscribite a **`template.status_changed`** para enterarte cuando Meta la aprueba o rechaza, con el motivo en lenguaje humano. El estado se actualiza cada pocos minutos (no en tiempo real), y Meta puede tardar entre minutos y horas en revisar una plantilla — el evento **llega**, con esa demora. Usá el botón **Actualizar** por conexión en el panel para un chequeo a demanda.

## Ejemplos

### cURL

```bash
curl -X POST https://api.waiaconnect.com/v1/templates \
  -H "Authorization: Bearer wc_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"connectionId":"conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","name":"order_confirmation","language":"es","category":"UTILITY","body":{"text":"Hola {{1}}, tu pedido {{2}} está listo.","examples":["María","#A-1042"]}}'
# Pre-checked before Meta. On success the template is PENDING; subscribe to
# template.status_changed to hear when Meta approves or rejects it.
```

### Node.js

```javascript
const res = await fetch("https://api.waiaconnect.com/v1/templates", {
  method: "POST",
  headers: {
    "Authorization": "Bearer wc_live_YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  // Pre-checked before Meta; give every {{n}} an example (the #1 rejection cause).
  body: JSON.stringify({
  "connectionId": "conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "name": "order_confirmation",
  "language": "es",
  "category": "UTILITY",
  "body": {
    "text": "Hola {{1}}, tu pedido {{2}} está listo.",
    "examples": [
      "María",
      "#A-1042"
    ]
  }
})
});
console.log(await res.json());
```

### PHP

```php
<?php
$ch = curl_init("https://api.waiaconnect.com/v1/templates");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer wc_live_YOUR_API_KEY",
    "Content-Type: application/json",
  ],
  // Pre-checked before Meta; each {{n}} needs an example.
  CURLOPT_POSTFIELDS => json_encode(["connectionId" => "conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","name" => "order_confirmation","language" => "es","category" => "UTILITY","body" => ["text" => "Hola [[1]], tu pedido [[2]] está listo.","examples" => ["María","#A-1042"]]]),
]);
echo curl_exec($ch);
```

### Python

```python
import requests
res = requests.post("https://api.waiaconnect.com/v1/templates",
  headers={ "Authorization": "Bearer wc_live_YOUR_API_KEY" },
  # Pre-checked before Meta; each "{{n}}" needs an example (the #1 rejection cause).
  json={"connectionId":"conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","name":"order_confirmation","language":"es","category":"UTILITY","body":{"text":"Hola {{1}}, tu pedido {{2}} está listo.","examples":["María","#A-1042"]}})
print(res.json())
```

## Notas

- La causa #1 de rechazo es una variable `{{n}}` sin ejemplo — dale un ejemplo a cada una (el pre-chequeador te lo genera).
- Categorías: **UTILITY** (transaccional, la más barata) · **MARKETING** (promos, más cara por mensaje) · **AUTHENTICATION** (códigos). Marcar un mensaje transaccional como MARKETING te hace pagar de más.
- ⚠ Una plantilla **creada no se puede editar**. Si te equivocaste, creá otra.
