Authenticatie
Een sessietoken verkrijgen met auth/login, integratietokens met beperkte bevoegdheden aanmaken en ze veilig gebruiken.
Alle routes van de API, op enkele publieke routes na (status, ping, pricing, auth/login, auth/demo), vereisen een bearer-token in de header Authorization.
GET /v1/auth/me HTTP/1.1
Host: api.novafisko.com
Authorization: Bearer 57|n8Yw2c0vXk4JrPq1LmZs
Accept: application/json
NovaFisko onderscheidt twee soorten tokens.
| Type | Verkregen via | Bereik | Gebruik |
|---|---|---|---|
| Sessietoken | POST /v1/auth/login |
Alle rechten van de gebruiker | NovaFisko-applicaties, persoonlijke scripts |
| Integratietoken | POST /v1/auth/tokens |
Gekozen bevoegdheden: read, write, sync |
Koppeling met een andere oplossing, server-naar-server |
In beide gevallen handelt het token in naam van een gebruiker: het ziet de kantoren en dossiers waartoe die gebruiker toegang heeft, niet meer en niet minder. Een ontoegankelijk dossier antwoordt 404, nooit 403, om het bestaan ervan niet prijs te geven.
Sessietoken
Aanmelden
curl -X POST https://api.novafisko.com/v1/auth/login \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"email": "claire.dumont@fiduciaire-exemple.be",
"password": "votre-mot-de-passe",
"device_name": "script-export-mensuel"
}'
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
email |
string | ja | Adres van de gebruiker |
password |
string | ja | Wachtwoord |
device_name |
string, max. 100 tekens | nee | Naam van het token, standaard api |
Antwoord 201:
{
"token": "57|n8Yw2c0vXk4JrPq1LmZs",
"user": {
"id": 12,
"name": "Claire Dumont",
"email": "claire.dumont@fiduciaire-exemple.be",
"locale": "fr",
"is_platform_admin": false,
"firms": [
{"public_token": "Fd7hQ2mN8sXa", "name": "Fiduciaire Exemple", "role": "admin"}
],
"managed_firms": [
{"public_token": "Fd7hQ2mN8sXa", "name": "Fiduciaire Exemple"}
]
}
}
Onjuiste inloggegevens geven 422 terug met een fout op het veld email. De route is beperkt tot 20 requests per minuut en per IP-adres. Na 10 mislukte pogingen wordt elke poging gedurende 5 minuten geweigerd.
De gebruikers van een Novadesko-kantoor melden zich aan met hun Novadesko-inloggegevens. NovaFisko controleert ze in alleen-lezen en spiegelt daarna bij elke aanmelding het kantoor, de leden en de dossiers.
De huidige gebruiker opvragen
GET /v1/auth/me geeft hetzelfde object user terug als de aanmelding, aangevuld met is_demo (true voor een gebruiker van het demokantoor). Het is de ideale aanroep om te controleren of een token nog geldig is.
Afmelden
POST /v1/auth/logout trekt het token in dat voor de aanroep is gebruikt en antwoordt 204 zonder body.
Integratietokens
Een integratietoken is bedoeld om aan een andere oplossing toe te vertrouwen. Het heeft een naam, een lijst van bevoegdheden, een optionele vervaldatum en de datum van het laatste gebruik.
Bevoegdheden
| Bevoegdheid | Staat toe |
|---|---|
read |
Alle GET- en HEAD-requests |
write |
De POST-, PUT-, PATCH- en DELETE-requests |
sync |
De routes companies/{company}/sync/* (bootstrap, pull, push, status, conflicts), ongeacht de methode |
De zes routes voor offline synchronisatie vereisen enkel sync. Een connector die alleen de wijzigingen volgt met sync/pull heeft dus noch read noch write nodig. De route POST companies/{company}/sync/novadesko, die de import vanuit Novadesko opnieuw start, hoort daar niet bij: ze valt onder write.
Een token aanmaken
Voor het aanmaken is een sessietoken vereist: een integratietoken kan geen andere tokens aanmaken.
curl -X POST https://api.novafisko.com/v1/auth/tokens \
-H "Authorization: Bearer 57|n8Yw2c0vXk4JrPq1LmZs" \
-H "Content-Type: application/json" \
-d '{
"name": "Connecteur ERP Atelier",
"abilities": ["read", "write"],
"expires_in_days": 365
}'
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
name |
string, max. 100 tekens | ja | Leesbare naam, getoond in de lijst |
abilities |
array | ja, minimaal 1 waarde | Uit read, write, sync |
expires_in_days |
geheel getal van 1 tot 730, of null |
nee | Levensduur; null of afwezig: geen vervaldatum |
Antwoord 201:
{
"token": "83|4Hq7ZtVb2Mx9KcLp0RsWyE1uNaJd6FgT",
"integration_token": {
"id": 83,
"name": "Connecteur ERP Atelier",
"abilities": ["read", "write"],
"created_at": "2026-10-05T08:30:11+00:00",
"expires_at": "2027-10-05T08:30:11+00:00",
"last_used_at": null
}
}
Een gebruiker kan maximaal 50 integratietokens bezitten. Daarboven antwoordt het aanmaken 422 met de code token_limit_reached. De route is beperkt tot 20 aanmaken per minuut.
De waarde token wordt slechts één keer getoond, in dit antwoord. NovaFisko bewaart er enkel een vingerafdruk van. Als u ze kwijtraakt, verwijder dan het token en maak een nieuw aan.
De tokens oplijsten
curl https://api.novafisko.com/v1/auth/tokens \
-H "Authorization: Bearer 57|n8Yw2c0vXk4JrPq1LmZs"
{
"data": [
{
"id": 83,
"name": "Connecteur ERP Atelier",
"abilities": ["read", "write"],
"created_at": "2026-10-05T08:30:11+00:00",
"expires_at": "2027-10-05T08:30:11+00:00",
"last_used_at": "2026-10-05T09:02:47+00:00"
}
]
}
Alleen uw eigen integratietokens worden opgelijst. De sessietokens van de applicaties staan er niet in.
Een token intrekken
curl -X DELETE https://api.novafisko.com/v1/auth/tokens/83 \
-H "Authorization: Bearer 57|n8Yw2c0vXk4JrPq1LmZs"
Het antwoord is 204. Het token werkt onmiddellijk niet meer. Een onbekende id, of een id die niet bij een van uw integratietokens hoort, antwoordt 404.
Authenticatiefouten
| Status | code |
Oorzaak | Wat te doen |
|---|---|---|---|
401 |
afwezig | Token ontbreekt, is ingetrokken of vervallen | Een nieuw token verkrijgen |
403 |
token_ability_missing |
Het integratietoken heeft de vereiste bevoegdheid niet | Een token aanmaken met de bevoegdheid vermeld in required_ability |
403 |
session_token_required |
Route voorbehouden aan sessietokens (auth/tokens) |
Een token uit auth/login gebruiken |
403 |
demo_mode |
Extern effect geprobeerd vanuit het demokantoor | Deze actie testen op een echt kantoor |
422 |
token_limit_reached |
Er bestaan al 50 integratietokens | De ongebruikte tokens intrekken |
422 |
afwezig | Onjuiste inloggegevens of te veel pogingen | errors.email lezen |
Voorbeeld van een weigering wegens ontbrekende bevoegdheid:
{
"message": "Ce jeton n'a pas la capacité requise pour cette action.",
"code": "token_ability_missing",
"required_ability": "write"
}
Goede praktijken
- Eén token per integratie. U kunt er één intrekken zonder de andere te onderbreken, en de kolom met het laatste gebruik blijft leesbaar.
- Zo weinig mogelijk bevoegdheden. Een rapporteringstool heeft alleen
readnodig. - Een vervaldatum. Stel
expires_in_daysin en plan de vernieuwing vóór de vervaldag. - Een aparte gebruiker. Maak in het kantoor een medewerker aan die voorbehouden is aan de integratie, met de strikt noodzakelijke rol. De geschiedenis toont dan duidelijk wat de integratie heeft gedaan.
- Versleutelde opslag. Bewaar het token in een secrets manager of een omgevingsvariabele, nooit in de broncode, een Git-repository of een applicatie die in de browser van uw klanten draait.
- Alleen HTTPS. Verstuur het token nooit over een onversleutelde verbinding en plaats het niet in een URL.
Als een token mogelijk is gelekt, trek het dan meteen in met DELETE /v1/auth/tokens/{id}. Raadpleeg daarna het tabblad Geschiedenis van de betrokken dossiers om de uitgevoerde acties te controleren.