Aller au contenu
Documentation
Français
Ouvrir l'application

Pagination

Les trois formes de listes renvoyées par l'API NovaFisko, les paramètres page et per_page, et la bonne manière de parcourir toutes les pages.

Toutes les listes ne sont pas paginées. L'API renvoie trois formes selon la nature de la ressource. La référence précise la forme de chaque route.

Forme Quand Exemples
Tableau simple Référentiels de taille limitée companies, accounts, journals, third-parties, vat-codes, fiscal-years
Pagination par page Listes qui grandissent sans cesse entries, documents, document-imports, bank-transactions, coda-files, history, sync/conflicts
Flux par curseur Suivi des changements sync/pull

Tableaux simples

Les référentiels sont renvoyés entiers, sous la forme d'un tableau JSON à la racine. Filtrez-les avec les paramètres de recherche de la route.

curl "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/third-parties?type=supplier&q=brasserie" \
  -H "Authorization: Bearer $NOVAFISKO_TOKEN"
[
  {
    "id": 41,
    "type": "supplier",
    "code": "BRASSCOL",
    "name": "Brasserie des Collines SA",
    "vat_number": "BE0999900134",
    "version": 3
  }
]

Pagination par page

Paramètres

Paramètre Défaut Maximum Description
page 1 Numéro de la page, à partir de 1
per_page 50 200 Nombre d'éléments par page

Les mouvements bancaires (bank-transactions) font exception : 100 éléments par défaut, 500 au maximum.

Forme de la réponse

curl "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/entries?from=2026-07-01&to=2026-09-30&per_page=2&page=1" \
  -H "Authorization: Bearer $NOVAFISKO_TOKEN"
{
  "current_page": 1,
  "data": [
    {
      "id": 1842,
      "journal_id": 3,
      "number": 212,
      "entry_date": "2026-09-30T00:00:00.000000Z",
      "label": "Brasserie des Collines SA",
      "reference": "F-2026-0918",
      "status": "posted",
      "journal": {"id": 3, "code": "ACH", "type": "purchase"},
      "third_party": {"id": 41, "name": "Brasserie des Collines SA"},
      "lines": [
        {"id": 5521, "account_id": 118, "debit": "1250.00", "credit": "0.00", "account": {"id": 118, "number": "604000", "label": "Achats de marchandises"}},
        {"id": 5522, "account_id": 77, "debit": "262.50", "credit": "0.00", "account": {"id": 77, "number": "411000", "label": "TVA à récupérer"}},
        {"id": 5523, "account_id": 90, "debit": "0.00", "credit": "1512.50", "account": {"id": 90, "number": "440000", "label": "Fournisseurs"}}
      ]
    }
  ],
  "first_page_url": "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/entries?page=1",
  "from": 1,
  "last_page": 87,
  "last_page_url": "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/entries?page=87",
  "links": [
    {"url": null, "label": "« Précédent", "active": false},
    {"url": "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/entries?page=1", "label": "1", "active": true}
  ],
  "next_page_url": "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/entries?page=2",
  "path": "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/entries",
  "per_page": 2,
  "prev_page_url": null,
  "to": 2,
  "total": 173
}
Champ Description
data Les éléments de la page
current_page, last_page Page courante et dernière page
per_page Taille de page appliquée, après plafonnement
total Nombre total d'éléments correspondant aux filtres
from, to Rang du premier et du dernier élément de la page
next_page_url, prev_page_url URL de la page suivante ou précédente, null s'il n'y en a pas
Attention

Les URL contenues dans next_page_url et links ne reprennent pas vos filtres (from, to, per_page...). Construisez vous-même l'URL de la page suivante en incrémentant page et en conservant vos paramètres.

Variantes

Quelques routes ajoutent des champs à la pagination standard ou en simplifient la forme.

Route Particularité
sync/conflicts Pagination standard, plus open : le nombre de conflits encore ouverts
trash data, current_page, per_page, last_page, total, plus counts, types, retention_days, can_purge
activity, firms/{firm}/activity data, current_page, per_page et has_more au lieu de total
firms/{firm}/webhooks/{webhook}/deliveries data et meta : {current_page, last_page, per_page, total}

Pour le journal d'activité, avancez tant que has_more vaut true.

Parcourir toutes les pages

use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'https://api.novafisko.com/v1/',
    'headers' => ['Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'), 'Accept' => 'application/json'],
]);

$page = 1;
do {
    $response = json_decode((string) $client->get("companies/{$company}/entries", [
        'query' => ['fiscal_year_id' => 7, 'per_page' => 200, 'page' => $page],
    ])->getBody(), true);

    foreach ($response['data'] as $entry) {
        // Handle one entry
    }
    $page++;
} while ($page <= $response['last_page']);
import os
import requests

session = requests.Session()
session.headers.update({"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}", "Accept": "application/json"})

def all_entries(company, **filters):
    page = 1
    while True:
        payload = session.get(
            f"https://api.novafisko.com/v1/companies/{company}/entries",
            params={**filters, "per_page": 200, "page": page},
            timeout=60,
        ).json()
        yield from payload["data"]
        if page >= payload["last_page"]:
            break
        page += 1

Ordre et stabilité

Les listes paginées sont triées du plus récent au plus ancien (entries par date d'écriture puis par id, history par id). Si des éléments sont créés pendant votre parcours, un élément peut glisser d'une page à la suivante et apparaître deux fois. Deux parades :

  • bornez la période avec from et to sur un intervalle clos ;
  • dédoublonnez sur id de votre côté.
Astuce

Pour une copie complète tenue à jour, n'interrogez pas les listes en boucle. Chargez-les une fois, puis suivez les changements avec sync/pull.

Flux par curseur

GET sync/pull ne connaît pas de pages. Vous lui donnez le dernier curseur reçu et il renvoie les changements survenus depuis.

curl "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/sync/pull?since=48211&limit=500" \
  -H "Authorization: Bearer $NOVAFISKO_TOKEN"
{
  "cursor": 48236,
  "has_more": false,
  "full_resync": false,
  "changes": [
    {"resource": "third_parties", "op": "upsert", "id": 41, "version": 4, "data": {"id": 41, "name": "Brasserie des Collines SA"}, "changed_at": "2026-10-05T08:41:02+00:00", "seq": 48236}
  ],
  "server_time": "2026-10-05T08:41:09+00:00"
}

Tant que has_more vaut true, rappelez immédiatement la route avec le nouveau cursor. Le déroulé complet figure dans Synchroniser en continu.

Voir aussi