Skip to content

Pagination

Trois styles coexistent dans l'API. Ils ne sont pas interchangeables — chaque endpoint en utilise un, et l'enveloppe de la réponse vous dit lequel.

StyleUtilisé parPourquoi
Pagination par page (?page=N&limit=M)GET /transactions, GET /customers, GET /payment-linksStable, triable par created_at, convient aux UI dashboard "page 1 sur 7"
Limit/Offset (?limit=M&offset=N)GET /subscriptionsPermet aux workers de progresser par blocs sans état partagé
Implicite / non paginéGET /customers/{id}/payment-tokens, GET /zapier/sample-paymentsToujours petit (cartes par client, 3 échantillons)

Tous les endpoints paginés plafonnent limit à 100 et utilisent par défaut 25 (ou 20 pour /subscriptions).

Pagination par page

http
GET /api/v1/transactions?page=2&limit=50&status=captured
json
{
  "data": [ /* jusqu'à 50 transactions */ ],
  "meta": {
    "current_page": 2,
    "last_page": 14,
    "per_page": 50,
    "total": 692
  }
}

Avancez en incrémentant page jusqu'à current_page === last_page. Filtrer par dates from / to réduit last_page.

Limit/Offset

http
GET /api/v1/subscriptions?status=active&limit=50&offset=100
json
{
  "data": [ /* jusqu'à 50 abonnements */ ],
  "total": 412,
  "limit": 50,
  "offset": 100
}

Avancez en ajoutant limit à offset jusqu'à ce que offset + limit >= total. Stable entre appels tant qu'aucun nouvel abonnement n'est inséré pendant le parcours ; pour les exports nocturnes nous recommandons de fixer une borne supérieure created_at via un filtre de date sur la ressource sous-jacente si disponible.

Choisir la taille de page

  • Pour les UI interactives, utilisez 25 — réponse sous ~200 KB.
  • Pour les workers / exports, préférez 100 — moins d'aller-retours.
  • limit > 100 est plafonné à 100 ; vous aurez 100 lignes et per_page: 100 dans le meta.

Exemples de code

js
// Node — parcourir chaque abonnement actif
async function walkSubscriptions(merchantKey) {
  let offset = 0, limit = 100
  while (true) {
    const r = await fetch(
      `https://app.geniuscheckout.com/api/v1/subscriptions?status=active&limit=${limit}&offset=${offset}`,
      { headers: { Authorization: `Bearer ${merchantKey}` } },
    )
    const { data, total } = await r.json()
    for (const sub of data) yield sub
    offset += limit
    if (offset >= total) break
  }
}
php
// PHP — parcourir chaque transaction du mois
$page = 1;
do {
    $r = json_decode(file_get_contents(
        "https://app.geniuscheckout.com/api/v1/transactions?page={$page}&limit=100&from=2026-05-01",
        false,
        stream_context_create(['http' => ['header' => "Authorization: Bearer {$key}"]])
    ), true);
    foreach ($r['data'] as $txn) {
        // …
    }
    $page++;
} while ($page <= $r['meta']['last_page']);

Pourquoi trois styles ?

Différents endpoints ont des besoins de cohérence différents. Les lectures de tables financières (/transactions, /customers) veulent des numéros de page stables pour les tableaux de bord. Les lectures de jobs en arrière-plan (/subscriptions) veulent des curseurs offset qu'un worker peut parcourir pendant que de nouveaux enregistrements apparaissent sans en sauter. Nous avons unifié sur les deux styles qui correspondent à l'usage réel plutôt que de forcer un style unique là où il ne convient pas. Les nouveaux endpoints penchent vers limit/offset.

Suite

Released under the proprietary Genius Checkout license.