Aller au contenu
LinkProfit

Pagination

Pagination par curseur sur chaque endpoint de liste : l’enveloppe, les limites et une boucle d’itération prête à copier.

Mis à jour le 13 août 2026

Chaque endpoint de liste pagine avec un curseur opaque. Les curseurs sont stables face aux insertions et aux suppressions : contrairement aux numéros de page, ils ne sautent ni ne dupliquent jamais de lignes pendant que vous itérez.

L’enveloppe

{
  "data": [ { "id": "lnk_…" }, { "id": "lnk_…" } ],
  "pagination": {
    "next_cursor": "eyJpZCI6Imxua19hYmMiLCJjcmVhdGVkX2F0IjoiMjAyNi0uLi4ifQ",
    "has_more": true
  }
}
  • limit — taille de page, de 1 à 100, 50 par défaut.
  • cursor — le next_cursor de la page précédente, transmis tel quel.
  • next_cursor vaut null sur la dernière page.

Traitez le curseur comme une chaîne opaque : son format peut changer, seule sa restitution à l’identique est garantie. Un curseur mal formé répond 400 invalid_request plutôt que de repartir silencieusement de la première page.

Itérer

curl -s "$LINKPROFIT_API_BASE/links?limit=100" \
  -H "Authorization: Bearer $LINKPROFIT_API_KEY"
# puis avec la valeur next_cursor renvoyée par la réponse :
curl -s "$LINKPROFIT_API_BASE/links?limit=100&cursor=CURSOR_FROM_PREVIOUS_PAGE" \
  -H "Authorization: Bearer $LINKPROFIT_API_KEY"
async function* allLinks(base, key) {
  let cursor = null;
  do {
    const url = new URL(`${base}/links`);
    url.searchParams.set("limit", "100");
    if (cursor) url.searchParams.set("cursor", cursor);

    const response = await fetch(url, {
      headers: { Authorization: `Bearer ${key}` },
    });
    if (!response.ok) throw new Error(`HTTP ${response.status}`);

    const page = await response.json();
    yield* page.data;
    cursor = page.pagination.next_cursor;
  } while (cursor);
}

Où les curseurs s’appliquent

La pagination par curseur est disponible sur /links, /events, /partner/clients et /webhooks/{id}/deliveries. Les listes courtes — domaines, forfaits, webhooks — reviennent en une seule page avec has_more: false ; les paiements et versements sont filtrés par period et plafonnés à 100 lignes par requête.

Le tri est du plus récent au plus ancien partout, sauf sur /partner/clients, qui pagine dans un ordre d’identifiants stable.