Pagination
Les endpoints de liste utilisent l'un des trois styles de pagination selon le domaine. Consultez la Référence de l'API pour les paramètres exacts d'un endpoint donné ; cette page explique les motifs que vous rencontrerez et quels endpoints utilisent chacun.
En un coup d'œil
| Style | Paramètres | Utilisé par |
|---|---|---|
Curseurs d'ID (after / before) | after, before | Notifications, commentaires de ligne |
Curseur keyset (cursor / nextCursor) | limit, cursor | Bookings |
Offset (limit / offset) | limit, offset | Channels, membres du workspace, équipes du workspace |
| Limit uniquement (pas de continuation) | limit | Search, docs search, drive search |
| Non paginé | — | Liste des lignes de board, list-boards, types de booking |
Curseurs d'ID — after / before
Certains endpoints paginent en utilisant le _id d'un élément comme curseur. Vous repassez l'ID du dernier (ou premier) élément vu comme after (ou before) pour récupérer la page adjacente.
Notifications
GET /public/v1/notifications
after— renvoyer les notifications après cet ID de notification.before— renvoyer les notifications avant cet ID de notification.
La réponse est { notifications, unreadCount, count }. Il n'y a pas de champ curseur séparé — le curseur est le _id d'une notification. Pour avancer d'une page, prenez le _id de la dernière notification et passez-le comme after sur la requête suivante :
# 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"
Commentaires de ligne
GET /public/v1/board/{boardId}/table/{tableId}/row/{rowId}/comments
Mêmes paramètres de curseur after / before (IDs de commentaires), plus un filtre visibility (all | internal | external, défaut all). Contrairement aux notifications, cet endpoint renvoie un pageInfo de style relay :
{
"items": [ /* ...comments... */ ],
"pageInfo": {
"endCursor": "665f0a1b2c3d4e5f60718293",
"startCursor": "665f0a1b2c3d4e5f60718210",
"hasNextPage": true,
"hasPreviousPage": false
}
}
Pour avancer d'une page, passez endCursor comme after tant que hasNextPage est true.
Curseur keyset — cursor / nextCursor
Bookings
GET /public/v1/bookings
limit— taille de page, 1–100 (défaut 25).cursor— curseur keyset opaque de la réponse précédente.
La réponse inclut nextCursor et hasMore :
{
"bookings": [ /* ... */ ],
"nextCursor": "eyJpZCI6Ii4uLiJ9",
"hasMore": true
}
Bouclez tant que hasMore est true, en repassant nextCursor comme cursor :
curl "https://api.copera.ai/public/v1/bookings?limit=50&cursor=eyJpZCI6Ii4uLiJ9" \
-H "Authorization: Bearer cp_pat_your_token_here"
Offset — limit / offset
Pagination classique avec un offset numérique.
| Endpoint | limit (défaut / max) | offset |
|---|---|---|
GET /chat/channels | 100 / 200 | depuis 0 |
GET /workspace/members | 100 / 500 | depuis 0 |
GET /workspace/teams | 100 / 200 | depuis 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"
Limit uniquement
Les endpoints de type search plafonnent le nombre de résultats avec limit mais n'offrent pas de curseur de continuation — demandez un limit plus grand (jusqu'au max de l'endpoint) ou affinez votre requête.
| Endpoint | limit (défaut / max) |
|---|---|
GET /search | 50 / 100 |
GET /docs/search | 20 / 50 |
GET /drive/search | 20 / 50 |
Les endpoints d'arbre docs et drive (/docs/tree, /drive/tree) sont bornés par un paramètre depth (défaut 3, max 10) et un parentId, pas par limit/cursor.
Non paginé
Quelques endpoints de liste renvoient l'ensemble complet en une seule réponse :
GET /board/list-boardsGET /board/{boardId}/table/{tableId}/rows— prend en chargeq,filteretsort, mais renvoie toutes les lignes correspondantes.GET /booking-types
Lorsque vous parcourez de grands ensembles de résultats, ajoutez un court délai entre les requêtes pour rester sous la limite de débit par minute, et arrêtez dès qu'un flag hasMore / hasNextPage est false.