Saltar al contenido principal

Paginación

Dos endpoints de listado, y los dos paginan igual: cursor opaco. Mismos query params, misma shape de respuesta, mismo loop — así que un solo helper compartido te sirve para ambos.

EndpointQuery paramslimit por defecto
GET /orderscursor, limit20
GET /me/wallets/{currency}/transactions/{type}cursor, limit10

En los dos, limit tiene un tope de 100.

El loop​

Omites cursor en la primera llamada:

GET /orders?limit=20
{
"data": [ { "id": "0190f9b2-...", "status": "PENDING" } ],
"pagination": {
"next_cursor": "eyJjcmVhdGVkQXQiOiIyMDI2LTA4...",
"has_more": true,
"limit": 20,
"total": 359
}
}

Después pasas de vuelta el next_cursor anterior hasta que has_more sea false. Cuando no queda nada, next_cursor viene en null.

GET /orders?limit=20&cursor=eyJpZCI6IjAxOTBmO...

Las transacciones de la wallet tienen exactamente la misma forma:

GET /me/wallets/USDR/transactions/top_up?limit=10
GET /me/wallets/USDR/transactions/top_up?cursor=eyJpZCI6IjAxOTBmO...

Cuatro reglas que impone el cursor​

Trátalo como opaco. No lo parsees, no lo construyas, no lo guardes como bookmark de larga vida. Su contenido es interno y puede cambiar sin aviso. Un cursor ilegible o adulterado responde 400.

Un ?cursor= vacío NO es "empezar de nuevo". Es un cursor inválido y responde 400. Para la primera página, omite el parámetro por completo.

El limit queda fijado en la primera llamada. Mientras mandas cursor, cambiar el limit a mitad de camino saltaría o duplicaría filas, así que se ignora. Decide el tamaño de página antes de arrancar.

Solo se avanza. No hay índice al que saltar, solo el cursor siguiente. Si quieres ofrecer un "atrás", guarda los cursores que ya recorriste. total te da el "de N" cuando viene, pero es nullable, así que no construyas una UI que se caiga sin él.

Filtros​

GET /orders también acepta status, type, idempotency_key, created_from y created_to (fechas como 2026-07-01). status acepta una lista separada por comas; type (tipo de transacción, ej. WALLET_TO_POG) acepta un solo valor. Mantén los filtros idénticos en todas las llamadas del loop — cambiarlos a mitad de camino invalida los supuestos del cursor, y de todos modos idempotency_key es tan preciso que hace innecesario paginar (ver idempotencia).

Firma​

Los dos endpoints exigen request firmada, en modo query — y el cursor forma parte del query string que firmas, así que construye el mensaje con la URL que estás por enviar, no con la de la página anterior.