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

# Paginación

> Cada lista responde una página y un cursor a la siguiente: síguelo hasta que sea null.

Cada operación que lista, como [Listar exportaciones](https://developers.readyforcommerce.com/es/api-reference/core-list-exports.md), responde una página a la
vez:

```json theme={null}
{
  "items": [{ "id": "6a1f0d3e-2c4b-4e7a-9f58-3b0c1d2e4a67", "state": "succeeded" }],
  "nextCursor": "[\"2026-11-12T09:30:00.000Z\",\"6a1f0d3e-2c4b-4e7a-9f58-3b0c1d2e4a67\"]"
}
```

* `items` tiene las filas de la página, en el orden de la lista.
* `nextCursor` apunta a la página siguiente, y es `null` en la última.

## Lee una lista completa

Devuelve `nextCursor` como el parámetro `cursor` de la consulta, tal como llegó, y para cuando sea `null`:

```bash curl theme={null}
# La primera página; luego envía el nextCursor de cada página con --data-urlencode "cursor=…"
curl --get "https://app.readyforcommerce.com/api/v1/orgs/$RFC_ORG_ID/core/exports" \
  --data-urlencode "limit=20" \
  --header "Authorization: Bearer $RFC_API_KEY"
```

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

import requests

url = f"https://app.readyforcommerce.com/api/v1/orgs/{os.environ['RFC_ORG_ID']}/core/exports"
headers = {"Authorization": f"Bearer {os.environ['RFC_API_KEY']}"}
params = {"limit": 20}
while True:
    page = requests.get(url, params=params, headers=headers).json()
    for export in page["items"]:
        print(export["id"])
    if page["nextCursor"] is None:
        break
    params["cursor"] = page["nextCursor"]
```

```php PHP theme={null}
<?php
$url = 'https://app.readyforcommerce.com/api/v1/orgs/' . getenv('RFC_ORG_ID') . '/core/exports';
$query = ['limit' => 20];
do {
    $curl = curl_init($url . '?' . http_build_query($query));
    curl_setopt_array($curl, [
        CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('RFC_API_KEY')],
        CURLOPT_RETURNTRANSFER => true,
    ]);
    $page = json_decode(curl_exec($curl), true);
    foreach ($page['items'] as $export) {
        echo $export['id'] . PHP_EOL;
    }
    $query['cursor'] = $page['nextCursor'];
} while ($page['nextCursor'] !== null);
```

```javascript JavaScript theme={null}
const url = new URL(
  `https://app.readyforcommerce.com/api/v1/orgs/${process.env.RFC_ORG_ID}/core/exports`,
);
url.searchParams.set('limit', '20');
for (;;) {
  const response = await fetch(url, {
    headers: { Authorization: `Bearer ${process.env.RFC_API_KEY}` },
  });
  const page = await response.json();
  for (const item of page.items) console.log(item.id);
  if (page.nextCursor === null) break;
  url.searchParams.set('cursor', page.nextCursor);
}
```

> [!NOTE]
>
> Un cursor es opaco: envíalo tal como llegó, y nunca armes ni cambies uno. Un cursor que la API no
> dio responde `422 core.validation_failed`. No hay números de página: un cursor sigue desde la
> última fila que leíste, así que una fila agregada mientras lees nunca hace que otra se repita o se
> pierda.

## Tamaño de página y total

| Parámetro | Qué hace |
| - | - |
| `limit` | Las filas de una página: como máximo 200, y 200 cuando no envías ninguno. |
| `withTotal=true` | Agrega `total` a la respuesta: cuántas filas tiene la lista completa. Envíalo solo cuando lo necesites, porque contar tarda más que leer una página. |

## Buscar, filtrar y ordenar

Algunas listas aceptan `q`, un objeto JSON que las busca, filtra y ordena, como
[Listar exportaciones](https://developers.readyforcommerce.com/es/api-reference/core-list-exports.md), [Listar importaciones](https://developers.readyforcommerce.com/es/api-reference/core-list-imports.md)
y [Listar incidencias](https://developers.readyforcommerce.com/es/api-reference/core-list-incidents.md). La página de cada una dice qué lee su búsqueda y qué
campos acepta su filtro. Este `q` encuentra las exportaciones cuyo nombre de archivo contiene *prices* y que
terminaron bien:

```json theme={null}
{
  "search": "prices",
  "filter": { "logic": "and", "items": [{ "field": "state", "op": "eq", "value": "succeeded" }] }
}
```

`filter.logic` es `and` (todas las condiciones) u `or` (cualquiera de ellas), y `sort` ordena la lista por un campo:
`{ "field": …, "direction": "asc" }`, o `"desc"`.

Envíalo codificado para URL, como `q=…`, con el mismo `q` en cada página de la misma lista.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.