Evyoo POS API v1

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ètreRôleDéfautLimites
pageLe numéro de la page1de 1 à 10 000
per_pageLe nombre d'éléments par page25de 1 à 100
bash
curl "https://votre-entreprise.evyooht.com/api/v1/invoices?per_page=100&page=2" \
  -H "Authorization: Bearer evy_at_votre_jeton"
powershell
$headers = @{ Authorization = "Bearer evy_at_votre_jeton" }
Invoke-RestMethod -Uri "https://votre-entreprise.evyooht.com/api/v1/invoices?per_page=100&page=2" -Headers $headers
javascript
const 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);
php
$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);
python
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 :

json
{
  "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-Count ré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#

javascript
// 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
<?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;
}
python
# 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 += 1

Bien 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.