Pagination
Pagination par offset avec per_page et page, ou par curseur pour les gros exports.
Chaque endpoint de liste renvoie un tableau items et un objet meta. Deux modes partagent le
même endpoint : la pagination par offset par défaut, la pagination par curseur dès que vous
envoyez un cursor. Une page numérotée porte aussi le next_cursor qui la prolonge : un parcours
par curseur commence donc par une requête ordinaire. meta vous indique quel mode a répondu :
current_page en mode offset, prev_cursor en mode curseur.
https://api.wajub.com/paymentsParamètres
per_pageintegerfacultatifdéfaut : 25422. Les listes de taxes sont à 50 par défaut.pageintegerfacultatifdéfaut : 1422.cursorstringfacultatifmeta.next_cursor ou le meta.prev_cursor d'une réponse précédente, page numérotée comprise. L'envoyer fait passer l'endpoint en mode curseur et page est ignoré. Renvoyez-le tel qu'il a été reçu : un curseur que Wajub n'a pas renvoyé, ou qui a été modifié, renvoie un 422 sur cursor.Les filtres dépendent de la ressource, ils ne sont pas globaux. Sur GET /payments :
statusstringfacultatifpending, processing, succeeded, expired, partial, failed, cancelled, refunded, partially_refunded.date_fromdatefacultatifcreated_at, au format YYYY-MM-DD.date_todatefacultatifcreated_at. Ne doit pas précéder date_from.amount_minnumberfacultatifamount_maxnumberfacultatifamount_min.searchstringfacultatifPagination par offset
Le mode par défaut. Demandez un numéro de page, vous recevez un meta qui indique combien il y en
a au total, et d'où repartir avec un curseur :
https://api.wajub.com/payments?per_page=2&status=succeededcurl "https://api.wajub.com/payments?per_page=2&status=succeeded" \
-H "Authorization: $WAJUB_API_KEY"has_more indique si une page suit celle-ci, et next_cursor est le curseur du dernier élément
de la page : null sur la dernière page. Les deux sont là pour vous permettre de
continuer avec un curseur. Pour rester en mode offset, ignorez-les.
Bouclez jusqu'à ce que current_page atteigne last_page. Utilisez la plus grande taille de page
possible, 100, pour qu'un historique de 137 éléments tienne en deux requêtes au lieu de six :
async function allPayments(filters = {}) {
const all = [];
let page = 1;
while (true) {
const params = new URLSearchParams({ ...filters, per_page: '100', page: String(page) });
const res = await fetch(`https://api.wajub.com/payments?${params}`, {
headers: { Authorization: process.env.WAJUB_API_KEY },
});
const { items, meta } = await res.json();
all.push(...items);
if (page >= meta.last_page) break;
page += 1;
}
return all;
}Pagination par curseur
Les pages par offset se décalent quand de nouveaux éléments arrivent pendant votre parcours, et
ralentissent sur un long historique. Les curseurs évitent les deux : passez cursor et chaque page
est ancrée sur le dernier élément que vous avez vu.
Vous n'avez aucun curseur à envoyer à la première requête : commencez donc sans. La première page
est une page numérotée, et son meta porte next_cursor. Renvoyez-le comme cursor et le
parcours continue en mode curseur, juste après le dernier élément reçu, sans élément sauté ni
servi deux fois. Cela vaut depuis n'importe quelle page numérotée, pas seulement la première.
meta change de forme en mode curseur. current_page, last_page et total disparaissent,
remplacés par :
Renvoyez next_cursor comme cursor et arrêtez-vous quand has_more vaut false :
async function* streamPayments() {
// Pas de curseur à la première requête : cette page porte déjà next_cursor.
let cursor = null;
do {
const params = new URLSearchParams({ per_page: '100' });
if (cursor) params.set('cursor', cursor);
const res = await fetch(`https://api.wajub.com/payments?${params}`, {
headers: { Authorization: process.env.WAJUB_API_KEY },
});
const { items, meta } = await res.json();
yield* items;
cursor = meta.has_more ? meta.next_cursor : null;
} while (cursor);
}Endpoints et modes pris en charge
Le mode curseur est disponible partout où la liste a un tri stable sur created_at. Trois listes
ne proposent que l'offset : leur meta n'a ni next_cursor ni has_more.
| Endpoint | Offset | Curseur | Clé de la liste |
|---|---|---|---|
GET /payments | Oui | Oui | items |
GET /transfers | Oui | Oui | items |
GET /refunds | Oui | Oui | items |
GET /customers | Oui | Oui | items |
GET /beneficiaries | Oui | Oui | items |
GET /invoices | Oui | Oui | items |
GET /links | Oui | Oui | items |
GET /accounts | Oui | Oui | items |
GET /disputes | Oui | Oui | items |
GET /webhooks | Oui | Oui | items |
GET /events | Oui | Non | events |
GET /tax/codes, /tax/jurisdictions | Oui | Non | voir Taxes |
GET /invoices et GET /links acceptent sort_by et sort_dir. Le mode curseur a besoin de
leur ordre par défaut, du plus récent au plus ancien : avec un autre tri, cursor est ignoré et
la page numérotée ne porte ni next_cursor ni has_more. Paginez alors par numéro.
Events fait exception
GET /events renvoie ses éléments sous events, pas items, et ignore cursor. Un client qui
lit items sur chaque liste y verra en silence une page vide.
Préférez les webhooks au polling
Pour réagir à un changement de statut, abonnez-vous aux webhooks au lieu de paginer en boucle. La pagination sert aux exports, au rapprochement et aux écrans d'historique.