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

# Sincronizar Templates

> Sincroniza templates desde Meta manualmente

Fuerza una sincronización de templates desde la API de Meta. Útil después de crear o modificar templates desde el Meta Business Manager.

<Info>
  La sincronización es automática cada 15 minutos. Usa este endpoint solo si necesitas ver cambios inmediatamente.
</Info>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.whaapy.com/templates/v1/sync" \
    -H "Authorization: Bearer wha_xxxxx"
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://api.whaapy.com/templates/v1/sync', {
    method: 'POST',
    headers: { 'Authorization': 'Bearer wha_xxxxx' }
  });
  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      'https://api.whaapy.com/templates/v1/sync',
      headers={'Authorization': 'Bearer wha_xxxxx'}
  )
  data = response.json()
  ```

  ```php PHP theme={null}
  $curl = curl_init();

  curl_setopt_array($curl, [
    CURLOPT_URL => "https://api.whaapy.com/templates/v1/sync",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
      "Authorization: Bearer wha_xxxxx"
    ],
  ]);

  $response = curl_exec($curl);
  $data = json_decode($response, true);
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "data": {
      "synced": 5,
      "created": 2,
      "updated": 1,
      "deleted": 0
    },
    "message": "Sincronización completada: 5 templates sincronizados"
  }
  ```
</ResponseExample>

## Campos de respuesta

| Campo     | Tipo   | Descripción                              |
| --------- | ------ | ---------------------------------------- |
| `synced`  | number | Total de templates procesados            |
| `created` | number | Nuevos templates encontrados             |
| `updated` | number | Templates actualizados (status, content) |
| `deleted` | number | Templates eliminados en Meta             |

## Qué sincroniza

La sincronización actualiza:

1. **Nuevos templates** - Templates creados en Meta Business Manager
2. **Estado de aprobación** - `PENDING` → `APPROVED` o `REJECTED`
3. **Contenido** - Cambios en texto o componentes
4. **Templates eliminados** - Se marcan como inactivos

## Flujo de trabajo típico

```mermaid theme={null}
sequenceDiagram
    participant U as Usuario
    participant M as Meta Business Manager
    participant W as Whaapy API
    
    U->>M: Crea template
    M->>M: Revisa (24-48h)
    M-->>M: Aprueba template
    U->>W: POST /templates/v1/sync
    W->>M: Obtiene templates
    M-->>W: Lista actualizada
    W-->>U: {created: 1}
    U->>W: GET /templates/v1
    W-->>U: Template disponible
```

## Errores

<ResponseExample>
  ```json 404 Not Found theme={null}
  {
    "error": "WhatsApp no configurado"
  }
  ```
</ResponseExample>

<ResponseExample>
  ```json 500 Error theme={null}
  {
    "error": "Error al sincronizar templates",
    "message": "Meta API error: Invalid access token"
  }
  ```
</ResponseExample>

## Casos de uso

<AccordionGroup>
  <Accordion title="Después de crear template en Meta">
    Cuando creas un nuevo template en Meta Business Manager y quieres usarlo inmediatamente:

    ```javascript theme={null}
    // 1. Espera aprobación de Meta (verifica en Business Manager)

    // 2. Sincroniza con Whaapy
    await fetch('https://api.whaapy.com/templates/v1/sync', {
      method: 'POST',
      headers: { 'Authorization': 'Bearer wha_xxxxx' }
    });

    // 3. Verifica que el template está disponible
    const templates = await fetch('https://api.whaapy.com/templates/v1', {
      headers: { 'Authorization': 'Bearer wha_xxxxx' }
    }).then(r => r.json());

    const newTemplate = templates.data.find(t => t.name === 'mi_nuevo_template');
    console.log('Template disponible:', newTemplate?.status === 'APPROVED');
    ```
  </Accordion>

  <Accordion title="Verificar estado de template pendiente">
    Para verificar si un template fue aprobado:

    ```javascript theme={null}
    // Sincronizar para obtener estado actualizado
    await fetch('https://api.whaapy.com/templates/v1/sync', {
      method: 'POST',
      headers: { 'Authorization': 'Bearer wha_xxxxx' }
    });

    // Verificar estado
    const template = await fetch('https://api.whaapy.com/templates/v1/tmpl-uuid', {
      headers: { 'Authorization': 'Bearer wha_xxxxx' }
    }).then(r => r.json());

    if (template.data.status === 'APPROVED') {
      console.log('Template aprobado, listo para usar');
    } else if (template.data.status === 'REJECTED') {
      console.log('Template rechazado');
    } else {
      console.log('Template aún en revisión');
    }
    ```
  </Accordion>
</AccordionGroup>

<Tip>
  Meta tarda típicamente 24-48 horas en revisar nuevos templates. Si el template sigue en `PENDING` después de sincronizar, verifica en Meta Business Manager si hay observaciones o rechazos.
</Tip>
