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

# Get Templates

> List WhatsApp message templates for a specific sender

This endpoint returns all message templates associated with a specific WhatsApp sender. Templates are required for initiating conversations or messaging users outside the 24-hour messaging window.

### Path Parameters

<ParamField path="senderId" type="integer" required>
  The ID of the WhatsApp sender (obtained from the [Get Senders](/api-reference/whatsapp/get-senders) endpoint)
</ParamField>

### Query Parameters

<ParamField query="status" type="string" optional>
  Filter templates by approval status. Default: `approved`. Use `all` to return all templates regardless of status.
</ParamField>

### Response Fields

<ResponseField name="data" type="array">
  <Expandable title="Template object properties">
    <ResponseField name="id" type="integer">
      The unique identifier of the template. Use this when sending template messages.
    </ResponseField>

    <ResponseField name="name" type="string">
      The template name as registered with Meta (e.g., `order_confirmation`, `appointment_reminder`)
    </ResponseField>

    <ResponseField name="language" type="string">
      The template language code (e.g., `en`, `es`, `pt_BR`)
    </ResponseField>

    <ResponseField name="category" type="string">
      The template category: `marketing`, `utility`, or `authentication`
    </ResponseField>

    <ResponseField name="status" type="string">
      The approval status: `approved`, `pending`, or `rejected`
    </ResponseField>

    <ResponseField name="body_text" type="string">
      The template body text, with variable placeholders shown as `{{1}}`, `{{2}}`, etc.
    </ResponseField>

    <ResponseField name="variables" type="array">
      List of variable names defined for the template. Empty array if the template has no variables.
    </ResponseField>

    <ResponseField name="has_variables" type="boolean">
      Whether this template requires variables to be provided when sending
    </ResponseField>
  </Expandable>
</ResponseField>

### Error Responses

<ResponseField name="404 Not Found">
  <Expandable title="Error Response">
    <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}
  curl -X GET "https://app.autocalls.ai/api/user/whatsapp/senders/12/templates" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

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

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

  const response = await fetch(
    `https://app.autocalls.ai/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}
  import requests

  sender_id = 12

  response = requests.get(
      f'https://app.autocalls.ai/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}
  {
    "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}
  {
    "success": false,
    "error": "Sender not found",
    "error_code": "SENDER_NOT_FOUND"
  }
  ```
</ResponseExample>

### Notes

* Only `approved` templates are returned by default. Templates with `pending` or `rejected` status cannot be used to send messages.
* Template approval status is synced with Meta every 4 hours automatically.
* Variables in `body_text` are shown as `{{1}}`, `{{2}}`, etc. The `variables` array provides human-readable names for each placeholder.
* Templates are required when messaging a user for the first time or outside the 24-hour messaging window.
