Paginación
Los endpoints de listado usan uno de tres estilos de paginación según el dominio. Lee la Referencia de la API para conocer los parámetros exactos de un endpoint determinado; esta página explica los patrones que encontrarás y qué endpoints usa cada uno.
De un vistazo
| Estilo | Parámetros | Usado por |
|---|---|---|
Cursores de ID (after / before) | after, before | Notifications, comentarios de filas |
Cursor keyset (cursor / nextCursor) | limit, cursor | Bookings |
Offset (limit / offset) | limit, offset | Channels, miembros del workspace, equipos del workspace |
| Solo límite (sin continuación) | limit | Search, búsqueda de docs, búsqueda de drive |
| Sin paginar | — | Listado de filas de board, list-boards, tipos de booking |
Cursores de ID — after / before
Algunos endpoints paginan usando el _id de un elemento como cursor. Pasas el ID del último (o primer) elemento que viste como after (o before) para obtener la página adyacente.
Notifications
GET /public/v1/notifications
after— devuelve notifications después de este ID de notification.before— devuelve notifications antes de este ID de notification.
La respuesta es { notifications, unreadCount, count }. No hay un campo de cursor separado — el cursor es el _id de una notification. Para avanzar de página, toma el _id de la última notification y pásalo como after en la siguiente solicitud:
# First page
curl "https://api.copera.ai/public/v1/notifications" \
-H "Authorization: Bearer cp_pat_your_token_here"
# Next page — use the last notification's _id from the previous response
curl "https://api.copera.ai/public/v1/notifications?after=665f0a1b2c3d4e5f60718293" \
-H "Authorization: Bearer cp_pat_your_token_here"
Comentarios de filas
GET /public/v1/board/{boardId}/table/{tableId}/row/{rowId}/comments
Los mismos parámetros de cursor after / before (IDs de comentario), más un filtro visibility (all | internal | external, predeterminado all). A diferencia de notifications, este endpoint devuelve un pageInfo al estilo relay:
{
"items": [ /* ...comments... */ ],
"pageInfo": {
"endCursor": "665f0a1b2c3d4e5f60718293",
"startCursor": "665f0a1b2c3d4e5f60718210",
"hasNextPage": true,
"hasPreviousPage": false
}
}
Para avanzar de página, pasa endCursor como after mientras hasNextPage sea true.
Cursor keyset — cursor / nextCursor
Bookings
GET /public/v1/bookings
limit— tamaño de página, 1–100 (predeterminado 25).cursor— cursor keyset opaco de la respuesta anterior.
La respuesta incluye nextCursor y hasMore:
{
"bookings": [ /* ... */ ],
"nextCursor": "eyJpZCI6Ii4uLiJ9",
"hasMore": true
}
Repite mientras hasMore sea true, pasando nextCursor de vuelta como cursor:
curl "https://api.copera.ai/public/v1/bookings?limit=50&cursor=eyJpZCI6Ii4uLiJ9" \
-H "Authorization: Bearer cp_pat_your_token_here"
Offset — limit / offset
Paginación clásica con un offset numérico.
| Endpoint | limit (predeterminado / máx) | offset |
|---|---|---|
GET /chat/channels | 100 / 200 | desde 0 |
GET /workspace/members | 100 / 500 | desde 0 |
GET /workspace/teams | 100 / 200 | desde 0 |
# Second page of 50 members
curl "https://api.copera.ai/public/v1/workspace/members?limit=50&offset=50" \
-H "Authorization: Bearer cp_pat_your_token_here"
Solo límite
Los endpoints de tipo búsqueda limitan el número de resultados con limit pero no ofrecen un cursor de continuación — solicita un limit mayor (hasta el máximo del endpoint) o refina tu consulta.
| Endpoint | limit (predeterminado / máx) |
|---|---|
GET /search | 50 / 100 |
GET /docs/search | 20 / 50 |
GET /drive/search | 20 / 50 |
Los endpoints de árbol de docs y drive (/docs/tree, /drive/tree) están acotados por un parámetro depth (predeterminado 3, máx 10) y un parentId, no por limit/cursor.
Sin paginar
Unos pocos endpoints de listado devuelven el conjunto completo en una sola respuesta:
GET /board/list-boardsGET /board/{boardId}/table/{tableId}/rows— admiteq,filterysort, pero devuelve todas las filas coincidentes.GET /booking-types
Al iterar sobre conjuntos de resultados grandes, agrega un breve retraso entre solicitudes para mantenerte por debajo del límite de tasa por minuto, y detente en cuanto un indicador hasMore / hasNextPage sea false.