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

# Listar plantillas

> Endpoint para obtener las plantillas de WhatsApp disponibles para tu empresa.

Devuelve las plantillas visibles para tu empresa, incluidas las genéricas compartidas. Usa el campo `selectable` para saber cuáles puedes fijar en el `template_id` de un cobro.

### Query Parameters

<ParamField query="filter[selectable]" type="boolean" placeholder="1">
  `1` devuelve únicamente las plantillas que puedes usar como `template_id` al crear un cobro; `0` devuelve las que no.
</ParamField>

<ParamField query="filter[status]" type="string" placeholder="APPROVED">
  Filtra por estado. Valores válidos:

  * `DRAFT` - Creada, sin enviar a Meta
  * `PENDING` - En revisión por Meta
  * `APPROVED` - Aprobada
  * `REJECTED` - Rechazada por Meta
</ParamField>

<ParamField query="filter[stage]" type="string" placeholder="overdue">
  Filtra por etapa de cobranza. Valores válidos:

  * `reminder` - Recordatorio
  * `due_soon` - Próximo a vencer
  * `due_today` - Vence hoy
  * `overdue` - Vencido
  * `pre_cut` - Antes del corte
  * `cut` - Corte
  * `winback` - Recuperación
  * `custom` - Personalizada
</ParamField>

<ParamField query="filter[provider]" type="string" placeholder="META">
  Filtra por proveedor de WhatsApp, por ejemplo `META`, `DIALOG_360` o `INFOBIP`.
</ParamField>

<ParamField query="filter[predefined]" type="boolean" placeholder="1">
  `1` para las plantillas predefinidas de OnePay, `0` para las que creaste tú.
</ParamField>

<ParamField query="sort" type="string" default="-updated_at">
  Ordenamiento. Valores permitidos: `name`, `created_at` y `updated_at`. Antepón `-` para orden descendente.
</ParamField>

<ParamField query="per_page" type="integer" default="20">
  Cantidad de resultados por página. Mínimo 1, máximo 100.
</ParamField>

<ParamField query="page" type="integer" default="1">
  Número de página para paginación.
</ParamField>

### Ejemplos de uso

<Tabs>
  <Tab title="curl">
    ```bash theme={null}
    curl https://api.onepay.la/v1/templates \
      -X GET \
      -H "Authorization: Bearer sk_test_xxx"
    ```

    Solo las que puedes fijar en un cobro:

    ```bash theme={null}
    curl "https://api.onepay.la/v1/templates?filter[selectable]=1" \
      -X GET \
      -H "Authorization: Bearer sk_test_xxx"
    ```
  </Tab>

  <Tab title="JavaScript">
    ```ts theme={null}
    const response = await fetch('https://api.onepay.la/v1/templates?filter[selectable]=1', {
      method: 'GET',
      headers: {
        'Authorization': 'Bearer sk_test_xxx',
      },
    });
    const data = await response.json();
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    import requests

    response = requests.get(
        'https://api.onepay.la/v1/templates',
        params={'filter[selectable]': 1},
        headers={'Authorization': 'Bearer sk_test_xxx'},
    )
    data = response.json()
    ```
  </Tab>

  <Tab title="PHP">
    ```php theme={null}
    <?php
    $curl = curl_init();
    curl_setopt_array($curl, [
      CURLOPT_URL => "https://api.onepay.la/v1/templates?filter[selectable]=1",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_HTTPHEADER => ["Authorization: Bearer sk_test_xxx"]
    ]);
    $data = json_decode(curl_exec($curl), true);
    ?>
    ```
  </Tab>
</Tabs>

### Response

<ResponseField name="data" type="array">
  Lista de plantillas.

  <Expandable title="Propiedades de cada plantilla">
    <ResponseField name="id" type="integer">Identificador de la plantilla. Es el valor que envías en `template_id` al crear un cobro.</ResponseField>
    <ResponseField name="name" type="string">Nombre legible de la plantilla.</ResponseField>
    <ResponseField name="key" type="string">Nombre técnico registrado ante el proveedor, en snake\_case.</ResponseField>
    <ResponseField name="status" type="string">Estado de aprobación: `DRAFT`, `PENDING`, `APPROVED` o `REJECTED`.</ResponseField>
    <ResponseField name="type" type="string">Categoría: `PAYMENT`, `PAYMENT_APPROVED`, `UTILITY`, `MARKETING` o `AUTHENTICATION`.</ResponseField>
    <ResponseField name="stage" type="string">Etapa de cobranza, o `null` en las plantillas de cobro directo.</ResponseField>
    <ResponseField name="language" type="string">Idioma de la plantilla, por ejemplo `es`.</ResponseField>
    <ResponseField name="provider" type="string">Proveedor de WhatsApp donde está registrada.</ResponseField>
    <ResponseField name="is_predefined" type="boolean">`true` si es una plantilla predefinida de OnePay.</ResponseField>
    <ResponseField name="selectable" type="boolean">`true` si puedes usar este `id` como `template_id` al crear un cobro.</ResponseField>
    <ResponseField name="header_type" type="string">Tipo de encabezado: `DOCUMENT`, `IMAGE`, `TEXT` o `None`.</ResponseField>
    <ResponseField name="body" type="string">Texto del mensaje. Los `{{1}}`, `{{2}}`... se reemplazan con los datos del cobro.</ResponseField>
    <ResponseField name="footer" type="string">Texto del pie del mensaje.</ResponseField>
    <ResponseField name="variables" type="array">Variables que reemplazan los marcadores del cuerpo, en orden.</ResponseField>
    <ResponseField name="buttons" type="array">Botones del mensaje, cada uno con `type` y `text`.</ResponseField>
    <ResponseField name="created_at" type="string">Fecha de creación en formato ISO 8601.</ResponseField>
    <ResponseField name="updated_at" type="string">Fecha de última actualización en formato ISO 8601.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="current_page" type="integer">Página actual.</ResponseField>
<ResponseField name="from" type="integer">Índice del primer registro en la página actual.</ResponseField>
<ResponseField name="last_page" type="integer">Última página disponible.</ResponseField>
<ResponseField name="per_page" type="integer">Cantidad de registros por página.</ResponseField>
<ResponseField name="to" type="integer">Índice del último registro en la página actual.</ResponseField>
<ResponseField name="total" type="integer">Total de plantillas.</ResponseField>

### Ejemplo de respuesta

<ResponseExample>
  ```json 200 theme={null}
  {
    "data": [
      {
        "id": 1421,
        "name": "Payment Customer File Flow Pro V5",
        "key": "payment_customer_file_flow_pro_v5",
        "status": "APPROVED",
        "type": "PAYMENT",
        "stage": null,
        "language": "es",
        "provider": "META",
        "is_predefined": true,
        "selectable": true,
        "header_type": "DOCUMENT",
        "body": "¡Hola {{1}}! 👋🏻 *{{2}}* ha solicitado {{3}} para el pago de tu *{{4}}*.\n\nRealiza tu pago de forma fácil y segura.",
        "footer": "Pagos seguros con OnePay",
        "variables": ["customer_name", "company_name", "amount_label", "minified_title"],
        "buttons": [
          { "type": "REPLY", "text": "Pagar con Bre-B" },
          { "type": "FLOW", "text": "Iniciar pago" },
          { "type": "URL", "text": "Pagar en la web" }
        ],
        "created_at": "2026-03-11T14:02:51+00:00",
        "updated_at": "2026-07-02T09:18:04+00:00"
      },
      {
        "id": 1508,
        "name": "Onepay Payment Overdue Es V2",
        "key": "onepay_payment_overdue_es_v2",
        "status": "PENDING",
        "type": "PAYMENT",
        "stage": "overdue",
        "language": "es",
        "provider": "META",
        "is_predefined": true,
        "selectable": false,
        "header_type": "None",
        "body": "Hola {{1}}, tu pago con {{2}} está vencido.\n\n📋 Concepto: {{3}}\n💰 Monto: {{4}}",
        "footer": "Pagos seguros con OnePay",
        "variables": ["customer_name", "company_name", "title", "amount"],
        "buttons": [
          { "type": "REPLY", "text": "Pagar con Bre-B" },
          { "type": "FLOW", "text": "Iniciar pago" },
          { "type": "URL", "text": "Pagar en la web" }
        ],
        "created_at": "2026-05-20T11:41:09+00:00",
        "updated_at": "2026-06-28T16:30:22+00:00"
      }
    ],
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "per_page": 20,
    "to": 20,
    "total": 27
  }
  ```
</ResponseExample>
