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

# Obtener plantillas de WhatsApp

> Lista las plantillas de mensajes de WhatsApp de un remitente de Famulor específico

<Warning>
  **API de Famulor 1.0 (legado).** Esta página se aplica únicamente a Famulor 1.0 (`app.famulor.de`) y se conserva por compatibilidad. Para la plataforma actual, usa la [referencia de la API de Famulor 2.0](/es/api-reference/introduction).
</Warning>

Recupera todas las plantillas de mensajes de WhatsApp Business asociadas a un remitente de WhatsApp de Famulor específico. Las plantillas son obligatorias para iniciar conversaciones o enviar mensajes a usuarios fuera de la ventana de mensajería de 24 horas.

### Parámetros de ruta

<ParamField path="senderId" type="integer" required>
  El ID del remitente de WhatsApp (obtenido del endpoint [Obtener remitentes](/es/api-v1/whatsapp/get-senders))
</ParamField>

### Parámetros de consulta

<ParamField query="status" type="string" optional>
  Filtra las plantillas por estado de aprobación. Predeterminado: `approved`. Usa `all` para devolver todas las plantillas independientemente de su estado.
</ParamField>

### Campos de la respuesta

<ResponseField name="data" type="array">
  <Expandable title="Propiedades del objeto template">
    <ResponseField name="id" type="integer">
      El identificador único de la plantilla. Úsalo al enviar mensajes de plantilla.
    </ResponseField>

    <ResponseField name="name" type="string">
      El nombre de la plantilla tal como está registrado en Meta (p. ej., `order_confirmation`, `appointment_reminder`)
    </ResponseField>

    <ResponseField name="language" type="string">
      El código de idioma de la plantilla (p. ej., `en`, `es`, `pt_BR`)
    </ResponseField>

    <ResponseField name="category" type="string">
      La categoría de la plantilla: `marketing`, `utility` o `authentication`
    </ResponseField>

    <ResponseField name="status" type="string">
      El estado de aprobación: `approved`, `pending` o `rejected`
    </ResponseField>

    <ResponseField name="body_text" type="string">
      El texto del cuerpo de la plantilla, con los marcadores de variables mostrados como `{{1}}`, `{{2}}`, etc.
    </ResponseField>

    <ResponseField name="variables" type="array">
      Lista de nombres de variables definidos para la plantilla. Array vacío si la plantilla no tiene variables.
    </ResponseField>

    <ResponseField name="has_variables" type="boolean">
      Indica si esta plantilla requiere que se proporcionen variables al enviarla
    </ResponseField>
  </Expandable>
</ResponseField>

### Respuestas de error

<ResponseField name="404 Not Found">
  <Expandable title="Respuesta de error">
    <ResponseField name="success" type="boolean">
      `false`
    </ResponseField>

    <ResponseField name="error" type="string">
      `Sender not found`
    </ResponseField>

    <ResponseField name="error_code" type="string">
      `SENDER_NOT_FOUND`
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null} theme={null}
  curl -X GET "https://app.famulor.de/api/user/whatsapp/senders/12/templates" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

  ```bash All templates (including pending/rejected) theme={null} theme={null}
  curl -X GET "https://app.famulor.de/api/user/whatsapp/senders/12/templates?status=all" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

  ```javascript JavaScript theme={null} theme={null}
  const senderId = 12;

  const response = await fetch(
    `https://app.famulor.de/api/user/whatsapp/senders/${senderId}/templates`,
    {
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY'
      }
    }
  );

  const data = await response.json();
  console.log(data.data); // Array of templates
  ```

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

  sender_id = 12

  response = requests.get(
      f'https://app.famulor.de/api/user/whatsapp/senders/{sender_id}/templates',
      headers={'Authorization': 'Bearer YOUR_API_KEY'}
  )

  templates = response.json()['data']
  for template in templates:
      print(f"{template['name']} ({template['language']}): {template['body_text']}")
  ```
</RequestExample>

<ResponseExample>
  ```json 200 Response theme={null} theme={null}
  {
    "data": [
      {
        "id": 45,
        "name": "appointment_reminder",
        "language": "en",
        "category": "utility",
        "status": "approved",
        "body_text": "Hi {{1}}, this is a reminder for your appointment on {{2}} at {{3}}. Reply YES to confirm or NO to reschedule.",
        "variables": ["customer_name", "date", "time"],
        "has_variables": true
      },
      {
        "id": 46,
        "name": "welcome_message",
        "language": "en",
        "category": "marketing",
        "status": "approved",
        "body_text": "Welcome to Acme Corp! We're excited to have you. How can we help you today?",
        "variables": [],
        "has_variables": false
      }
    ]
  }
  ```

  ```json 404 Sender Not Found theme={null} theme={null}
  {
    "success": false,
    "error": "Sender not found",
    "error_code": "SENDER_NOT_FOUND"
  }
  ```
</ResponseExample>

### Notas

* De forma predeterminada, solo se devuelven las plantillas `approved`. Las plantillas con estado `pending` o `rejected` no se pueden usar para enviar mensajes.
* El estado de aprobación de las plantillas se sincroniza con Meta automáticamente cada 4 horas.
* Las variables en `body_text` se muestran como `{{1}}`, `{{2}}`, etc. El array `variables` proporciona nombres legibles para cada marcador.
* Las plantillas son obligatorias al enviar un mensaje a un usuario por primera vez o fuera de la ventana de mensajería de 24 horas.
