Paginering
De drie lijstvormen die de NovaFisko-API teruggeeft, de parameters page en per_page, en de juiste manier om alle pagina's te doorlopen.
Niet alle lijsten zijn gepagineerd. De API geeft drie vormen terug, afhankelijk van de aard van de resource. De referentie vermeldt de vorm van elke route.
| Vorm | Wanneer | Voorbeelden |
|---|---|---|
| Eenvoudige array | Stamgegevens van beperkte omvang | companies, accounts, journals, third-parties, vat-codes, fiscal-years |
| Paginering per pagina | Lijsten die voortdurend groeien | entries, documents, document-imports, bank-transactions, coda-files, history, sync/conflicts |
| Stroom met cursor | Opvolging van wijzigingen | sync/pull |
Eenvoudige arrays
De stamgegevens worden volledig teruggegeven, als een JSON-array op het hoogste niveau. Filter ze met de zoekparameters van de 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
}
]
Paginering per pagina
Parameters
| Parameter | Standaard | Maximum | Beschrijving |
|---|---|---|---|
page |
1 |
Paginanummer, vanaf 1 | |
per_page |
50 |
200 |
Aantal elementen per pagina |
De bankverrichtingen (bank-transactions) vormen een uitzondering: standaard 100 elementen, maximaal 500.
Vorm van het antwoord
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
}
| Veld | Beschrijving |
|---|---|
data |
De elementen van de pagina |
current_page, last_page |
Huidige pagina en laatste pagina |
per_page |
Toegepaste paginagrootte, na begrenzing |
total |
Totaal aantal elementen dat aan de filters beantwoordt |
from, to |
Rang van het eerste en het laatste element van de pagina |
next_page_url, prev_page_url |
URL van de volgende of vorige pagina, null als er geen is |
De URL's in next_page_url en links nemen uw filters niet over (from, to, per_page...). Bouw de URL van de volgende pagina zelf op door page te verhogen en uw parameters te behouden.
Varianten
Enkele routes voegen velden toe aan de standaardpaginering of vereenvoudigen de vorm ervan.
| Route | Bijzonderheid |
|---|---|
sync/conflicts |
Standaardpaginering, plus open: het aantal conflicten dat nog openstaat |
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 en has_more in plaats van total |
firms/{firm}/webhooks/{webhook}/deliveries |
data en meta: {current_page, last_page, per_page, total} |
Ga voor het activiteitenlogboek verder zolang has_more de waarde true heeft.
Alle pagina's doorlopen
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
Volgorde en stabiliteit
De gepagineerde lijsten zijn gesorteerd van recent naar oud (entries op boekingsdatum en daarna op id, history op id). Als er tijdens het doorlopen elementen worden aangemaakt, kan een element van de ene pagina naar de volgende verschuiven en twee keer verschijnen. Twee oplossingen:
- begrens de periode met
fromentotot een gesloten interval; - ontdubbel aan uw kant op
id.
Bevraag de lijsten niet in een lus als u een volledige, bijgewerkte kopie wilt. Laad ze één keer en volg daarna de wijzigingen met sync/pull.
Stroom met cursor
GET sync/pull kent geen pagina's. U geeft de laatst ontvangen cursor door en de route geeft de wijzigingen terug die sindsdien zijn opgetreden.
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"
}
Zolang has_more de waarde true heeft, roept u de route onmiddellijk opnieuw aan met de nieuwe cursor. Het volledige verloop staat in Continu synchroniseren.