Parcourir de longs résultats
Une liste n'est jamais renvoyée d'un coup : elle l'est page par page. Vous demandez une page, vous lisez, vous demandez la suivante.
Les deux paramètres#
| Paramètre | Rôle | Défaut | Limites |
|---|---|---|---|
page | Le numéro de la page | 1 | de 1 à 10 000 |
per_page | Le nombre d'éléments par page | 25 | de 1 à 100 |
curl "https://votre-entreprise.evyooht.com/api/v1/invoices?per_page=100&page=2" \
-H "Authorization: Bearer evy_at_votre_jeton"$headers = @{ Authorization = "Bearer evy_at_votre_jeton" }
Invoke-RestMethod -Uri "https://votre-entreprise.evyooht.com/api/v1/invoices?per_page=100&page=2" -Headers $headersconst response = await fetch("https://votre-entreprise.evyooht.com/api/v1/invoices?per_page=100&page=2", {
headers: { Authorization: "Bearer evy_at_votre_jeton" },
});
const data = await response.json();
console.log(data);$ch = curl_init("https://votre-entreprise.evyooht.com/api/v1/invoices?per_page=100&page=2");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer evy_at_votre_jeton"],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($data);import requests
response = requests.get(
"https://votre-entreprise.evyooht.com/api/v1/invoices",
params={"per_page": 100, "page": 2},
headers={"Authorization": "Bearer evy_at_votre_jeton"},
)
print(response.json())Savoir où on en est#
Chaque réponse porte un bloc meta :
{
"data": [],
"meta": { "page": 2, "per_page": 100, "total": 1391, "total_pages": 14 }
}total: le nombre d'éléments, toutes pages confondues, qui répondent à votre demande (filtres compris).total_pages: combien de pages il y a.- L'en-tête
X-Total-Countrépète le total.
Une page au-delà des données est simplement vide ("data": []) : ce n'est pas une erreur. C'est le signal d'arrêt le plus simple d'une boucle.
Une boucle complète#
// Lit toutes les factures de janvier 2026, page par page.
async function toutesLesFactures(lire) {
const factures = [];
let page = 1;
let totalPages = 1;
do {
const reponse = await lire(`/invoices?date_from=2026-01-01&date_to=2026-01-31&per_page=100&page=${page}`);
factures.push(...reponse.data);
totalPages = reponse.meta.total_pages;
page++;
} while (page <= totalPages);
return factures;
}<?php
// Lit toutes les factures de janvier 2026, page par page.
// $client->lire() est le gestionnaire de la page « S'authentifier ».
function toutesLesFactures(EvyooClient $client): array
{
$factures = [];
$page = 1;
do {
$reponse = $client->lire("/invoices?date_from=2026-01-01&date_to=2026-01-31&per_page=100&page={$page}");
$factures = array_merge($factures, $reponse['data']);
$totalPages = $reponse['meta']['total_pages'];
$page++;
} while ($page <= $totalPages);
return $factures;
}# Lit toutes les factures de janvier 2026, page par page.
# client.lire() est le gestionnaire de la page « S'authentifier ».
def toutes_les_factures(client):
factures = []
page = 1
while True:
reponse = client.lire("/invoices", params={
"date_from": "2026-01-01", "date_to": "2026-01-31", "per_page": 100, "page": page,
})
factures.extend(reponse["data"])
if page >= reponse["meta"]["total_pages"]:
return factures
page += 1Bien trier pour ne rien manquer#
Si des données changent pendant que vous lisez, l'ordre peut bouger entre deux pages. Pour qu'un élément ne soit ni répété ni oublié, gardez le même tri du début à la fin. L'API départage toujours les égalités par l'identifiant : deux pages consécutives, triées pareil, ne se chevauchent jamais.
La limite de 10 000 pages#
Au-delà de 10 000 pages, l'API refuse (400). Ce n'est pas une limite pratique : à 100 par page, cela fait un million d'éléments. Si vous en approchez, filtrez (par date, par client) ou lisez par période.
Pour rester à jour sans tout relire, voir Garder vos données à jour.
Respecter la limite de requêtes#
Chaque page est une requête, et il y a une limite par minute (60 par défaut, selon votre clé). Les en-têtes X-RateLimit-Remaining et X-RateLimit-Reset vous disent où vous en êtes. Voir Erreurs.