> ## 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.

# Listado de productos

> Obtiene el listado paginado de tus productos activos.

Obtiene los productos activos de tu empresa, ordenados del más reciente al más antiguo, dentro del envelope de paginación estándar.

### Query Parameters

<ParamField query="per_page" type="number" placeholder="15" default={15}>
  Cantidad de registros por página.
</ParamField>

<ParamField query="page" type="number" placeholder="1" default={1}>
  Página que deseas consultar.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.onepay.la/v1/products?per_page=15&page=1" \
    -H "Authorization: Bearer sk_test_xxx"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.onepay.la/v1/products?per_page=15&page=1', {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer sk_test_xxx'
    }
  });
  const data = await response.json();
  console.log(data.data); // Array de productos
  console.log(data.total); // Total de productos
  ```

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

  response = requests.get(
      'https://api.onepay.la/v1/products',
      headers={'Authorization': 'Bearer sk_test_xxx'},
      params={
          'per_page': 15,
          'page': 1
      }
  )
  data = response.json()
  print(data['data'])  # Array de productos
  print(data['total'])  # Total de productos
  ```

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

  $url = "https://api.onepay.la/v1/products?" . http_build_query([
      "per_page" => 15,
      "page" => 1
  ]);

  curl_setopt_array($curl, [
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_HTTPHEADER => [
          "Authorization: Bearer sk_test_xxx"
      ]
  ]);

  $data = json_decode(curl_exec($curl), true);
  curl_close($curl);

  print_r($data["data"]); // Array de productos
  echo $data["total"];    // Total de productos
  ?>
  ```
</RequestExample>

### Response

<ResponseField name="data" type="array">
  Colección de productos.

  <Expandable title="Propiedades">
    <ResponseField name="id" type="string">
      Identificador único (UUID) del producto.
    </ResponseField>

    <ResponseField name="object" type="string">
      Siempre `product`.
    </ResponseField>

    <ResponseField name="name" type="string">
      Nombre del producto.
    </ResponseField>

    <ResponseField name="description" type="string | null">
      Descripción del producto.
    </ResponseField>

    <ResponseField name="active" type="boolean">
      `false` cuando el producto está archivado.
    </ResponseField>

    <ResponseField name="internal_id" type="string | null">
      Tu identificador interno del producto.
    </ResponseField>

    <ResponseField name="unit_label" type="string | null">
      Etiqueta de la unidad (ej. `asientos`).
    </ResponseField>

    <ResponseField name="tax_rate" type="number | null">
      Porcentaje de IVA (0-100).
    </ResponseField>

    <ResponseField name="default_price" type="string | null">
      ID del precio por defecto del producto.
    </ResponseField>

    <ResponseField name="marketing_features" type="array">
      Características de marketing (hasta 15), cada una con la forma `{ "name": string }`.
    </ResponseField>

    <ResponseField name="metadata" type="object | null">
      Datos adicionales de tu aplicación.
    </ResponseField>

    <ResponseField name="created_at" type="string">
      Fecha de creación (ISO 8601).
    </ResponseField>

    <ResponseField name="updated_at" type="string">
      Fecha de última actualización (ISO 8601).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="current_page" type="number">
  Página actual del listado.
</ResponseField>

<ResponseField name="from" type="number">
  Número del primer registro de la página.
</ResponseField>

<ResponseField name="last_page" type="number">
  Última página disponible.
</ResponseField>

<ResponseField name="per_page" type="number">
  Cantidad de registros por página.
</ResponseField>

<ResponseField name="to" type="number">
  Número del último registro de la página.
</ResponseField>

<ResponseField name="total" type="number">
  Total de productos disponibles.
</ResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "data": [
      {
        "id": "9f5d85a0-1111-7000-aaaa-000000000001",
        "object": "product",
        "name": "OnePay Pro",
        "description": "Para negocios en crecimiento.",
        "active": true,
        "internal_id": "pro",
        "unit_label": null,
        "tax_rate": 19,
        "default_price": "9f5d85a0-2222-7000-aaaa-000000000002",
        "marketing_features": [
          { "name": "Clientes ilimitados" },
          { "name": "Reintentos inteligentes" }
        ],
        "metadata": null,
        "created_at": "2026-07-13T12:00:00.000000Z",
        "updated_at": "2026-07-13T12:00:00.000000Z"
      }
    ],
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "per_page": 15,
    "to": 1,
    "total": 1
  }
  ```
</ResponseExample>
