Référence de l'API
Référence complète de l'API NovaFisko v1, générée depuis la spécification OpenAPI, avec paramètres, schémas et exemples pour chaque route.
Cette référence est générée à partir de la spécification OpenAPI 3.1 de NovaFisko. Elle décrit chaque route avec ses paramètres, le corps attendu, les réponses possibles et un exemple d'appel en curl, PHP, JavaScript et Python.
Toutes les routes sont relatives à https://api.novafisko.com/v1 et exigent, sauf mention contraire, l'en-tête Authorization: Bearer <jeton>. Les routes sont regroupées par domaine. Les schémas se déplient d'un clic et chaque exemple se copie avec le bouton Copier.
Vous préférez travailler dans votre propre outil ? Téléchargez la spécification en JSON ou en YAML, ou importez la collection Postman.
Si vous découvrez l'API, commencez par la vue d'ensemble, l'authentification et les conventions. Les cas d'usage montrent comment enchaîner les appels.
Référence complète de l'API NovaFisko v1.0.0 : 240 points d'accès regroupés par domaine, générés depuis la spécification OpenAPI 3.1. Dépliez un point d'accès pour voir ses paramètres, son corps, ses réponses et un exemple d'appel.
Les résumés et descriptions des points d'accès sont en anglais : ils proviennent directement de la spécification.
https://api.novafisko.comEntêtes et paramètres communs Idempotence, verrou optimiste, appareil, langue et URL signées : décrits une fois ici.
| Nom | Type | Description |
|---|---|---|
Accept-Languageheader | string | Language of the translated messages and labels (fr, nl, en, de). The language of the authenticated user wins when it is set; several endpoints also accept ?lang=.fr nl en de |
X-Client-Mutation-Idheader | string | Idempotence key chosen by the client (64 characters max, a UUID is recommended). A request replayed with the same key returns the memorised result with status 200 and X-Idempotent-Replay: 1; nothing is executed twice.ex. b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11 |
X-Base-Versionheader | integer | Optimistic lock (opt-in): the version of the record the client last read. When the record moved on the server the answer is 409 conflict with server_version and server_data, and nothing is changed.ex. 3 |
X-Operation-Idheader | string <uuid> | UUID grouping every change of the request in the history (generated when absent). Returned in the response when something was recorded: it is the handle of « undo ». |
X-Device-Idheader | string | Stable id of the app install or of the integration (64 characters max). Shown in the history and in the synchronisation status. ex. erp-connector-01 |
X-Device-Nameheader | string | Readable device name, percent-encoded (120 characters max). ex. ERP%20connector |
X-Occurred-Atheader | string <date-time> | ISO 8601 date of the action on the client. Bounded to ±24 h around the server time; used to rank conflicts. |
X-Originheader | string | offline_sync when the request replays an action made offline.offline_sync |
signaturequery | string | Signature of the URL (issued by the API). |
expiresquery | integer | Unix timestamp after which the signed URL is refused. |
Entêtes de réponse
| Entête de réponse | Description |
|---|---|
X-Operation-Id | Operation id under which the changes of the request were recorded in the history. Present only when something was recorded. |
X-Trashed | 1 when the DELETE moved the record to the recycle bin (restorable) instead of destroying it. |
X-Idempotent-Replay | 1 when the answer is the memorised result of a previous request carrying the same X-Client-Mutation-Id. |
X-Export-Fingerprint | SHA-256 of the exported data set: two exports of the same data carry the same fingerprint. |
Content-Disposition | File name of the download (attachment; filename="…") or inline for previews. |
X-RateLimit-Limit | Maximum number of requests in the current window. |
X-RateLimit-Remaining | Requests left in the current window. |
Retry-After | Seconds to wait before the next attempt. |
Meta
Service status, connectivity probe and country packs.
GET/API root Public
Name and version of the API.
Public endpoint: no bearer token.
Réponses
200OK
application/json
Schéma object
namestringex.NovaFisko APIversionstringex.v1statusstringex.ok
Exemple
{
"name": "NovaFisko API",
"version": "v1",
"status": "ok"
}Exemple d'appel
curl -X GET "https://api.novafisko.com/" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/', [
'headers' => [
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/",
headers={
"Accept": "application/json",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/statusService status Public
Public endpoint: no bearer token.
Identifiant d'opération status
Réponses
200OK
application/json
Schéma object
okbooleantimestring <date-time>
Exemple
{
"ok": true,
"time": "2026-03-15T09:41:00+00:00"
}Exemple d'appel
curl -X GET "https://api.novafisko.com/v1/status" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/status', [
'headers' => [
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/status", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/status",
headers={
"Accept": "application/json",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/pingConnectivity probe Public
Cheap probe without database access. The apps call it to leave offline mode; integrations can use it as a health check and to read the server clock.
Public endpoint: no bearer token.
Réponses
200OK
application/json
Schéma object
okbooleanserver_timestring <date-time>
Exemple
{
"ok": true,
"server_time": "2026-03-15T09:41:00+00:00"
}Exemple d'appel
curl -X GET "https://api.novafisko.com/v1/ping" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/ping', [
'headers' => [
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/ping", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/ping",
headers={
"Accept": "application/json",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/country-packsAvailable country packs read
Country packs (chart of accounts, VAT codes, journals) a company file can be created with.
Integration tokens need the read ability.
Identifiant d'opération country-packs
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object[]
Tableau de
codestringBEFRLUcurrencystringex.EURvat_regimesstring[]monthlyquarterlyfranchiseexemptunit
Exemple
[
{
"code": "BE",
"currency": "EUR",
"vat_regimes": [
"monthly"
]
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/country-packs" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/country-packs', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/country-packs", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/country-packs",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneAuth
Sign-in, account of the user, demo session.
POST/v1/auth/loginSign in Public 20 / 1 min
Exchanges an e-mail and a password for a session token (all abilities). Novadesko fiduciary users sign in with their Novadesko credentials: firm, team and company files are mirrored at each sign-in. Ten failed attempts per IP lock the sign-in for five minutes.
Public endpoint: no bearer token.
Rate limit: 20 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération auth.login
Corps de la requête
application/json
Schéma object
emailstring <email>requispasswordstringrequisex.••••••••device_namestringLabel of the token (100 characters max).ex.MacBook de Claire
Exemple
{
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "correct horse battery staple",
"device_name": "ERP connector"
}Réponses
201Signed in
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
tokenstringBearer token, shown once.userUser
Exemple
{
"token": "57|Qm9x2kL8vT4nR7sW1pZ5cY3hJ6dF0gA9bE2uI4oK",
"user": {
"id": 12,
"name": "Claire Dumont",
"email": "claire.dumont@fiduciaire-dumont.be",
"locale": "fr",
"email_verified": true,
"pending_email": null,
"is_platform_admin": false,
"is_demo": false,
"firms": [
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés",
"role": "admin"
}
],
"managed_firms": [
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
}
]
}
}errors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/auth/login" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "correct horse battery staple",
"device_name": "ERP connector"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/auth/login', [
'headers' => [
'Accept' => 'application/json',
],
'json' => [
'email' => 'claire.dumont@fiduciaire-dumont.be',
'password' => 'correct horse battery staple',
'device_name' => 'ERP connector',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/login", {
method: "POST",
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
},
body: JSON.stringify({
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "correct horse battery staple",
"device_name": "ERP connector"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/auth/login",
headers={
"Accept": "application/json",
},
json={
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "correct horse battery staple",
"device_name": "ERP connector"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/auth/demoSign in to the demo Public 10 / 1 min
Creates an ephemeral user attached to the demo firm (« Fiduciaire Démo », four realistic Belgian company files) and returns its token. Local bookkeeping is allowed (entries, lettering, VAT declarations, exports, history, recycle bin, synchronisation); every external effect answers 403 demo_mode: Peppol, Novadesko, e-mails and reminders, integrations, licence keys, team and firm management, company creation and deletion, webhooks and integration tokens, company lookups and VIES, uploads and analysis of the document importer, SEPA files (operations flagged x-demo-blocked). A demo user never reaches anything outside the demo firm (404). The demo data is reset every night and demo users are purged after 24 hours.
Public endpoint: no bearer token.
Rate limit: 10 requests per minute (429 beyond, see Retry-After).
Error codes (code):
demo_unavailable: the demo data set is not available right now
Identifiant d'opération auth.demo
Corps de la requête facultatif
application/json
Schéma object
localestringfrnlendedevice_namestring100 characters max.
Exemple
{
"locale": "fr"
}Réponses
201Demo session opened
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
tokenstringuserUserdemoobjectPropriétés
firmobjectPropriétés
public_tokenstringnamestringex.Fiduciaire Démo
companiesobject[]Propriétés
public_tokenstringcodestringex.COMPTOIRnamestringex.Le Comptoir Montois SRL
expires_atstring <date-time>End of life of the demo user.resets_atstring <date-time>Next nightly reset of the demo data.
Exemple
{
"token": "XBVD5O1L29HC",
"user": {
"id": 12,
"name": "Claire Dumont",
"email": "claire.dumont@fiduciaire-dumont.be",
"locale": "fr",
"email_verified": true,
"pending_email": "claire.dumont@fiduciaire-dumont.be",
"is_platform_admin": false,
"is_demo": false,
"firms": [
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés",
"role": "admin"
}
],
"managed_firms": [
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
}
]
},
"demo": {
"firm": {
"public_token": "XBVD5O1L29HC",
"name": "Fiduciaire Démo"
},
"companies": [
{
"public_token": "XBVD5O1L29HC",
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL"
}
],
"expires_at": "2026-03-15T09:41:00+00:00",
"resets_at": "2026-03-15T09:41:00+00:00"
}
}errors maps each field to its messages; code is present when the refusal has a machine reason. Error503The demo firm is not seeded (demo_unavailable).
application/json
Schéma Error
Exemple
{
"message": "La démonstration est momentanément indisponible.",
"code": "demo_unavailable"
}Exemple d'appel
curl -X POST "https://api.novafisko.com/v1/auth/demo" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"locale": "fr"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/auth/demo', [
'headers' => [
'Accept' => 'application/json',
],
'json' => [
'locale' => 'fr',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/demo", {
method: "POST",
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
},
body: JSON.stringify({
"locale": "fr"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/auth/demo",
headers={
"Accept": "application/json",
},
json={
"locale": "fr"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/auth/meCurrent user read
User behind the token, with the firms it belongs to and is_demo.
Integration tokens need the read ability.
Identifiant d'opération auth.me
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma User
Exemple
{
"id": 12,
"name": "Claire Dumont",
"email": "claire.dumont@fiduciaire-dumont.be",
"locale": "fr",
"email_verified": true,
"pending_email": null,
"is_platform_admin": false,
"is_demo": false,
"firms": [
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés",
"role": "admin"
}
],
"managed_firms": [
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/auth/me" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/auth/me', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/me", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/auth/me",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/auth/logoutSign out write
Revokes the token used for the request.
Integration tokens need the write ability.
Identifiant d'opération auth.logout
Entêtes communs : Accept-Language
Réponses
204Token revoked.
Pas de corps.
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/auth/logout" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/auth/logout', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/logout", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/auth/logout",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/auth/forgot-passwordAsk for a password reset Public 5 / 1 min
Always answers the same generic message, whether the account exists or not.
Public endpoint: no bearer token.
Rate limit: 5 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération auth.forgot-password
Corps de la requête
application/json
Schéma object
emailstring <email>requislocalestringfrnlende
Exemple
{
"email": "claire.dumont@fiduciaire-dumont.be",
"locale": "fr"
}Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma Message
Exemple
{
"message": "Mot de passe modifié."
}errors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/auth/forgot-password" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"email": "claire.dumont@fiduciaire-dumont.be",
"locale": "fr"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/auth/forgot-password', [
'headers' => [
'Accept' => 'application/json',
],
'json' => [
'email' => 'claire.dumont@fiduciaire-dumont.be',
'locale' => 'fr',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/forgot-password", {
method: "POST",
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
},
body: JSON.stringify({
"email": "claire.dumont@fiduciaire-dumont.be",
"locale": "fr"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/auth/forgot-password",
headers={
"Accept": "application/json",
},
json={
"email": "claire.dumont@fiduciaire-dumont.be",
"locale": "fr"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/auth/reset-passwordReset the password Public 10 / 1 min
With the token of the reset mail. Every device is signed out.
Public endpoint: no bearer token.
Rate limit: 10 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération auth.reset-password
Corps de la requête
application/json
Schéma object
tokenstringrequisemailstring <email>requispasswordstringrequis8 characters at least.password_confirmationstringrequis
Exemple
{
"token": "XBVD5O1L29HC",
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "string",
"password_confirmation": "string"
}Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma Message
Exemple
{
"message": "Mot de passe modifié."
}errors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/auth/reset-password" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"token": "XBVD5O1L29HC",
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "string",
"password_confirmation": "string"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/auth/reset-password', [
'headers' => [
'Accept' => 'application/json',
],
'json' => [
'token' => 'XBVD5O1L29HC',
'email' => 'claire.dumont@fiduciaire-dumont.be',
'password' => 'string',
'password_confirmation' => 'string',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/reset-password", {
method: "POST",
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
},
body: JSON.stringify({
"token": "XBVD5O1L29HC",
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "string",
"password_confirmation": "string"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/auth/reset-password",
headers={
"Accept": "application/json",
},
json={
"token": "XBVD5O1L29HC",
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "string",
"password_confirmation": "string"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/auth/email/verify/{id}/{hash}Confirm an e-mail address URL signée 30 / 1 min
Signed link of the verification mail. Opened in a browser it redirects to the app; with format=json it answers JSON.
Authorised by the signature of the URL (query parameters signature and expires), not by a bearer token. The URL is issued by another endpoint and expires.
Rate limit: 30 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération auth.email.verify
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
id requis | integer | Id of the record. ex. 42 |
hash requis | string | SHA-1 of the e-mail address being confirmed. ex. 5f2b8c… |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
format | string | Answer JSON instead of redirecting.json |
Entêtes communs : signature expires
Réponses
200Confirmed (format=json).
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
verifiedboolean
Exemple
{
"verified": true
}302Redirection to app.novafisko.com/email-verified.
| Entête de réponse | Description |
|---|---|
Location | Target of the redirection. |
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Error422Invalid or outdated link (format=json).
application/json
Schéma object
verifiedbooleanex.false
Exemple
{
"verified": false
}Exemple d'appel
curl -X GET "https://api.novafisko.com/v1/auth/email/verify/42/5f2b8c%E2%80%A6" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/auth/email/verify/42/5f2b8c%E2%80%A6', [
'headers' => [
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/email/verify/42/5f2b8c%E2%80%A6", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/auth/email/verify/42/5f2b8c%E2%80%A6",
headers={
"Accept": "application/json",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/auth/change-passwordChange the password Jeton de session Hors démo 10 / 1 min
Refused for accounts whose password is managed by Novadesko.
Session token only: integration tokens are refused with 403 session_token_required.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 10 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération auth.change-password
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
current_passwordstringrequispasswordstringrequis8 characters at least, different from the current one.password_confirmationstringrequis
Exemple
{
"current_password": "string",
"password": "string",
"password_confirmation": "string"
}Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma Message
Exemple
{
"message": "Mot de passe modifié."
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/auth/change-password" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"current_password": "string",
"password": "string",
"password_confirmation": "string"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/auth/change-password', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'current_password' => 'string',
'password' => 'string',
'password_confirmation' => 'string',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/change-password", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"current_password": "string",
"password": "string",
"password_confirmation": "string"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/auth/change-password",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"current_password": "string",
"password": "string",
"password_confirmation": "string"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/auth/change-emailChange the e-mail address Jeton de session Hors démo 6 / 1 min
The current password is asked again; the new address replaces the old one once confirmed.
Session token only: integration tokens are refused with 403 session_token_required.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 6 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération auth.change-email
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
emailstring <email>requispasswordstringrequis
Exemple
{
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "string"
}Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
messagestringpending_emailstring <email>
Exemple
{
"message": "OK",
"pending_email": "claire.dumont@fiduciaire-dumont.be"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/auth/change-email" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "string"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/auth/change-email', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'email' => 'claire.dumont@fiduciaire-dumont.be',
'password' => 'string',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/change-email", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "string"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/auth/change-email",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "string"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/auth/email/resendSend the confirmation mail again Jeton de session Hors démo 6 / 1 min
Session token only: integration tokens are refused with 403 session_token_required.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 6 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération auth.email.resend
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
sentbooleanmessagestring
Exemple
{
"sent": true,
"message": "OK"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/auth/email/resend" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/auth/email/resend', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/email/resend", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/auth/email/resend",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/auth/notification-preferencesMail notification preferences read
Integration tokens need the read ability.
Identifiant d'opération auth.notification-preferences
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
categoriesobject[]Propriétés
keystringaccountfirmbillingdocumentsintegrationsplatformlabelstringex.DocumentsdescriptionstringlockedbooleanLocked categories (account security) cannot be switched off.enabledboolean
Exemple
{
"categories": [
{
"key": "account",
"label": "Documents",
"description": "Description",
"locked": true,
"enabled": true
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/auth/notification-preferences" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/auth/notification-preferences', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/notification-preferences", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/auth/notification-preferences",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/auth/notification-preferencesUpdate the notification preferences Jeton de session
Locked categories and unknown keys are ignored.
Session token only: integration tokens are refused with 403 session_token_required.
Identifiant d'opération auth.notification-preferences.update
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
prefsobjectrequisCategory => enabled.
Exemple
{
"prefs": {
"documents": true,
"billing": false
}
}Réponses
200OK
application/json
Schéma object
categoriesobject[]Propriétés
keystringaccountfirmbillingdocumentsintegrationsplatformlabelstringex.DocumentsdescriptionstringlockedbooleanLocked categories (account security) cannot be switched off.enabledboolean
Exemple
{
"categories": [
{
"key": "account",
"label": "Documents",
"description": "Description",
"locked": true,
"enabled": true
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/auth/notification-preferences" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"prefs": {
"documents": true,
"billing": false
}
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/auth/notification-preferences', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'prefs' => [
'documents' => true,
'billing' => false,
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/notification-preferences", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"prefs": {
"documents": true,
"billing": false
}
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/auth/notification-preferences",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"prefs": {
"documents": True,
"billing": False
}
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneIntegration tokens
Long-lived tokens for server-to-server integrations, limited to the abilities read, write and sync.
GET/v1/auth/tokensList the integration tokens Jeton de session
Integration tokens of the current user. The secret is never returned again.
Session token only: integration tokens are refused with 403 session_token_required.
Identifiant d'opération auth.tokens.index
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
dataIntegrationToken[]
Exemple
{
"data": [
{
"id": 57,
"name": "ERP connector",
"abilities": [
"read"
],
"created_at": "2026-03-15T09:41:00+00:00",
"expires_at": "2026-03-15T09:41:00+00:00",
"last_used_at": "2026-03-15T09:41:00+00:00"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/auth/tokens" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/auth/tokens', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/tokens", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/auth/tokens",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/auth/tokensCreate an integration token Jeton de session Hors démo 20 / 1 min
Long-lived token for a server-to-server integration, limited to the chosen abilities:
read: every GET;write: POST, PUT, PATCH and DELETE;sync: the offline synchronisation endpoints (sync/bootstrap,sync/pull,sync/push,sync/status,sync/conflicts).
The token acts with the rights of the user who created it (same firms, same company files). The plain token is shown once: store it in a secret manager.
Session token only: integration tokens are refused with 403 session_token_required.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 20 requests per minute (429 beyond, see Retry-After).
Error codes (code):
token_limit_reached: 50 integration tokens per user at most
Identifiant d'opération auth.tokens.store
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
namestringrequisLabel (100 characters max).abilitiesstring[]requisreadwritesyncexpires_in_daysinteger | null1 to 730; null or absent = no expiry.expires_atstring <date-time> | nullAlternative toexpires_in_days: a future date, 730 days ahead at most.
Exemple
{
"name": "ERP connector",
"abilities": [
"read",
"sync"
],
"expires_in_days": 365
}Réponses
201Token created (data and integration_token are the same object)
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
tokenstringPlain token (id, a pipe, then the secret), shown once.dataIntegrationTokenintegration_tokenIntegrationToken
Exemple
{
"token": "57|Qm9x2kL8vT4nR7sW1pZ5cY3hJ6dF0gA9bE2uI4oK",
"data": {
"id": 57,
"name": "ERP connector",
"abilities": [
"read",
"sync"
],
"created_at": "2026-10-05T09:12:44+00:00",
"expires_at": "2027-10-05T09:12:44+00:00",
"last_used_at": null
},
"integration_token": {
"id": 57,
"name": "ERP connector",
"abilities": [
"read",
"sync"
],
"created_at": "2026-10-05T09:12:44+00:00",
"expires_at": "2027-10-05T09:12:44+00:00",
"last_used_at": null
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/auth/tokens" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "ERP connector",
"abilities": [
"read",
"sync"
],
"expires_in_days": 365
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/auth/tokens', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'name' => 'ERP connector',
'abilities' => [
'read',
'sync',
],
'expires_in_days' => 365,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/tokens", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "ERP connector",
"abilities": [
"read",
"sync"
],
"expires_in_days": 365
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/auth/tokens",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"name": "ERP connector",
"abilities": [
"read",
"sync"
],
"expires_in_days": 365
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/auth/tokens/{token}Revoke an integration token Jeton de session Hors démo
Only the integration tokens of the current user; anything else answers 404.
Session token only: integration tokens are refused with 403 session_token_required.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération auth.tokens.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
token requis | integer | Id of the integration token. ex. 57 |
Entêtes communs : Accept-Language
Réponses
204Token revoked.
Pas de corps.
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/auth/tokens/57" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/auth/tokens/57', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/auth/tokens/57", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/auth/tokens/57",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneFirms
Accounting firm: identity, team, assignment of the company files, activity.
GET/v1/firms/{firm}Firm, team and company files read
Any active member of the firm can read it.
Integration tokens need the read ability.
Identifiant d'opération firms.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma Firm
Exemple
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés",
"enterprise_number": "0458662817",
"vat_number": "BE0458662817",
"itaa_number": "50.123.456",
"itaa_status": "string",
"itaa_quality": "string",
"address": "Rue de Nimy 52",
"postal_code": "7000",
"city": "Mons",
"website": "https://www.comptoir-montois.be",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"is_partner": true,
"country_code": "BE",
"locale": "fr",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"source": "local",
"synced_at": "2026-03-15T09:41:00+00:00",
"can_manage": true,
"members": [
{
"id": 12,
"name": "Thomas Peeters",
"email": "thomas.peeters@fiduciaire-dumont.be",
"auth_source": "local",
"locale": "fr",
"role": "admin",
"is_active": true,
"all_companies": true,
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"role": "manager",
"is_active": true
}
]
}
],
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"members": [
{
"id": 42,
"name": "Thomas Peeters",
"email": "claire.dumont@fiduciaire-dumont.be",
"role": "manager",
"is_active": true
}
]
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/firms/{firm}Update the identity of the firm write Hors démo
Admins and managers of the firm.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération firms.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
namestring200 characters max.enterprise_numberstring | nullvat_numberstring | nullitaa_numberstring | nullemailstring <email> | nullphonestring | nullwebsitestring | nulladdressstring | nullpostal_codestring | nullcitystring | nullcountry_codestringISO 3166-1 alpha-2.localestringfrnlende
Exemple
{
"phone": "+32 65 31 42 18",
"website": "https://www.fiduciaire-dumont.be"
}Réponses
200OK
application/json
Schéma Firm
Exemple
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés",
"enterprise_number": "0458662817",
"vat_number": "BE0458662817",
"itaa_number": "50.123.456",
"itaa_status": "string",
"itaa_quality": "string",
"address": "Rue de Nimy 52",
"postal_code": "7000",
"city": "Mons",
"website": "https://www.comptoir-montois.be",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"is_partner": true,
"country_code": "BE",
"locale": "fr",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"source": "local",
"synced_at": "2026-03-15T09:41:00+00:00",
"can_manage": true,
"members": [
{
"id": 12,
"name": "Thomas Peeters",
"email": "thomas.peeters@fiduciaire-dumont.be",
"auth_source": "local",
"locale": "fr",
"role": "admin",
"is_active": true,
"all_companies": true,
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"role": "manager",
"is_active": true
}
]
}
],
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"members": [
{
"id": 42,
"name": "Thomas Peeters",
"email": "claire.dumont@fiduciaire-dumont.be",
"role": "manager",
"is_active": true
}
]
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "+32 65 31 42 18",
"website": "https://www.fiduciaire-dumont.be"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'phone' => '+32 65 31 42 18',
'website' => 'https://www.fiduciaire-dumont.be',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"phone": "+32 65 31 42 18",
"website": "https://www.fiduciaire-dumont.be"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"phone": "+32 65 31 42 18",
"website": "https://www.fiduciaire-dumont.be"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/firms/{firm}/syncResynchronise the firm from Novadesko write Hors démo 6 / 1 min
Identity, members and company files of a firm linked to Novadesko. 422 when the firm is not linked, 503 when Novadesko does not answer.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 6 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération firms.sync
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma Firm
Exemple
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés",
"enterprise_number": "0458662817",
"vat_number": "BE0458662817",
"itaa_number": "50.123.456",
"itaa_status": "string",
"itaa_quality": "string",
"address": "Rue de Nimy 52",
"postal_code": "7000",
"city": "Mons",
"website": "https://www.comptoir-montois.be",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"is_partner": true,
"country_code": "BE",
"locale": "fr",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"source": "local",
"synced_at": "2026-03-15T09:41:00+00:00",
"can_manage": true,
"members": [
{
"id": 12,
"name": "Thomas Peeters",
"email": "thomas.peeters@fiduciaire-dumont.be",
"auth_source": "local",
"locale": "fr",
"role": "admin",
"is_active": true,
"all_companies": true,
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"role": "manager",
"is_active": true
}
]
}
],
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"members": [
{
"id": 42,
"name": "Thomas Peeters",
"email": "claire.dumont@fiduciaire-dumont.be",
"role": "manager",
"is_active": true
}
]
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. Errorcode. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/sync" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/sync', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/sync", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/sync",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/firms/{firm}/membersAdd a member write Hors démo
Attaches an existing user (by e-mail) or creates the account (password required then). 201 when the account was created, 200 when an existing user was attached.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Error codes (code):
user_limit_reached: the licence does not allow one more user
Identifiant d'opération firms.members.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
emailstring <email>requisnamestringRequired for a new account.passwordstring | null8 characters at least; required for a new account.rolestringrequisadminmanagerencoderreviewerlocalestringfrnlendecompany_tokensstring[]
Exemple
{
"email": "thomas.peeters@fiduciaire-dumont.be",
"name": "Thomas Peeters",
"password": "S3cure-Pass!",
"role": "encoder",
"company_tokens": [
"XBVD5O1L29HC"
]
}Réponses
200Existing user attached
application/json
Schéma FirmMember
Exemple
{
"id": 12,
"name": "Thomas Peeters",
"email": "thomas.peeters@fiduciaire-dumont.be",
"auth_source": "local",
"locale": "fr",
"role": "admin",
"is_active": true,
"all_companies": true,
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"role": "manager",
"is_active": true
}
]
}201Account created and attached
application/json
Schéma FirmMember
Exemple
{
"id": 12,
"name": "Thomas Peeters",
"email": "thomas.peeters@fiduciaire-dumont.be",
"auth_source": "local",
"locale": "fr",
"role": "admin",
"is_active": true,
"all_companies": true,
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"role": "manager",
"is_active": true
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "thomas.peeters@fiduciaire-dumont.be",
"name": "Thomas Peeters",
"password": "S3cure-Pass!",
"role": "encoder",
"company_tokens": [
"XBVD5O1L29HC"
]
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'email' => 'thomas.peeters@fiduciaire-dumont.be',
'name' => 'Thomas Peeters',
'password' => 'S3cure-Pass!',
'role' => 'encoder',
'company_tokens' => [
'XBVD5O1L29HC',
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"email": "thomas.peeters@fiduciaire-dumont.be",
"name": "Thomas Peeters",
"password": "S3cure-Pass!",
"role": "encoder",
"company_tokens": [
"XBVD5O1L29HC"
]
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"email": "thomas.peeters@fiduciaire-dumont.be",
"name": "Thomas Peeters",
"password": "S3cure-Pass!",
"role": "encoder",
"company_tokens": [
"XBVD5O1L29HC"
]
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/firms/{firm}/members/{user}Update a member write Hors démo
Role, activation, name, password. The last active admin cannot lose its role.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération firms.members.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
user requis | integer | Id of the user (member of the firm). ex. 12 |
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
rolestringadminmanagerencoderrevieweris_activebooleannamestringpasswordstring | null
Exemple
{
"role": "manager"
}Réponses
200OK
application/json
Schéma FirmMember
Exemple
{
"id": 12,
"name": "Thomas Peeters",
"email": "thomas.peeters@fiduciaire-dumont.be",
"auth_source": "local",
"locale": "fr",
"role": "admin",
"is_active": true,
"all_companies": true,
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"role": "manager",
"is_active": true
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"role": "manager"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'role' => 'manager',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"role": "manager"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"role": "manager"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/firms/{firm}/members/{user}Remove a member write Hors démo
Detaches the user from the firm and from its company files. The user account itself is kept.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération firms.members.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
user requis | integer | Id of the user (member of the firm). ex. 12 |
Entêtes communs : Accept-Language
Réponses
204Done, no body.
Pas de corps.
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePUT/v1/firms/{firm}/members/{user}/companiesReplace the company files of a member write Hors démo
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération firms.members.companies
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
user requis | integer | Id of the user (member of the firm). ex. 12 |
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
company_tokensstring[]requisrolestringmanagerencoderreviewer
Exemple
{
"company_tokens": [
"XBVD5O1L29HC",
"K7MPL2QX9ZTA"
],
"role": "encoder"
}Réponses
200OK
application/json
Schéma FirmMember
Exemple
{
"id": 12,
"name": "Thomas Peeters",
"email": "thomas.peeters@fiduciaire-dumont.be",
"auth_source": "local",
"locale": "fr",
"role": "admin",
"is_active": true,
"all_companies": true,
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"role": "manager",
"is_active": true
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PUT "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12/companies" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"company_tokens": [
"XBVD5O1L29HC",
"K7MPL2QX9ZTA"
],
"role": "encoder"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PUT', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12/companies', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'company_tokens' => [
'XBVD5O1L29HC',
'K7MPL2QX9ZTA',
],
'role' => 'encoder',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12/companies", {
method: "PUT",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"company_tokens": [
"XBVD5O1L29HC",
"K7MPL2QX9ZTA"
],
"role": "encoder"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.put(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/members/12/companies",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"company_tokens": [
"XBVD5O1L29HC",
"K7MPL2QX9ZTA"
],
"role": "encoder"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePUT/v1/firms/{firm}/companies/{company}/membersReplace the members of a company file write Hors démo
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération firms.companies.members
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
membersobject[]requisPropriétés
user_idintegerrequisrolestringmanagerencoderreviewer
Exemple
{
"members": [
{
"user_id": 12,
"role": "manager"
},
{
"user_id": 15,
"role": "encoder"
}
]
}Réponses
200OK
application/json
Schéma Firm
Exemple
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés",
"enterprise_number": "0458662817",
"vat_number": "BE0458662817",
"itaa_number": "50.123.456",
"itaa_status": "string",
"itaa_quality": "string",
"address": "Rue de Nimy 52",
"postal_code": "7000",
"city": "Mons",
"website": "https://www.comptoir-montois.be",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"is_partner": true,
"country_code": "BE",
"locale": "fr",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"source": "local",
"synced_at": "2026-03-15T09:41:00+00:00",
"can_manage": true,
"members": [
{
"id": 12,
"name": "Thomas Peeters",
"email": "thomas.peeters@fiduciaire-dumont.be",
"auth_source": "local",
"locale": "fr",
"role": "admin",
"is_active": true,
"all_companies": true,
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"role": "manager",
"is_active": true
}
]
}
],
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"members": [
{
"id": 42,
"name": "Thomas Peeters",
"email": "claire.dumont@fiduciaire-dumont.be",
"role": "manager",
"is_active": true
}
]
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PUT "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/companies/XBVD5O1L29HC/members" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"members": [
{
"user_id": 12,
"role": "manager"
},
{
"user_id": 15,
"role": "encoder"
}
]
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PUT', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/companies/XBVD5O1L29HC/members', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'members' => [
[
'user_id' => 12,
'role' => 'manager',
],
[
'user_id' => 15,
'role' => 'encoder',
],
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/companies/XBVD5O1L29HC/members", {
method: "PUT",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"members": [
{
"user_id": 12,
"role": "manager"
},
{
"user_id": 15,
"role": "encoder"
}
]
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.put(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/companies/XBVD5O1L29HC/members",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"members": [
{
"user_id": 12,
"role": "manager"
},
{
"user_id": 15,
"role": "encoder"
}
]
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/firms/{firm}/activityActivity of the firm read
Audit trail and history merged, newest first, for every company file of the firm. Admins and managers only (404 otherwise).
Integration tokens need the read ability.
Identifiant d'opération firms.activity
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
company | string | Restrict to one company file. |
user_id | integer | |
from | string <date> | |
to | string <date> | |
type | string | Action or subject type. |
source | string | audit revision |
q | string | |
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma ActivityFeed
Exemple
{
"data": [
{
"source": "audit",
"at": "2026-03-15T09:41:00+00:00",
"recorded_at": "2026-03-15T09:41:00+00:00",
"user": null,
"action": "entry.posted",
"action_label": "Écriture validée",
"subject_type": "string",
"subject_id": 42,
"subject_label": "string",
"origin": "string",
"device_name": "MacBook de Claire",
"revision_id": 42,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"company_id": 7,
"changed_fields": [
"string"
],
"company": {
"token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
}
}
],
"current_page": 1,
"per_page": 50,
"has_more": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/activity" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/activity', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/activity", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/activity",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/firms/{firm}/files/viewSigned relay of a firm file URL signée 120 / 1 min
Serves the logo of a firm stored on Novadesko with CORS headers. The signed URL is found in logo_url of the firm payload.
Authorised by the signature of the URL (query parameters signature and expires), not by a bearer token. The URL is issued by another endpoint and expires.
Rate limit: 120 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération firms.files.view
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
url requis | string <uri> | Relayed file. |
Entêtes communs : signature expires
Réponses
200The file, inline.
Entêtes de réponse Content-Disposition X-RateLimit-Limit X-RateLimit-Remaining
image/png
image/jpeg
image/webp
application/pdf
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/files/view?url=https%3A%2F%2Fapi.novafisko.com%2Fv1%2Fcompanies%2FXBVD5O1L29HC" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/files/view', [
'headers' => [
'Accept' => 'application/json',
],
'query' => [
'url' => 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/files/view?url=https%3A%2F%2Fapi.novafisko.com%2Fv1%2Fcompanies%2FXBVD5O1L29HC", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/files/view",
headers={
"Accept": "application/json",
},
params={
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneLicence & pricing
Licence of a firm, activation keys, public price list and simulator.
GET/v1/firms/{firm}/licenceLicence of the firm read
Plan, status, usage of the month, estimate of the next invoice, entitlements and limits.
Integration tokens need the read ability.
Identifiant d'opération firms.licence
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
lang | string | fr nl en de |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma Licence
Exemple
{
"status": "none",
"subscription": {},
"plan": {},
"usage": {
"month": "2026-10",
"companies": 25,
"users": 4,
"bank_accounts": 31,
"rows": [
{
"company_id": 7,
"token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"bank_accounts": 1,
"status": "active",
"activated_at": "2026-03-15T09:41:00+00:00",
"deactivated_at": "2026-03-15T09:41:00+00:00"
}
],
"max_companies": 1,
"over_limit": false,
"suggestion": "string"
},
"estimate": {},
"companies_detail": [
{
"company_id": 7,
"name": "Le Comptoir Montois SRL",
"public_token": "XBVD5O1L29HC",
"status": "active",
"activated_at": "2026-03-15T09:41:00+00:00",
"deactivated_at": "2026-03-15T09:41:00+00:00",
"billable": true
}
],
"next_month_preview": {
"companies": 25,
"total": 121.5
},
"over_limit": false,
"over_limit_firm_total": 12.5,
"entitlements": {
"accounting": true,
"peppol": true,
"coda": true,
"client_portal": true,
"client_invoicing": true,
"document_import": true
},
"limits": {
"max_users": 1,
"max_companies": 1,
"users_count": 4,
"companies_count": 25
},
"expires_at": "2026-03-15T09:41:00+00:00",
"warning": "string",
"activation": {},
"statements": [
{}
],
"options_available": [
{
"code": "client_portal",
"name": "Portail client",
"price_monthly": 6.9,
"unit": "client"
}
],
"can_manage": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/firms/{firm}/licence/activateActivate a licence key Jeton de session Hors démo 10 / 1 min
Creates or replaces the subscription of the firm.
Session token only: integration tokens are refused with 403 session_token_required.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 10 requests per minute (429 beyond, see Retry-After).
Error codes (code):
invalid_key: unknown keyexpired_key: key past its validityexhausted_key: every activation of the key is usedkey_reserved: key reserved for another firmalready_active: the key is already active on this firm
Identifiant d'opération firms.licence.activate
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
keystringrequisLicence key.ex.NVFK-7Q2M-X4TA-9LDP
Exemple
{
"key": "NVFK-7Q2M-X4TA-9LDP"
}Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma Licence
Exemple
{
"status": "none",
"subscription": {},
"plan": {},
"usage": {
"month": "2026-10",
"companies": 25,
"users": 4,
"bank_accounts": 31,
"rows": [
{
"company_id": 7,
"token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"bank_accounts": 1,
"status": "active",
"activated_at": "2026-03-15T09:41:00+00:00",
"deactivated_at": "2026-03-15T09:41:00+00:00"
}
],
"max_companies": 1,
"over_limit": false,
"suggestion": "string"
},
"estimate": {},
"companies_detail": [
{
"company_id": 7,
"name": "Le Comptoir Montois SRL",
"public_token": "XBVD5O1L29HC",
"status": "active",
"activated_at": "2026-03-15T09:41:00+00:00",
"deactivated_at": "2026-03-15T09:41:00+00:00",
"billable": true
}
],
"next_month_preview": {
"companies": 25,
"total": 121.5
},
"over_limit": false,
"over_limit_firm_total": 12.5,
"entitlements": {
"accounting": true,
"peppol": true,
"coda": true,
"client_portal": true,
"client_invoicing": true,
"document_import": true
},
"limits": {
"max_users": 1,
"max_companies": 1,
"users_count": 4,
"companies_count": 25
},
"expires_at": "2026-03-15T09:41:00+00:00",
"warning": "string",
"activation": {},
"statements": [
{}
],
"options_available": [
{
"code": "client_portal",
"name": "Portail client",
"price_monthly": 6.9,
"unit": "client"
}
],
"can_manage": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence/activate" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"key": "NVFK-7Q2M-X4TA-9LDP"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence/activate', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'key' => 'NVFK-7Q2M-X4TA-9LDP',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence/activate", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"key": "NVFK-7Q2M-X4TA-9LDP"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence/activate",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"key": "NVFK-7Q2M-X4TA-9LDP"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/firms/{firm}/licence/activationRelease the licence key Jeton de session Hors démo
The subscription that depends on the key is cancelled.
Session token only: integration tokens are refused with 403 session_token_required.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération firms.licence.release
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma Licence
Exemple
{
"status": "none",
"subscription": {},
"plan": {},
"usage": {
"month": "2026-10",
"companies": 25,
"users": 4,
"bank_accounts": 31,
"rows": [
{
"company_id": 7,
"token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"bank_accounts": 1,
"status": "active",
"activated_at": "2026-03-15T09:41:00+00:00",
"deactivated_at": "2026-03-15T09:41:00+00:00"
}
],
"max_companies": 1,
"over_limit": false,
"suggestion": "string"
},
"estimate": {},
"companies_detail": [
{
"company_id": 7,
"name": "Le Comptoir Montois SRL",
"public_token": "XBVD5O1L29HC",
"status": "active",
"activated_at": "2026-03-15T09:41:00+00:00",
"deactivated_at": "2026-03-15T09:41:00+00:00",
"billable": true
}
],
"next_month_preview": {
"companies": 25,
"total": 121.5
},
"over_limit": false,
"over_limit_firm_total": 12.5,
"entitlements": {
"accounting": true,
"peppol": true,
"coda": true,
"client_portal": true,
"client_invoicing": true,
"document_import": true
},
"limits": {
"max_users": 1,
"max_companies": 1,
"users_count": 4,
"companies_count": 25
},
"expires_at": "2026-03-15T09:41:00+00:00",
"warning": "string",
"activation": {},
"statements": [
{}
],
"options_available": [
{
"code": "client_portal",
"name": "Portail client",
"price_monthly": 6.9,
"unit": "client"
}
],
"can_manage": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence/activation" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence/activation', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence/activation", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/licence/activation",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/pricingPublic price list Public 120 / 1 min
Plans, tiers and options, excl. VAT, per month. Cached five minutes.
Public endpoint: no bearer token.
Rate limit: 120 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération pricing
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
locale | string | fr nl en de |
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma PricingGrid
Exemple
{
"currency": "EUR",
"vat_included": false,
"plans": [
{
"code": "starter",
"name": "Firm",
"kind": "starter",
"base_price_monthly": 49,
"per_company": 2.9,
"tiers": [
{
"up_to": 100,
"price": 2.9
}
],
"max_companies": 1,
"peppol_fair_use_per_company": 100,
"annual_discount_pct": 10,
"included": [
"Unlimited users"
]
}
],
"options": [
{
"code": "client_portal",
"name": "Client portal",
"price_monthly": 6.9,
"unit": "client"
}
],
"annual_discount_pct": 10,
"winauditor": {},
"pilot": {
"free_months": 3,
"max_firms": 20
}
}Exemple d'appel
curl -X GET "https://api.novafisko.com/v1/pricing" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/pricing', [
'headers' => [
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/pricing", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/pricing",
headers={
"Accept": "application/json",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/pricing/simulatePrice simulator Public 120 / 1 min
Public endpoint: no bearer token.
Rate limit: 120 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération pricing.simulate
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
companies requis | integer | Number of company files. ex. 25 |
client_portal | integer | Clients with the portal option. |
client_invoicing | integer | Clients with the invoicing option. |
yearly | string | Yearly billing.0 1 true false |
locale | string | fr nl en de |
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma PricingSimulation
Exemple
{
"companies": 25,
"yearly": false,
"starter": {},
"firm": {
"plan": "firm",
"billing_interval": "monthly",
"companies": 25,
"base": 49,
"companies_breakdown": [
{
"from": 1,
"to": 100,
"quantity": 25,
"unit_price": 2.9,
"total": 72.5
}
],
"companies_total": 72.5,
"options": [
{}
],
"options_total": 0,
"pilot_discount": 0,
"annual_discount_pct": 0,
"annual_discount": 0,
"discount": 0,
"total": 121.5,
"yearly_total": 1458,
"name": "Firm",
"saving_vs_winauditor": 36,
"saving_pct": 22.9
},
"winauditor": 157.5,
"cheapest": "starter"
}Exemple d'appel
curl -X GET "https://api.novafisko.com/v1/pricing/simulate?companies=25" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/pricing/simulate', [
'headers' => [
'Accept' => 'application/json',
],
'query' => [
'companies' => '25',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/pricing/simulate?companies=25", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/pricing/simulate",
headers={
"Accept": "application/json",
},
params={
"companies": "25"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneCompanies
Company files (dossiers): creation with accounting set-up, identity, settings, integrity.
GET/v1/companiesList the company files read
Every company file the user can open: all files of the firms it administers or manages, plus the files it is assigned to.
Integration tokens need the read ability.
Identifiant d'opération companies.index
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Exemple
[
{
"id": 7,
"public_token": "XBVD5O1L29HC",
"firm_id": 3,
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"legal_form": "SRL",
"legal_form_code": "610",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"country_pack": "BE",
"vat_regime": "monthly",
"currency": "EUR",
"locale": "fr",
"address": "Grand-Place 14, 7000 Mons",
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"latitude": "50.4541000",
"longitude": "3.9523000",
"nace_codes": [
{
"code": "56111",
"classification": "MAIN"
}
],
"main_nace_code": "56111",
"company_sheet_at": "2026-03-15T09:41:00+00:00",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"fiscal_year_start": "2026-03-15",
"fiscal_year_end": "2026-03-15",
"settings": {
"vat": {
"administration_cell": "string",
"structured_communication": "000000000101",
"directorate_number": "string",
"office_number": "string",
"declarant": {
"applicable": false,
"company_name": "string",
"signatory_1": "string",
"signatory_1_title": "string",
"signatory_2": "string",
"signatory_2_title": "string",
"phone": "+32 65 31 42 18",
"fax": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"language": "fr"
},
"sender_281_50": {
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"filer": {
"quality": "company",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
}
},
"legal": {
"rpm_district": "Hainaut, division Mons"
},
"annual_accounts": {
"scheme": "abbreviated",
"general_meeting_date": "2026-03-15",
"directors": "string",
"valuation_rules": "string"
},
"auto_entries": {
"vat": {
"payable_account": "451000",
"receivable_account": "411000",
"correction_payable_account": "string",
"correction_receivable_account": "string",
"journal_id": 3
},
"invoices_to_receive": {
"supplier_account": "444000",
"customer_account": "404000",
"journal_id": 3
},
"reconciliation_difference": {
"expense_account": "657000",
"income_account": "757000",
"max_amount": 1
},
"transfers": {
"transit_account": "580000",
"journal_id": 3
}
},
"history": {
"trash_retention_days": 90
}
},
"is_active": true,
"is_demo": false,
"source": "manual",
"external_id": "string",
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"deleted_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entries_count": 1284,
"firm": {
"id": 3,
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"fiscal_years": [
{
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{}
]
}
],
"journals": [
{
"id": 3,
"company_id": 7,
"code": "VEN",
"label": "Ventes",
"type": "purchase",
"control_account_id": 42,
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"last_number": 412,
"is_active": true,
"is_default": true,
"description": "Description",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"entries_count": 412,
"control_account": null,
"rules": [
{}
]
}
]
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companiesCreate a company file write Hors démo
Creates the file and initialises its accounting: chart of accounts of the country pack (PCMN for BE), VAT codes, journals (ACH, NCA, VEN, NCV, OD, CAI and one financial journal per bank) and the first fiscal year with its periods. firm is optional when the user manages exactly one firm; without a firm the file is standalone.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Error codes (code):
company_limit_reached: the licence or the plan does not allow one more company file
Identifiant d'opération companies.store
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
firmstring | nullFirm that manages the file.country_packstringBEFRLUcodestring | nullShort code, letters, digits, dash, underscore (20 max).namestringrequis200 characters max.enterprise_numberstring | nullChecked against the country rules (BE: modulo 97).vat_numberstring | nullFormat and check digits validated per country.legal_formstring | nulllegal_form_codestring | nullCode ofGET /v1/reference/legal-forms.addressstring | nulllogo_urlstring <uri> | nullvat_regimestringmonthlyquarterlyfranchiseexemptunitlocalestringfrnlendestreetstring | nullhouse_numberstring | nullboxstring | nullpostal_codestring | nullcitystring | nullcountrystring | nullISO 3166-1 alpha-2.latitudenumber | nulllongitudenumber | nullnace_codesobject[]Propriétés
codestringrequisclassificationstringMAINSECOANCI
main_nace_codestring | nullfiscal_yearobjectPropriétés
codestring10 characters max.starts_onstring <date>requisends_onstring <date>requis
banksobject[]Propriétés
codestringrequisJournal code, 6 characters max.labelstringrequisibanstring | null
Exemple
{
"firm": "NDTQVQU4AUAV",
"country_pack": "BE",
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477.472.701",
"legal_form_code": "610",
"vat_regime": "quarterly",
"street": "Grand-Place",
"house_number": "14",
"postal_code": "7000",
"city": "Mons",
"fiscal_year": {
"code": "2026",
"starts_on": "2026-01-01",
"ends_on": "2026-12-31"
},
"banks": [
{
"code": "BNP",
"label": "BNP Paribas Fortis",
"iban": "BE68 5390 0754 7034"
}
]
}Réponses
201Created
application/json
Schéma Company
Exemple
{
"id": 7,
"public_token": "XBVD5O1L29HC",
"firm_id": 3,
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"legal_form": "SRL",
"legal_form_code": "610",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"country_pack": "BE",
"vat_regime": "monthly",
"currency": "EUR",
"locale": "fr",
"address": "Grand-Place 14, 7000 Mons",
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"latitude": "50.4541000",
"longitude": "3.9523000",
"nace_codes": [
{
"code": "56111",
"classification": "MAIN"
}
],
"main_nace_code": "56111",
"company_sheet_at": "2026-03-15T09:41:00+00:00",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"fiscal_year_start": "2026-03-15",
"fiscal_year_end": "2026-03-15",
"settings": {
"vat": {
"administration_cell": "string",
"structured_communication": "000000000101",
"directorate_number": "string",
"office_number": "string",
"declarant": {
"applicable": false,
"company_name": "string",
"signatory_1": "string",
"signatory_1_title": "string",
"signatory_2": "string",
"signatory_2_title": "string",
"phone": "+32 65 31 42 18",
"fax": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"language": "fr"
},
"sender_281_50": {
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"filer": {
"quality": "company",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
}
},
"legal": {
"rpm_district": "Hainaut, division Mons"
},
"annual_accounts": {
"scheme": "abbreviated",
"general_meeting_date": "2026-03-15",
"directors": "string",
"valuation_rules": "string"
},
"auto_entries": {
"vat": {
"payable_account": "451000",
"receivable_account": "411000",
"correction_payable_account": "string",
"correction_receivable_account": "string",
"journal_id": 3
},
"invoices_to_receive": {
"supplier_account": "444000",
"customer_account": "404000",
"journal_id": 3
},
"reconciliation_difference": {
"expense_account": "657000",
"income_account": "757000",
"max_amount": 1
},
"transfers": {
"transit_account": "580000",
"journal_id": 3
}
},
"history": {
"trash_retention_days": 90
}
},
"is_active": true,
"is_demo": false,
"source": "manual",
"external_id": "string",
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"deleted_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entries_count": 1284,
"firm": {
"id": 3,
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"fiscal_years": [
{
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{}
]
}
],
"journals": [
{
"id": 3,
"company_id": 7,
"code": "VEN",
"label": "Ventes",
"type": "purchase",
"control_account_id": 42,
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"last_number": 412,
"is_active": true,
"is_default": true,
"description": "Description",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"entries_count": 412,
"control_account": null,
"rules": [
{}
]
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"firm": "NDTQVQU4AUAV",
"country_pack": "BE",
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477.472.701",
"legal_form_code": "610",
"vat_regime": "quarterly",
"street": "Grand-Place",
"house_number": "14",
"postal_code": "7000",
"city": "Mons",
"fiscal_year": {
"code": "2026",
"starts_on": "2026-01-01",
"ends_on": "2026-12-31"
},
"banks": [
{
"code": "BNP",
"label": "BNP Paribas Fortis",
"iban": "BE68 5390 0754 7034"
}
]
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'firm' => 'NDTQVQU4AUAV',
'country_pack' => 'BE',
'code' => 'COMPTOIR',
'name' => 'Le Comptoir Montois SRL',
'enterprise_number' => '0477.472.701',
'legal_form_code' => '610',
'vat_regime' => 'quarterly',
'street' => 'Grand-Place',
'house_number' => '14',
'postal_code' => '7000',
'city' => 'Mons',
'fiscal_year' => [
'code' => '2026',
'starts_on' => '2026-01-01',
'ends_on' => '2026-12-31',
],
'banks' => [
[
'code' => 'BNP',
'label' => 'BNP Paribas Fortis',
'iban' => 'BE68 5390 0754 7034',
],
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"firm": "NDTQVQU4AUAV",
"country_pack": "BE",
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477.472.701",
"legal_form_code": "610",
"vat_regime": "quarterly",
"street": "Grand-Place",
"house_number": "14",
"postal_code": "7000",
"city": "Mons",
"fiscal_year": {
"code": "2026",
"starts_on": "2026-01-01",
"ends_on": "2026-12-31"
},
"banks": [
{
"code": "BNP",
"label": "BNP Paribas Fortis",
"iban": "BE68 5390 0754 7034"
}
]
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"firm": "NDTQVQU4AUAV",
"country_pack": "BE",
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477.472.701",
"legal_form_code": "610",
"vat_regime": "quarterly",
"street": "Grand-Place",
"house_number": "14",
"postal_code": "7000",
"city": "Mons",
"fiscal_year": {
"code": "2026",
"starts_on": "2026-01-01",
"ends_on": "2026-12-31"
},
"banks": [
{
"code": "BNP",
"label": "BNP Paribas Fortis",
"iban": "BE68 5390 0754 7034"
}
]
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}Company file read
With its fiscal years, periods and journals.
Integration tokens need the read ability.
Identifiant d'opération companies.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma Company
Exemple
{
"id": 7,
"public_token": "XBVD5O1L29HC",
"firm_id": 3,
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"legal_form": "SRL",
"legal_form_code": "610",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"country_pack": "BE",
"vat_regime": "monthly",
"currency": "EUR",
"locale": "fr",
"address": "Grand-Place 14, 7000 Mons",
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"latitude": "50.4541000",
"longitude": "3.9523000",
"nace_codes": [
{
"code": "56111",
"classification": "MAIN"
}
],
"main_nace_code": "56111",
"company_sheet_at": "2026-03-15T09:41:00+00:00",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"fiscal_year_start": "2026-03-15",
"fiscal_year_end": "2026-03-15",
"settings": {
"vat": {
"administration_cell": "string",
"structured_communication": "000000000101",
"directorate_number": "string",
"office_number": "string",
"declarant": {
"applicable": false,
"company_name": "string",
"signatory_1": "string",
"signatory_1_title": "string",
"signatory_2": "string",
"signatory_2_title": "string",
"phone": "+32 65 31 42 18",
"fax": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"language": "fr"
},
"sender_281_50": {
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"filer": {
"quality": "company",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
}
},
"legal": {
"rpm_district": "Hainaut, division Mons"
},
"annual_accounts": {
"scheme": "abbreviated",
"general_meeting_date": "2026-03-15",
"directors": "string",
"valuation_rules": "string"
},
"auto_entries": {
"vat": {
"payable_account": "451000",
"receivable_account": "411000",
"correction_payable_account": "string",
"correction_receivable_account": "string",
"journal_id": 3
},
"invoices_to_receive": {
"supplier_account": "444000",
"customer_account": "404000",
"journal_id": 3
},
"reconciliation_difference": {
"expense_account": "657000",
"income_account": "757000",
"max_amount": 1
},
"transfers": {
"transit_account": "580000",
"journal_id": 3
}
},
"history": {
"trash_retention_days": 90
}
},
"is_active": true,
"is_demo": false,
"source": "manual",
"external_id": "string",
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"deleted_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entries_count": 1284,
"firm": {
"id": 3,
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"fiscal_years": [
{
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{}
]
}
],
"journals": [
{
"id": 3,
"company_id": 7,
"code": "VEN",
"label": "Ventes",
"type": "purchase",
"control_account_id": 42,
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"last_number": 412,
"is_active": true,
"is_default": true,
"description": "Description",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"entries_count": 412,
"control_account": null,
"rules": [
{}
]
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}Update a company file write
Identity and / or settings. Settings are merged key by key: send only the keys to change; only known keys are accepted.
Integration tokens need the write ability.
Identifiant d'opération companies.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
codestring | nullShort code, letters, digits, dash, underscore (20 max).namestring200 characters max.enterprise_numberstring | nullChecked against the country rules (BE: modulo 97).vat_numberstring | nullFormat and check digits validated per country.legal_formstring | nulllegal_form_codestring | nullCode ofGET /v1/reference/legal-forms.addressstring | nulllogo_urlstring <uri> | nullvat_regimestringmonthlyquarterlyfranchiseexemptunitlocalestringfrnlendestreetstring | nullhouse_numberstring | nullboxstring | nullpostal_codestring | nullcitystring | nullcountrystring | nullISO 3166-1 alpha-2.latitudenumber | nulllongitudenumber | nullnace_codesobject[]Propriétés
codestringrequisclassificationstringMAINSECOANCI
main_nace_codestring | nullsettingsCompanySettings
Exemple
{
"vat_regime": "monthly",
"settings": {
"vat": {
"office_number": "0420"
},
"auto_entries": {
"reconciliation_difference": {
"max_amount": 2.5
}
}
}
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma Company
Exemple
{
"id": 7,
"public_token": "XBVD5O1L29HC",
"firm_id": 3,
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"legal_form": "SRL",
"legal_form_code": "610",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"country_pack": "BE",
"vat_regime": "monthly",
"currency": "EUR",
"locale": "fr",
"address": "Grand-Place 14, 7000 Mons",
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"latitude": "50.4541000",
"longitude": "3.9523000",
"nace_codes": [
{
"code": "56111",
"classification": "MAIN"
}
],
"main_nace_code": "56111",
"company_sheet_at": "2026-03-15T09:41:00+00:00",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"fiscal_year_start": "2026-03-15",
"fiscal_year_end": "2026-03-15",
"settings": {
"vat": {
"administration_cell": "string",
"structured_communication": "000000000101",
"directorate_number": "string",
"office_number": "string",
"declarant": {
"applicable": false,
"company_name": "string",
"signatory_1": "string",
"signatory_1_title": "string",
"signatory_2": "string",
"signatory_2_title": "string",
"phone": "+32 65 31 42 18",
"fax": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"language": "fr"
},
"sender_281_50": {
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"filer": {
"quality": "company",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
}
},
"legal": {
"rpm_district": "Hainaut, division Mons"
},
"annual_accounts": {
"scheme": "abbreviated",
"general_meeting_date": "2026-03-15",
"directors": "string",
"valuation_rules": "string"
},
"auto_entries": {
"vat": {
"payable_account": "451000",
"receivable_account": "411000",
"correction_payable_account": "string",
"correction_receivable_account": "string",
"journal_id": 3
},
"invoices_to_receive": {
"supplier_account": "444000",
"customer_account": "404000",
"journal_id": 3
},
"reconciliation_difference": {
"expense_account": "657000",
"income_account": "757000",
"max_amount": 1
},
"transfers": {
"transit_account": "580000",
"journal_id": 3
}
},
"history": {
"trash_retention_days": 90
}
},
"is_active": true,
"is_demo": false,
"source": "manual",
"external_id": "string",
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"deleted_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entries_count": 1284,
"firm": {
"id": 3,
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"fiscal_years": [
{
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{}
]
}
],
"journals": [
{
"id": 3,
"company_id": 7,
"code": "VEN",
"label": "Ventes",
"type": "purchase",
"control_account_id": 42,
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"last_number": 412,
"is_active": true,
"is_default": true,
"description": "Description",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"entries_count": 412,
"control_account": null,
"rules": [
{}
]
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"vat_regime": "monthly",
"settings": {
"vat": {
"office_number": "0420"
},
"auto_entries": {
"reconciliation_difference": {
"max_amount": 2.5
}
}
}
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'vat_regime' => 'monthly',
'settings' => [
'vat' => [
'office_number' => '0420',
],
'auto_entries' => [
'reconciliation_difference' => [
'max_amount' => 2.5,
],
],
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"vat_regime": "monthly",
"settings": {
"vat": {
"office_number": "0420"
},
"auto_entries": {
"reconciliation_difference": {
"max_amount": 2.5
}
}
}
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"vat_regime": "monthly",
"settings": {
"vat": {
"office_number": "0420"
},
"auto_entries": {
"reconciliation_difference": {
"max_amount": 2.5
}
}
}
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}Delete a company file write Hors démo
Soft delete: the file disappears from every list.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération companies.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflictExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/integrityIntegrity check read
Sum of debits and credits over every entry of the file.
Integration tokens need the read ability.
Identifiant d'opération companies.integrity
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
debitnumberex.184320.55creditnumberex.184320.55entriesintegerex.1284is_balancedboolean
Exemple
{
"debit": 184320.55,
"credit": 184320.55,
"entries": 1284,
"is_balanced": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrity" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrity', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrity", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrity",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/settingsResolved settings read
Settings of the file with the journals available for the selectors.
Integration tokens need the read ability.
Identifiant d'opération companies.settings
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
settingsCompanySettingsjournalsobject[]Propriétés
idintegercodestringex.ODlabelstringex.Opérations diversestypestringex.miscellaneous
Exemple
{
"settings": {
"vat": {
"administration_cell": "string",
"structured_communication": "000000000101",
"directorate_number": "string",
"office_number": "string",
"declarant": {
"applicable": false,
"company_name": "string",
"signatory_1": "string",
"signatory_1_title": "string",
"signatory_2": "string",
"signatory_2_title": "string",
"phone": "+32 65 31 42 18",
"fax": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"language": "fr"
},
"sender_281_50": {
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"filer": {
"quality": "company",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
}
},
"legal": {
"rpm_district": "Hainaut, division Mons"
},
"annual_accounts": {
"scheme": "abbreviated",
"general_meeting_date": "2026-03-15",
"directors": "string",
"valuation_rules": "string"
},
"auto_entries": {
"vat": {
"payable_account": "451000",
"receivable_account": "411000",
"correction_payable_account": "string",
"correction_receivable_account": "string",
"journal_id": 3
},
"invoices_to_receive": {
"supplier_account": "444000",
"customer_account": "404000",
"journal_id": 3
},
"reconciliation_difference": {
"expense_account": "657000",
"income_account": "757000",
"max_amount": 1
},
"transfers": {
"transit_account": "580000",
"journal_id": 3
}
},
"history": {
"trash_retention_days": 90
}
},
"journals": [
{
"id": 42,
"code": "OD",
"label": "Opérations diverses",
"type": "miscellaneous"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/settings" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/settings', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/settings", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/settings",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneLookup
Company detection (CompanySearch for BE and FR, VIES elsewhere), legal forms, NACE codes, address autocompletion.
GET/v1/companies/{company}/sheetCompany sheet of the file read
Sheet stored on the file (last detection), structured address, legal form, NACE codes and map links.
Integration tokens need the read ability.
Identifiant d'opération companies.sheet
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma SheetView
Exemple
{
"sheet": {
"identifier": "0477472701",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"name": "Le Comptoir Montois",
"legal_form": "SRL",
"legal_form_code": "610",
"status": "active",
"start_date": "2026-03-15",
"address": {
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
},
"address_line": "string",
"latitude": 12.5,
"longitude": 12.5,
"nace_codes": [
{
"code": "56111",
"classification": "MAIN",
"label": "Facture Brasserie Dubuisson"
}
],
"main_nace_code": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"website": "https://www.comptoir-montois.be",
"source": "companysearch",
"fetched_at": "2026-03-15T09:41:00+00:00",
"map": {
"query": "Grand-Place 14, 7000 Mons, Belgique",
"apple_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"google_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"static_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"latitude": 12.5,
"longitude": 12.5
}
},
"sheet_at": "2026-03-15T09:41:00+00:00",
"address": {
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
},
"address_line": "string",
"legal_form": {},
"nace_codes": [
{
"code": "COMPTOIR",
"classification": "string",
"label": "Facture Brasserie Dubuisson",
"is_main": true
}
],
"main_nace_code": "string",
"vat_number_formatted": "BE 0477.472.701",
"map": {
"query": "Grand-Place 14, 7000 Mons, Belgique",
"apple_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"google_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"static_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"latitude": 12.5,
"longitude": 12.5
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sheet" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sheet', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sheet", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sheet",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/apply-sheetFill the file from a company sheet write Hors démo 30 / 1 min
Looks the company up and copies name, legal form, address, NACE codes and VAT number to the file (empty fields only unless overwrite).
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 30 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.apply-sheet
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
identifierstringrequisEnterprise or VAT number.ex.0477472701refreshboolean | nullIgnore the 24 h cache.overwriteboolean | nullReplace the fields already filled in.
Exemple
{
"identifier": "0477472701",
"refresh": true,
"overwrite": true
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
companyCompanysheetCompanySheetmapobject
Exemple
{
"company": {
"id": 7,
"public_token": "XBVD5O1L29HC",
"firm_id": 3,
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"legal_form": "SRL",
"legal_form_code": "610",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"country_pack": "BE",
"vat_regime": "monthly",
"currency": "EUR",
"locale": "fr",
"address": "Grand-Place 14, 7000 Mons",
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"latitude": "50.4541000",
"longitude": "3.9523000",
"nace_codes": [
{
"code": "56111",
"classification": "MAIN"
}
],
"main_nace_code": "56111",
"company_sheet_at": "2026-03-15T09:41:00+00:00",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"fiscal_year_start": "2026-03-15",
"fiscal_year_end": "2026-03-15",
"settings": {
"vat": {
"administration_cell": "string",
"structured_communication": "000000000101",
"directorate_number": "string",
"office_number": "string",
"declarant": {
"applicable": false,
"company_name": "string",
"signatory_1": "string",
"signatory_1_title": "string",
"signatory_2": "string",
"signatory_2_title": "string",
"phone": "+32 65 31 42 18",
"fax": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"language": "fr"
},
"sender_281_50": {
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"filer": {
"quality": "company",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
}
},
"legal": {
"rpm_district": "Hainaut, division Mons"
},
"annual_accounts": {
"scheme": "abbreviated",
"general_meeting_date": "2026-03-15",
"directors": "string",
"valuation_rules": "string"
},
"auto_entries": {
"vat": {
"payable_account": "451000",
"receivable_account": "411000",
"correction_payable_account": "string",
"correction_receivable_account": "string",
"journal_id": 3
},
"invoices_to_receive": {
"supplier_account": "444000",
"customer_account": "404000",
"journal_id": 3
},
"reconciliation_difference": {
"expense_account": "657000",
"income_account": "757000",
"max_amount": 1
},
"transfers": {
"transit_account": "580000",
"journal_id": 3
}
},
"history": {
"trash_retention_days": 90
}
},
"is_active": true,
"is_demo": false,
"source": "manual",
"external_id": "string",
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"deleted_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entries_count": 1284,
"firm": {
"id": 3,
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"fiscal_years": [
{
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{}
]
}
],
"journals": [
{
"id": 3,
"company_id": 7,
"code": "VEN",
"label": "Ventes",
"type": "purchase",
"control_account_id": 42,
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"last_number": 412,
"is_active": true,
"is_default": true,
"description": "Description",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"entries_count": 412,
"control_account": null,
"rules": [
{}
]
}
]
},
"sheet": {
"identifier": "0477472701",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"name": "Le Comptoir Montois",
"legal_form": "SRL",
"legal_form_code": "610",
"status": "active",
"start_date": "2026-03-15",
"address": {
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
},
"address_line": "string",
"latitude": 12.5,
"longitude": 12.5,
"nace_codes": [
{
"code": "56111",
"classification": "MAIN",
"label": "Facture Brasserie Dubuisson"
}
],
"main_nace_code": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"website": "https://www.comptoir-montois.be",
"source": "companysearch",
"fetched_at": "2026-03-15T09:41:00+00:00",
"map": {
"query": "Grand-Place 14, 7000 Mons, Belgique",
"apple_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"google_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"static_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"latitude": 12.5,
"longitude": 12.5
}
},
"map": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. Errorcode. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/apply-sheet" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"identifier": "0477472701",
"refresh": true,
"overwrite": true
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/apply-sheet', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'identifier' => '0477472701',
'refresh' => true,
'overwrite' => true,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/apply-sheet", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"identifier": "0477472701",
"refresh": true,
"overwrite": true
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/apply-sheet",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"identifier": "0477472701",
"refresh": True,
"overwrite": True
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/third-parties/{thirdParty}/sheetCompany sheet of a third party read
Integration tokens need the read ability.
Identifiant d'opération companies.third-parties.sheet
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma SheetView
Exemple
{
"sheet": {
"identifier": "0477472701",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"name": "Le Comptoir Montois",
"legal_form": "SRL",
"legal_form_code": "610",
"status": "active",
"start_date": "2026-03-15",
"address": {
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
},
"address_line": "string",
"latitude": 12.5,
"longitude": 12.5,
"nace_codes": [
{
"code": "56111",
"classification": "MAIN",
"label": "Facture Brasserie Dubuisson"
}
],
"main_nace_code": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"website": "https://www.comptoir-montois.be",
"source": "companysearch",
"fetched_at": "2026-03-15T09:41:00+00:00",
"map": {
"query": "Grand-Place 14, 7000 Mons, Belgique",
"apple_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"google_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"static_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"latitude": 12.5,
"longitude": 12.5
}
},
"sheet_at": "2026-03-15T09:41:00+00:00",
"address": {
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
},
"address_line": "string",
"legal_form": {},
"nace_codes": [
{
"code": "COMPTOIR",
"classification": "string",
"label": "Facture Brasserie Dubuisson",
"is_main": true
}
],
"main_nace_code": "string",
"vat_number_formatted": "BE 0477.472.701",
"map": {
"query": "Grand-Place 14, 7000 Mons, Belgique",
"apple_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"google_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"static_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"latitude": 12.5,
"longitude": 12.5
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/sheet" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/sheet', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/sheet", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/sheet",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/third-parties/{thirdParty}/apply-sheetFill a third party from a company sheet write Hors démo 30 / 1 min
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 30 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.third-parties.apply-sheet
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
identifierstringrequisEnterprise or VAT number.ex.0477472701refreshboolean | nullIgnore the 24 h cache.overwriteboolean | nullReplace the fields already filled in.
Exemple
{
"identifier": "0477472701",
"refresh": true,
"overwrite": true
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
third_partyThirdPartysheetCompanySheetmapobject
Exemple
{
"third_party": {
"id": 18,
"company_id": 7,
"type": "customer",
"code": "DUBUISSON",
"name": "Brasserie Dubuisson SA",
"contact_name": "string",
"vat_number": "BE0402531376",
"enterprise_number": "0402531376",
"legal_form_code": "string",
"vat_status": "subject",
"country": "BE",
"language": "fr",
"category": "string",
"currency": "EUR",
"address": "Chaussée de Mons 28",
"house_number": "14",
"box": "string",
"address_line_2": "string",
"postal_code": "7904",
"city": "Pipaix",
"nace_code": "string",
"iban": "BE71096123456769",
"bic": "GKCCBEBB",
"bank_account": "string",
"email": "compta@dubuisson.example",
"phone": "+32 65 31 42 18",
"fax": "string",
"website": "https://www.comptoir-montois.be",
"payment_terms_days": 30,
"form_281_50_type": "string",
"profession_281_50": "string",
"is_natural_person": false,
"notes": "string",
"default_vat_code_id": 42,
"default_account_id": 42,
"vies_valid": true,
"vies_checked_at": "2026-03-15T09:41:00+00:00",
"vies_name": "string",
"peppol_identifier": "0208:0402531376",
"peppol_registered": true,
"peppol_access_point": {},
"peppol_document_types": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"peppol_checked_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"default_account": {},
"default_vat_code": {}
},
"sheet": {
"identifier": "0477472701",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"name": "Le Comptoir Montois",
"legal_form": "SRL",
"legal_form_code": "610",
"status": "active",
"start_date": "2026-03-15",
"address": {
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
},
"address_line": "string",
"latitude": 12.5,
"longitude": 12.5,
"nace_codes": [
{
"code": "56111",
"classification": "MAIN",
"label": "Facture Brasserie Dubuisson"
}
],
"main_nace_code": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"website": "https://www.comptoir-montois.be",
"source": "companysearch",
"fetched_at": "2026-03-15T09:41:00+00:00",
"map": {
"query": "Grand-Place 14, 7000 Mons, Belgique",
"apple_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"google_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"static_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"latitude": 12.5,
"longitude": 12.5
}
},
"map": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. Errorcode. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/apply-sheet" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"identifier": "0477472701",
"refresh": true,
"overwrite": true
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/apply-sheet', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'identifier' => '0477472701',
'refresh' => true,
'overwrite' => true,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/apply-sheet", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"identifier": "0477472701",
"refresh": true,
"overwrite": true
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/apply-sheet",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"identifier": "0477472701",
"refresh": True,
"overwrite": True
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/reference/legal-formsLegal forms read
Official nomenclature of legal forms (KBO / BCE for Belgium).
Integration tokens need the read ability.
Identifiant d'opération reference.legal-forms
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
country | string | ISO country, BE by default. ex. BE |
q | string | Code, abbreviation or label. ex. srl |
common | boolean | Only the common forms. |
lang | string | fr nl en de |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
dataobject[]Propriétés
codestringex.610labelstringex.Société à responsabilité limitéelabel_frstringlabel_nlstringex.Besloten Vennootschaplabel_destringlabel_enstringabbreviationstring | nullex.SRLis_commonboolean
countrystringex.BEnomenclature_countrystringex.BE
Exemple
{
"data": [
{
"code": "610",
"label": "Société à responsabilité limitée",
"label_fr": "string",
"label_nl": "Besloten Vennootschap",
"label_de": "string",
"label_en": "string",
"abbreviation": "SRL",
"is_common": true
}
],
"country": "BE",
"nomenclature_country": "BE"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/reference/legal-forms" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/reference/legal-forms', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/reference/legal-forms", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/reference/legal-forms",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/reference/naceNACE codes read
Search in the NACE-BEL nomenclature by code or words.
Integration tokens need the read ability.
Identifiant d'opération reference.nace
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
country | string | ex. BE |
q | string | ex. restauration |
limit | integer | 1 to 200, 30 by default. |
level | integer | 1 to 7. |
edition | string | ex. 2025 |
lang | string | fr nl en de |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
dataobject[]Propriétés
codestringex.56111labelstringex.Restauration à service completlabel_frstringlabel_nlstringlabel_destringlabel_enstringlevelintegerex.5editionstringex.2025
countrystringnomenclature_countrystringlocalestring
Exemple
{
"data": [
{
"code": "56111",
"label": "Restauration à service complet",
"label_fr": "string",
"label_nl": "string",
"label_de": "string",
"label_en": "string",
"level": 5,
"edition": "2025"
}
],
"country": "BE",
"nomenclature_country": "string",
"locale": "fr"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/reference/nace" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/reference/nace', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/reference/nace", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/reference/nace",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/lookup/capabilitiesLookup capabilities of a country read
What the detection can do for a country: BE and FR through CompanySearch (search, sheet, cities, streets), other EU countries through VIES (VAT check only).
Integration tokens need the read ability.
Identifiant d'opération lookup.capabilities
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
country | string | ex. BE |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
countrystringex.BEsearchbooleansheetbooleanvatbooleancitiesbooleanstreetsbooleansourcestringex.companysearchprovider_configuredboolean
Exemple
{
"country": "BE",
"search": true,
"sheet": true,
"vat": true,
"cities": true,
"streets": true,
"source": "companysearch",
"provider_configured": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/lookup/capabilities" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/lookup/capabilities', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/lookup/capabilities", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/lookup/capabilities",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/lookup/searchSearch a company by name or number read Hors démo 60 / 1 min
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 60 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération lookup.search
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
q requis | string | 2 characters at least. ex. comptoir montois |
country | string | ex. BE |
limit | integer | 1 to 25. |
lang | string | fr nl en de |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
dataobject[]Propriétés
identifierstringex.0477472701namestringex.Le Comptoir Montoislegal_formstring | nullex.SRLvat_numberstring | nullpostal_codestring | nullex.7000citystring | nullex.Monsstatusstring | nullex.active
search_supportedbooleanprovider_configuredbooleansourcestringcountrystring
Exemple
{
"data": [
{
"identifier": "0477472701",
"name": "Le Comptoir Montois",
"legal_form": "SRL",
"vat_number": "BE0477472701",
"postal_code": "7000",
"city": "Mons",
"status": "active"
}
],
"search_supported": true,
"provider_configured": true,
"source": "string",
"country": "BE"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/lookup/search?q=comptoir%20montois" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/lookup/search', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'q' => 'comptoir montois',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/lookup/search?q=comptoir%20montois", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/lookup/search",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"q": "comptoir montois"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/lookup/companies/{identifier}Company sheet read Hors démo 60 / 1 min
Normalised sheet of a company, cached 24 hours.
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 60 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération lookup.companies.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
identifier requis | string | Enterprise number or VAT number of the company to look up. ex. 0477472701 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
country | string | |
refresh | boolean | Ignore the cache. |
lang | string | fr nl en de |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma CompanySheet
Exemple
{
"identifier": "0477472701",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"name": "Le Comptoir Montois",
"legal_form": "SRL",
"legal_form_code": "610",
"status": "active",
"start_date": "2026-03-15",
"address": {
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
},
"address_line": "string",
"latitude": 12.5,
"longitude": 12.5,
"nace_codes": [
{
"code": "56111",
"classification": "MAIN",
"label": "Facture Brasserie Dubuisson"
}
],
"main_nace_code": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"website": "https://www.comptoir-montois.be",
"source": "companysearch",
"fetched_at": "2026-03-15T09:41:00+00:00",
"map": {
"query": "Grand-Place 14, 7000 Mons, Belgique",
"apple_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"google_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"static_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"latitude": 12.5,
"longitude": 12.5
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/lookup/companies/0477472701" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/lookup/companies/0477472701', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/lookup/companies/0477472701", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/lookup/companies/0477472701",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/lookup/vatCheck a VAT number read Hors démo 60 / 1 min
Format, check digits and existence, with the Peppol status when known.
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 60 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération lookup.vat
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
vat requis | string | ex. BE0477472701 |
country | string |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
validboolean | nullvalid_formatbooleanvat_numberstringenterprise_numberstring | nullnamestring | nulladdress_linestring | nullstatusstring | nullpeppolobject | nullreasonstring | nullsourcestring
Exemple
{
"valid": true,
"valid_format": true,
"vat_number": "BE0477472701",
"enterprise_number": "0477472701",
"name": "Le Comptoir Montois SRL",
"address_line": "string",
"status": "active",
"peppol": {},
"reason": "string",
"source": "string"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/lookup/vat?vat=BE0477472701" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/lookup/vat', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'vat' => 'BE0477472701',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/lookup/vat?vat=BE0477472701", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/lookup/vat",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"vat": "BE0477472701"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/lookup/citiesCity autocompletion read Hors démo 120 / 1 min
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 120 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération lookup.cities
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
q requis | string | ex. Mons |
country | string | ex. BE |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
dataobject[]Propriétés
postal_codestringex.7000citystringex.Monscity_frstring | nullcity_nlstring | nullex.Bergencountrystringex.BE
Exemple
{
"data": [
{
"postal_code": "7000",
"city": "Mons",
"city_fr": "string",
"city_nl": "Bergen",
"country": "BE"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/lookup/cities?q=Mons" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/lookup/cities', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'q' => 'Mons',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/lookup/cities?q=Mons", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/lookup/cities",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"q": "Mons"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/lookup/streetsStreet autocompletion read Hors démo 120 / 1 min
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 120 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération lookup.streets
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
zipcode requis | string | Four digits. ex. 7000 |
q | string | ex. Grand |
country | string | ex. BE |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
dataobject[]Propriétés
streetstringex.Grand-Placestreet_frstring | nullstreet_nlstring | nullpostal_codestringcitystringcountrystring
Exemple
{
"data": [
{
"street": "Grand-Place",
"street_fr": "string",
"street_nl": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/lookup/streets?zipcode=7000" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/lookup/streets', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'zipcode' => '7000',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/lookup/streets?zipcode=7000", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/lookup/streets",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"zipcode": "7000"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/lookup/capabilitiesLookup capabilities of a country read
What the detection can do for a country: BE and FR through CompanySearch (search, sheet, cities, streets), other EU countries through VIES (VAT check only). The call is attributed to the company file.
Integration tokens need the read ability.
Identifiant d'opération companies.lookup.capabilities
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
country | string | ex. BE |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
countrystringex.BEsearchbooleansheetbooleanvatbooleancitiesbooleanstreetsbooleansourcestringex.companysearchprovider_configuredboolean
Exemple
{
"country": "BE",
"search": true,
"sheet": true,
"vat": true,
"cities": true,
"streets": true,
"source": "companysearch",
"provider_configured": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/capabilities" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/capabilities', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/capabilities", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/capabilities",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/lookup/searchSearch a company by name or number read Hors démo 60 / 1 min
The call is attributed to the company file.
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 60 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.lookup.search
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
q requis | string | 2 characters at least. ex. comptoir montois |
country | string | ex. BE |
limit | integer | 1 to 25. |
lang | string | fr nl en de |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
dataobject[]Propriétés
identifierstringex.0477472701namestringex.Le Comptoir Montoislegal_formstring | nullex.SRLvat_numberstring | nullpostal_codestring | nullex.7000citystring | nullex.Monsstatusstring | nullex.active
search_supportedbooleanprovider_configuredbooleansourcestringcountrystring
Exemple
{
"data": [
{
"identifier": "0477472701",
"name": "Le Comptoir Montois",
"legal_form": "SRL",
"vat_number": "BE0477472701",
"postal_code": "7000",
"city": "Mons",
"status": "active"
}
],
"search_supported": true,
"provider_configured": true,
"source": "string",
"country": "BE"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/search?q=comptoir%20montois" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/search', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'q' => 'comptoir montois',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/search?q=comptoir%20montois", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/search",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"q": "comptoir montois"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/lookup/companies/{identifier}Company sheet read Hors démo 60 / 1 min
Normalised sheet of a company, cached 24 hours. The call is attributed to the company file.
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 60 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.lookup.companies.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
identifier requis | string | Enterprise number or VAT number of the company to look up. ex. 0477472701 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
country | string | |
refresh | boolean | Ignore the cache. |
lang | string | fr nl en de |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma CompanySheet
Exemple
{
"identifier": "0477472701",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"name": "Le Comptoir Montois",
"legal_form": "SRL",
"legal_form_code": "610",
"status": "active",
"start_date": "2026-03-15",
"address": {
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
},
"address_line": "string",
"latitude": 12.5,
"longitude": 12.5,
"nace_codes": [
{
"code": "56111",
"classification": "MAIN",
"label": "Facture Brasserie Dubuisson"
}
],
"main_nace_code": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"website": "https://www.comptoir-montois.be",
"source": "companysearch",
"fetched_at": "2026-03-15T09:41:00+00:00",
"map": {
"query": "Grand-Place 14, 7000 Mons, Belgique",
"apple_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"google_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"static_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"latitude": 12.5,
"longitude": 12.5
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/companies/0477472701" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/companies/0477472701', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/companies/0477472701", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/companies/0477472701",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/lookup/vatCheck a VAT number read Hors démo 60 / 1 min
Format, check digits and existence, with the Peppol status when known. The call is attributed to the company file.
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 60 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.lookup.vat
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
vat requis | string | ex. BE0477472701 |
country | string |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
validboolean | nullvalid_formatbooleanvat_numberstringenterprise_numberstring | nullnamestring | nulladdress_linestring | nullstatusstring | nullpeppolobject | nullreasonstring | nullsourcestring
Exemple
{
"valid": true,
"valid_format": true,
"vat_number": "BE0477472701",
"enterprise_number": "0477472701",
"name": "Le Comptoir Montois SRL",
"address_line": "string",
"status": "active",
"peppol": {},
"reason": "string",
"source": "string"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/vat?vat=BE0477472701" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/vat', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'vat' => 'BE0477472701',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/vat?vat=BE0477472701", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/vat",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"vat": "BE0477472701"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/lookup/citiesCity autocompletion read Hors démo 120 / 1 min
The call is attributed to the company file.
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 120 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.lookup.cities
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
q requis | string | ex. Mons |
country | string | ex. BE |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
dataobject[]Propriétés
postal_codestringex.7000citystringex.Monscity_frstring | nullcity_nlstring | nullex.Bergencountrystringex.BE
Exemple
{
"data": [
{
"postal_code": "7000",
"city": "Mons",
"city_fr": "string",
"city_nl": "Bergen",
"country": "BE"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/cities?q=Mons" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/cities', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'q' => 'Mons',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/cities?q=Mons", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/cities",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"q": "Mons"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/lookup/streetsStreet autocompletion read Hors démo 120 / 1 min
The call is attributed to the company file.
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 120 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.lookup.streets
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
zipcode requis | string | Four digits. ex. 7000 |
q | string | ex. Grand |
country | string | ex. BE |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
dataobject[]Propriétés
streetstringex.Grand-Placestreet_frstring | nullstreet_nlstring | nullpostal_codestringcitystringcountrystring
Exemple
{
"data": [
{
"street": "Grand-Place",
"street_fr": "string",
"street_nl": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/streets?zipcode=7000" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/streets', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'zipcode' => '7000',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/streets?zipcode=7000", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/lookup/streets",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"zipcode": "7000"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneChart of accounts
Accounts of a company file.
GET/v1/companies/{company}/accountsChart of accounts read
Integration tokens need the read ability.
Identifiant d'opération companies.accounts.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
q | string | Number prefix or part of the label. ex. 6120 |
postable | boolean | Only the accounts entries can be posted to. |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Exemple
[
{
"id": 580,
"company_id": 7,
"number": "702000",
"label": "Prestations de services",
"type": "asset",
"is_postable": true,
"is_reconcilable": true,
"purchase_grid": 82,
"default_vat_code_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"default_vat_code": {}
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/accountsCreate an account write
Integration tokens need the write ability.
Identifiant d'opération companies.accounts.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
numberstringrequis2 to 12 digits, unique in the file.typestringrequisassetliabilityexpenseincomeoff_balancelabelstringrequis200 characters max.is_postablebooleanis_reconcilablebooleanpurchase_gridinteger | null81, 82 or 83.default_vat_code_idinteger | null
Exemple
{
"number": "612100",
"label": "Électricité",
"type": "expense",
"is_postable": true,
"purchase_grid": 82
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma Account
Exemple
{
"id": 580,
"company_id": 7,
"number": "702000",
"label": "Prestations de services",
"type": "asset",
"is_postable": true,
"is_reconcilable": true,
"purchase_grid": 82,
"default_vat_code_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"default_vat_code": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"number": "612100",
"label": "Électricité",
"type": "expense",
"is_postable": true,
"purchase_grid": 82
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'number' => '612100',
'label' => 'Électricité',
'type' => 'expense',
'is_postable' => true,
'purchase_grid' => 82,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"number": "612100",
"label": "Électricité",
"type": "expense",
"is_postable": true,
"purchase_grid": 82
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"number": "612100",
"label": "Électricité",
"type": "expense",
"is_postable": True,
"purchase_grid": 82
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/accounts/{account}Update an account write
The number and the type of an account never change.
Integration tokens need the write ability.
Identifiant d'opération companies.accounts.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
account requis | integer | Id of the account (not its number). ex. 223 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
labelstring200 characters max.is_postablebooleanis_reconcilablebooleanpurchase_gridinteger | null81, 82 or 83.default_vat_code_idinteger | null
Exemple
{
"label": "Électricité et gaz"
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma Account
Exemple
{
"id": 580,
"company_id": 7,
"number": "702000",
"label": "Prestations de services",
"type": "asset",
"is_postable": true,
"is_reconcilable": true,
"purchase_grid": 82,
"default_vat_code_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"default_vat_code": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/223" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"label": "Électricité et gaz"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/223', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'label' => 'Électricité et gaz',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/223", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"label": "Électricité et gaz"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/223",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"label": "Électricité et gaz"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneJournals
Journals, routing rules of the imported documents, numbering series.
GET/v1/companies/{company}/journalsJournals read
With their control account, routing rules and number of entries.
Integration tokens need the read ability.
Identifiant d'opération companies.journals.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Exemple
[
{
"id": 3,
"company_id": 7,
"code": "VEN",
"label": "Ventes",
"type": "purchase",
"control_account_id": 42,
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"last_number": 412,
"is_active": true,
"is_default": true,
"description": "Description",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"entries_count": 412,
"control_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"rules": [
{
"id": 4,
"company_id": 7,
"journal_id": 3,
"direction": "sale",
"match_field": "payment_provider",
"match_value": "TK",
"priority": 100,
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 3,
"code": "VEN",
"label": "Ventes",
"type": "sale"
}
}
]
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/journalsCreate a journal write
Integration tokens need the write ability.
Identifiant d'opération companies.journals.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
codestringrequisLetters and digits, 6 max, unique.labelstringrequistypestringrequispurchasesalepurchase_credit_notesale_credit_notefinancialmiscellaneouscontrol_account_idinteger | nullibanstring | nullbicstring | null
Exemple
{
"code": "ING",
"label": "ING Business",
"type": "financial",
"iban": "BE12310123456789"
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma Journal
Exemple
{
"id": 3,
"company_id": 7,
"code": "VEN",
"label": "Ventes",
"type": "purchase",
"control_account_id": 42,
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"last_number": 412,
"is_active": true,
"is_default": true,
"description": "Description",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"entries_count": 412,
"control_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"rules": [
{
"id": 4,
"company_id": 7,
"journal_id": 3,
"direction": "sale",
"match_field": "payment_provider",
"match_value": "TK",
"priority": 100,
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 3,
"code": "VEN",
"label": "Ventes",
"type": "sale"
}
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"code": "ING",
"label": "ING Business",
"type": "financial",
"iban": "BE12310123456789"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'code' => 'ING',
'label' => 'ING Business',
'type' => 'financial',
'iban' => 'BE12310123456789',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"code": "ING",
"label": "ING Business",
"type": "financial",
"iban": "BE12310123456789"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"code": "ING",
"label": "ING Business",
"type": "financial",
"iban": "BE12310123456789"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/journals/{journal}Update a journal write
is_default makes it the default journal of its type.
Integration tokens need the write ability.
Identifiant d'opération companies.journals.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
journal requis | integer | Id of the journal. ex. 3 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
labelstringdescriptionstring | nullcontrol_account_idinteger | nullibanstring | nullis_activebooleanis_defaultboolean
Exemple
{
"is_default": true
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma Journal
Exemple
{
"id": 3,
"company_id": 7,
"code": "VEN",
"label": "Ventes",
"type": "purchase",
"control_account_id": 42,
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"last_number": 412,
"is_active": true,
"is_default": true,
"description": "Description",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"entries_count": 412,
"control_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"rules": [
{
"id": 4,
"company_id": 7,
"journal_id": 3,
"direction": "sale",
"match_field": "payment_provider",
"match_value": "TK",
"priority": 100,
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 3,
"code": "VEN",
"label": "Ventes",
"type": "sale"
}
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"is_default": true
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'is_default' => true,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"is_default": true
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"is_default": True
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/journals/{journal}Delete a journal write
Only a journal that never held an entry (continuous numbering); otherwise deactivate it. Goes to the recycle bin.
Integration tokens need the write ability.
Identifiant d'opération companies.journals.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
journal requis | integer | Id of the journal. ex. 3 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/journal-rulesJournal routing rules read
Integration tokens need the read ability.
Identifiant d'opération companies.journal-rules.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma JournalRule[]
Tableau de JournalRule
Exemple
[
{
"id": 4,
"company_id": 7,
"journal_id": 3,
"direction": "sale",
"match_field": "payment_provider",
"match_value": "TK",
"priority": 100,
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 3,
"code": "VEN",
"label": "Ventes",
"type": "sale"
}
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/journal-rulesCreate a journal rule write
Integration tokens need the write ability.
Identifiant d'opération companies.journal-rules.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
journal_idintegerrequisdirectionstringrequissalepurchasematch_fieldstringrequispayment_providernumber_seriesnumber_prefixthird_partymatch_valuestringrequis100 characters max.priorityinteger1 to 999, lowest first.is_activeboolean
Exemple
{
"journal_id": 3,
"direction": "sale",
"match_field": "number_prefix",
"match_value": "TK"
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma JournalRule
Exemple
{
"id": 4,
"company_id": 7,
"journal_id": 3,
"direction": "sale",
"match_field": "payment_provider",
"match_value": "TK",
"priority": 100,
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 3,
"code": "VEN",
"label": "Ventes",
"type": "sale"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"journal_id": 3,
"direction": "sale",
"match_field": "number_prefix",
"match_value": "TK"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'journal_id' => 3,
'direction' => 'sale',
'match_field' => 'number_prefix',
'match_value' => 'TK',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"journal_id": 3,
"direction": "sale",
"match_field": "number_prefix",
"match_value": "TK"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"journal_id": 3,
"direction": "sale",
"match_field": "number_prefix",
"match_value": "TK"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/journal-rules/{journalRule}Update a journal rule write
Integration tokens need the write ability.
Identifiant d'opération companies.journal-rules.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
journalRule requis | integer | Id of the journal rule. ex. 4 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
journal_idintegerdirectionstringsalepurchasematch_fieldstringpayment_providernumber_seriesnumber_prefixthird_partymatch_valuestring100 characters max.priorityinteger1 to 999, lowest first.is_activeboolean
Exemple
{
"priority": 10
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma JournalRule
Exemple
{
"id": 4,
"company_id": 7,
"journal_id": 3,
"direction": "sale",
"match_field": "payment_provider",
"match_value": "TK",
"priority": 100,
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 3,
"code": "VEN",
"label": "Ventes",
"type": "sale"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules/4" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"priority": 10
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules/4', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'priority' => 10,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules/4", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"priority": 10
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules/4",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"priority": 10
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/journal-rules/{journalRule}Delete a journal rule write
Integration tokens need the write ability.
Identifiant d'opération companies.journal-rules.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
journalRule requis | integer | Id of the journal rule. ex. 4 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflictExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules/4" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules/4', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules/4", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journal-rules/4",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/documents/seriesNumbering series of the documents read
Series observed in the imported documents (prefix and payment provider) and the journal resolved for each.
Integration tokens need the read ability.
Identifiant d'opération companies.documents.series
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object[]
Tableau de
directionstringsalepurchaseis_credit_notebooleannumber_seriesstring | nullex.TKpayment_providerstring | nulldocumentsintegerex.214pendingintegerex.6sample_numberstring | nullex.TK-2026-00214journalobject | null
Exemple
[
{
"direction": "sale",
"is_credit_note": true,
"number_series": "TK",
"payment_provider": "string",
"documents": 214,
"pending": 6,
"sample_number": "TK-2026-00214",
"journal": {}
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/series" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/series', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/series", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/series",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneFiscal years
Fiscal years, periods, locking, closing and year-end.
GET/v1/companies/{company}/fiscal-yearsFiscal years and periods read
Integration tokens need the read ability.
Identifiant d'opération companies.fiscal-years.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma FiscalYear[]
Tableau de FiscalYear
Exemple
[
{
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{
"id": 16,
"fiscal_year_id": 2,
"number": 3,
"label": "Mars 2026",
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"is_locked": false,
"locked_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}
]
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/fiscal-yearsOpen a fiscal year write
Creates the year and its periods (opening, one per month, closing).
Integration tokens need the write ability.
Identifiant d'opération companies.fiscal-years.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
codestringrequisUnique, 10 characters max.starts_onstring <date>requisends_onstring <date>requis
Exemple
{
"code": "2027",
"starts_on": "2027-01-01",
"ends_on": "2027-12-31"
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma FiscalYear
Exemple
{
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{
"id": 16,
"fiscal_year_id": 2,
"number": 3,
"label": "Mars 2026",
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"is_locked": false,
"locked_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"code": "2027",
"starts_on": "2027-01-01",
"ends_on": "2027-12-31"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'code' => '2027',
'starts_on' => '2027-01-01',
'ends_on' => '2027-12-31',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"code": "2027",
"starts_on": "2027-01-01",
"ends_on": "2027-12-31"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"code": "2027",
"starts_on": "2027-01-01",
"ends_on": "2027-12-31"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/fiscal-years/{fiscalYear}/periods/{period}Lock or unlock a period write
No entry can be posted in a locked period. Refused with period_locked (reason fiscal_year_closed) when the fiscal year is closed.
Integration tokens need the write ability.
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.fiscal-years.periods.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
period requis | integer | Id of the period. ex. 16 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
is_lockedbooleanrequis
Exemple
{
"is_locked": true
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma Period
Exemple
{
"id": 16,
"fiscal_year_id": 2,
"number": 3,
"label": "Mars 2026",
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"is_locked": false,
"locked_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflictcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/periods/16" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"is_locked": true
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/periods/16', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'is_locked' => true,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/periods/16", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"is_locked": true
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/periods/16",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"is_locked": True
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/fiscal-years/{fiscalYear}/closeClose or reopen a fiscal year write
Locks every period. Send reopen: true to reopen. For the closing entries and the carry-forward use year-end.
Integration tokens need the write ability.
Identifiant d'opération companies.fiscal-years.close
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
reopenboolean
Exemple
{
"reopen": false
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma FiscalYear
Exemple
{
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{
"id": 16,
"fiscal_year_id": 2,
"number": 3,
"label": "Mars 2026",
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"is_locked": false,
"locked_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/close" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"reopen": false
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/close', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'reopen' => false,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/close", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"reopen": false
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/close",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"reopen": False
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/fiscal-years/{fiscalYear}/year-endYear-end closing write 5 / 1 min
Posts the closing entry (result), opens the next fiscal year when needed, posts the opening entry (carry-forward of the balance sheet accounts) and closes the year. Emits the webhook fiscal_year.closed.
Integration tokens need the write ability.
Rate limit: 5 requests per minute (429 beyond, see Retry-After).
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.fiscal-years.year-end
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
resultstring <decimal>Result of the year.ex.18420.11closing_entryJournalEntry | nullopening_entryJournalEntry | nullfiscal_yearFiscalYearnext_fiscal_yearFiscalYear
Exemple
{
"result": "18420.11",
"closing_entry": {
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}
]
},
"opening_entry": {
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}
]
},
"fiscal_year": {
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{
"id": 16,
"fiscal_year_id": 2,
"number": 3,
"label": "Mars 2026",
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"is_locked": false,
"locked_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}
]
},
"next_fiscal_year": {
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{
"id": 16,
"fiscal_year_id": 2,
"number": 3,
"label": "Mars 2026",
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"is_locked": false,
"locked_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}
]
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/year-end" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/year-end', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/year-end", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/year-end",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneThird parties
Customers and suppliers: sheet, open items, lettering, reminders, totals, VIES.
GET/v1/companies/{company}/third-partiesList the third parties read
Integration tokens need the read ability.
Identifiant d'opération companies.third-parties.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
type | string | customer supplier |
q | string | Name, code or VAT number. |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma ThirdParty[]
Tableau de ThirdParty
Exemple
[
{
"id": 18,
"company_id": 7,
"type": "customer",
"code": "DUBUISSON",
"name": "Brasserie Dubuisson SA",
"contact_name": "string",
"vat_number": "BE0402531376",
"enterprise_number": "0402531376",
"legal_form_code": "string",
"vat_status": "subject",
"country": "BE",
"language": "fr",
"category": "string",
"currency": "EUR",
"address": "Chaussée de Mons 28",
"house_number": "14",
"box": "string",
"address_line_2": "string",
"postal_code": "7904",
"city": "Pipaix",
"nace_code": "string",
"iban": "BE71096123456769",
"bic": "GKCCBEBB",
"bank_account": "string",
"email": "compta@dubuisson.example",
"phone": "+32 65 31 42 18",
"fax": "string",
"website": "https://www.comptoir-montois.be",
"payment_terms_days": 30,
"form_281_50_type": "string",
"profession_281_50": "string",
"is_natural_person": false,
"notes": "string",
"default_vat_code_id": 42,
"default_account_id": 42,
"vies_valid": true,
"vies_checked_at": "2026-03-15T09:41:00+00:00",
"vies_name": "string",
"peppol_identifier": "0208:0402531376",
"peppol_registered": true,
"peppol_access_point": {},
"peppol_document_types": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"peppol_checked_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"default_account": {},
"default_vat_code": {}
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/third-partiesCreate a third party write
Integration tokens need the write ability.
Identifiant d'opération companies.third-parties.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
typestringrequiscustomersuppliercodestring | nullUnique per type; generated from the name when absent.namestringrequiscontact_namestring | nullvat_numberstring | nullValidated per country.enterprise_numberstring | nulllegal_form_codestring | nullhouse_numberstring | nullboxstring | nullnace_codestring | nullvat_statusstringsubjectnot_subjectexemptintra_eunon_eucountrystring | nullISO 3166-1 alpha-2, BE by default.languagestringfrnlendecategorystring | nullcurrencystringISO 4217.addressstring | nulladdress_line_2string | nullpostal_codestring | nullcitystring | nullibanstring | nullbicstring | nullbank_accountstring | nullemailstring <email> | nullphonestring | nullfaxstring | nullwebsitestring | nullpayment_terms_daysinteger0 to 365.form_281_50_typestring | nullprofession_281_50string | nullis_natural_personbooleannotesstring | nulldefault_vat_code_idinteger | nulldefault_account_idinteger | null
Exemple
{
"type": "supplier",
"name": "Brasserie Dubuisson SA",
"vat_number": "BE 0402.531.376",
"address": "Chaussée de Mons 28",
"postal_code": "7904",
"city": "Pipaix",
"iban": "BE71 0961 2345 6769",
"payment_terms_days": 30
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma ThirdParty
Exemple
{
"id": 18,
"company_id": 7,
"type": "customer",
"code": "DUBUISSON",
"name": "Brasserie Dubuisson SA",
"contact_name": "string",
"vat_number": "BE0402531376",
"enterprise_number": "0402531376",
"legal_form_code": "string",
"vat_status": "subject",
"country": "BE",
"language": "fr",
"category": "string",
"currency": "EUR",
"address": "Chaussée de Mons 28",
"house_number": "14",
"box": "string",
"address_line_2": "string",
"postal_code": "7904",
"city": "Pipaix",
"nace_code": "string",
"iban": "BE71096123456769",
"bic": "GKCCBEBB",
"bank_account": "string",
"email": "compta@dubuisson.example",
"phone": "+32 65 31 42 18",
"fax": "string",
"website": "https://www.comptoir-montois.be",
"payment_terms_days": 30,
"form_281_50_type": "string",
"profession_281_50": "string",
"is_natural_person": false,
"notes": "string",
"default_vat_code_id": 42,
"default_account_id": 42,
"vies_valid": true,
"vies_checked_at": "2026-03-15T09:41:00+00:00",
"vies_name": "string",
"peppol_identifier": "0208:0402531376",
"peppol_registered": true,
"peppol_access_point": {},
"peppol_document_types": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"peppol_checked_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"default_account": {},
"default_vat_code": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"type": "supplier",
"name": "Brasserie Dubuisson SA",
"vat_number": "BE 0402.531.376",
"address": "Chaussée de Mons 28",
"postal_code": "7904",
"city": "Pipaix",
"iban": "BE71 0961 2345 6769",
"payment_terms_days": 30
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'type' => 'supplier',
'name' => 'Brasserie Dubuisson SA',
'vat_number' => 'BE 0402.531.376',
'address' => 'Chaussée de Mons 28',
'postal_code' => '7904',
'city' => 'Pipaix',
'iban' => 'BE71 0961 2345 6769',
'payment_terms_days' => 30,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"type": "supplier",
"name": "Brasserie Dubuisson SA",
"vat_number": "BE 0402.531.376",
"address": "Chaussée de Mons 28",
"postal_code": "7904",
"city": "Pipaix",
"iban": "BE71 0961 2345 6769",
"payment_terms_days": 30
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"type": "supplier",
"name": "Brasserie Dubuisson SA",
"vat_number": "BE 0402.531.376",
"address": "Chaussée de Mons 28",
"postal_code": "7904",
"city": "Pipaix",
"iban": "BE71 0961 2345 6769",
"payment_terms_days": 30
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/third-parties/{thirdParty}Third party sheet read
With its default account and VAT code.
Integration tokens need the read ability.
Identifiant d'opération companies.third-parties.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma ThirdParty
Exemple
{
"id": 18,
"company_id": 7,
"type": "customer",
"code": "DUBUISSON",
"name": "Brasserie Dubuisson SA",
"contact_name": "string",
"vat_number": "BE0402531376",
"enterprise_number": "0402531376",
"legal_form_code": "string",
"vat_status": "subject",
"country": "BE",
"language": "fr",
"category": "string",
"currency": "EUR",
"address": "Chaussée de Mons 28",
"house_number": "14",
"box": "string",
"address_line_2": "string",
"postal_code": "7904",
"city": "Pipaix",
"nace_code": "string",
"iban": "BE71096123456769",
"bic": "GKCCBEBB",
"bank_account": "string",
"email": "compta@dubuisson.example",
"phone": "+32 65 31 42 18",
"fax": "string",
"website": "https://www.comptoir-montois.be",
"payment_terms_days": 30,
"form_281_50_type": "string",
"profession_281_50": "string",
"is_natural_person": false,
"notes": "string",
"default_vat_code_id": 42,
"default_account_id": 42,
"vies_valid": true,
"vies_checked_at": "2026-03-15T09:41:00+00:00",
"vies_name": "string",
"peppol_identifier": "0208:0402531376",
"peppol_registered": true,
"peppol_access_point": {},
"peppol_document_types": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"peppol_checked_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"default_account": {},
"default_vat_code": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/third-parties/{thirdParty}Update a third party write
Integration tokens need the write ability.
Identifiant d'opération companies.third-parties.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
codestring | nullUnique per type; generated from the name when absent.namestringcontact_namestring | nullvat_numberstring | nullValidated per country.enterprise_numberstring | nulllegal_form_codestring | nullhouse_numberstring | nullboxstring | nullnace_codestring | nullvat_statusstringsubjectnot_subjectexemptintra_eunon_eucountrystring | nullISO 3166-1 alpha-2, BE by default.languagestringfrnlendecategorystring | nullcurrencystringISO 4217.addressstring | nulladdress_line_2string | nullpostal_codestring | nullcitystring | nullibanstring | nullbicstring | nullbank_accountstring | nullemailstring <email> | nullphonestring | nullfaxstring | nullwebsitestring | nullpayment_terms_daysinteger0 to 365.form_281_50_typestring | nullprofession_281_50string | nullis_natural_personbooleannotesstring | nulldefault_vat_code_idinteger | nulldefault_account_idinteger | null
Exemple
{
"payment_terms_days": 45,
"email": "compta@dubuisson.example"
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma ThirdParty
Exemple
{
"id": 18,
"company_id": 7,
"type": "customer",
"code": "DUBUISSON",
"name": "Brasserie Dubuisson SA",
"contact_name": "string",
"vat_number": "BE0402531376",
"enterprise_number": "0402531376",
"legal_form_code": "string",
"vat_status": "subject",
"country": "BE",
"language": "fr",
"category": "string",
"currency": "EUR",
"address": "Chaussée de Mons 28",
"house_number": "14",
"box": "string",
"address_line_2": "string",
"postal_code": "7904",
"city": "Pipaix",
"nace_code": "string",
"iban": "BE71096123456769",
"bic": "GKCCBEBB",
"bank_account": "string",
"email": "compta@dubuisson.example",
"phone": "+32 65 31 42 18",
"fax": "string",
"website": "https://www.comptoir-montois.be",
"payment_terms_days": 30,
"form_281_50_type": "string",
"profession_281_50": "string",
"is_natural_person": false,
"notes": "string",
"default_vat_code_id": 42,
"default_account_id": 42,
"vies_valid": true,
"vies_checked_at": "2026-03-15T09:41:00+00:00",
"vies_name": "string",
"peppol_identifier": "0208:0402531376",
"peppol_registered": true,
"peppol_access_point": {},
"peppol_document_types": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"peppol_checked_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"default_account": {},
"default_vat_code": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"payment_terms_days": 45,
"email": "compta@dubuisson.example"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'payment_terms_days' => 45,
'email' => 'compta@dubuisson.example',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"payment_terms_days": 45,
"email": "compta@dubuisson.example"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"payment_terms_days": 45,
"email": "compta@dubuisson.example"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/third-parties/{thirdParty}Delete a third party write
Refused (422) when an entry or a document references it. Goes to the recycle bin.
Integration tokens need the write ability.
Identifiant d'opération companies.third-parties.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/third-parties/{thirdParty}/entriesOpen items and entries of a third party read
Integration tokens need the read ability.
Identifiant d'opération companies.third-parties.entries
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
lettered | string | all yes no |
fiscal_year_id | integer |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
rowsobject[]Propriétés
line_idintegerex.3391entry_idintegerex.1284journal_codestringex.VENentry_numberintegerex.412document_numberstring | nullex.2026/0412period_numberintegerex.3entry_datestring <date>due_datestring <date> | nullamountstring <decimal>ex.1210.00debitstring <decimal>ex.1210.00creditstring <decimal>ex.0.00reconciliation_codestring | nulllabelstring | nullreminder_levelintegerex.0reminder_sent_atstring <date-time> | nullis_letteredbooleanex.false
summaryobjectPropriétés
balancestring <decimal>ex.1210.00open_countintegerex.1lettered_countintegerex.0
Exemple
{
"rows": [
{
"line_id": 3391,
"entry_id": 1284,
"journal_code": "VEN",
"entry_number": 412,
"document_number": "2026/0412",
"period_number": 3,
"entry_date": "2026-03-15",
"due_date": "2026-03-15",
"amount": "1210.00",
"debit": "1210.00",
"credit": "0.00",
"reconciliation_code": "string",
"label": "Facture Brasserie Dubuisson",
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"is_lettered": false
}
],
"summary": {
"balance": "1210.00",
"open_count": 1,
"lettered_count": 0
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/entries" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/entries', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/entries", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/entries",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/third-parties/{thirdParty}/letterLetter lines together write
Matches lines of the third party whose debits and credits balance (a small difference is posted to the difference accounts of the settings).
Integration tokens need the write ability.
Identifiant d'opération companies.third-parties.letter
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
line_idsinteger[]requis
Exemple
{
"line_ids": [
3391,
3518
]
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
codestringLettering code given.ex.ABline_idsinteger[]
Exemple
{
"code": "AB",
"line_ids": [
1
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/letter" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"line_ids": [
3391,
3518
]
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/letter', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'line_ids' => [
3391,
3518,
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/letter", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"line_ids": [
3391,
3518
]
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/letter",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"line_ids": [
3391,
3518
]
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/third-parties/{thirdParty}/unletterRemove a lettering write
By lettering code or by lines.
Integration tokens need the write ability.
Identifiant d'opération companies.third-parties.unletter
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
codestring | nullline_idsinteger[]
Exemple
{
"code": "AB"
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
codesstring[]line_idsinteger[]
Exemple
{
"codes": [
"AB"
],
"line_ids": [
1
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/unletter" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"code": "AB"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/unletter', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'code' => 'AB',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/unletter", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"code": "AB"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/unletter",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"code": "AB"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/third-parties/{thirdParty}/letter-autoAutomatic lettering write
Letters every group of open lines that balances exactly.
Integration tokens need the write ability.
Identifiant d'opération companies.third-parties.letter-auto
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
groupsintegerex.3line_idsinteger[]
Exemple
{
"groups": 3,
"line_ids": [
1
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/letter-auto" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/letter-auto', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/letter-auto", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/letter-auto",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/third-parties/{thirdParty}/entries/{line}/remindRecord a payment reminder write Hors démo
Raises the reminder level of an open line and stamps the date. No e-mail is sent by this endpoint.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération companies.third-parties.remind
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
line requis | integer | Id of the line. ex. 3391 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
The row, as in the entries list.
Exemple
{}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/entries/3391/remind" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/entries/3391/remind', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/entries/3391/remind", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/entries/3391/remind",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/third-parties/{thirdParty}/remindersReminders of a third party read
Integration tokens need the read ability.
Identifiant d'opération companies.third-parties.reminders
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object[]
Tableau de object
Exemple
[
{}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/reminders" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/reminders', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/reminders", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/reminders",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/third-parties/{thirdParty}/totalsTotals per period read
Integration tokens need the read ability.
Identifiant d'opération companies.third-parties.totals
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
mode | string | balance debit credit |
fiscal_year_id | integer |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
fiscal_yearobjectPropriétés
idintegercodestringex.2026
modestringex.balancerowsobject[]Propriétés
period_numberintegerex.1period_labelstringex.Janvier 2026amountstring <decimal>
totalstring <decimal>
Exemple
{
"fiscal_year": {
"id": 42,
"code": "2026"
},
"mode": "balance",
"rows": [
{
"period_number": 1,
"period_label": "Janvier 2026",
"amount": "1210.00"
}
],
"total": "1210.00"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/totals" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/totals', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/totals", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/totals",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/viesCheck a VAT number with VIES read Hors démo 30 / 1 min
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 30 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.vies.check
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
vat_number requis | string | ex. BE0402531376 |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
validboolean | nullNull when VIES did not answer.namestring | nullex.BRASSERIE DUBUISSONaddressstring | nullcountrystringex.BEnumberstringex.0402531376errorstring | nullinvalid_format, service_unavailable or the VIES user error.
Exemple
{
"valid": true,
"name": "BRASSERIE DUBUISSON",
"address": "Grand-Place 14",
"country": "BE",
"number": "0402531376",
"error": "string"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vies?vat_number=BE0402531376" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vies', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'vat_number' => 'BE0402531376',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vies?vat_number=BE0402531376", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vies",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"vat_number": "BE0402531376"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/third-parties/{thirdParty}/viesCheck the VAT number of a third party with VIES write Hors démo 30 / 1 min
Stores the result on the third party (vies_valid, vies_checked_at, vies_name).
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 30 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.third-parties.vies
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
validboolean | nullNull when VIES did not answer.namestring | nullex.BRASSERIE DUBUISSONaddressstring | nullcountrystringex.BEnumberstringex.0402531376errorstring | nullinvalid_format, service_unavailable or the VIES user error.third_partyThirdParty
Exemple
{
"valid": true,
"name": "BRASSERIE DUBUISSON",
"address": "Grand-Place 14",
"country": "BE",
"number": "0402531376",
"error": "string",
"third_party": {
"id": 18,
"company_id": 7,
"type": "customer",
"code": "DUBUISSON",
"name": "Brasserie Dubuisson SA",
"contact_name": "string",
"vat_number": "BE0402531376",
"enterprise_number": "0402531376",
"legal_form_code": "string",
"vat_status": "subject",
"country": "BE",
"language": "fr",
"category": "string",
"currency": "EUR",
"address": "Chaussée de Mons 28",
"house_number": "14",
"box": "string",
"address_line_2": "string",
"postal_code": "7904",
"city": "Pipaix",
"nace_code": "string",
"iban": "BE71096123456769",
"bic": "GKCCBEBB",
"bank_account": "string",
"email": "compta@dubuisson.example",
"phone": "+32 65 31 42 18",
"fax": "string",
"website": "https://www.comptoir-montois.be",
"payment_terms_days": 30,
"form_281_50_type": "string",
"profession_281_50": "string",
"is_natural_person": false,
"notes": "string",
"default_vat_code_id": 42,
"default_account_id": 42,
"vies_valid": true,
"vies_checked_at": "2026-03-15T09:41:00+00:00",
"vies_name": "string",
"peppol_identifier": "0208:0402531376",
"peppol_registered": true,
"peppol_access_point": {},
"peppol_document_types": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"peppol_checked_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"default_account": {},
"default_vat_code": {}
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/vies" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/vies', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/vies", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/vies",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneEntries
Journal entries: free entries, invoices and credit notes, reversal.
GET/v1/companies/{company}/entriesList the entries read
Newest first, with their journal, third party and lines.
Integration tokens need the read ability.
Identifiant d'opération companies.entries.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
journal_id | integer | |
fiscal_year_id | integer | |
third_party_id | integer | |
from | string <date> | Entry date, inclusive. |
to | string <date> | Entry date, inclusive. |
status | string | posted reversed |
q | string | Label, reference, structured communication, third party name, line label or account number prefix. |
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{}
]
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/entriesPost a free entry write
Miscellaneous operation, financial entry…: every line is given, debits must equal credits. The entry is posted at once and numbered in its journal. Accounts are addressed by account_id or by number (account). A date in a locked period or a closed fiscal year is refused with 422 period_locked.
Integration tokens need the write ability.
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.entries.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
journal_idintegerrequisentry_datestring <date>requisInside an open fiscal year and an unlocked period.due_datestring <date> | nulllabelstringrequis200 characters max.referencestring | null60 characters max.structured_communicationstring | nullBelgian structured communication.third_party_idinteger | nulllinesobject[]requisPropriétés
account_idintegerRequired withoutaccount.accountstringAccount number; required withoutaccount_id.debitstring | nullDecimal, positive.creditstring | nullDecimal, positive.labelstring | nullthird_party_idinteger | nullvat_code_idinteger | nullvat_basestring | nullTaxable base carried by the line.cost_center_idinteger | nullAnalytic code of thecost_centeraxis.project_idinteger | nullAnalytic code of theprojectaxis.
Exemple
{
"journal_id": 5,
"entry_date": "2026-03-31",
"label": "Salaires mars 2026",
"reference": "SAL-2026-03",
"lines": [
{
"account": "620200",
"debit": "8420.00",
"label": "Rémunérations brutes"
},
{
"account": "453000",
"credit": "2105.00",
"label": "Précompte professionnel"
},
{
"account": "454000",
"credit": "1100.48",
"label": "ONSS"
},
{
"account": "455000",
"credit": "5214.52",
"label": "Net à payer"
}
]
}Réponses
201Entry posted
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma JournalEntry
Exemple
{
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"journal_id": 5,
"entry_date": "2026-03-31",
"label": "Salaires mars 2026",
"reference": "SAL-2026-03",
"lines": [
{
"account": "620200",
"debit": "8420.00",
"label": "Rémunérations brutes"
},
{
"account": "453000",
"credit": "2105.00",
"label": "Précompte professionnel"
},
{
"account": "454000",
"credit": "1100.48",
"label": "ONSS"
},
{
"account": "455000",
"credit": "5214.52",
"label": "Net à payer"
}
]
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'journal_id' => 5,
'entry_date' => '2026-03-31',
'label' => 'Salaires mars 2026',
'reference' => 'SAL-2026-03',
'lines' => [
[
'account' => '620200',
'debit' => '8420.00',
'label' => 'Rémunérations brutes',
],
[
'account' => '453000',
'credit' => '2105.00',
'label' => 'Précompte professionnel',
],
[
'account' => '454000',
'credit' => '1100.48',
'label' => 'ONSS',
],
[
'account' => '455000',
'credit' => '5214.52',
'label' => 'Net à payer',
],
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"journal_id": 5,
"entry_date": "2026-03-31",
"label": "Salaires mars 2026",
"reference": "SAL-2026-03",
"lines": [
{
"account": "620200",
"debit": "8420.00",
"label": "Rémunérations brutes"
},
{
"account": "453000",
"credit": "2105.00",
"label": "Précompte professionnel"
},
{
"account": "454000",
"credit": "1100.48",
"label": "ONSS"
},
{
"account": "455000",
"credit": "5214.52",
"label": "Net à payer"
}
]
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"journal_id": 5,
"entry_date": "2026-03-31",
"label": "Salaires mars 2026",
"reference": "SAL-2026-03",
"lines": [
{
"account": "620200",
"debit": "8420.00",
"label": "Rémunérations brutes"
},
{
"account": "453000",
"credit": "2105.00",
"label": "Précompte professionnel"
},
{
"account": "454000",
"credit": "1100.48",
"label": "ONSS"
},
{
"account": "455000",
"credit": "5214.52",
"label": "Net à payer"
}
]
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/entries/invoicePost an invoice or a credit note write
Purchase or sale invoice (journal of type purchase / sale) or credit note (journal of type purchase_credit_note / sale_credit_note). Send the net lines with their VAT code: the VAT lines and the third party line are generated, including reverse charge (intra-EU, co-contractor). The label defaults to « Facture <third party> ». A date in a locked period or a closed fiscal year is refused with 422 period_locked.
Integration tokens need the write ability.
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.entries.invoice
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
journal_idintegerrequisJournal of a purchase or sale type.third_party_idintegerrequisentry_datestring <date>requisdue_datestring <date> | nulllabelstring | nullreferencestring | nullInvoice number.structured_communicationstring | nulllinesobject[]requisPropriétés
account_idintegerRequired withoutaccount.accountstringAccount number.amountstringrequisNet amount (excl. VAT), decimal.vat_code_idinteger | nullvat_codestring | nullCode of the VAT code (V21,A06,AIC21…).labelstring | nullcost_center_idinteger | nullAnalytic code of thecost_centeraxis.project_idinteger | nullAnalytic code of theprojectaxis.
Exemple
{
"journal_id": 1,
"third_party_id": 18,
"entry_date": "2026-03-15",
"due_date": "2026-04-14",
"reference": "F-2026-0412",
"lines": [
{
"account": "604000",
"amount": "507.00",
"vat_code": "A21",
"label": "Fûts Bush Caractère 20 L"
},
{
"account": "613200",
"amount": "35.00",
"vat_code": "A21",
"label": "Consigne et transport"
}
]
}Réponses
201Invoice posted
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma JournalEntry
Exemple
{
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 1,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-04-14T00:00:00.000000Z",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": null,
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 12,
"posted_at": "2026-03-16T08:12:40.000000Z",
"reversed_entry_id": null,
"reversed_by_entry_id": null,
"recurring_entry_id": null,
"created_at": "2026-03-16T08:12:40.000000Z",
"updated_at": "2026-03-16T08:12:40.000000Z",
"lock_version": 1,
"version": 1,
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 361,
"third_party_id": null,
"label": "Fûts Bush Caractère 20 L",
"debit": "507.00",
"credit": "0.00",
"vat_code_id": 25,
"vat_base": "507.00",
"reconciliation_code": null,
"cost_center_id": null,
"project_id": null,
"reminder_level": 0,
"reminder_sent_at": null,
"account": {
"id": 361,
"number": "604000",
"label": "Achats de marchandises"
}
},
{
"id": 3392,
"journal_entry_id": 1284,
"position": 2,
"account_id": 384,
"third_party_id": null,
"label": "Consigne et transport",
"debit": "35.00",
"credit": "0.00",
"vat_code_id": 25,
"vat_base": "35.00",
"reconciliation_code": null,
"cost_center_id": null,
"project_id": null,
"reminder_level": 0,
"reminder_sent_at": null,
"account": {
"id": 384,
"number": "613200",
"label": "Transports et déplacements"
}
},
{
"id": 3393,
"journal_entry_id": 1284,
"position": 3,
"account_id": 234,
"third_party_id": null,
"label": "TVA déductible",
"debit": "113.82",
"credit": "0.00",
"vat_code_id": null,
"vat_base": null,
"reconciliation_code": null,
"cost_center_id": null,
"project_id": null,
"reminder_level": 0,
"reminder_sent_at": null,
"account": {
"id": 234,
"number": "411100",
"label": "TVA déductible sur achats"
}
},
{
"id": 3394,
"journal_entry_id": 1284,
"position": 4,
"account_id": 263,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "655.82",
"vat_code_id": null,
"vat_base": null,
"reconciliation_code": null,
"cost_center_id": null,
"project_id": null,
"reminder_level": 0,
"reminder_sent_at": null,
"account": {
"id": 263,
"number": "440000",
"label": "Fournisseurs"
}
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/invoice" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"journal_id": 1,
"third_party_id": 18,
"entry_date": "2026-03-15",
"due_date": "2026-04-14",
"reference": "F-2026-0412",
"lines": [
{
"account": "604000",
"amount": "507.00",
"vat_code": "A21",
"label": "Fûts Bush Caractère 20 L"
},
{
"account": "613200",
"amount": "35.00",
"vat_code": "A21",
"label": "Consigne et transport"
}
]
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/invoice', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'journal_id' => 1,
'third_party_id' => 18,
'entry_date' => '2026-03-15',
'due_date' => '2026-04-14',
'reference' => 'F-2026-0412',
'lines' => [
[
'account' => '604000',
'amount' => '507.00',
'vat_code' => 'A21',
'label' => 'Fûts Bush Caractère 20 L',
],
[
'account' => '613200',
'amount' => '35.00',
'vat_code' => 'A21',
'label' => 'Consigne et transport',
],
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/invoice", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"journal_id": 1,
"third_party_id": 18,
"entry_date": "2026-03-15",
"due_date": "2026-04-14",
"reference": "F-2026-0412",
"lines": [
{
"account": "604000",
"amount": "507.00",
"vat_code": "A21",
"label": "Fûts Bush Caractère 20 L"
},
{
"account": "613200",
"amount": "35.00",
"vat_code": "A21",
"label": "Consigne et transport"
}
]
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/invoice",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"journal_id": 1,
"third_party_id": 18,
"entry_date": "2026-03-15",
"due_date": "2026-04-14",
"reference": "F-2026-0412",
"lines": [
{
"account": "604000",
"amount": "507.00",
"vat_code": "A21",
"label": "Fûts Bush Caractère 20 L"
},
{
"account": "613200",
"amount": "35.00",
"vat_code": "A21",
"label": "Consigne et transport"
}
]
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/entries/{journalEntry}Entry read
With journal, third party, fiscal year, period and lines (account and VAT code).
Integration tokens need the read ability.
Identifiant d'opération companies.entries.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
journalEntry requis | integer | Id of the journal entry. ex. 1284 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma JournalEntry
Exemple
{
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 1,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-04-14T00:00:00.000000Z",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": null,
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 12,
"posted_at": "2026-03-16T08:12:40.000000Z",
"reversed_entry_id": null,
"reversed_by_entry_id": null,
"recurring_entry_id": null,
"created_at": "2026-03-16T08:12:40.000000Z",
"updated_at": "2026-03-16T08:12:40.000000Z",
"lock_version": 1,
"version": 1,
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 361,
"third_party_id": null,
"label": "Fûts Bush Caractère 20 L",
"debit": "507.00",
"credit": "0.00",
"vat_code_id": 25,
"vat_base": "507.00",
"reconciliation_code": null,
"cost_center_id": null,
"project_id": null,
"reminder_level": 0,
"reminder_sent_at": null,
"account": {
"id": 361,
"number": "604000",
"label": "Achats de marchandises"
}
},
{
"id": 3392,
"journal_entry_id": 1284,
"position": 2,
"account_id": 384,
"third_party_id": null,
"label": "Consigne et transport",
"debit": "35.00",
"credit": "0.00",
"vat_code_id": 25,
"vat_base": "35.00",
"reconciliation_code": null,
"cost_center_id": null,
"project_id": null,
"reminder_level": 0,
"reminder_sent_at": null,
"account": {
"id": 384,
"number": "613200",
"label": "Transports et déplacements"
}
},
{
"id": 3393,
"journal_entry_id": 1284,
"position": 3,
"account_id": 234,
"third_party_id": null,
"label": "TVA déductible",
"debit": "113.82",
"credit": "0.00",
"vat_code_id": null,
"vat_base": null,
"reconciliation_code": null,
"cost_center_id": null,
"project_id": null,
"reminder_level": 0,
"reminder_sent_at": null,
"account": {
"id": 234,
"number": "411100",
"label": "TVA déductible sur achats"
}
},
{
"id": 3394,
"journal_entry_id": 1284,
"position": 4,
"account_id": 263,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "655.82",
"vat_code_id": null,
"vat_base": null,
"reconciliation_code": null,
"cost_center_id": null,
"project_id": null,
"reminder_level": 0,
"reminder_sent_at": null,
"account": {
"id": 263,
"number": "440000",
"label": "Fournisseurs"
}
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/entries/{journalEntry}Delete an entry write
Always refused (422) for a posted entry: numbering is continuous and the audit trail is kept. Use reverse. In a locked period the refusal carries period_locked.
Integration tokens need the write ability.
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.entries.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
journalEntry requis | integer | Id of the journal entry. ex. 1284 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflictcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/entries/{journalEntry}/reverseReverse an entry write
Posts the mirror entry (« Extourne de VEN 2026/000412 ») linked to the original, which becomes reversed. The linked document or bank transaction goes back to pending, letterings of the lines are removed and a depreciation line goes back to planned.
Integration tokens need the write ability.
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.entries.reverse
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
journalEntry requis | integer | Id of the journal entry. ex. 1284 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
entry_datestring <date> | nullDate of the reversal; the original date by default.labelstring | null
Exemple
{
"entry_date": "2026-03-31"
}Réponses
201Reversal entry
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma JournalEntry
Exemple
{
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284/reverse" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"entry_date": "2026-03-31"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284/reverse', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'entry_date' => '2026-03-31',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284/reverse", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"entry_date": "2026-03-31"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/1284/reverse",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"entry_date": "2026-03-31"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneRecurring entries
Recurring entry templates and the quality checks of the file.
GET/v1/companies/{company}/recurring-entriesList the recurring entries read
Integration tokens need the read ability.
Identifiant d'opération companies.recurring.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma RecurringEntry[]
Tableau de RecurringEntry
Exemple
[
{
"id": 5,
"company_id": 7,
"journal_id": 5,
"label": "Loyer mensuel",
"reference": "F-2026-0412",
"third_party_id": 18,
"frequency": "monthly",
"next_date": "2026-04-01T00:00:00.000000Z",
"end_date": "2026-03-15T09:41:00+00:00",
"lines": [
{
"account_id": 368,
"debit": "1500.00",
"credit": "0.00",
"label": "Facture Brasserie Dubuisson",
"third_party_id": 18
}
],
"is_active": true,
"last_generated_on": "2026-03-15",
"generated_count": 3,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 42,
"code": "OD",
"label": "Opérations diverses"
},
"third_party": {}
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/recurring-entriesCreate a recurring entry write
Template posted automatically every night once next_date is reached (or on demand with generate).
Integration tokens need the write ability.
Identifiant d'opération companies.recurring.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
journal_idintegerrequislabelstringrequisreferencestring | nullthird_party_idinteger | nullfrequencystringrequismonthlyquarterlyyearlynext_datestring <date>requisend_datestring <date> | nullis_activebooleanlinesobject[]requisPropriétés
account_idintegerrequisPostable account.debitstring | nullDecimal.creditstring | nullDecimal.labelstring | nullthird_party_idinteger | null
Exemple
{
"journal_id": 5,
"label": "Loyer mensuel",
"frequency": "monthly",
"next_date": "2026-04-01",
"lines": [
{
"account_id": 368,
"debit": "1500.00"
},
{
"account_id": 263,
"credit": "1500.00",
"third_party_id": 22
}
]
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma RecurringEntry
Exemple
{
"id": 5,
"company_id": 7,
"journal_id": 5,
"label": "Loyer mensuel",
"reference": "F-2026-0412",
"third_party_id": 18,
"frequency": "monthly",
"next_date": "2026-04-01T00:00:00.000000Z",
"end_date": "2026-03-15T09:41:00+00:00",
"lines": [
{
"account_id": 368,
"debit": "1500.00",
"credit": "0.00",
"label": "Facture Brasserie Dubuisson",
"third_party_id": 18
}
],
"is_active": true,
"last_generated_on": "2026-03-15",
"generated_count": 3,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 42,
"code": "OD",
"label": "Opérations diverses"
},
"third_party": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"journal_id": 5,
"label": "Loyer mensuel",
"frequency": "monthly",
"next_date": "2026-04-01",
"lines": [
{
"account_id": 368,
"debit": "1500.00"
},
{
"account_id": 263,
"credit": "1500.00",
"third_party_id": 22
}
]
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'journal_id' => 5,
'label' => 'Loyer mensuel',
'frequency' => 'monthly',
'next_date' => '2026-04-01',
'lines' => [
[
'account_id' => 368,
'debit' => '1500.00',
],
[
'account_id' => 263,
'credit' => '1500.00',
'third_party_id' => 22,
],
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"journal_id": 5,
"label": "Loyer mensuel",
"frequency": "monthly",
"next_date": "2026-04-01",
"lines": [
{
"account_id": 368,
"debit": "1500.00"
},
{
"account_id": 263,
"credit": "1500.00",
"third_party_id": 22
}
]
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"journal_id": 5,
"label": "Loyer mensuel",
"frequency": "monthly",
"next_date": "2026-04-01",
"lines": [
{
"account_id": 368,
"debit": "1500.00"
},
{
"account_id": 263,
"credit": "1500.00",
"third_party_id": 22
}
]
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/recurring-entries/generateGenerate every due entry write
Integration tokens need the write ability.
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.recurring.generate-all
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
generatedintegerex.2entriesobject[]Propriétés
idintegerreferencestringex.OD 2026/000031entry_datestring <date>
Exemple
{
"generated": 2,
"entries": [
{
"id": 42,
"reference": "OD 2026/000031",
"entry_date": "2026-03-15"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/generate" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/generate', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/generate", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/generate",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/recurring-entries/{recurringEntry}Update a recurring entry write
Integration tokens need the write ability.
Identifiant d'opération companies.recurring.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
recurringEntry requis | integer | Id of the recurring entry template. ex. 5 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
journal_idintegerlabelstringreferencestring | nullthird_party_idinteger | nullfrequencystringmonthlyquarterlyyearlynext_datestring <date>end_datestring <date> | nullis_activebooleanlinesobject[]Propriétés
account_idintegerrequisPostable account.debitstring | nullDecimal.creditstring | nullDecimal.labelstring | nullthird_party_idinteger | null
Exemple
{
"is_active": false
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma RecurringEntry
Exemple
{
"id": 5,
"company_id": 7,
"journal_id": 5,
"label": "Loyer mensuel",
"reference": "F-2026-0412",
"third_party_id": 18,
"frequency": "monthly",
"next_date": "2026-04-01T00:00:00.000000Z",
"end_date": "2026-03-15T09:41:00+00:00",
"lines": [
{
"account_id": 368,
"debit": "1500.00",
"credit": "0.00",
"label": "Facture Brasserie Dubuisson",
"third_party_id": 18
}
],
"is_active": true,
"last_generated_on": "2026-03-15",
"generated_count": 3,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 42,
"code": "OD",
"label": "Opérations diverses"
},
"third_party": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"is_active": false
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'is_active' => false,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"is_active": false
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"is_active": False
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/recurring-entries/{recurringEntry}Delete a recurring entry write
Integration tokens need the write ability.
Identifiant d'opération companies.recurring.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
recurringEntry requis | integer | Id of the recurring entry template. ex. 5 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflictExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/recurring-entries/{recurringEntry}/generateGenerate the due entries of one template write
Integration tokens need the write ability.
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.recurring.generate
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
recurringEntry requis | integer | Id of the recurring entry template. ex. 5 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
generatedintegerex.1entriesobject[]Propriétés
idintegerreferencestringex.OD 2026/000031entry_datestring <date>
Exemple
{
"generated": 1,
"entries": [
{
"id": 42,
"reference": "OD 2026/000031",
"entry_date": "2026-03-15"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5/generate" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5/generate', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5/generate", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/5/generate",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/qualityQuality checks read
Continuous control of the file: documents and bank transactions pending, unbalanced entries, missing numbers, third parties without VAT number, VAT declarations late…
Integration tokens need the read ability.
Identifiant d'opération companies.quality
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
checked_atstring <date-time>scoreintegerChecks passed.ex.8totalintegerex.10checksobject[]Propriétés
codestringex.bank_pendingseveritystringokinfowarningerrorcountintegerex.3detailobject | null
Exemple
{
"checked_at": "2026-03-15T09:41:00+00:00",
"score": 8,
"total": 10,
"checks": [
{
"code": "bank_pending",
"severity": "ok",
"count": 3,
"detail": {}
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/quality" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/quality', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/quality", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/quality",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDocuments
Invoices and receipts of the file: allocation, booking.
GET/v1/companies/{company}/documentsList the documents read
Invoices, credit notes and receipts of the file (synchronised from Novadesko or created by the importer).
Integration tokens need the read ability.
Identifiant d'opération companies.documents.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
type | string | |
direction | string | sale purchase |
status | string | pending booked ignored |
from | string <date> | |
to | string <date> | |
q | string | Number, third party or subject. |
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 87,
"company_id": 7,
"source": "novadesko",
"origin": "string",
"external_id": "string",
"type": "purchases",
"direction": "sale",
"is_credit_note": false,
"nature": "string",
"number": "F-2026-0412",
"payment_provider": "string",
"number_series": "TK",
"document_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"subject": "Vos documents comptables",
"communication": "string",
"currency": "EUR",
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"is_paid": true,
"third_party_id": 18,
"third_party_name": "Brasserie Dubuisson SA",
"third_party_vat": "string",
"pdf_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"xml_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "pending",
"journal_entry_id": 1284,
"accountant_locked": true,
"novadesko_push_status": "string",
"novadesko_pushed_at": "2026-03-15T09:41:00+00:00",
"novadesko_push_error": "string",
"document_import_id": 42,
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"third_party": {},
"lines": [
{}
],
"journal_entry": null
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/documents/book-allBook every pending document write 5 / 1 min
Books what can be booked; the others stay pending with the reason (a locked period is reported per document in skipped_documents).
Integration tokens need the write ability.
Rate limit: 5 requests per minute (429 beyond, see Retry-After).
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.documents.book-all
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
type | string | |
direction | string | sale purchase |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
bookedintegerex.42skippedintegerex.3skipped_documentsobject[]Propriétés
idintegernumberstring | nullthird_partystring | nullreasonstringex.Aucun compte d'imputation sur la ligne 2.
Exemple
{
"booked": 42,
"skipped": 3,
"skipped_documents": [
{
"id": 42,
"number": "string",
"third_party": "string",
"reason": "Aucun compte d'imputation sur la ligne 2."
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/book-all" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/book-all', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/book-all", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/book-all",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/documents/{importedDocument}Document read
With its lines (recorded and actual accounts) and the entry it was booked to.
Integration tokens need the read ability.
Identifiant d'opération companies.documents.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
importedDocument requis | integer | Id of the document. ex. 87 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma ImportedDocument
Exemple
{
"id": 87,
"company_id": 7,
"source": "novadesko",
"origin": "string",
"external_id": "string",
"type": "purchases",
"direction": "sale",
"is_credit_note": false,
"nature": "string",
"number": "F-2026-0412",
"payment_provider": "string",
"number_series": "TK",
"document_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"subject": "Vos documents comptables",
"communication": "string",
"currency": "EUR",
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"is_paid": true,
"third_party_id": 18,
"third_party_name": "Brasserie Dubuisson SA",
"third_party_vat": "string",
"pdf_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"xml_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "pending",
"journal_entry_id": 1284,
"accountant_locked": true,
"novadesko_push_status": "string",
"novadesko_pushed_at": "2026-03-15T09:41:00+00:00",
"novadesko_push_error": "string",
"document_import_id": 42,
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"third_party": {},
"lines": [
{
"id": 640,
"imported_document_id": 87,
"external_id": "string",
"position": 1,
"description": "Fûts Bush Caractère 20 L",
"quantity": "6.000",
"unit_price": "84.5000",
"discount_pct": "1210.00",
"tax_rate": "21.00",
"amount_net": "507.00",
"amount_vat": "106.47",
"recorded_account_number": "604000",
"recorded_account_id": 42,
"actual_account_id": 42,
"vat_code_id": 4,
"purchase_category": "string",
"corrected_at": "2026-03-15T09:41:00+00:00",
"corrected_by": 1,
"correction_pushed": true,
"recorded_account": {},
"actual_account": {},
"vat_code": {}
}
],
"journal_entry": {
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{}
]
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/documents/{importedDocument}/lines/{line}Correct the allocation of a line write
Sets the account chosen by the accountant (« actual » layer); account_id: null goes back to the recorded account.
Integration tokens need the write ability.
Identifiant d'opération companies.documents.lines.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
importedDocument requis | integer | Id of the document. ex. 87 |
line requis | integer | Id of the line. ex. 3391 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
account_idinteger | nullPostable account.vat_code_idinteger | null
Exemple
{
"account_id": 361
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma ImportedDocumentLine
Exemple
{
"id": 640,
"imported_document_id": 87,
"external_id": "string",
"position": 1,
"description": "Fûts Bush Caractère 20 L",
"quantity": "6.000",
"unit_price": "84.5000",
"discount_pct": "1210.00",
"tax_rate": "21.00",
"amount_net": "507.00",
"amount_vat": "106.47",
"recorded_account_number": "604000",
"recorded_account_id": 42,
"actual_account_id": 42,
"vat_code_id": 4,
"purchase_category": "string",
"corrected_at": "2026-03-15T09:41:00+00:00",
"corrected_by": 1,
"correction_pushed": true,
"recorded_account": {},
"actual_account": {},
"vat_code": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/lines/3391" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"account_id": 361
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/lines/3391', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'account_id' => 361,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/lines/3391", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"account_id": 361
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/lines/3391",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"account_id": 361
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/documents/{importedDocument}/bookBook a document write
Posts the entry of the document in the journal resolved by the journal rules.
Integration tokens need the write ability.
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.documents.book
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
importedDocument requis | integer | Id of the document. ex. 87 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
201Booked, with journal_entry
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma ImportedDocument
Exemple
{
"id": 87,
"company_id": 7,
"source": "novadesko",
"origin": "string",
"external_id": "string",
"type": "purchases",
"direction": "sale",
"is_credit_note": false,
"nature": "string",
"number": "F-2026-0412",
"payment_provider": "string",
"number_series": "TK",
"document_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"subject": "Vos documents comptables",
"communication": "string",
"currency": "EUR",
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"is_paid": true,
"third_party_id": 18,
"third_party_name": "Brasserie Dubuisson SA",
"third_party_vat": "string",
"pdf_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"xml_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "pending",
"journal_entry_id": 1284,
"accountant_locked": true,
"novadesko_push_status": "string",
"novadesko_pushed_at": "2026-03-15T09:41:00+00:00",
"novadesko_push_error": "string",
"document_import_id": 42,
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"third_party": {},
"lines": [
{
"id": 640,
"imported_document_id": 87,
"external_id": "string",
"position": 1,
"description": "Fûts Bush Caractère 20 L",
"quantity": "6.000",
"unit_price": "84.5000",
"discount_pct": "1210.00",
"tax_rate": "21.00",
"amount_net": "507.00",
"amount_vat": "106.47",
"recorded_account_number": "604000",
"recorded_account_id": 42,
"actual_account_id": 42,
"vat_code_id": 4,
"purchase_category": "string",
"corrected_at": "2026-03-15T09:41:00+00:00",
"corrected_by": 1,
"correction_pushed": true,
"recorded_account": {},
"actual_account": {},
"vat_code": {}
}
],
"journal_entry": {
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{}
]
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/book" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/book', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/book", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/book",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/documents/{importedDocument}/ignoreIgnore or restore a document write
An ignored document is left out of the booking; restore: true puts it back to pending. Refused for a booked document.
Integration tokens need the write ability.
Identifiant d'opération companies.documents.ignore
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
importedDocument requis | integer | Id of the document. ex. 87 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
restoreboolean
Exemple
{
"restore": false
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma ImportedDocument
Exemple
{
"id": 87,
"company_id": 7,
"source": "novadesko",
"origin": "string",
"external_id": "string",
"type": "purchases",
"direction": "sale",
"is_credit_note": false,
"nature": "string",
"number": "F-2026-0412",
"payment_provider": "string",
"number_series": "TK",
"document_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"subject": "Vos documents comptables",
"communication": "string",
"currency": "EUR",
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"is_paid": true,
"third_party_id": 18,
"third_party_name": "Brasserie Dubuisson SA",
"third_party_vat": "string",
"pdf_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"xml_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "pending",
"journal_entry_id": 1284,
"accountant_locked": true,
"novadesko_push_status": "string",
"novadesko_pushed_at": "2026-03-15T09:41:00+00:00",
"novadesko_push_error": "string",
"document_import_id": 42,
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"third_party": {},
"lines": [
{
"id": 640,
"imported_document_id": 87,
"external_id": "string",
"position": 1,
"description": "Fûts Bush Caractère 20 L",
"quantity": "6.000",
"unit_price": "84.5000",
"discount_pct": "1210.00",
"tax_rate": "21.00",
"amount_net": "507.00",
"amount_vat": "106.47",
"recorded_account_number": "604000",
"recorded_account_id": 42,
"actual_account_id": 42,
"vat_code_id": 4,
"purchase_category": "string",
"corrected_at": "2026-03-15T09:41:00+00:00",
"corrected_by": 1,
"correction_pushed": true,
"recorded_account": {},
"actual_account": {},
"vat_code": {}
}
],
"journal_entry": {
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{}
]
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/ignore" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"restore": false
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/ignore', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'restore' => false,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/ignore", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"restore": false
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/87/ignore",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"restore": False
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDocument importer
Upload of PDF, images, UBL / CII XML and ZIP files, analysis, validation.
GET/v1/companies/{company}/document-importsList the imports read
Polling list of the uploaded files, without raw_text.
Integration tokens need the read ability.
Identifiant d'opération companies.document-imports.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
batch_id | string <uuid> | |
status | string | Comma-separated statuses. ex. ready,needs_review |
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 311,
"company_id": 7,
"uploaded_by": 1,
"batch_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"parent_import_id": 42,
"original_name": "facture-dubuisson-0412.pdf",
"mime": "application/pdf",
"size": 184320,
"file_hash": "string",
"kind": "pdf",
"status": "queued",
"progress": 100,
"step": "upload",
"engine": "api",
"extracted": null,
"raw_text": "string",
"warnings": [
"string"
],
"error": "string",
"suggested_third_party_id": 42,
"suggested_direction": "string",
"duplicate_of_import_id": 42,
"duplicate_of_document_id": 42,
"imported_document_id": 42,
"novadesko_document_id": "string",
"novadesko_locked_at": "2026-03-15T09:41:00+00:00",
"started_at": "2026-03-15T09:41:00+00:00",
"finished_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"suggested_third_party": {}
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/document-importsUpload files write Hors démo 30 / 1 min
Multipart upload of 1 to 20 files, 25 MB each: PDF, images (JPEG, PNG, HEIC, WebP), UBL / CII XML, or a ZIP of those (50 files max, expanded into child imports). Files are stored and queued; call process for a synchronous analysis or let the scheduler analyse them within a minute.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 30 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.document-imports.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
multipart/form-data
Schéma object
files[]string <binary>[]requisbatch_idstring <uuid>Reuse a batch to add files to it.
Réponses
201Files stored
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
batch_idstring <uuid>importsDocumentImport[]
Exemple
{
"batch_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"imports": [
{
"id": 311,
"company_id": 7,
"uploaded_by": 1,
"batch_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"parent_import_id": 42,
"original_name": "facture-dubuisson-0412.pdf",
"mime": "application/pdf",
"size": 184320,
"file_hash": "string",
"kind": "pdf",
"status": "queued",
"progress": 100,
"step": "upload",
"engine": "api",
"extracted": null,
"raw_text": "string",
"warnings": [
"string"
],
"error": "string",
"suggested_third_party_id": 42,
"suggested_direction": "string",
"duplicate_of_import_id": 42,
"duplicate_of_document_id": 42,
"imported_document_id": 42,
"novadesko_document_id": "string",
"novadesko_locked_at": "2026-03-15T09:41:00+00:00",
"started_at": "2026-03-15T09:41:00+00:00",
"finished_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"suggested_third_party": {}
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-F "files[]=@facture-0412.pdf" \
-F "files[]=@facture-0413.pdf"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'multipart' => [
['name' => 'files[]', 'contents' => fopen('facture-0412.pdf', 'r'), 'filename' => 'facture-0412.pdf'],
],
]);
$data = json_decode((string) $response->getBody(), true);const form = new FormData();
form.append("files[]", fileInput.files[0]);
const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: form,
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
files=[("files[]", open("facture-0412.pdf", "rb"))],
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/document-imports/enginesAnalysis engines read
Engines able to read a document and whether each is configured.
Integration tokens need the read ability.
Identifiant d'opération companies.document-imports.engines
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
enginesobject[]Propriétés
idstringex.apiconfiguredboolean
Exemple
{
"engines": [
{
"id": "api",
"configured": true
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/engines" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/engines', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/engines", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/engines",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/document-imports/{documentImport}Import read
With the extracted data and the text layer.
Integration tokens need the read ability.
Identifiant d'opération companies.document-imports.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
documentImport requis | integer | Id of the import (uploaded file). ex. 311 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma DocumentImport
Exemple
{
"id": 311,
"company_id": 7,
"uploaded_by": 1,
"batch_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"parent_import_id": 42,
"original_name": "facture-dubuisson-0412.pdf",
"mime": "application/pdf",
"size": 184320,
"file_hash": "string",
"kind": "pdf",
"status": "queued",
"progress": 100,
"step": "upload",
"engine": "api",
"extracted": {
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-03-15",
"currency": "EUR",
"supplier": {
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"iban": "BE68539007547034",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"customer": {},
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"structured_communication": "000000000101",
"confidence": 0.93,
"lines": [
{
"description": "Fûts Bush Caractère 20 L",
"quantity": 6,
"unit_price": 84.5,
"tax_rate": 21,
"amount_net": "507.00",
"amount_vat": "106.47",
"account_id": 580,
"account_number": "604000",
"vat_code_id": 4,
"vat_code": "A21"
}
]
},
"raw_text": "string",
"warnings": [
"string"
],
"error": "string",
"suggested_third_party_id": 42,
"suggested_direction": "string",
"duplicate_of_import_id": 42,
"duplicate_of_document_id": 42,
"imported_document_id": 42,
"novadesko_document_id": "string",
"novadesko_locked_at": "2026-03-15T09:41:00+00:00",
"started_at": "2026-03-15T09:41:00+00:00",
"finished_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"suggested_third_party": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/document-imports/{documentImport}Correct the extracted data write
Saves corrections without validating. Only for the statuses ready, needs_review and duplicate.
Integration tokens need the write ability.
Identifiant d'opération companies.document-imports.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
documentImport requis | integer | Id of the import (uploaded file). ex. 311 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
Exemple
{
"extracted": {
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-03-15",
"currency": "EUR",
"supplier": {
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"iban": "BE68539007547034",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"customer": {},
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"structured_communication": "000000000101",
"confidence": 0.93,
"lines": [
{
"description": "Fûts Bush Caractère 20 L",
"quantity": 6,
"unit_price": 84.5,
"tax_rate": 21,
"amount_net": "507.00",
"amount_vat": "106.47",
"account_id": 580,
"account_number": "604000",
"vat_code_id": 4,
"vat_code": "A21"
}
]
}
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma DocumentImport
Exemple
{
"id": 311,
"company_id": 7,
"uploaded_by": 1,
"batch_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"parent_import_id": 42,
"original_name": "facture-dubuisson-0412.pdf",
"mime": "application/pdf",
"size": 184320,
"file_hash": "string",
"kind": "pdf",
"status": "queued",
"progress": 100,
"step": "upload",
"engine": "api",
"extracted": {
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-03-15",
"currency": "EUR",
"supplier": {
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"iban": "BE68539007547034",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"customer": {},
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"structured_communication": "000000000101",
"confidence": 0.93,
"lines": [
{
"description": "Fûts Bush Caractère 20 L",
"quantity": 6,
"unit_price": 84.5,
"tax_rate": 21,
"amount_net": "507.00",
"amount_vat": "106.47",
"account_id": 580,
"account_number": "604000",
"vat_code_id": 4,
"vat_code": "A21"
}
]
},
"raw_text": "string",
"warnings": [
"string"
],
"error": "string",
"suggested_third_party_id": 42,
"suggested_direction": "string",
"duplicate_of_import_id": 42,
"duplicate_of_document_id": 42,
"imported_document_id": 42,
"novadesko_document_id": "string",
"novadesko_locked_at": "2026-03-15T09:41:00+00:00",
"started_at": "2026-03-15T09:41:00+00:00",
"finished_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"suggested_third_party": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"extracted": {
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-03-15",
"currency": "EUR",
"supplier": {
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"iban": "BE68539007547034",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"customer": {},
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"structured_communication": "000000000101",
"confidence": 0.93,
"lines": [
{
"description": "Fûts Bush Caractère 20 L",
"quantity": 6,
"unit_price": 84.5,
"tax_rate": 21,
"amount_net": "507.00",
"amount_vat": "106.47",
"account_id": 580,
"account_number": "604000",
"vat_code_id": 4,
"vat_code": "A21"
}
]
}
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'extracted' => [
'direction' => 'purchase',
'is_credit_note' => false,
'number' => 'F-2026-0412',
'document_date' => '2026-03-15',
'due_date' => '2026-03-15',
'currency' => 'EUR',
'supplier' => [
'name' => 'Brasserie Dubuisson SA',
'vat_number' => 'BE0402531376',
'enterprise_number' => '0477472701',
'address' => 'Grand-Place 14',
'postal_code' => '7000',
'city' => 'Mons',
'country' => 'BE',
'iban' => 'BE68539007547034',
'email' => 'claire.dumont@fiduciaire-dumont.be',
],
'customer' => [],
'amount_net' => '507.00',
'amount_vat' => '106.47',
'amount_gross' => '613.47',
'structured_communication' => '000000000101',
'confidence' => 0.93,
'lines' => [
[
'description' => 'Fûts Bush Caractère 20 L',
'quantity' => 6,
'unit_price' => 84.5,
'tax_rate' => 21,
'amount_net' => '507.00',
'amount_vat' => '106.47',
'account_id' => 580,
'account_number' => '604000',
'vat_code_id' => 4,
'vat_code' => 'A21',
],
],
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"extracted": {
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-03-15",
"currency": "EUR",
"supplier": {
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"iban": "BE68539007547034",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"customer": {},
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"structured_communication": "000000000101",
"confidence": 0.93,
"lines": [
{
"description": "Fûts Bush Caractère 20 L",
"quantity": 6,
"unit_price": 84.5,
"tax_rate": 21,
"amount_net": "507.00",
"amount_vat": "106.47",
"account_id": 580,
"account_number": "604000",
"vat_code_id": 4,
"vat_code": "A21"
}
]
}
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"extracted": {
"direction": "purchase",
"is_credit_note": False,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-03-15",
"currency": "EUR",
"supplier": {
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"iban": "BE68539007547034",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"customer": {},
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"structured_communication": "000000000101",
"confidence": 0.93,
"lines": [
{
"description": "Fûts Bush Caractère 20 L",
"quantity": 6,
"unit_price": 84.5,
"tax_rate": 21,
"amount_net": "507.00",
"amount_vat": "106.47",
"account_id": 580,
"account_number": "604000",
"vat_code_id": 4,
"vat_code": "A21"
}
]
}
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/document-imports/{documentImport}Delete an import write
Goes to the recycle bin. A validated import keeps its document.
Integration tokens need the write ability.
Identifiant d'opération companies.document-imports.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
documentImport requis | integer | Id of the import (uploaded file). ex. 311 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
application/json
Schéma object
deletedboolean
Exemple
{
"deleted": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflictExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/document-imports/{documentImport}/processAnalyse an import now write Hors démo 120 / 1 min
Synchronous analysis (up to two minutes): text layer, extraction, account suggestions, third party matching, duplicate detection. Already analysed: returns the result.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 120 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.document-imports.process
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
documentImport requis | integer | Id of the import (uploaded file). ex. 311 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma DocumentImport
Exemple
{
"id": 311,
"company_id": 7,
"uploaded_by": 1,
"batch_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"parent_import_id": 42,
"original_name": "facture-dubuisson-0412.pdf",
"mime": "application/pdf",
"size": 184320,
"file_hash": "string",
"kind": "pdf",
"status": "queued",
"progress": 100,
"step": "upload",
"engine": "api",
"extracted": {
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-03-15",
"currency": "EUR",
"supplier": {
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"iban": "BE68539007547034",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"customer": {},
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"structured_communication": "000000000101",
"confidence": 0.93,
"lines": [
{
"description": "Fûts Bush Caractère 20 L",
"quantity": 6,
"unit_price": 84.5,
"tax_rate": 21,
"amount_net": "507.00",
"amount_vat": "106.47",
"account_id": 580,
"account_number": "604000",
"vat_code_id": 4,
"vat_code": "A21"
}
]
},
"raw_text": "string",
"warnings": [
"string"
],
"error": "string",
"suggested_third_party_id": 42,
"suggested_direction": "string",
"duplicate_of_import_id": 42,
"duplicate_of_document_id": 42,
"imported_document_id": 42,
"novadesko_document_id": "string",
"novadesko_locked_at": "2026-03-15T09:41:00+00:00",
"started_at": "2026-03-15T09:41:00+00:00",
"finished_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"suggested_third_party": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/process" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/process', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/process", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/process",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/document-imports/{documentImport}/retryAnalyse again write Hors démo 60 / 1 min
force re-analyses a file flagged as the duplicate of another import.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 60 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.document-imports.retry
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
documentImport requis | integer | Id of the import (uploaded file). ex. 311 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
forceboolean
Exemple
{
"force": true
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma DocumentImport
Exemple
{
"id": 311,
"company_id": 7,
"uploaded_by": 1,
"batch_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"parent_import_id": 42,
"original_name": "facture-dubuisson-0412.pdf",
"mime": "application/pdf",
"size": 184320,
"file_hash": "string",
"kind": "pdf",
"status": "queued",
"progress": 100,
"step": "upload",
"engine": "api",
"extracted": {
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-03-15",
"currency": "EUR",
"supplier": {
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"iban": "BE68539007547034",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"customer": {},
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"structured_communication": "000000000101",
"confidence": 0.93,
"lines": [
{
"description": "Fûts Bush Caractère 20 L",
"quantity": 6,
"unit_price": 84.5,
"tax_rate": 21,
"amount_net": "507.00",
"amount_vat": "106.47",
"account_id": 580,
"account_number": "604000",
"vat_code_id": 4,
"vat_code": "A21"
}
]
},
"raw_text": "string",
"warnings": [
"string"
],
"error": "string",
"suggested_third_party_id": 42,
"suggested_direction": "string",
"duplicate_of_import_id": 42,
"duplicate_of_document_id": 42,
"imported_document_id": 42,
"novadesko_document_id": "string",
"novadesko_locked_at": "2026-03-15T09:41:00+00:00",
"started_at": "2026-03-15T09:41:00+00:00",
"finished_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"suggested_third_party": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/retry" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"force": true
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/retry', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'force' => true,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/retry", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"force": true
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/retry",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"force": True
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/document-imports/{documentImport}/validateValidate an import write 120 / 1 min
Creates the document (locked for the shop), books it unless book: false, and pushes it to Novadesko when the file is linked (never from the demo). The third party is third_party_id, or created from new_third_party.
Integration tokens need the write ability.
Rate limit: 120 requests per minute (429 beyond, see Retry-After).
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.document-imports.validate
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
documentImport requis | integer | Id of the import (uploaded file). ex. 311 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
extractedExtractedDocumentthird_party_idinteger | nullnew_third_partyobjectPropriétés
typestringsuppliercustomernamestringrequisvat_numberstring | nullenterprise_numberstring | nulladdressstring | nullpostal_codestring | nullcitystring | nullcountrystring | nullibanstring | nullbicstring | nullemailstring <email> | nullphonestring | null
directionstringpurchasesalelinesobject[]Propriétés
account_idinteger | nullvat_code_idinteger | null
bookbooleanTrue by default.push_to_novadeskoboolean | nullforcebooleanValidate despite a duplicate warning.
Exemple
{
"third_party_id": 18,
"direction": "purchase",
"lines": [
{
"account_id": 361,
"vat_code_id": 25
}
],
"book": true
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
importDocumentImportdocumentImportedDocumententryJournalEntry | nullnovadeskoobjectPropriétés
statusstringpushed, skipped, failed or not_linked.ex.skippedmessagestring | null
Exemple
{
"import": {
"id": 311,
"company_id": 7,
"uploaded_by": 1,
"batch_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"parent_import_id": 42,
"original_name": "facture-dubuisson-0412.pdf",
"mime": "application/pdf",
"size": 184320,
"file_hash": "string",
"kind": "pdf",
"status": "queued",
"progress": 100,
"step": "upload",
"engine": "api",
"extracted": {
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-03-15",
"currency": "EUR",
"supplier": {
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"iban": "BE68539007547034",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"customer": {},
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"structured_communication": "000000000101",
"confidence": 0.93,
"lines": [
{
"description": "Fûts Bush Caractère 20 L",
"quantity": 6,
"unit_price": 84.5,
"tax_rate": 21,
"amount_net": "507.00",
"amount_vat": "106.47",
"account_id": 580,
"account_number": "604000",
"vat_code_id": 4,
"vat_code": "A21"
}
]
},
"raw_text": "string",
"warnings": [
"string"
],
"error": "string",
"suggested_third_party_id": 42,
"suggested_direction": "string",
"duplicate_of_import_id": 42,
"duplicate_of_document_id": 42,
"imported_document_id": 42,
"novadesko_document_id": "string",
"novadesko_locked_at": "2026-03-15T09:41:00+00:00",
"started_at": "2026-03-15T09:41:00+00:00",
"finished_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"suggested_third_party": {}
},
"document": {
"id": 87,
"company_id": 7,
"source": "novadesko",
"origin": "string",
"external_id": "string",
"type": "purchases",
"direction": "sale",
"is_credit_note": false,
"nature": "string",
"number": "F-2026-0412",
"payment_provider": "string",
"number_series": "TK",
"document_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"subject": "Vos documents comptables",
"communication": "string",
"currency": "EUR",
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"is_paid": true,
"third_party_id": 18,
"third_party_name": "Brasserie Dubuisson SA",
"third_party_vat": "string",
"pdf_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"xml_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "pending",
"journal_entry_id": 1284,
"accountant_locked": true,
"novadesko_push_status": "string",
"novadesko_pushed_at": "2026-03-15T09:41:00+00:00",
"novadesko_push_error": "string",
"document_import_id": 42,
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"third_party": {},
"lines": [
{
"id": 640,
"imported_document_id": 87,
"external_id": "string",
"position": 1,
"description": "Fûts Bush Caractère 20 L",
"quantity": "6.000",
"unit_price": "84.5000",
"discount_pct": "1210.00",
"tax_rate": "21.00",
"amount_net": "507.00",
"amount_vat": "106.47",
"recorded_account_number": "604000",
"recorded_account_id": 42,
"actual_account_id": 42,
"vat_code_id": 4,
"purchase_category": "string",
"corrected_at": "2026-03-15T09:41:00+00:00",
"corrected_by": 1,
"correction_pushed": true,
"recorded_account": {},
"actual_account": {},
"vat_code": {}
}
],
"journal_entry": {
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{}
]
}
},
"entry": {
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}
]
},
"novadesko": {
"status": "skipped",
"message": "OK"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/validate" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"third_party_id": 18,
"direction": "purchase",
"lines": [
{
"account_id": 361,
"vat_code_id": 25
}
],
"book": true
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/validate', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'third_party_id' => 18,
'direction' => 'purchase',
'lines' => [
[
'account_id' => 361,
'vat_code_id' => 25,
],
],
'book' => true,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/validate", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"third_party_id": 18,
"direction": "purchase",
"lines": [
{
"account_id": 361,
"vat_code_id": 25
}
],
"book": true
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/validate",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"third_party_id": 18,
"direction": "purchase",
"lines": [
{
"account_id": 361,
"vat_code_id": 25
}
],
"book": True
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/document-imports/{documentImport}/fileSigned preview of an uploaded file URL signée 240 / 1 min
Serves the file inline (or its preview: PDF embedded in a UBL, JPEG converted from HEIC).
Authorised by the signature of the URL (query parameters signature and expires), not by a bearer token. The URL is issued by another endpoint and expires.
Rate limit: 240 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération document-imports.file
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
documentImport requis | integer | Id of the import (uploaded file). ex. 311 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
preview | string | 0 serves the original file.0 1 |
Entêtes communs : signature expires
Réponses
200The file, inline.
Entêtes de réponse Content-Disposition X-RateLimit-Limit X-RateLimit-Remaining
application/pdf
image/jpeg
image/png
application/xml
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/file" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/file', [
'headers' => [
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/file", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/document-imports/311/file",
headers={
"Accept": "application/json",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneBank
Bank transactions (CODA), matching, rules, treasury, SEPA payment files.
GET/v1/companies/{company}/bank-transactionsList the bank transactions read
Transactions of the CODA statements with the proposed match.
Integration tokens need the read ability.
Identifiant d'opération companies.bank-transactions.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
unmatched | boolean | Pending and without proposal. |
journal_id | integer | |
status | string | pending booked ignored |
from | string <date> | Value date. |
to | string <date> | |
q | string | Counterpart, communication or description. |
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 100, maximum 500). ex. 100 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 951,
"company_id": 7,
"source": "novadesko",
"external_id": "string",
"account_iban": "BE68539007547034",
"account_bank": "string",
"journal_id": 7,
"amount": "1210.00",
"currency": "EUR",
"value_date": "2026-03-18T00:00:00.000000Z",
"execution_date": "2026-03-15T09:41:00+00:00",
"counterpart_name": "ACME SA",
"counterpart_iban": "string",
"communication": "+++000/0000/00101+++",
"description": "Description",
"status": "pending",
"journal_entry_id": 1284,
"matched_journal_entry_id": 42,
"match_confidence": "high",
"match_reason": "structured_communication",
"matched_at": "2026-03-15T09:41:00+00:00",
"booked_account_id": 42,
"matched_rule_id": 42,
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {},
"links": [
{}
],
"matched_entry": {},
"booked_account": {},
"matched_rule": {},
"journal_entry": {}
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/bank-transactions/matchPropose the matches write 10 / 1 min
Looks for the invoice paid by each pending transaction (structured communication, Novadesko link, amount and third party) and applies the bank rules.
Integration tokens need the write ability.
Rate limit: 10 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.bank-transactions.match
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
proposalsintegerex.17
Exemple
{
"proposals": 17
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/match" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/match', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/match", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/match",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/bank-transactions/book-matchedBook the matched transactions write 5 / 1 min
Books every transaction with a high-confidence match (and medium ones with include_medium).
Integration tokens need the write ability.
Rate limit: 5 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.bank-transactions.book-matched
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
include_mediumboolean
Exemple
{
"include_medium": false
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
bookedintegerex.14skippedobject[]Propriétés
idintegerreasonstring
Exemple
{
"booked": 14,
"skipped": [
{
"id": 42,
"reason": "string"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/book-matched" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"include_medium": false
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/book-matched', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'include_medium' => false,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/book-matched", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"include_medium": false
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/book-matched",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"include_medium": False
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/bank-transactions/{bankTransaction}/bookBook a transaction write
Payment of the matched invoice (lettered with it), or allocation to the chosen account (fees, VAT, salaries…).
Integration tokens need the write ability.
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.bank-transactions.book
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
bankTransaction requis | integer | Id of the bank transaction. ex. 951 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
account_idinteger | nullPostable account; absent = payment of the matched invoice.third_party_idinteger | nulllabelstring | null
Exemple
{
"account_id": 517,
"label": "Frais de tenue de compte"
}Réponses
201Booked, with journal_entry
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma BankTransaction
Exemple
{
"id": 951,
"company_id": 7,
"source": "novadesko",
"external_id": "string",
"account_iban": "BE68539007547034",
"account_bank": "string",
"journal_id": 7,
"amount": "1210.00",
"currency": "EUR",
"value_date": "2026-03-18T00:00:00.000000Z",
"execution_date": "2026-03-15T09:41:00+00:00",
"counterpart_name": "ACME SA",
"counterpart_iban": "string",
"communication": "+++000/0000/00101+++",
"description": "Description",
"status": "pending",
"journal_entry_id": 1284,
"matched_journal_entry_id": 42,
"match_confidence": "high",
"match_reason": "structured_communication",
"matched_at": "2026-03-15T09:41:00+00:00",
"booked_account_id": 42,
"matched_rule_id": 42,
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {},
"links": [
{}
],
"matched_entry": {},
"booked_account": {},
"matched_rule": {},
"journal_entry": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/951/book" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"account_id": 517,
"label": "Frais de tenue de compte"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/951/book', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'account_id' => 517,
'label' => 'Frais de tenue de compte',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/951/book", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"account_id": 517,
"label": "Frais de tenue de compte"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/951/book",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"account_id": 517,
"label": "Frais de tenue de compte"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/bank-transactions/{bankTransaction}/ignoreIgnore or restore a transaction write
Integration tokens need the write ability.
Identifiant d'opération companies.bank-transactions.ignore
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
bankTransaction requis | integer | Id of the bank transaction. ex. 951 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
restoreboolean
Exemple
{
"restore": false
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma BankTransaction
Exemple
{
"id": 951,
"company_id": 7,
"source": "novadesko",
"external_id": "string",
"account_iban": "BE68539007547034",
"account_bank": "string",
"journal_id": 7,
"amount": "1210.00",
"currency": "EUR",
"value_date": "2026-03-18T00:00:00.000000Z",
"execution_date": "2026-03-15T09:41:00+00:00",
"counterpart_name": "ACME SA",
"counterpart_iban": "string",
"communication": "+++000/0000/00101+++",
"description": "Description",
"status": "pending",
"journal_entry_id": 1284,
"matched_journal_entry_id": 42,
"match_confidence": "high",
"match_reason": "structured_communication",
"matched_at": "2026-03-15T09:41:00+00:00",
"booked_account_id": 42,
"matched_rule_id": 42,
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {},
"links": [
{}
],
"matched_entry": {},
"booked_account": {},
"matched_rule": {},
"journal_entry": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/951/ignore" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"restore": false
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/951/ignore', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'restore' => false,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/951/ignore", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"restore": false
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/951/ignore",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"restore": False
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/treasuryTreasury read
Accounting balance of each financial journal against the last statement, with the pending transactions.
Integration tokens need the read ability.
Identifiant d'opération companies.treasury
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma Treasury
Exemple
{
"accounts": [
{
"journal_id": 7,
"code": "BNP",
"label": "BNP Paribas Fortis",
"iban": "BE68539007547034",
"account": "550000",
"accounting_balance": "19630.11",
"last_statement_balance": "19630.11",
"last_statement_date": "2026-03-15",
"pending_count": 3,
"pending_amount": "1842.50",
"difference": "0.00"
}
],
"total_accounting_balance": "21480.61"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/treasury" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/treasury', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/treasury", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/treasury",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/bank-rulesList the bank rules read
Integration tokens need the read ability.
Identifiant d'opération companies.bank-rules.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Exemple
[
{
"id": 6,
"company_id": 7,
"name": "Frais bancaires",
"field": "counterpart_name",
"operator": "contains",
"pattern": "frais de tenue",
"direction": "in",
"account_id": 517,
"third_party_id": 18,
"label": "Facture Brasserie Dubuisson",
"priority": 100,
"is_active": true,
"applied_count": 14,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"third_party": {}
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/bank-rulesCreate a bank rule write
Allocates the transactions whose field matches the pattern to an account.
Integration tokens need the write ability.
Identifiant d'opération companies.bank-rules.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
namestringrequisfieldstringrequiscounterpart_namecounterpart_ibancommunicationdescriptionanyoperatorstringcontainsequalsstartspatternstringrequisdirectionstringinoutanyaccount_idintegerrequisPostable account.third_party_idinteger | nulllabelstring | nullpriorityinteger1 to 999.is_activeboolean
Exemple
{
"name": "Frais bancaires",
"field": "description",
"operator": "contains",
"pattern": "frais de tenue",
"direction": "out",
"account_id": 517
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma BankRule
Exemple
{
"id": 6,
"company_id": 7,
"name": "Frais bancaires",
"field": "counterpart_name",
"operator": "contains",
"pattern": "frais de tenue",
"direction": "in",
"account_id": 517,
"third_party_id": 18,
"label": "Facture Brasserie Dubuisson",
"priority": 100,
"is_active": true,
"applied_count": 14,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"third_party": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"name": "Frais bancaires",
"field": "description",
"operator": "contains",
"pattern": "frais de tenue",
"direction": "out",
"account_id": 517
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'name' => 'Frais bancaires',
'field' => 'description',
'operator' => 'contains',
'pattern' => 'frais de tenue',
'direction' => 'out',
'account_id' => 517,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"name": "Frais bancaires",
"field": "description",
"operator": "contains",
"pattern": "frais de tenue",
"direction": "out",
"account_id": 517
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"name": "Frais bancaires",
"field": "description",
"operator": "contains",
"pattern": "frais de tenue",
"direction": "out",
"account_id": 517
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/bank-rules/{bankRule}Update a bank rule write
Integration tokens need the write ability.
Identifiant d'opération companies.bank-rules.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
bankRule requis | integer | Id of the bank rule. ex. 6 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
namestringfieldstringcounterpart_namecounterpart_ibancommunicationdescriptionanyoperatorstringcontainsequalsstartspatternstringdirectionstringinoutanyaccount_idintegerPostable account.third_party_idinteger | nulllabelstring | nullpriorityinteger1 to 999.is_activeboolean
Exemple
{
"is_active": false
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma BankRule
Exemple
{
"id": 6,
"company_id": 7,
"name": "Frais bancaires",
"field": "counterpart_name",
"operator": "contains",
"pattern": "frais de tenue",
"direction": "in",
"account_id": 517,
"third_party_id": 18,
"label": "Facture Brasserie Dubuisson",
"priority": 100,
"is_active": true,
"applied_count": 14,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"third_party": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules/6" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"is_active": false
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules/6', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'is_active' => false,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules/6", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"is_active": false
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules/6",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"is_active": False
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/bank-rules/{bankRule}Delete a bank rule write
Integration tokens need the write ability.
Identifiant d'opération companies.bank-rules.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
bankRule requis | integer | Id of the bank rule. ex. 6 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflictExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules/6" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules/6', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules/6", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-rules/6",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/coda-filesList the CODA files read
Integration tokens need the read ability.
Identifiant d'opération companies.coda-files.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
journal_id | integer | |
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 31,
"company_id": 7,
"source": "novadesko",
"external_id": "string",
"filename": "CODA_2026_031.cod",
"source_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"account_iban": "BE68539007547034",
"account_bank": "string",
"journal_id": 3,
"statement_number": "031",
"sequence": "string",
"opening_balance": "18420.11",
"closing_balance": "19630.11",
"period_from": "2026-03-15T09:41:00+00:00",
"period_to": "2026-03-15T09:41:00+00:00",
"transactions_count": 12,
"status": "imported",
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"journal": {}
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/coda-files" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/coda-files', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/coda-files", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/coda-files",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/coda-files/{codaFile}/downloadDownload a CODA file read
Original statement file.
Integration tokens need the read ability.
Identifiant d'opération companies.coda-files.download
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
codaFile requis | integer | Id of the CODA file. ex. 31 |
Entêtes communs : Accept-Language
Réponses
200The CODA file.
Entêtes de réponse Content-Disposition
text/plain
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/coda-files/31/download" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/coda-files/31/download', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/coda-files/31/download", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/coda-files/31/download",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/payments/open-itemsSupplier items to pay read
Open supplier lines; payable is false when the IBAN of the supplier is missing.
Integration tokens need the read ability.
Identifiant d'opération companies.payments.open-items
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
itemsobject[]Propriétés
line_idintegerentry_idintegerreferencestringex.ACH 2026/000412journal_codestringex.ACHentry_datestring <date>due_datestring <date> | nulloverduebooleanlabelstringexternal_referencestring | nullex.F-2026-0412structured_communicationstring | nullthird_party_idintegerthird_partystringex.Brasserie Dubuisson SAibanstring | nullbicstring | nullamountstring <decimal>ex.655.82payableboolean
totalstring <decimal>ex.655.82payable_countintegerex.1
Exemple
{
"items": [
{
"line_id": 3391,
"entry_id": 1284,
"reference": "ACH 2026/000412",
"journal_code": "ACH",
"entry_date": "2026-03-15",
"due_date": "2026-03-15",
"overdue": true,
"label": "Facture Brasserie Dubuisson",
"external_reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"third_party": "Brasserie Dubuisson SA",
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"amount": "655.82",
"payable": true
}
],
"total": "655.82",
"payable_count": 1
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/payments/open-items" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/payments/open-items', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/payments/open-items", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/payments/open-items",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/payments/sepaGenerate a SEPA credit transfer file write Hors démo 20 / 1 min
pain.001 XML for the chosen open items, debited from the bank of a financial journal. The file is to be uploaded to the bank: NovaFisko never initiates a payment.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 20 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.payments.sepa
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
journal_idintegerrequisFinancial journal with an IBAN.line_idsinteger[]requisexecution_datestring <date>requisToday or later.
Exemple
{
"journal_id": 7,
"line_ids": [
3394,
3410
],
"execution_date": "2026-04-02"
}Réponses
200SEPA pain.001 file. Headers X-Sepa-Count and X-Sepa-Total give the number of transfers and their total.
Entêtes de réponse Content-Disposition X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/xml
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/payments/sepa" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"journal_id": 7,
"line_ids": [
3394,
3410
],
"execution_date": "2026-04-02"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/payments/sepa', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'journal_id' => 7,
'line_ids' => [
3394,
3410,
],
'execution_date' => '2026-04-02',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/payments/sepa", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"journal_id": 7,
"line_ids": [
3394,
3410
],
"execution_date": "2026-04-02"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/payments/sepa",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"journal_id": 7,
"line_ids": [
3394,
3410
],
"execution_date": "2026-04-02"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneVAT
VAT codes, periodic declarations, Intervat XML, customer and intra-community listings.
GET/v1/companies/{company}/vat-codesVAT codes read
Codes of the country pack with their rate, nature and declaration grids.
Integration tokens need the read ability.
Identifiant d'opération companies.vat-codes.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
all | boolean | Include the inactive codes. |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Exemple
[
{
"id": 4,
"company_id": 7,
"code": "V21",
"label": "Ventes 21 %",
"direction": "sale",
"rate": "21.00",
"nature": "standard",
"deductible_pct": "100.00",
"base_grid": "03",
"vat_grid": "54",
"due_vat_grid": "string",
"credit_base_grid": "49",
"credit_vat_grid": "64",
"vat_account": "451100",
"due_vat_account": "string",
"description": "Description",
"is_active": true,
"sort_order": 13,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-codes" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-codes', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-codes", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-codes",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/vat-codes/{vatCode}Activate or describe a VAT code write
Rates and grids are part of the country pack and cannot be edited.
Integration tokens need the write ability.
Identifiant d'opération companies.vat-codes.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
vatCode requis | integer | Id of the VAT code. ex. 4 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
is_activebooleandescriptionstring | null
Exemple
{
"is_active": false
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma VatCode
Exemple
{
"id": 4,
"company_id": 7,
"code": "V21",
"label": "Ventes 21 %",
"direction": "sale",
"rate": "21.00",
"nature": "standard",
"deductible_pct": "100.00",
"base_grid": "03",
"vat_grid": "54",
"due_vat_grid": "string",
"credit_base_grid": "49",
"credit_vat_grid": "64",
"vat_account": "451100",
"due_vat_account": "string",
"description": "Description",
"is_active": true,
"sort_order": 13,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-codes/4" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"is_active": false
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-codes/4', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'is_active' => false,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-codes/4", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"is_active": false
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-codes/4",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"is_active": False
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/vat-declarationsVAT periods of a year read
Every period of the year with its declaration, or a computed preview when none exists yet.
Integration tokens need the read ability.
Identifiant d'opération companies.vat.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
year | integer | Current year by default. ex. 2026 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
yearintegerex.2026period_typestringmonthlyquarterlyperiodsobject[]Propriétés
periodintegerex.1labelstringex.1T 2026starts_onstring <date>ends_onstring <date>declarationVatDeclaration | nullpreviewVatComputation | null
Exemple
{
"year": 2026,
"period_type": "monthly",
"periods": [
{
"period": 1,
"label": "1T 2026",
"starts_on": "2026-03-15",
"ends_on": "2026-03-15",
"declaration": {
"id": 14,
"company_id": 7,
"period_type": "monthly",
"year": 2026,
"period": 1,
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"grids": {
"00": "0.00",
"01": "0.00",
"02": "0.00",
"03": "1000.00",
"54": "210.00",
"59": "52.50",
"71": "157.50",
"72": "0.00",
"81": "0.00",
"82": "250.00",
"83": "0.00"
},
"amount_due": "157.50",
"amount_refund": "0.00",
"status": "draft",
"validated_at": "2026-03-15T09:41:00+00:00",
"validated_by": 1,
"submitted_at": "2026-03-15T09:41:00+00:00",
"submission_reference": "string",
"journal_entry_id": 1284,
"warnings": [
"string"
],
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entry": {}
},
"preview": {
"grids": {
"00": "0.00",
"01": "0.00",
"02": "0.00",
"03": "1000.00",
"54": "210.00",
"59": "52.50",
"71": "157.50",
"72": "0.00",
"81": "0.00",
"82": "250.00",
"83": "0.00"
},
"amount_due": "157.50",
"amount_refund": "0.00",
"warnings": [
"string"
],
"entries": 38
}
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/vat-declarationsCreate or refresh a draft declaration write
Computes the grids of the period and stores them as a draft. Calling it again recomputes the draft.
Integration tokens need the write ability.
Identifiant d'opération companies.vat.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
yearintegerrequis2000 to 2100.ex.2026periodintegerrequisMonth (1-12) or quarter (1-4) according to the VAT regime of the file.ex.1
Exemple
{
"year": 2026,
"period": 1
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma VatDeclaration
Exemple
{
"id": 14,
"company_id": 7,
"period_type": "monthly",
"year": 2026,
"period": 1,
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"grids": {
"00": "0.00",
"01": "0.00",
"02": "0.00",
"03": "1000.00",
"54": "210.00",
"59": "52.50",
"71": "157.50",
"72": "0.00",
"81": "0.00",
"82": "250.00",
"83": "0.00"
},
"amount_due": "157.50",
"amount_refund": "0.00",
"status": "draft",
"validated_at": "2026-03-15T09:41:00+00:00",
"validated_by": 1,
"submitted_at": "2026-03-15T09:41:00+00:00",
"submission_reference": "string",
"journal_entry_id": 1284,
"warnings": [
"string"
],
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entry": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"year": 2026,
"period": 1
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'year' => 2026,
'period' => 1,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"year": 2026,
"period": 1
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"year": 2026,
"period": 1
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/vat-declarations/previewCompute a VAT period read
Grids computed from the entries of the period, without saving anything.
Integration tokens need the read ability.
Identifiant d'opération companies.vat.preview
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
year requis | integer | 2000 to 2100. ex. 2026 |
period requis | integer | Month (1-12) or quarter (1-4) according to the VAT regime of the file. ex. 1 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Exemple
{
"starts_on": "2026-03-15",
"ends_on": "2026-03-15",
"grids": {
"00": "0.00",
"01": "0.00",
"02": "0.00",
"03": "1000.00",
"54": "210.00",
"59": "52.50",
"71": "157.50",
"72": "0.00",
"81": "0.00",
"82": "250.00",
"83": "0.00"
},
"amount_due": "157.50",
"amount_refund": "0.00",
"warnings": [
"string"
],
"entries": 38
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/preview?year=2026&period=1" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/preview', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'year' => '2026',
'period' => '1',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/preview?year=2026&period=1", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/preview",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"year": "2026",
"period": "1"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/vat-declarations/intracom-listingIntra-community listing read
Intra-EU supplies of goods and services per customer for the period. format=xml downloads the Intervat file.
Integration tokens need the read ability.
Identifiant d'opération companies.vat.intracom-listing
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
year requis | integer | 2000 to 2100. ex. 2026 |
period requis | integer | Month (1-12) or quarter (1-4) according to the VAT regime of the file. ex. 1 |
format | string | xml |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
yearintegerperiodintegerperiod_typestringfromstring <date>tostring <date>clientsobject[]Propriétés
vat_numberstringex.NL853746333B01countrystringex.NLnamestringcodestringL goods, S services, T triangular.ex.Samountstring <decimal>
totalstring <decimal>total_goodsstring <decimal>total_servicesstring <decimal>
Exemple
{
"year": 2026,
"period": 3,
"period_type": "string",
"from": "2026-03-15",
"to": "2026-03-15",
"clients": [
{
"vat_number": "NL853746333B01",
"country": "NL",
"name": "Le Comptoir Montois SRL",
"code": "S",
"amount": "1210.00"
}
],
"total": "1210.00",
"total_goods": "1210.00",
"total_services": "1210.00"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/intracom-listing?year=2026&period=1" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/intracom-listing', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'year' => '2026',
'period' => '1',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/intracom-listing?year=2026&period=1", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/intracom-listing",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"year": "2026",
"period": "1"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/vat-declarations/client-listing/{year}Annual customer listing read
Belgian VAT-liable customers of the year with turnover and VAT; declare is true above the legal threshold of 250 EUR. format=xml downloads the Intervat file.
Integration tokens need the read ability.
Identifiant d'opération companies.vat.client-listing
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
year requis | integer | Calendar year. ex. 2026 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
format | string | xml |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
yearintegerex.2026clientsobject[]Propriétés
vat_numberstringex.BE0403170701namestringex.ACME SAturnovernumberex.18250vatnumberex.3832.5declareboolean
total_turnovernumbertotal_vatnumber
Exemple
{
"year": 2026,
"clients": [
{
"vat_number": "BE0403170701",
"name": "ACME SA",
"turnover": 18250,
"vat": 3832.5,
"declare": true
}
],
"total_turnover": 12.5,
"total_vat": 12.5
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/client-listing/2026" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/client-listing/2026', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/client-listing/2026", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/client-listing/2026",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/vat-declarations/{vatDeclaration}VAT declaration read
With its settlement entry once validated.
Integration tokens need the read ability.
Identifiant d'opération companies.vat.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
vatDeclaration requis | integer | Id of the VAT declaration. ex. 14 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma VatDeclaration
Exemple
{
"id": 14,
"company_id": 7,
"period_type": "monthly",
"year": 2026,
"period": 1,
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"grids": {
"00": "0.00",
"01": "0.00",
"02": "0.00",
"03": "1000.00",
"54": "210.00",
"59": "52.50",
"71": "157.50",
"72": "0.00",
"81": "0.00",
"82": "250.00",
"83": "0.00"
},
"amount_due": "157.50",
"amount_refund": "0.00",
"status": "draft",
"validated_at": "2026-03-15T09:41:00+00:00",
"validated_by": 1,
"submitted_at": "2026-03-15T09:41:00+00:00",
"submission_reference": "string",
"journal_entry_id": 1284,
"warnings": [
"string"
],
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entry": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/vat-declarations/{vatDeclaration}/validateValidate a declaration write
Freezes the grids and posts the VAT settlement entry (accounts of settings.auto_entries.vat). Emits the webhook vat.declaration_validated.
Integration tokens need the write ability.
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.vat.validate
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
vatDeclaration requis | integer | Id of the VAT declaration. ex. 14 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma VatDeclaration
Exemple
{
"id": 14,
"company_id": 7,
"period_type": "monthly",
"year": 2026,
"period": 1,
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"grids": {
"00": "0.00",
"01": "0.00",
"02": "0.00",
"03": "1000.00",
"54": "210.00",
"59": "52.50",
"71": "157.50",
"72": "0.00",
"81": "0.00",
"82": "250.00",
"83": "0.00"
},
"amount_due": "157.50",
"amount_refund": "0.00",
"status": "draft",
"validated_at": "2026-03-15T09:41:00+00:00",
"validated_by": 1,
"submitted_at": "2026-03-15T09:41:00+00:00",
"submission_reference": "string",
"journal_entry_id": 1284,
"warnings": [
"string"
],
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entry": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/validate" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/validate', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/validate", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/validate",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/vat-declarations/{vatDeclaration}/submitMark a declaration as submitted write
Records the Intervat reference. NovaFisko does not file the declaration itself: download the XML and upload it on Intervat.
Integration tokens need the write ability.
Identifiant d'opération companies.vat.submit
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
vatDeclaration requis | integer | Id of the VAT declaration. ex. 14 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
referencestring | nullIntervat receipt reference.
Exemple
{
"reference": "INTERVAT-2026-04-0098123"
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma VatDeclaration
Exemple
{
"id": 14,
"company_id": 7,
"period_type": "monthly",
"year": 2026,
"period": 1,
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"grids": {
"00": "0.00",
"01": "0.00",
"02": "0.00",
"03": "1000.00",
"54": "210.00",
"59": "52.50",
"71": "157.50",
"72": "0.00",
"81": "0.00",
"82": "250.00",
"83": "0.00"
},
"amount_due": "157.50",
"amount_refund": "0.00",
"status": "draft",
"validated_at": "2026-03-15T09:41:00+00:00",
"validated_by": 1,
"submitted_at": "2026-03-15T09:41:00+00:00",
"submission_reference": "string",
"journal_entry_id": 1284,
"warnings": [
"string"
],
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entry": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/submit" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"reference": "INTERVAT-2026-04-0098123"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/submit', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'reference' => 'INTERVAT-2026-04-0098123',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/submit", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"reference": "INTERVAT-2026-04-0098123"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/submit",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"reference": "INTERVAT-2026-04-0098123"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/vat-declarations/{vatDeclaration}/xmlIntervat XML of a declaration read
File ready to upload on Intervat (VATConsignment).
Integration tokens need the read ability.
Identifiant d'opération companies.vat.xml
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
vatDeclaration requis | integer | Id of the VAT declaration. ex. 14 |
Entêtes communs : Accept-Language
Réponses
200Intervat XML file.
Entêtes de réponse Content-Disposition
application/xml
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/xml" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/xml', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/xml", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/14/xml",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneFixed assets
Fixed asset register, depreciation plans, bookings, disposals.
GET/v1/companies/{company}/fixed-assetsFixed asset register read
With the depreciation plan of each asset.
Integration tokens need the read ability.
Identifiant d'opération companies.fixed-assets.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma FixedAsset[]
Tableau de FixedAsset
Exemple
[
{
"id": 9,
"company_id": 7,
"source": "manual",
"external_id": "string",
"reference": "IMM-2026-003",
"name": "Four mixte Rational",
"category": "it_equipment",
"asset_group": "string",
"asset_account_id": 42,
"depreciation_account_id": 42,
"expense_account_id": 42,
"imported_document_id": 42,
"acquisition_date": "2026-02-01T00:00:00.000000Z",
"acquisition_cost": "12400.00",
"residual_value": "0.00",
"useful_life_years": 5,
"method": "linear",
"prorata_temporis": true,
"start_date": "2026-03-15T09:41:00+00:00",
"status": "active",
"notes": "string",
"disposed_on": "2026-03-15T09:41:00+00:00",
"disposal_price": "1210.00",
"disposal_entry_id": 42,
"investment_deduction_pct": "1210.00",
"investment_deduction_spread": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"lines": [
{
"id": 42,
"fixed_asset_id": 9,
"year": 2026,
"period_start": "2026-03-15T09:41:00+00:00",
"period_end": "2026-03-15T09:41:00+00:00",
"amount": "2269.37",
"cumulative_amount": "2269.37",
"remaining_value": "10130.63",
"status": "planned",
"journal_entry_id": 1284,
"booked_amount": "0.00"
}
],
"asset_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"depreciation_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"expense_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
}
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/fixed-assetsCreate a fixed asset write
Builds the depreciation plan (linear or declining, pro rata temporis) and resolves the asset, depreciation and expense accounts.
Integration tokens need the write ability.
Identifiant d'opération companies.fixed-assets.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
namestringrequisreferencestring | nullcategorystringrequisit_equipmentvehiclefurnituremachinerybuildingsoftwareotherasset_groupstring | nullinvestment_deduction_pctnumber | null0 to 100.investment_deduction_spreadbooleanasset_account_idinteger | nullClass 2 account; resolved from the category when absent.acquisition_datestring <date>requisacquisition_coststringrequisDecimal, excl. VAT.residual_valuestring | nullDecimal.useful_life_yearsintegerrequis1 to 50.methodstringlineardecliningprorata_temporisbooleanTrue by default.start_datestring <date> | nullStart of the depreciation; the acquisition date by default.notesstring | null
Exemple
{
"name": "Four mixte Rational",
"category": "machinery",
"acquisition_date": "2026-02-01",
"acquisition_cost": "12400.00",
"useful_life_years": 5
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma FixedAsset
Exemple
{
"id": 9,
"company_id": 7,
"source": "manual",
"external_id": "string",
"reference": "IMM-2026-003",
"name": "Four mixte Rational",
"category": "it_equipment",
"asset_group": "string",
"asset_account_id": 42,
"depreciation_account_id": 42,
"expense_account_id": 42,
"imported_document_id": 42,
"acquisition_date": "2026-02-01T00:00:00.000000Z",
"acquisition_cost": "12400.00",
"residual_value": "0.00",
"useful_life_years": 5,
"method": "linear",
"prorata_temporis": true,
"start_date": "2026-03-15T09:41:00+00:00",
"status": "active",
"notes": "string",
"disposed_on": "2026-03-15T09:41:00+00:00",
"disposal_price": "1210.00",
"disposal_entry_id": 42,
"investment_deduction_pct": "1210.00",
"investment_deduction_spread": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"lines": [
{
"id": 42,
"fixed_asset_id": 9,
"year": 2026,
"period_start": "2026-03-15T09:41:00+00:00",
"period_end": "2026-03-15T09:41:00+00:00",
"amount": "2269.37",
"cumulative_amount": "2269.37",
"remaining_value": "10130.63",
"status": "planned",
"journal_entry_id": 1284,
"booked_amount": "0.00"
}
],
"asset_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"depreciation_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"expense_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"name": "Four mixte Rational",
"category": "machinery",
"acquisition_date": "2026-02-01",
"acquisition_cost": "12400.00",
"useful_life_years": 5
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'name' => 'Four mixte Rational',
'category' => 'machinery',
'acquisition_date' => '2026-02-01',
'acquisition_cost' => '12400.00',
'useful_life_years' => 5,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"name": "Four mixte Rational",
"category": "machinery",
"acquisition_date": "2026-02-01",
"acquisition_cost": "12400.00",
"useful_life_years": 5
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"name": "Four mixte Rational",
"category": "machinery",
"acquisition_date": "2026-02-01",
"acquisition_cost": "12400.00",
"useful_life_years": 5
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/fixed-assets/groups/{fiscalYear}Depreciation table per group read
Acquisition cost, accumulated depreciation, depreciation of the year and net book value per group, for a fiscal year.
Integration tokens need the read ability.
Identifiant d'opération companies.fixed-assets.groups
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
fiscal_yearstringex.2026groupsobject[]Propriétés
groupstringex.machinerycountintegerex.1acquisition_coststring <decimal>ex.12400.00accumulatedstring <decimal>ex.2269.37net_book_valuestring <decimal>ex.10130.63year_depreciationstring <decimal>ex.2269.37investment_deductionstring <decimal>ex.0.00assetsobject[]
totalsobjectPropriétés
acquisition_coststring <decimal>accumulatedstring <decimal>net_book_valuestring <decimal>year_depreciationstring <decimal>investment_deductionstring <decimal>
Exemple
{
"fiscal_year": "2026",
"groups": [
{
"group": "machinery",
"count": 1,
"acquisition_cost": "12400.00",
"accumulated": "2269.37",
"net_book_value": "10130.63",
"year_depreciation": "2269.37",
"investment_deduction": "0.00",
"assets": [
{}
]
}
],
"totals": {
"acquisition_cost": "1210.00",
"accumulated": "1210.00",
"net_book_value": "1210.00",
"year_depreciation": "1210.00",
"investment_deduction": "1210.00"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/groups/2" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/groups/2', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/groups/2", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/groups/2",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/fixed-assets/{fixedAsset}Fixed asset read
Integration tokens need the read ability.
Identifiant d'opération companies.fixed-assets.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fixedAsset requis | integer | Id of the fixed asset. ex. 9 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma FixedAsset
Exemple
{
"id": 9,
"company_id": 7,
"source": "manual",
"external_id": "string",
"reference": "IMM-2026-003",
"name": "Four mixte Rational",
"category": "it_equipment",
"asset_group": "string",
"asset_account_id": 42,
"depreciation_account_id": 42,
"expense_account_id": 42,
"imported_document_id": 42,
"acquisition_date": "2026-02-01T00:00:00.000000Z",
"acquisition_cost": "12400.00",
"residual_value": "0.00",
"useful_life_years": 5,
"method": "linear",
"prorata_temporis": true,
"start_date": "2026-03-15T09:41:00+00:00",
"status": "active",
"notes": "string",
"disposed_on": "2026-03-15T09:41:00+00:00",
"disposal_price": "1210.00",
"disposal_entry_id": 42,
"investment_deduction_pct": "1210.00",
"investment_deduction_spread": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"lines": [
{
"id": 42,
"fixed_asset_id": 9,
"year": 2026,
"period_start": "2026-03-15T09:41:00+00:00",
"period_end": "2026-03-15T09:41:00+00:00",
"amount": "2269.37",
"cumulative_amount": "2269.37",
"remaining_value": "10130.63",
"status": "planned",
"journal_entry_id": 1284,
"booked_amount": "0.00"
}
],
"asset_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"depreciation_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"expense_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/fixed-assets/{fixedAsset}Update a fixed asset write
The plan is rebuilt for the years not booked yet.
Integration tokens need the write ability.
Identifiant d'opération companies.fixed-assets.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fixedAsset requis | integer | Id of the fixed asset. ex. 9 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
namestringcategorystringit_equipmentvehiclefurnituremachinerybuildingsoftwareotherasset_groupstring | nullinvestment_deduction_pctnumber | nullinvestment_deduction_spreadbooleanasset_account_idinteger | nullresidual_valuestringuseful_life_yearsintegermethodstringlineardecliningprorata_temporisbooleanstatusstringactivefully_depreciateddisposednotesstring | null
Exemple
{
"useful_life_years": 7
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma FixedAsset
Exemple
{
"id": 9,
"company_id": 7,
"source": "manual",
"external_id": "string",
"reference": "IMM-2026-003",
"name": "Four mixte Rational",
"category": "it_equipment",
"asset_group": "string",
"asset_account_id": 42,
"depreciation_account_id": 42,
"expense_account_id": 42,
"imported_document_id": 42,
"acquisition_date": "2026-02-01T00:00:00.000000Z",
"acquisition_cost": "12400.00",
"residual_value": "0.00",
"useful_life_years": 5,
"method": "linear",
"prorata_temporis": true,
"start_date": "2026-03-15T09:41:00+00:00",
"status": "active",
"notes": "string",
"disposed_on": "2026-03-15T09:41:00+00:00",
"disposal_price": "1210.00",
"disposal_entry_id": 42,
"investment_deduction_pct": "1210.00",
"investment_deduction_spread": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"lines": [
{
"id": 42,
"fixed_asset_id": 9,
"year": 2026,
"period_start": "2026-03-15T09:41:00+00:00",
"period_end": "2026-03-15T09:41:00+00:00",
"amount": "2269.37",
"cumulative_amount": "2269.37",
"remaining_value": "10130.63",
"status": "planned",
"journal_entry_id": 1284,
"booked_amount": "0.00"
}
],
"asset_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"depreciation_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"expense_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"useful_life_years": 7
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'useful_life_years' => 7,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"useful_life_years": 7
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"useful_life_years": 7
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/fixed-assets/book-period/{fiscalYear}Book the depreciation of a period write
One miscellaneous entry for every asset, for a month of the fiscal year. 200 with entry: null when there is nothing to book.
Integration tokens need the write ability.
Identifiant d'opération companies.fixed-assets.book-period
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
period_numberintegerrequis1 to 12.
Exemple
{
"period_number": 3
}Réponses
200Nothing to book
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
entryJournalEntry | nullperiodstringex.Mars 2026
Exemple
{
"entry": {
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}
]
},
"period": "Mars 2026"
}201Depreciation booked
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
entryJournalEntryperiodstringex.Mars 2026
Exemple
{
"entry": {
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}
]
},
"period": "Mars 2026"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/book-period/2" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"period_number": 3
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/book-period/2', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'period_number' => 3,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/book-period/2", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"period_number": 3
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/book-period/2",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"period_number": 3
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/fixed-assets/{fixedAsset}/book/{fiscalYear}Book the yearly depreciation of an asset write
Miscellaneous entry 6302 / 2x09 for the fiscal year.
Integration tokens need the write ability.
Error codes (code):
period_locked: the period is locked or the fiscal year is closed;reasontells which (period_lockedorfiscal_year_closed)
Identifiant d'opération companies.fixed-assets.book
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fixedAsset requis | integer | Id of the fixed asset. ex. 9 |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma FixedAsset
Exemple
{
"id": 9,
"company_id": 7,
"source": "manual",
"external_id": "string",
"reference": "IMM-2026-003",
"name": "Four mixte Rational",
"category": "it_equipment",
"asset_group": "string",
"asset_account_id": 42,
"depreciation_account_id": 42,
"expense_account_id": 42,
"imported_document_id": 42,
"acquisition_date": "2026-02-01T00:00:00.000000Z",
"acquisition_cost": "12400.00",
"residual_value": "0.00",
"useful_life_years": 5,
"method": "linear",
"prorata_temporis": true,
"start_date": "2026-03-15T09:41:00+00:00",
"status": "active",
"notes": "string",
"disposed_on": "2026-03-15T09:41:00+00:00",
"disposal_price": "1210.00",
"disposal_entry_id": 42,
"investment_deduction_pct": "1210.00",
"investment_deduction_spread": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"lines": [
{
"id": 42,
"fixed_asset_id": 9,
"year": 2026,
"period_start": "2026-03-15T09:41:00+00:00",
"period_end": "2026-03-15T09:41:00+00:00",
"amount": "2269.37",
"cumulative_amount": "2269.37",
"remaining_value": "10130.63",
"status": "planned",
"journal_entry_id": 1284,
"booked_amount": "0.00"
}
],
"asset_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"depreciation_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"expense_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorcode: period_locked, with reason). PeriodLockedErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9/book/2" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9/book/2', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9/book/2", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9/book/2",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/fixed-assets/{fixedAsset}/disposeDispose of an asset write
Sale (price above 0) or scrapping (price 0): posts the disposal entry with the gain or loss.
Integration tokens need the write ability.
Identifiant d'opération companies.fixed-assets.dispose
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fixedAsset requis | integer | Id of the fixed asset. ex. 9 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
datestring <date>requissale_pricestring | nullDecimal, excl. VAT.labelstring | null
Exemple
{
"date": "2026-09-30",
"sale_price": "4500.00"
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
assetFixedAssetentryJournalEntry
Exemple
{
"asset": {
"id": 9,
"company_id": 7,
"source": "manual",
"external_id": "string",
"reference": "IMM-2026-003",
"name": "Four mixte Rational",
"category": "it_equipment",
"asset_group": "string",
"asset_account_id": 42,
"depreciation_account_id": 42,
"expense_account_id": 42,
"imported_document_id": 42,
"acquisition_date": "2026-02-01T00:00:00.000000Z",
"acquisition_cost": "12400.00",
"residual_value": "0.00",
"useful_life_years": 5,
"method": "linear",
"prorata_temporis": true,
"start_date": "2026-03-15T09:41:00+00:00",
"status": "active",
"notes": "string",
"disposed_on": "2026-03-15T09:41:00+00:00",
"disposal_price": "1210.00",
"disposal_entry_id": 42,
"investment_deduction_pct": "1210.00",
"investment_deduction_spread": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"lines": [
{
"id": 42,
"fixed_asset_id": 9,
"year": 2026,
"period_start": "2026-03-15T09:41:00+00:00",
"period_end": "2026-03-15T09:41:00+00:00",
"amount": "2269.37",
"cumulative_amount": "2269.37",
"remaining_value": "10130.63",
"status": "planned",
"journal_entry_id": 1284,
"booked_amount": "0.00"
}
],
"asset_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"depreciation_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"expense_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
}
},
"entry": {
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}
]
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9/dispose" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"date": "2026-09-30",
"sale_price": "4500.00"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9/dispose', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'date' => '2026-09-30',
'sale_price' => '4500.00',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9/dispose", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"date": "2026-09-30",
"sale_price": "4500.00"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/9/dispose",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"date": "2026-09-30",
"sale_price": "4500.00"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneReports
Trial balance, general ledger, balance sheet and income statement, third party and aged balances.
GET/v1/companies/{company}/journals/{journal}/entriesEntries of a journal read
Full entries of the journal over a date range, in number order (journal book).
Integration tokens need the read ability.
Identifiant d'opération companies.reports.journal
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
journal requis | integer | Id of the journal. ex. 3 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
from | string <date> | |
to | string <date> |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma JournalEntry[]
Tableau de JournalEntry
Exemple
[
{
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}
]
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3/entries" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3/entries', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3/entries", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/3/entries",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/fiscal-years/{fiscalYear}/trial-balanceTrial balance read
Integration tokens need the read ability.
Identifiant d'opération companies.reports.trial-balance
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
from | string <date> | |
to | string <date> | |
include_empty | boolean | Include the accounts without movement. |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
fiscal_yearstringex.2026fromstring <date>tostring <date>linesobject[]Propriétés
account_idintegerex.223numberstringex.400000labelstringex.Clientstypestringex.assetdebitstring <decimal>ex.1210.00creditstring <decimal>ex.0.00debit_balancestring <decimal>ex.1210.00credit_balancestring <decimal>ex.0.00balancestring <decimal>ex.1210.00
totalsobjectPropriétés
debitstring <decimal>ex.1512.50creditstring <decimal>ex.1512.50is_balancedbooleanresultstring <decimal>Result of the period.ex.750.00
Exemple
{
"fiscal_year": "2026",
"from": "2026-03-15",
"to": "2026-03-15",
"lines": [
{
"account_id": 223,
"number": "400000",
"label": "Clients",
"type": "asset",
"debit": "1210.00",
"credit": "0.00",
"debit_balance": "1210.00",
"credit_balance": "0.00",
"balance": "1210.00"
}
],
"totals": {
"debit": "1512.50",
"credit": "1512.50",
"is_balanced": true,
"result": "750.00"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/trial-balance" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/trial-balance', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/trial-balance", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/trial-balance",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/fiscal-years/{fiscalYear}/balance-by-periodBalance by period read
One column per period of the fiscal year.
Integration tokens need the read ability.
Identifiant d'opération companies.reports.balance-by-period
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
fiscal_yearstringex.2026periodsobject[]Propriétés
idintegernumberintegerlabelstringex.Janvier 2026is_lockedboolean
accountsobject[]Propriétés
account_idintegerex.223numberstringex.400000labelstringex.Clientstypestringex.assetperiodsstring <decimal>[]totalstring <decimal>
Exemple
{
"fiscal_year": "2026",
"periods": [
{
"id": 42,
"number": 412,
"label": "Janvier 2026",
"is_locked": false
}
],
"accounts": [
{
"account_id": 223,
"number": "400000",
"label": "Clients",
"type": "asset",
"periods": [
"1210.00"
],
"total": "1210.00"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/balance-by-period" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/balance-by-period', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/balance-by-period", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/balance-by-period",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/fiscal-years/{fiscalYear}/financial-statementsBalance sheet and income statement read
Belgian legal scheme (BNB / NBB headings), in real time.
Integration tokens need the read ability.
Identifiant d'opération companies.reports.financial-statements
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
to | string <date> | Situation at this date. |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
fiscal_yearstringex.2026tostring <date>schemestringex.BEbalance_sheetobject[]Propriétés
codestringex.20/28labelstringex.ACTIFS IMMOBILISÉSsidestringassetliabilitygroupbooleanamountstring <decimal> | null
totalsobjectPropriétés
assetsstring <decimal>ex.1262.50liabilitiesstring <decimal>ex.1262.50is_balancedboolean
income_statementobject[]Propriétés
codestringex.70labelstringex.Chiffre d'affairessidestringincomeexpensedetailbooleanamountstring <decimal>ex.1000.00
resultstring <decimal>ex.750.00
Exemple
{
"fiscal_year": "2026",
"to": "2026-03-15",
"scheme": "BE",
"balance_sheet": [
{
"code": "20/28",
"label": "ACTIFS IMMOBILISÉS",
"side": "asset",
"group": true,
"amount": "1210.00"
}
],
"totals": {
"assets": "1262.50",
"liabilities": "1262.50",
"is_balanced": true
},
"income_statement": [
{
"code": "70",
"label": "Chiffre d'affaires",
"side": "income",
"detail": true,
"amount": "1000.00"
}
],
"result": "750.00"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/financial-statements" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/financial-statements', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/financial-statements", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/financial-statements",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/fiscal-years/{fiscalYear}/general-ledger/{account}General ledger of an account read
Movements of one account with the running balance.
Integration tokens need the read ability.
Identifiant d'opération companies.reports.general-ledger
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
account requis | integer | Id of the account (not its number). ex. 223 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
from | string <date> | |
to | string <date> |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
account_idintegerex.223fromstring <date>tostring <date>opening_balancestring <decimal>ex.0.00movementsobject[]Propriétés
line_idintegerentry_idintegerentry_datestring <date>journalstringex.VENdocumentstringex.2026/000412labelstring | nullreferencestring | nullthird_partystring | nulldebitstring <decimal>creditstring <decimal>balancestring <decimal>reconciliation_codestring | null
totalsobjectPropriétés
debitstring <decimal>creditstring <decimal>balancestring <decimal>
Exemple
{
"account_id": 223,
"from": "2026-03-15",
"to": "2026-03-15",
"opening_balance": "0.00",
"movements": [
{
"line_id": 3391,
"entry_id": 1284,
"entry_date": "2026-03-15",
"journal": "VEN",
"document": "2026/000412",
"label": "Facture Brasserie Dubuisson",
"reference": "F-2026-0412",
"third_party": "string",
"debit": "1210.00",
"credit": "0.00",
"balance": "1210.00",
"reconciliation_code": "string"
}
],
"totals": {
"debit": "1210.00",
"credit": "0.00",
"balance": "1210.00"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/general-ledger/223" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/general-ledger/223', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/general-ledger/223", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/general-ledger/223",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/fiscal-years/{fiscalYear}/consistencyConsistency of the fiscal year read
Gaps in the numbering, entries whose period does not match their date, entries outside the fiscal year.
Integration tokens need the read ability.
Identifiant d'opération companies.reports.consistency
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
fiscal_yearstringex.2026missing_numbersobject[]period_mismatchesobject[]entries_outside_fiscal_yearintegerex.0is_consistentboolean
Exemple
{
"fiscal_year": "2026",
"missing_numbers": [
{}
],
"period_mismatches": [
{}
],
"entries_outside_fiscal_year": 0,
"is_consistent": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/consistency" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/consistency', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/consistency", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/consistency",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/third-party-balance/{type}Customer or supplier balance read
Integration tokens need the read ability.
Identifiant d'opération companies.reports.third-party-balance
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
type requis | string | Side of the balance.customer supplier |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
to | string <date> |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object[]
Tableau de
third_party_idintegercodestringex.ACMEnamestringex.ACME SAdebitstring <decimal>creditstring <decimal>outstandingstring <decimal>ex.1210.00open_itemsintegerex.1
Exemple
[
{
"third_party_id": 18,
"code": "ACME",
"name": "ACME SA",
"debit": "1210.00",
"credit": "0.00",
"outstanding": "1210.00",
"open_items": 1
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-party-balance/customer" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-party-balance/customer', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-party-balance/customer", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-party-balance/customer",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/aged-balance/{type}Aged balance read
Open amounts per third party, split by age: not due, 1-30, 31-60, 61-90 and more than 90 days.
Integration tokens need the read ability.
Identifiant d'opération companies.reports.aged-balance
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
type requis | string | Side of the balance.customer supplier |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
to | string <date> | Today by default. |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
typestringex.customertostring <date>rowsobject[]Propriétés
third_party_idintegercodestringnamestringtotalstring <decimal>currentstring <decimal>d30string <decimal>d60string <decimal>d90string <decimal>d90plusstring <decimal>
totalsobjectPropriétés
currentstring <decimal>d30string <decimal>d60string <decimal>d90string <decimal>d90plusstring <decimal>totalstring <decimal>
Exemple
{
"type": "customer",
"to": "2026-03-15",
"rows": [
{
"third_party_id": 18,
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"total": "1210.00",
"current": "1210.00",
"d30": "1210.00",
"d60": "1210.00",
"d90": "1210.00",
"d90plus": "1210.00"
}
],
"totals": {
"current": "1210.00",
"d30": "1210.00",
"d60": "1210.00",
"d90": "1210.00",
"d90plus": "1210.00",
"total": "1210.00"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/aged-balance/customer" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/aged-balance/customer', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/aged-balance/customer", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/aged-balance/customer",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneAnalytics & budgets
Analytic codes, analytic report, budgets.
GET/v1/companies/{company}/analytic-codesAnalytic codes read
Integration tokens need the read ability.
Identifiant d'opération companies.analytic-codes.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
axis | string | cost_center project |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma AnalyticCode[]
Tableau de AnalyticCode
Exemple
[
{
"id": 2,
"company_id": 7,
"axis": "cost_center",
"code": "SALLE",
"label": "Salle",
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/analytic-codesCreate an analytic code write
Integration tokens need the write ability.
Identifiant d'opération companies.analytic-codes.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
axisstringrequiscost_centerprojectcodestringrequisUnique per axis, 20 max.labelstringrequisis_activeboolean
Exemple
{
"axis": "cost_center",
"code": "SALLE",
"label": "Salle"
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma AnalyticCode
Exemple
{
"id": 2,
"company_id": 7,
"axis": "cost_center",
"code": "SALLE",
"label": "Salle",
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"axis": "cost_center",
"code": "SALLE",
"label": "Salle"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'axis' => 'cost_center',
'code' => 'SALLE',
'label' => 'Salle',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"axis": "cost_center",
"code": "SALLE",
"label": "Salle"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"axis": "cost_center",
"code": "SALLE",
"label": "Salle"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/analytic-codes/{analyticCode}Update an analytic code write
Integration tokens need the write ability.
Identifiant d'opération companies.analytic-codes.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
analyticCode requis | integer | Id of the analytic code. ex. 2 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
labelstringis_activeboolean
Exemple
{
"is_active": false
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma AnalyticCode
Exemple
{
"id": 2,
"company_id": 7,
"axis": "cost_center",
"code": "SALLE",
"label": "Salle",
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes/2" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"is_active": false
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes/2', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'is_active' => false,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes/2", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"is_active": false
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes/2",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"is_active": False
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/fiscal-years/{fiscalYear}/analytic-reportAnalytic report read
Expenses, income and result per analytic code.
Integration tokens need the read ability.
Identifiant d'opération companies.reports.analytic
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
axis | string | cost_center project |
from | string <date> | |
to | string <date> |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
axisstringfiscal_yearstringgroupsobject[]Propriétés
codestring | nullex.SALLElabelstring | nullexpensesstring <decimal>incomestring <decimal>resultstring <decimal>accountsobject[]Propriétés
account_idintegerex.223numberstringex.400000labelstringex.Clientstypestringex.assetamountstring <decimal>
Exemple
{
"axis": "string",
"fiscal_year": "string",
"groups": [
{
"code": "SALLE",
"label": "Facture Brasserie Dubuisson",
"expenses": "1210.00",
"income": "1210.00",
"result": "1210.00",
"accounts": [
{
"account_id": 223,
"number": "400000",
"label": "Clients",
"type": "asset",
"amount": "1210.00"
}
]
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/analytic-report" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/analytic-report', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/analytic-report", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/analytic-report",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/fiscal-years/{fiscalYear}/budgetsBudget cells read
Integration tokens need the read ability.
Identifiant d'opération companies.budgets.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
scenario | string | default when absent. |
Entêtes communs : Accept-Language
Réponses
200OK
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budgets" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budgets', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budgets", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budgets",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePUT/v1/companies/{company}/fiscal-years/{fiscalYear}/budgetsSave budget cells write
Batch of cells (account × period, optionally × cost centre). An amount of 0 deletes the cell; spread_yearly spreads a yearly amount over twelve months.
Integration tokens need the write ability.
Identifiant d'opération companies.budgets.save
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
scenariostringcellsobject[]requisPropriétés
account_idintegerrequiscost_center_idinteger | nullperiod_numberintegerrequis1 to 12.amountstringrequisDecimal.
spread_yearlyboolean
Exemple
{
"cells": [
{
"account_id": 378,
"period_number": 1,
"amount": "18000.00"
}
],
"spread_yearly": true
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
savedintegerex.1
Exemple
{
"saved": 1
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PUT "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budgets" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"cells": [
{
"account_id": 378,
"period_number": 1,
"amount": "18000.00"
}
],
"spread_yearly": true
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PUT', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budgets', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'cells' => [
[
'account_id' => 378,
'period_number' => 1,
'amount' => '18000.00',
],
],
'spread_yearly' => true,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budgets", {
method: "PUT",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"cells": [
{
"account_id": 378,
"period_number": 1,
"amount": "18000.00"
}
],
"spread_yearly": true
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.put(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budgets",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"cells": [
{
"account_id": 378,
"period_number": 1,
"amount": "18000.00"
}
],
"spread_yearly": True
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/fiscal-years/{fiscalYear}/budget-reportBudget against actuals read
Integration tokens need the read ability.
Identifiant d'opération companies.reports.budget
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
scenario | string | |
cost_center_id | integer | |
upto_period | integer | 1 to 12. |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
scenariostringfiscal_yearstringupto_periodintegerlinesobject[]Propriétés
account_idintegerex.223numberstringex.400000labelstringex.Clientstypestringex.assetbudgetobjectPeriod number => amount.actualobjectPeriod number => amount.budget_ytdstring <decimal>actual_ytdstring <decimal>variancestring <decimal>variance_pctnumber | nullbudget_yearstring <decimal>
totalsobjectPropriétés
expenses_minus_income_budgetstring <decimal>expenses_minus_income_actualstring <decimal>
Exemple
{
"scenario": "string",
"fiscal_year": "string",
"upto_period": 1,
"lines": [
{
"account_id": 223,
"number": "400000",
"label": "Clients",
"type": "asset",
"budget": {},
"actual": {},
"budget_ytd": "1210.00",
"actual_ytd": "1210.00",
"variance": "1210.00",
"variance_pct": 12.5,
"budget_year": "1210.00"
}
],
"totals": {
"expenses_minus_income_budget": "1210.00",
"expenses_minus_income_actual": "1210.00"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budget-report" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budget-report', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budget-report", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fiscal-years/2/budget-report",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneExports
Legal books, statements and data as PDF, XLSX or CSV; full dossier as ZIP.
GET/v1/companies/{company}/exportsCatalogue of exports read
Every export with its group, formats and parameters. types keeps the historical list of CSV codes.
Integration tokens need the read ability.
Identifiant d'opération companies.exports.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
lang | string | fr nl en de |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
typesstring[]formatsstring[]pdfxlsxcsvdefault_formatstringex.csvfull_dossierstringex.zipgroupsobject[]Propriétés
codestringbooksstatementsvatthird_partiesassetsdatalabelstringex.Livres comptables
common_paramsstring[]catalogobject[]Propriétés
codestringex.general-ledgerlabelstringex.Grand livredescriptionstringgroupstringex.booksgroup_labelstringformatsstring[]datedbooleanrequires_fiscal_yearbooleanparamsobject[]
Exemple
{
"types": [
"string"
],
"formats": [
"pdf"
],
"default_format": "csv",
"full_dossier": "zip",
"groups": [
{
"code": "books",
"label": "Livres comptables"
}
],
"common_params": [
"string"
],
"catalog": [
{
"code": "general-ledger",
"label": "Grand livre",
"description": "Description",
"group": "books",
"group_label": "string",
"formats": [
"string"
],
"dated": true,
"requires_fiscal_year": true,
"params": [
{}
]
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/exports/full-dossier/{fiscalYear}Full dossier (ZIP) read 10 / 1 min
Every book, statement, VAT document, third party listing, fixed asset table and the source documents of the fiscal year, in numbered folders with a manifest of SHA-256 fingerprints.
Integration tokens need the read ability.
Rate limit: 10 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.exports.full-dossier
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
fiscalYear requis | integer | Id of the fiscal year. ex. 2 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
lang | string | fr nl en de |
Entêtes communs : Accept-Language
Réponses
200ZIP archive.
Entêtes de réponse Content-Disposition X-RateLimit-Limit X-RateLimit-Remaining
application/zip
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/full-dossier/2" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/full-dossier/2', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/full-dossier/2", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/full-dossier/2",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/exports/{type}/preview-urlSigned preview URL of an export read 60 / 1 min
URL valid 15 minutes that serves the PDF inline (preview pane).
Integration tokens need the read ability.
Rate limit: 60 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.exports.preview-url
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
type requis | string | Export code from the catalogue of GET exports (journals, general-ledger, trial-balance, vat-declaration, …).ex. trial-balance |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
fiscal_year_id | integer | The current fiscal year when absent. |
from | string <date> | |
to | string <date> | |
lang | string | fr nl en de |
account_from | string | general-ledger. |
account_to | string | general-ledger. |
scheme | string | annual-accounts.abbreviated micro |
general_meeting_date | string <date> | annual-accounts. |
declaration_id | integer | vat-declaration. |
year | integer | intracom-listing. |
period | integer | intracom-listing. |
third_party_id | integer | third-party-ledger. |
party_type | string | third-party-ledger.customer supplier |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
urlstring <uri>expires_inintegerSeconds.ex.900formatstringex.pdf
Exemple
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"expires_in": 900,
"format": "pdf"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance/preview-url" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance/preview-url', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance/preview-url", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance/preview-url",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/exports/{type}Download an export read 30 / 1 min
Codes: journals, purchases, sales, financial, miscellaneous, general-ledger, trial-balance, balance-by-period, financial-statements, annual-accounts, vat-summary, vat-declaration, customer-listing, intracom-listing, third-parties, customer-balance, supplier-balance, aged-customers, aged-suppliers, third-party-ledger, fixed-assets, accounts, documents, audit-trail. Generation is synchronous. PDFs of a period that is not locked carry a « provisional » mention.
Integration tokens need the read ability.
Rate limit: 30 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.exports.download
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
type requis | string | Export code from the catalogue of GET exports (journals, general-ledger, trial-balance, vat-declaration, …).ex. trial-balance |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
format | string | CSV by default.pdf xlsx csv |
fiscal_year_id | integer | The current fiscal year when absent. |
from | string <date> | |
to | string <date> | |
lang | string | fr nl en de |
account_from | string | general-ledger. |
account_to | string | general-ledger. |
scheme | string | annual-accounts.abbreviated micro |
general_meeting_date | string <date> | annual-accounts. |
declaration_id | integer | vat-declaration. |
year | integer | intracom-listing. |
period | integer | intracom-listing. |
third_party_id | integer | third-party-ledger. |
party_type | string | third-party-ledger.customer supplier |
Entêtes communs : Accept-Language
Réponses
200The file.
Entêtes de réponse Content-Disposition X-Export-Fingerprint X-RateLimit-Limit X-RateLimit-Remaining
application/pdf
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
text/csv
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/exports/{type}/viewInline PDF of an export (signed) URL signée 30 / 1 min
Target of the URL returned by preview-url.
Authorised by the signature of the URL (query parameters signature and expires), not by a bearer token. The URL is issued by another endpoint and expires.
Rate limit: 30 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération exports.view
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
type requis | string | Export code from the catalogue of GET exports (journals, general-ledger, trial-balance, vat-declaration, …).ex. trial-balance |
Entêtes communs : signature expires
Réponses
200The PDF, inline.
Entêtes de réponse Content-Disposition X-RateLimit-Limit X-RateLimit-Remaining
application/pdf
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance/view" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance/view', [
'headers' => [
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance/view", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/exports/trial-balance/view",
headers={
"Accept": "application/json",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePeppol
Registration of a company file on Peppol, transport options, network lookups.
GET/v1/companies/{company}/peppolPeppol state of the file read
Registration, transport options, SMP publication, supported documents and what blocks a registration.
Integration tokens need the read ability.
Identifiant d'opération companies.peppol.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma PeppolState
Exemple
{
"identity": {},
"participant_id": "0208:0477472701",
"status": "none",
"account": {
"id": "string",
"name": "Le Comptoir Montois SRL",
"archived": true
},
"transport": {},
"smp": {
"published": true,
"checked_at": "2026-03-15T09:41:00+00:00"
},
"access_point": {
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
},
"supported_documents": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"can_register": true,
"blockers": [
"string"
],
"blocker_codes": [
"string"
],
"managed_by_novadesko": true,
"registered_elsewhere": true,
"external_provider": "string",
"provider_configured": true,
"environment": "production",
"contact": {},
"last_error": "string"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/peppolUnregister the file from Peppol write Hors démo
Archives the account at the access point and records the reason.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération companies.peppol.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
reason_typestringrequisexpensiveaccountantothercustom_reasonstring | nullRequired when the reason isother.
Exemple
{
"reason_type": "accountant"
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
application/json
Schéma PeppolState
Exemple
{
"identity": {},
"participant_id": "0208:0477472701",
"status": "none",
"account": {
"id": "string",
"name": "Le Comptoir Montois SRL",
"archived": true
},
"transport": {},
"smp": {
"published": true,
"checked_at": "2026-03-15T09:41:00+00:00"
},
"access_point": {
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
},
"supported_documents": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"can_register": true,
"blockers": [
"string"
],
"blocker_codes": [
"string"
],
"managed_by_novadesko": true,
"registered_elsewhere": true,
"external_provider": "string",
"provider_configured": true,
"environment": "production",
"contact": {},
"last_error": "string"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflict422Refused: missing data on the file, provider error or not registered. blocker_codes lists the machine reasons and state carries the current Peppol state.
application/json
Exemple
{
"message": "Le numéro de TVA du dossier est requis pour l'inscription Peppol.",
"errors": {
"peppol": [
"Le numéro de TVA du dossier est requis pour l'inscription Peppol."
]
},
"blockers": [
"Numéro de TVA manquant"
],
"blocker_codes": [
"missing_vat_number"
]
}Exemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"reason_type": "accountant"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'reason_type' => 'accountant',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"reason_type": "accountant"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"reason_type": "accountant"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/peppol/registerRegister the file on Peppol write Hors démo 6 / 1 min
Creates the account at the access point (B2Brouter) and publishes the participant 0208:<enterprise number>. 201 for a new registration, 200 when it was already active. Emits the webhook peppol.status_changed.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 6 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.peppol.register
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
emailstring <email> | nullContact of the registration.phonestring | nulladdressstring | nullpostal_codestring | nullcitystring | nullprovincestring | nulloptionsobjectPropriétés
round_before_sumboolean | nullapply_taxes_per_lineboolean | nullregistered_for_empl_taxboolean | null
Exemple
{
"email": "gerant@comptoir-montois.example",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons"
}Réponses
200Already registered
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma PeppolState
Exemple
{
"identity": {},
"participant_id": "0208:0477472701",
"status": "none",
"account": {
"id": "string",
"name": "Le Comptoir Montois SRL",
"archived": true
},
"transport": {},
"smp": {
"published": true,
"checked_at": "2026-03-15T09:41:00+00:00"
},
"access_point": {
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
},
"supported_documents": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"can_register": true,
"blockers": [
"string"
],
"blocker_codes": [
"string"
],
"managed_by_novadesko": true,
"registered_elsewhere": true,
"external_provider": "string",
"provider_configured": true,
"environment": "production",
"contact": {},
"last_error": "string"
}201Registered
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma PeppolState
Exemple
{
"identity": {},
"participant_id": "0208:0477472701",
"status": "none",
"account": {
"id": "string",
"name": "Le Comptoir Montois SRL",
"archived": true
},
"transport": {},
"smp": {
"published": true,
"checked_at": "2026-03-15T09:41:00+00:00"
},
"access_point": {
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
},
"supported_documents": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"can_register": true,
"blockers": [
"string"
],
"blocker_codes": [
"string"
],
"managed_by_novadesko": true,
"registered_elsewhere": true,
"external_provider": "string",
"provider_configured": true,
"environment": "production",
"contact": {},
"last_error": "string"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Error422Refused: missing data on the file, provider error or not registered. blocker_codes lists the machine reasons and state carries the current Peppol state.
application/json
Exemple
{
"message": "Le numéro de TVA du dossier est requis pour l'inscription Peppol.",
"errors": {
"peppol": [
"Le numéro de TVA du dossier est requis pour l'inscription Peppol."
]
},
"blockers": [
"Numéro de TVA manquant"
],
"blocker_codes": [
"missing_vat_number"
]
}Exemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/register" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"email": "gerant@comptoir-montois.example",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/register', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'email' => 'gerant@comptoir-montois.example',
'address' => 'Grand-Place 14',
'postal_code' => '7000',
'city' => 'Mons',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/register", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"email": "gerant@comptoir-montois.example",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/register",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"email": "gerant@comptoir-montois.example",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/peppol/refreshRefresh the Peppol state write Hors démo 12 / 1 min
Reads the account at the access point and the network (SML / SMP) again.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 12 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.peppol.refresh
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma PeppolState
Exemple
{
"identity": {},
"participant_id": "0208:0477472701",
"status": "none",
"account": {
"id": "string",
"name": "Le Comptoir Montois SRL",
"archived": true
},
"transport": {},
"smp": {
"published": true,
"checked_at": "2026-03-15T09:41:00+00:00"
},
"access_point": {
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
},
"supported_documents": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"can_register": true,
"blockers": [
"string"
],
"blocker_codes": [
"string"
],
"managed_by_novadesko": true,
"registered_elsewhere": true,
"external_provider": "string",
"provider_configured": true,
"environment": "production",
"contact": {},
"last_error": "string"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Error422Refused: missing data on the file, provider error or not registered. blocker_codes lists the machine reasons and state carries the current Peppol state.
application/json
Exemple
{
"message": "Le numéro de TVA du dossier est requis pour l'inscription Peppol.",
"errors": {
"peppol": [
"Le numéro de TVA du dossier est requis pour l'inscription Peppol."
]
},
"blockers": [
"Numéro de TVA manquant"
],
"blocker_codes": [
"missing_vat_number"
]
}Exemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/refresh" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/refresh', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/refresh", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/refresh",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/peppol/transportUpdate the transport options write Hors démo
Reception and the document families received through Peppol.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération companies.peppol.transport
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
enabledboolean | nullreceptionboolean | nullstandard_documentsboolean | nullinvoiceboolean | nullcredit_noteboolean | nullself_billingboolean | nullorderboolean | nullapplication_responseboolean | null
Exemple
{
"reception": true,
"credit_note": true
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma PeppolState
Exemple
{
"identity": {},
"participant_id": "0208:0477472701",
"status": "none",
"account": {
"id": "string",
"name": "Le Comptoir Montois SRL",
"archived": true
},
"transport": {},
"smp": {
"published": true,
"checked_at": "2026-03-15T09:41:00+00:00"
},
"access_point": {
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
},
"supported_documents": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"can_register": true,
"blockers": [
"string"
],
"blocker_codes": [
"string"
],
"managed_by_novadesko": true,
"registered_elsewhere": true,
"external_provider": "string",
"provider_configured": true,
"environment": "production",
"contact": {},
"last_error": "string"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflict422Refused: missing data on the file, provider error or not registered. blocker_codes lists the machine reasons and state carries the current Peppol state.
application/json
Exemple
{
"message": "Le numéro de TVA du dossier est requis pour l'inscription Peppol.",
"errors": {
"peppol": [
"Le numéro de TVA du dossier est requis pour l'inscription Peppol."
]
},
"blockers": [
"Numéro de TVA manquant"
],
"blocker_codes": [
"missing_vat_number"
]
}Exemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/transport" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"reception": true,
"credit_note": true
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/transport', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'reception' => true,
'credit_note' => true,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/transport", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"reception": true,
"credit_note": true
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/transport",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"reception": True,
"credit_note": True
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/peppol/lookupLook a participant up on the Peppol network read Hors démo 30 / 1 min
By identifier (0208:0402531376) or by VAT / enterprise number and country. Reads the SML and the SMP of the participant.
Integration tokens need the read ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 30 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.peppol.lookup
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
identifier | string | ex. 0208:0402531376 |
vat | string | ex. BE0402531376 |
country | string | ex. BE |
enterprise_number | string |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma PeppolThirdPartyStatus
Exemple
{
"identifier": "0208:0402531376",
"registered": true,
"access_point": {
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
},
"document_types": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"checked_at": "2026-03-15T09:41:00+00:00",
"stale": true,
"error": "string",
"source": "sml+smp"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/lookup" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/lookup', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/lookup", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/lookup",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/peppol/document-typesSupported Peppol document types read
Integration tokens need the read ability.
Identifiant d'opération companies.peppol.document-types
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
document_typesPeppolDocumentType[]familiesstring[]identifier_schemesobjectCountry => ISO 6523 scheme (BE: 0208).
Exemple
{
"document_types": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"families": [
"string"
],
"identifier_schemes": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/document-types" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/document-types', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/document-types", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/document-types",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/peppol/logsCalls to the access point read
Last calls made for the file, for support.
Integration tokens need the read ability.
Identifiant d'opération companies.peppol.logs
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
limit | integer | 1 to 200, 50 by default. |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
logsobject[]
Exemple
{
"logs": [
{}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/logs" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/logs', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/logs", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/peppol/logs",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/third-parties/peppol/check-allCheck the Peppol status of every third party write Hors démo 6 / 1 min
Up to 100 third parties per call.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 6 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.third-parties.peppol.check-all
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
only_staleboolean | nullOnly the statuses older than 7 days.
Exemple
{
"only_stale": true
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
checkedintegerex.42registeredintegerex.17errorsintegerex.0skippedintegerThird parties without a usable identifier.ex.1
Exemple
{
"checked": 42,
"registered": 17,
"errors": 0,
"skipped": 1
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/peppol/check-all" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"only_stale": true
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/peppol/check-all', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'only_stale' => true,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/peppol/check-all", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"only_stale": true
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/peppol/check-all",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"only_stale": True
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/third-parties/{thirdParty}/peppolPeppol status of a third party read 60 / 1 min
Cached 7 days; refresh=1 asks the network again.
Integration tokens need the read ability.
Rate limit: 60 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.third-parties.peppol
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
thirdParty requis | integer | Id of the third party. ex. 18 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
refresh | boolean |
Entêtes communs : Accept-Language
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma PeppolThirdPartyStatus
Exemple
{
"identifier": "0208:0402531376",
"registered": true,
"access_point": {
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
},
"document_types": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"checked_at": "2026-03-15T09:41:00+00:00",
"stale": true,
"error": "string",
"source": "sml+smp"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/peppol" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/peppol', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/peppol", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/18/peppol",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneIntegrations
Catalogue of integrations, Novadesko synchronisation, file relays.
GET/v1/companies/{company}/integrationsCatalogue of integrations read
Every integration with its status, its configuration schema and the connection of the file.
Integration tokens need the read ability.
Identifiant d'opération companies.integrations.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
lang | string | fr nl en de |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
integrationsIntegration[]
Exemple
{
"integrations": [
{
"slug": "novadesko",
"name": "Novadesko",
"category": "accounting",
"description": "Description",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "available",
"capabilities": [
"import_documents"
],
"config_schema": [
{
"key": "string",
"label": "Facture Brasserie Dubuisson",
"type": "text",
"required": true
}
],
"open_tab": "string",
"has_driver": true,
"is_enabled": true,
"connection": {
"is_active": true,
"status": "connected",
"config_masked": {},
"last_sync_at": "2026-03-15T09:41:00+00:00",
"last_error": "string"
},
"interested": true,
"actions": [
"string"
]
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/integrations/{integration}/activateActivate an integration write Hors démo
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Error codes (code):
integration_error: generic driver errornot_available: integration not available yetnot_connected: the integration is not active on the fileintegration_inactive: the integration is switched offno_driver: nothing to run for this integrationnot_linked: the file is not linked to the external systemuse_open_tab: managed from its own tab (Peppol)file_required: a file is expectedfile_too_large: file above the size limitsync_failed: the run failednovadesko_locked: locked on the Novadesko side
Identifiant d'opération companies.integrations.activate
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
integration requis | string | Slug of the integration (novadesko, peppol, file_import, …).ex. novadesko |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
configobject | nullValues of the configuration schema.
Exemple
{
"config": []
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma Integration
Exemple
{
"slug": "novadesko",
"name": "Novadesko",
"category": "accounting",
"description": "Description",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "available",
"capabilities": [
"import_documents"
],
"config_schema": [
{
"key": "string",
"label": "Facture Brasserie Dubuisson",
"type": "text",
"required": true
}
],
"open_tab": "string",
"has_driver": true,
"is_enabled": true,
"connection": {
"is_active": true,
"status": "connected",
"config_masked": {},
"last_sync_at": "2026-03-15T09:41:00+00:00",
"last_error": "string"
},
"interested": true,
"actions": [
"string"
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/activate" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"config": []
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/activate', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'config' => [],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/activate", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"config": []
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/activate",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"config": []
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/integrations/{integration}/deactivateDeactivate an integration write Hors démo
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Error codes (code):
integration_error: generic driver errornot_available: integration not available yetnot_connected: the integration is not active on the fileintegration_inactive: the integration is switched offno_driver: nothing to run for this integrationnot_linked: the file is not linked to the external systemuse_open_tab: managed from its own tab (Peppol)file_required: a file is expectedfile_too_large: file above the size limitsync_failed: the run failednovadesko_locked: locked on the Novadesko side
Identifiant d'opération companies.integrations.deactivate
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
integration requis | string | Slug of the integration (novadesko, peppol, file_import, …).ex. novadesko |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma Integration
Exemple
{
"slug": "novadesko",
"name": "Novadesko",
"category": "accounting",
"description": "Description",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "available",
"capabilities": [
"import_documents"
],
"config_schema": [
{
"key": "string",
"label": "Facture Brasserie Dubuisson",
"type": "text",
"required": true
}
],
"open_tab": "string",
"has_driver": true,
"is_enabled": true,
"connection": {
"is_active": true,
"status": "connected",
"config_masked": {},
"last_sync_at": "2026-03-15T09:41:00+00:00",
"last_error": "string"
},
"interested": true,
"actions": [
"string"
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/deactivate" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/deactivate', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/deactivate", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/deactivate",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/integrations/{integration}/configUpdate the configuration write Hors démo
Secrets are stored encrypted and returned masked.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Error codes (code):
integration_error: generic driver errornot_available: integration not available yetnot_connected: the integration is not active on the fileintegration_inactive: the integration is switched offno_driver: nothing to run for this integrationnot_linked: the file is not linked to the external systemuse_open_tab: managed from its own tab (Peppol)file_required: a file is expectedfile_too_large: file above the size limitsync_failed: the run failednovadesko_locked: locked on the Novadesko side
Identifiant d'opération companies.integrations.config
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
integration requis | string | Slug of the integration (novadesko, peppol, file_import, …).ex. novadesko |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
configobjectrequis
Exemple
{
"config": {}
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma Integration
Exemple
{
"slug": "novadesko",
"name": "Novadesko",
"category": "accounting",
"description": "Description",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "available",
"capabilities": [
"import_documents"
],
"config_schema": [
{
"key": "string",
"label": "Facture Brasserie Dubuisson",
"type": "text",
"required": true
}
],
"open_tab": "string",
"has_driver": true,
"is_enabled": true,
"connection": {
"is_active": true,
"status": "connected",
"config_masked": {},
"last_sync_at": "2026-03-15T09:41:00+00:00",
"last_error": "string"
},
"interested": true,
"actions": [
"string"
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/config" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"config": {}
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/config', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'config' => [],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/config", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"config": {}
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/config",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"config": {}
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/integrations/{integration}/testTest the connection write Hors démo 12 / 1 min
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 12 requests per minute (429 beyond, see Retry-After).
Error codes (code):
integration_error: generic driver errornot_available: integration not available yetnot_connected: the integration is not active on the fileintegration_inactive: the integration is switched offno_driver: nothing to run for this integrationnot_linked: the file is not linked to the external systemuse_open_tab: managed from its own tab (Peppol)file_required: a file is expectedfile_too_large: file above the size limitsync_failed: the run failednovadesko_locked: locked on the Novadesko side
Identifiant d'opération companies.integrations.test
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
integration requis | string | Slug of the integration (novadesko, peppol, file_import, …).ex. novadesko |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
okbooleanmessagestring | nullintegrationIntegration
Exemple
{
"ok": true,
"message": "OK",
"integration": {
"slug": "novadesko",
"name": "Novadesko",
"category": "accounting",
"description": "Description",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "available",
"capabilities": [
"import_documents"
],
"config_schema": [
{
"key": "string",
"label": "Facture Brasserie Dubuisson",
"type": "text",
"required": true
}
],
"open_tab": "string",
"has_driver": true,
"is_enabled": true,
"connection": {
"is_active": true,
"status": "connected",
"config_masked": {},
"last_sync_at": "2026-03-15T09:41:00+00:00",
"last_error": "string"
},
"interested": true,
"actions": [
"string"
]
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/test" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/test', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/test", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/test",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/integrations/{integration}/syncRun a synchronisation write Hors démo 12 / 1 min
Runs the driver synchronously. JSON options (full) or, for file_import, a multipart upload (file: CODA, CSV…). On failure the answer is 422 with the last run.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 12 requests per minute (429 beyond, see Retry-After).
Error codes (code):
integration_error: generic driver errornot_available: integration not available yetnot_connected: the integration is not active on the fileintegration_inactive: the integration is switched offno_driver: nothing to run for this integrationnot_linked: the file is not linked to the external systemuse_open_tab: managed from its own tab (Peppol)file_required: a file is expectedfile_too_large: file above the size limitsync_failed: the run failednovadesko_locked: locked on the Novadesko side
Identifiant d'opération companies.integrations.sync
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
integration requis | string | Slug of the integration (novadesko, peppol, file_import, …).ex. novadesko |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
fullbooleanFull resynchronisation instead of incremental.
Exemple
{
"full": false
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
resultobject | nullCounters of the driver (documents, bank transactions, assets…).integrationIntegration
Exemple
{
"run": {
"id": 77,
"status": "running",
"started_at": "2026-03-15T09:41:00+00:00",
"finished_at": "2026-03-15T09:41:00+00:00",
"duration_ms": 1840,
"summary": {},
"message": "OK"
},
"result": {},
"integration": {
"slug": "novadesko",
"name": "Novadesko",
"category": "accounting",
"description": "Description",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "available",
"capabilities": [
"import_documents"
],
"config_schema": [
{
"key": "string",
"label": "Facture Brasserie Dubuisson",
"type": "text",
"required": true
}
],
"open_tab": "string",
"has_driver": true,
"is_enabled": true,
"connection": {
"is_active": true,
"status": "connected",
"config_masked": {},
"last_sync_at": "2026-03-15T09:41:00+00:00",
"last_error": "string"
},
"interested": true,
"actions": [
"string"
]
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/sync" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"full": false
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/sync', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'full' => false,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/sync", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"full": false
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/sync",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"full": False
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/integrations/{integration}/runsSynchronisation runs read
Integration tokens need the read ability.
Identifiant d'opération companies.integrations.runs
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
integration requis | string | Slug of the integration (novadesko, peppol, file_import, …).ex. novadesko |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
limit | integer | 1 to 100, 20 by default. |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
runsIntegrationRun[]
Exemple
{
"runs": [
{
"id": 77,
"status": "running",
"started_at": "2026-03-15T09:41:00+00:00",
"finished_at": "2026-03-15T09:41:00+00:00",
"duration_ms": 1840,
"summary": {},
"message": "OK"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/runs" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/runs', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/runs", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/runs",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/integrations/{integration}/interestRegister an interest write Hors démo
For an integration that is not available yet (coming_soon).
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération companies.integrations.interest
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
integration requis | string | Slug of the integration (novadesko, peppol, file_import, …).ex. novadesko |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
registeredbooleanregistered_atstring <date-time>slugstringex.codabox
Exemple
{
"registered": true,
"registered_at": "2026-03-15T09:41:00+00:00",
"slug": "codabox"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/interest" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/interest', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/interest", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/integrations/novadesko/interest",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/sync/novadeskoSynchronise the file from Novadesko write Hors démo 10 / 1 min
Reads documents, bank statements (CODA) and fixed assets of the linked shop. Read-only on the Novadesko side. 422 when the file is not linked or the integration is inactive.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 10 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.sync.novadesko
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
fullbooleanReload everything instead of the changes since the last run.
Exemple
{
"full": false
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
documentsintegerDocuments created or updated.ex.12bank_transactionsintegerex.34coda_filesintegerex.2fixed_assetsintegerex.0errorstring | nullsynced_atstring <date-time>
Exemple
{
"documents": 12,
"bank_transactions": 34,
"coda_files": 2,
"fixed_assets": 0,
"error": "string",
"synced_at": "2026-03-15T09:41:00+00:00"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/novadesko" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"full": false
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/novadesko', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'full' => false,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/novadesko", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"full": false
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/novadesko",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"full": False
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/files/preview-urlSigned URL of a Novadesko file read
Novadesko files cannot be framed directly; this returns a signed relay URL valid 20 minutes. Only whitelisted hosts and paths are relayed.
Integration tokens need the read ability.
Identifiant d'opération companies.files.preview-url
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
url requis | string <uri> | File on web.novadesko.com. |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
urlstring <uri>expires_inintegerex.1200
Exemple
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"expires_in": 1200
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/files/preview-url?url=https%3A%2F%2Fapi.novafisko.com%2Fv1%2Fcompanies%2FXBVD5O1L29HC" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/files/preview-url', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'query' => [
'url' => 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/files/preview-url?url=https%3A%2F%2Fapi.novafisko.com%2Fv1%2Fcompanies%2FXBVD5O1L29HC", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/files/preview-url",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
params={
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/files/viewSigned relay of a Novadesko file URL signée 120 / 1 min
Target of files/preview-url: serves the PDF or image inline with frame-ancestors allowing the app.
Authorised by the signature of the URL (query parameters signature and expires), not by a bearer token. The URL is issued by another endpoint and expires.
Rate limit: 120 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération files.view
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
url requis | string <uri> |
Entêtes communs : signature expires
Réponses
200The file, inline.
Entêtes de réponse Content-Disposition X-RateLimit-Limit X-RateLimit-Remaining
application/pdf
image/png
image/jpeg
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/files/view?url=https%3A%2F%2Fapi.novafisko.com%2Fv1%2Fcompanies%2FXBVD5O1L29HC" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/files/view', [
'headers' => [
'Accept' => 'application/json',
],
'query' => [
'url' => 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/files/view?url=https%3A%2F%2Fapi.novafisko.com%2Fv1%2Fcompanies%2FXBVD5O1L29HC", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/files/view",
headers={
"Accept": "application/json",
},
params={
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneHistory & recycle bin
Version history, revert, recycle bin, activity feed.
GET/v1/companies/{company}/historyVersion history read
Who changed what, from which device, newest first.
Integration tokens need the read ability.
Identifiant d'opération companies.history.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
subject_type | string | third_parties, accounts, journals, entries, documents, bank_transactions, fixed_assets… |
subject_id | integer | |
user_id | integer | |
action | string | created updated deleted restored reverted synced |
origin | string | online offline_sync system bridge |
operation_id | string <uuid> | |
device_id | string | |
from | string <date> | |
to | string <date> | |
q | string | Record label, user or device. |
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/history/usersFilters of the history read
People and devices that changed something, subject types and actions.
Integration tokens need the read ability.
Identifiant d'opération companies.history.users
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
dataobject[]Propriétés
idintegernamestringex.Claire Dumontrevisionsintegerex.214last_atstring <date-time> | nullrolestringex.firm_admin
devicesobject[]Propriétés
idstringnamestring | nullrevisionsinteger
subject_typesobject[]Propriétés
keystringex.third_partieslabelstringex.Tiers
actionsobject[]Propriétés
keystringex.createdlabelstringex.Création
Exemple
{
"data": [
{
"id": 42,
"name": "Claire Dumont",
"revisions": 214,
"last_at": "2026-03-15T09:41:00+00:00",
"role": "firm_admin"
}
],
"devices": [
{
"id": "string",
"name": "Le Comptoir Montois SRL",
"revisions": 1
}
],
"subject_types": [
{
"key": "third_parties",
"label": "Tiers"
}
],
"actions": [
{
"key": "created",
"label": "Création"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/users" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/users', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/users", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/users",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/history/exportExport the history (CSV) read 30 / 1 min
Same filters as the list. UTF-8 with BOM, semicolon separated.
Integration tokens need the read ability.
Rate limit: 30 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.history.export
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
subject_type | string | third_parties, accounts, journals, entries, documents, bank_transactions, fixed_assets… |
subject_id | integer | |
user_id | integer | |
action | string | created updated deleted restored reverted synced |
origin | string | online offline_sync system bridge |
operation_id | string <uuid> | |
device_id | string | |
from | string <date> | |
to | string <date> | |
q | string | Record label, user or device. |
Entêtes communs : Accept-Language
Réponses
200CSV file.
Entêtes de réponse Content-Disposition X-RateLimit-Limit X-RateLimit-Remaining
text/csv
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/export" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/export', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/export", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/export",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/history/settingsRetention settings read
Integration tokens need the read ability.
Identifiant d'opération companies.history.settings
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
trash_retention_daysintegerex.90default_trash_retention_daysintegerex.90min_trash_retention_daysintegerex.7max_trash_retention_daysintegerex.3650sync_retention_daysintegerex.90can_editboolean
Exemple
{
"trash_retention_days": 90,
"default_trash_retention_days": 90,
"min_trash_retention_days": 7,
"max_trash_retention_days": 3650,
"sync_retention_days": 90,
"can_edit": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/settings" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/settings', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/settings", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/settings",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/companies/{company}/history/settingsUpdate the retention of the recycle bin write
Managers only.
Integration tokens need the write ability.
Error codes (code):
settings_forbidden: only a manager can change this setting
Identifiant d'opération companies.history.settings.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Corps de la requête
application/json
Schéma object
trash_retention_daysintegerrequis7 to 3650.
Exemple
{
"trash_retention_days": 180
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
trash_retention_daysintegerex.180default_trash_retention_daysintegerex.90min_trash_retention_daysintegerex.7max_trash_retention_daysintegerex.3650sync_retention_daysintegerex.90can_editboolean
Exemple
{
"trash_retention_days": 180,
"default_trash_retention_days": 90,
"min_trash_retention_days": 7,
"max_trash_retention_days": 3650,
"sync_retention_days": 90,
"can_edit": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/settings" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"trash_retention_days": 180
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/settings', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'trash_retention_days' => 180,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/settings", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"trash_retention_days": 180
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/settings",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"trash_retention_days": 180
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/history/operations/{operation}/revertUndo a whole operation write
Reverts every change recorded under one X-Operation-Id, newest first, in one transaction: all or nothing.
Integration tokens need the write ability.
Error codes (code):
conflict: the record changed since then (forceable by a manager withforce: true)period_locked: locked period or closed fiscal yearvat_locked: VAT return validated or submittedalready_reverted: already revertednot_revertible: this kind of change cannot be revertedentry_immutable: a posted entry is reversed, not modifiedin_use: the record is in usebooked: the record is bookedcode_taken: the code is used by another recordforce_forbidden: only a manager can forceread_only: read-only access to the fileoperation_not_found: unknown operationoperation_not_revertible: one change of the batch cannot be revertednothing_to_revert: nothing to revert
Identifiant d'opération companies.history.operations.revert
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
operation requis | string <uuid> | Operation id (X-Operation-Id) grouping the changes of one action.ex. bf413a19-2136-4504-bc42-b314637eb5c7 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
reasonstring | nullforcebooleanOverwrite newer values (managers).
Exemple
{
"reason": "Erreur de saisie"
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
revertedbooleanoperation_idstring <uuid>countintegerex.3revisionsRevision[]skippedobject[]
Exemple
{
"reverted": true,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"count": 3,
"revisions": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
],
"skipped": [
{}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/operations/bf413a19-2136-4504-bc42-b314637eb5c7/revert" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"reason": "Erreur de saisie"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/operations/bf413a19-2136-4504-bc42-b314637eb5c7/revert', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'reason' => 'Erreur de saisie',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/operations/bf413a19-2136-4504-bc42-b314637eb5c7/revert", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"reason": "Erreur de saisie"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/operations/bf413a19-2136-4504-bc42-b314637eb5c7/revert",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"reason": "Erreur de saisie"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/history/{revision}Revision read
With the snapshots before and after.
Integration tokens need the read ability.
Identifiant d'opération companies.history.show
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
revision requis | integer | Id of the revision (history line). ex. 2301 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma Revision
Exemple
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": {
"id": 12,
"name": "Claire Dumont"
},
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/2301" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/2301', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/2301", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/2301",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/history/{revision}/revertRevert a change write
Puts back the state before the change: an update restores the previous values, a deletion restores the record, a creation sends it to the recycle bin, a posted entry is reversed. The revert is itself recorded and revertible.
Integration tokens need the write ability.
Error codes (code):
conflict: the record changed since then (forceable by a manager withforce: true)period_locked: locked period or closed fiscal yearvat_locked: VAT return validated or submittedalready_reverted: already revertednot_revertible: this kind of change cannot be revertedentry_immutable: a posted entry is reversed, not modifiedin_use: the record is in usebooked: the record is bookedcode_taken: the code is used by another recordforce_forbidden: only a manager can forceread_only: read-only access to the fileoperation_not_found: unknown operationoperation_not_revertible: one change of the batch cannot be revertednothing_to_revert: nothing to revert
Identifiant d'opération companies.history.revert
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
revision requis | integer | Id of the revision (history line). ex. 2301 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
reasonstring | nullforceboolean
Exemple
{
"reason": "Mauvais tiers"
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
Exemple
{
"reverted": true,
"effect": "updated",
"revision_ids": [
1
],
"subject_type": "string",
"subject_id": 42,
"reversal_entry_id": 42,
"revision": {
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": {
"id": 12,
"name": "Claire Dumont"
},
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
},
"revisions": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/2301/revert" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"reason": "Mauvais tiers"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/2301/revert', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'reason' => 'Mauvais tiers',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/2301/revert", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"reason": "Mauvais tiers"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/history/2301/revert",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"reason": "Mauvais tiers"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/activityActivity of the file read
Audit trail (sign-ins, exports, bookings…) and history merged, newest first. No total: use has_more.
Integration tokens need the read ability.
Identifiant d'opération companies.activity
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
user_id | integer | |
from | string <date> | |
to | string <date> | |
type | string | |
source | string | audit revision |
q | string | |
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma ActivityFeed
Exemple
{
"data": [
{
"source": "audit",
"at": "2026-03-15T09:41:00+00:00",
"recorded_at": "2026-03-15T09:41:00+00:00",
"user": null,
"action": "entry.posted",
"action_label": "Écriture validée",
"subject_type": "string",
"subject_id": 42,
"subject_label": "string",
"origin": "string",
"device_name": "MacBook de Claire",
"revision_id": 42,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"company_id": 7,
"changed_fields": [
"string"
],
"company": {
"token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
}
}
],
"current_page": 1,
"per_page": 50,
"has_more": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/activity" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/activity', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/activity", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/activity",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/trashRecycle bin read
Integration tokens need the read ability.
Identifiant d'opération companies.trash.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
type | string | Recycle bin type. |
q | string | |
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
dataTrashItem[]countsobjectType => count.typesobject[]Propriétés
keystringlabelstringcountinteger
totalintegercurrent_pageintegerper_pageintegerlast_pageintegerretention_daysintegerex.90can_purgeboolean
Exemple
{
"data": [
{
"type": "third_parties",
"id": 18,
"label": "DUBUISSON · Brasserie Dubuisson SA",
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": null,
"purge_at": "2026-03-15T09:41:00+00:00",
"restorable": true,
"blocked_reason": "string",
"blocked_message": "string",
"version": 3
}
],
"counts": {},
"types": [
{
"key": "string",
"label": "Facture Brasserie Dubuisson",
"count": 12
}
],
"total": 1,
"current_page": 1,
"per_page": 50,
"last_page": 1,
"retention_days": 90,
"can_purge": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/trash/restore-allRestore everything write
Optionally one type only.
Integration tokens need the write ability.
Identifiant d'opération companies.trash.restore-all
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête facultatif
application/json
Schéma object
typestring | null
Exemple
{
"type": "third_parties"
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
restoredintegerex.4skippedobject[]Propriétés
typestringidintegerlabelstringblocked_reasonstringex.code_taken
Exemple
{
"restored": 4,
"skipped": [
{
"type": "string",
"id": 42,
"label": "Facture Brasserie Dubuisson",
"blocked_reason": "code_taken"
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/restore-all" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"type": "third_parties"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/restore-all', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'type' => 'third_parties',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/restore-all", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"type": "third_parties"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/restore-all",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"type": "third_parties"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/trash/{type}/{id}/restoreRestore a record write
A third party whose code was taken comes back with a suffixed code; an account, journal or analytic code is refused (code_taken).
Integration tokens need the write ability.
Error codes (code):
code_taken: the code is used by another recordparent_missing: the linked record no longer existsnot_in_trash: the record is not in the recycle binrestore_failed: the restore failed
Identifiant d'opération companies.trash.restore
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
type requis | string | Recycle bin type: third_parties, accounts, journals, journal_rules, bank_rules, recurring_entries, analytic_codes, fixed_assets, documents, document_imports, integrations.ex. third_parties |
id requis | integer | Id of the record. ex. 42 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
restoredbooleantypestringidintegerlabelstringversionintegerdataobject
Exemple
{
"restored": true,
"type": "string",
"id": 42,
"label": "Facture Brasserie Dubuisson",
"version": 3,
"data": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/third_parties/42/restore" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/third_parties/42/restore', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/third_parties/42/restore", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/third_parties/42/restore",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/trash/{type}/{id}Delete definitively write
Managers only; recorded in the audit trail. Cannot be undone.
Integration tokens need the write ability.
Error codes (code):
purge_forbidden: only a manager can purge
Identifiant d'opération companies.trash.purge
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
type requis | string | Recycle bin type: third_parties, accounts, journals, journal_rules, bank_rules, recurring_entries, analytic_codes, fixed_assets, documents, document_imports, integrations.ex. third_parties |
id requis | integer | Id of the record. ex. 42 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflictExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/third_parties/42" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/third_parties/42', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/third_parties/42", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/trash/third_parties/42",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/third-parties/{id}/historyHistory of one record (third parties) read
Same items as the version history, limited to one record.
Integration tokens need the read ability.
Identifiant d'opération companies.history.subject.third-parties
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/42/history" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/42/history', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/42/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/third-parties/42/history",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/entries/{id}/historyHistory of one record (entries) read
Same items as the version history, limited to one record.
Integration tokens need the read ability.
Identifiant d'opération companies.history.subject.entries
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/42/history" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/42/history', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/42/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/entries/42/history",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/documents/{id}/historyHistory of one record (documents) read
Same items as the version history, limited to one record.
Integration tokens need the read ability.
Identifiant d'opération companies.history.subject.documents
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/42/history" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/42/history', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/42/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/42/history",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/accounts/{id}/historyHistory of one record (accounts) read
Same items as the version history, limited to one record.
Integration tokens need the read ability.
Identifiant d'opération companies.history.subject.accounts
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/42/history" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/42/history', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/42/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/42/history",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/bank-transactions/{id}/historyHistory of one record (bank transactions) read
Same items as the version history, limited to one record.
Integration tokens need the read ability.
Identifiant d'opération companies.history.subject.bank-transactions
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/42/history" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/42/history', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/42/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/bank-transactions/42/history",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/fixed-assets/{id}/historyHistory of one record (fixed assets) read
Same items as the version history, limited to one record.
Integration tokens need the read ability.
Identifiant d'opération companies.history.subject.fixed-assets
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/42/history" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/42/history', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/42/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/42/history",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/journals/{id}/historyHistory of one record (journals) read
Same items as the version history, limited to one record.
Integration tokens need the read ability.
Identifiant d'opération companies.history.subject.journals
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/42/history" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/42/history', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/42/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/journals/42/history",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/recurring-entries/{id}/historyHistory of one record (recurring entries) read
Same items as the version history, limited to one record.
Integration tokens need the read ability.
Identifiant d'opération companies.history.subject.recurring-entries
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/42/history" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/42/history', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/42/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/recurring-entries/42/history",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/vat-declarations/{id}/historyHistory of one record (vat declarations) read
Same items as the version history, limited to one record.
Integration tokens need the read ability.
Identifiant d'opération companies.history.subject.vat-declarations
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Exemple
{
"current_page": 1,
"data": [
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": null,
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/42/history" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/42/history', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/42/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/vat-declarations/42/history",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/accounts/{id}Move to the recycle bin (accounts) write
Refused with 422 when the record is used or booked.
Integration tokens need the write ability.
Error codes (code):
in_use: the record is used by entries or documentsbooked: the record is booked: reverse the entry first
Identifiant d'opération companies.trash.destroy.accounts
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/42" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/42', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/42", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/accounts/42",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/analytic-codes/{id}Move to the recycle bin (analytic codes) write
Refused with 422 when the record is used or booked.
Integration tokens need the write ability.
Error codes (code):
in_use: the record is used by entries or documentsbooked: the record is booked: reverse the entry first
Identifiant d'opération companies.trash.destroy.analytic-codes
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes/42" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes/42', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes/42", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/analytic-codes/42",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/fixed-assets/{id}Move to the recycle bin (fixed assets) write
Refused with 422 when the record is used or booked.
Integration tokens need the write ability.
Error codes (code):
in_use: the record is used by entries or documentsbooked: the record is booked: reverse the entry first
Identifiant d'opération companies.trash.destroy.fixed-assets
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/42" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/42', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/42", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/fixed-assets/42",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/companies/{company}/documents/{id}Move to the recycle bin (documents) write
Refused with 422 when the record is used or booked.
Integration tokens need the write ability.
Error codes (code):
in_use: the record is used by entries or documentsbooked: the record is booked: reverse the entry first
Identifiant d'opération companies.trash.destroy.documents
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
id requis | integer | Id of the record. ex. 42 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Réponses
204Done, no body.
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-Trashed
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflicterrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/42" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/42', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/42", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/documents/42",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneSynchronisation
Continuous and offline synchronisation: bootstrap, pull, push, conflicts. Requires the sync ability for integration tokens.
GET/v1/companies/{company}/sync/bootstrapFirst load sync
Starting point of a local copy: the cursor, the list of resources with their REST endpoint, the company, its settings and the rights of the user. Load each resource through its endpoint, then keep cursor for sync/pull.
Integration tokens need the sync ability.
Identifiant d'opération companies.sync.bootstrap
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
cursorintegerex.1042server_timestring <date-time>full_resyncbooleanex.falseretention_daysintegerex.90resourcesobject[]Propriétés
namestringex.third_partiescountintegerex.187endpointstringex.companies/XBVD5O1L29HC/third-partiespaginatedbooleanex.false
companyCompanycompany_settingsCompanySettingsuserobjectPropriétés
idintegernamestringex.Claire Dumontrolestringex.firm_adminrole_rankintegercan_writebooleancan_forceboolean
pushobjectPropriétés
resourcesstring[]max_mutationsintegerex.200temp_id_prefixstringex.tmp-
Exemple
{
"cursor": 1042,
"server_time": "2026-03-15T09:41:00+00:00",
"full_resync": false,
"retention_days": 90,
"resources": [
{
"name": "third_parties",
"count": 187,
"endpoint": "companies/XBVD5O1L29HC/third-parties",
"paginated": false
}
],
"company": {
"id": 7,
"public_token": "XBVD5O1L29HC",
"firm_id": 3,
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"legal_form": "SRL",
"legal_form_code": "610",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"country_pack": "BE",
"vat_regime": "monthly",
"currency": "EUR",
"locale": "fr",
"address": "Grand-Place 14, 7000 Mons",
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"latitude": "50.4541000",
"longitude": "3.9523000",
"nace_codes": [
{
"code": "56111",
"classification": "MAIN"
}
],
"main_nace_code": "56111",
"company_sheet_at": "2026-03-15T09:41:00+00:00",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"fiscal_year_start": "2026-03-15",
"fiscal_year_end": "2026-03-15",
"settings": {
"vat": {
"administration_cell": "string",
"structured_communication": "000000000101",
"directorate_number": "string",
"office_number": "string",
"declarant": {
"applicable": false,
"company_name": "string",
"signatory_1": "string",
"signatory_1_title": "string",
"signatory_2": "string",
"signatory_2_title": "string",
"phone": "+32 65 31 42 18",
"fax": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"language": "fr"
},
"sender_281_50": {
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"filer": {
"quality": "company",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
}
},
"legal": {
"rpm_district": "Hainaut, division Mons"
},
"annual_accounts": {
"scheme": "abbreviated",
"general_meeting_date": "2026-03-15",
"directors": "string",
"valuation_rules": "string"
},
"auto_entries": {
"vat": {
"payable_account": "451000",
"receivable_account": "411000",
"correction_payable_account": "string",
"correction_receivable_account": "string",
"journal_id": 3
},
"invoices_to_receive": {
"supplier_account": "444000",
"customer_account": "404000",
"journal_id": 3
},
"reconciliation_difference": {
"expense_account": "657000",
"income_account": "757000",
"max_amount": 1
},
"transfers": {
"transit_account": "580000",
"journal_id": 3
}
},
"history": {
"trash_retention_days": 90
}
},
"is_active": true,
"is_demo": false,
"source": "manual",
"external_id": "string",
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"deleted_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entries_count": 1284,
"firm": {
"id": 3,
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"fiscal_years": [
{
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{}
]
}
],
"journals": [
{
"id": 3,
"company_id": 7,
"code": "VEN",
"label": "Ventes",
"type": "purchase",
"control_account_id": 42,
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"last_number": 412,
"is_active": true,
"is_default": true,
"description": "Description",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"entries_count": 412,
"control_account": null,
"rules": [
{}
]
}
]
},
"company_settings": {
"vat": {
"administration_cell": "string",
"structured_communication": "000000000101",
"directorate_number": "string",
"office_number": "string",
"declarant": {
"applicable": false,
"company_name": "string",
"signatory_1": "string",
"signatory_1_title": "string",
"signatory_2": "string",
"signatory_2_title": "string",
"phone": "+32 65 31 42 18",
"fax": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"language": "fr"
},
"sender_281_50": {
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"filer": {
"quality": "company",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
}
},
"legal": {
"rpm_district": "Hainaut, division Mons"
},
"annual_accounts": {
"scheme": "abbreviated",
"general_meeting_date": "2026-03-15",
"directors": "string",
"valuation_rules": "string"
},
"auto_entries": {
"vat": {
"payable_account": "451000",
"receivable_account": "411000",
"correction_payable_account": "string",
"correction_receivable_account": "string",
"journal_id": 3
},
"invoices_to_receive": {
"supplier_account": "444000",
"customer_account": "404000",
"journal_id": 3
},
"reconciliation_difference": {
"expense_account": "657000",
"income_account": "757000",
"max_amount": 1
},
"transfers": {
"transit_account": "580000",
"journal_id": 3
}
},
"history": {
"trash_retention_days": 90
}
},
"user": {
"id": 42,
"name": "Claire Dumont",
"role": "firm_admin",
"role_rank": 1,
"can_write": true,
"can_force": true
},
"push": {
"resources": [
"string"
],
"max_mutations": 200,
"temp_id_prefix": "tmp-"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/bootstrap" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/bootstrap', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/bootstrap", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/bootstrap",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/sync/pullIncremental pull sync
Changes since a cursor, one line per record (last state). delete is a tombstone (deleted or in the recycle bin). When since is absent, unknown or older than the 90-day journal, full_resync is true and no change is returned: reload everything, then restart from the returned cursor. A change becomes visible two seconds after it was written.
Integration tokens need the sync ability.
Identifiant d'opération companies.sync.pull
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
since | integer | Cursor of the previous pull or bootstrap. ex. 1042 |
resources | string | Comma-separated resource names. ex. third_parties,entries |
limit | integer | 500 by default, 1000 max. |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
cursorintegerex.1057has_morebooleanex.falsefull_resyncbooleanex.falsechangesSyncChange[]server_timestring <date-time>
Exemple
{
"cursor": 1057,
"has_more": false,
"full_resync": false,
"changes": [
{
"resource": "third_parties",
"op": "upsert",
"id": 18,
"version": 4,
"data": {},
"changed_at": "2026-03-15T09:41:00+00:00",
"seq": 1042
}
],
"server_time": "2026-03-15T09:41:00+00:00"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/pull" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/pull', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/pull", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/pull",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/sync/pushPush offline mutations sync
Up to 200 mutations, processed in order, each in its own transaction and replayed through the matching REST action. Idempotent on client_mutation_id. Conflicts are settled by the priority rules (posted or locked accounting data always wins; field-by-field merge; highest role, then most recent change).
Integration tokens need the sync ability.
Identifiant d'opération companies.sync.push
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
deviceobjectPropriétés
idstringnamestringplatformstringex.macos
Exemple
{
"device": {
"id": "erp-connector-01",
"name": "ERP connector",
"platform": "server"
},
"mutations": [
{
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"occurred_at": "2026-10-05T08:00:00Z",
"resource": "third_parties",
"op": "create",
"client_temp_id": "tmp-3c1f",
"data": {
"type": "supplier",
"name": "Proximus SA",
"vat_number": "BE0202239951"
}
}
]
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
resultsSyncMutationResult[]cursorintegerserver_timestring <date-time>
Exemple
{
"results": [
{
"client_mutation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"status": "applied",
"original_status": "string",
"code": "COMPTOIR",
"message": "OK",
"resource": "string",
"op": "string",
"action": "string",
"id": 42,
"client_temp_id": "string",
"version": 3,
"data": {},
"errors": {},
"conflict": {
"server_version": 1,
"server_data": {},
"fields": [
{
"field": "string",
"client": null,
"server": null,
"winner": "client",
"rule": "string"
}
],
"resolution": "string"
},
"duplicate_of": 1,
"retryable": true
}
],
"cursor": 1,
"server_time": "2026-03-15T09:41:00+00:00"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/push" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"device": {
"id": "erp-connector-01",
"name": "ERP connector",
"platform": "server"
},
"mutations": [
{
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"occurred_at": "2026-10-05T08:00:00Z",
"resource": "third_parties",
"op": "create",
"client_temp_id": "tmp-3c1f",
"data": {
"type": "supplier",
"name": "Proximus SA",
"vat_number": "BE0202239951"
}
}
]
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/push', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'device' => [
'id' => 'erp-connector-01',
'name' => 'ERP connector',
'platform' => 'server',
],
'mutations' => [
[
'client_mutation_id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
'occurred_at' => '2026-10-05T08:00:00Z',
'resource' => 'third_parties',
'op' => 'create',
'client_temp_id' => 'tmp-3c1f',
'data' => [
'type' => 'supplier',
'name' => 'Proximus SA',
'vat_number' => 'BE0202239951',
],
],
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/push", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"device": {
"id": "erp-connector-01",
"name": "ERP connector",
"platform": "server"
},
"mutations": [
{
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"occurred_at": "2026-10-05T08:00:00Z",
"resource": "third_parties",
"op": "create",
"client_temp_id": "tmp-3c1f",
"data": {
"type": "supplier",
"name": "Proximus SA",
"vat_number": "BE0202239951"
}
}
]
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/push",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"device": {
"id": "erp-connector-01",
"name": "ERP connector",
"platform": "server"
},
"mutations": [
{
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"occurred_at": "2026-10-05T08:00:00Z",
"resource": "third_parties",
"op": "create",
"client_temp_id": "tmp-3c1f",
"data": {
"type": "supplier",
"name": "Proximus SA",
"vat_number": "BE0202239951"
}
}
]
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/sync/statusSynchronisation status sync
Integration tokens need the sync ability.
Identifiant d'opération companies.sync.status
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
cursorintegerserver_timestring <date-time>pending_conflictsintegerex.0last_push_atstring <date-time> | nulldevicesobject[]Propriétés
idstringnamestring | nullplatformstring | nulluserobject | nulllast_seen_atstring <date-time> | nulllast_push_atstring <date-time> | nulllast_cursorinteger | null
Exemple
{
"cursor": 1,
"server_time": "2026-03-15T09:41:00+00:00",
"pending_conflicts": 0,
"last_push_at": "2026-03-15T09:41:00+00:00",
"devices": [
{
"id": "string",
"name": "Le Comptoir Montois SRL",
"platform": "string",
"user": {},
"last_seen_at": "2026-03-15T09:41:00+00:00",
"last_push_at": "2026-03-15T09:41:00+00:00",
"last_cursor": 1
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/status" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/status', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/status", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/status",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/sync/conflictsSynchronisation conflicts sync
Integration tokens need the sync ability.
Identifiant d'opération companies.sync.conflicts
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
status | string | open resolved |
resource | string | |
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 50, maximum 200). ex. 50 |
Entêtes communs : Accept-Language
Réponses
200Paginated list
application/json
Schéma Pagination & object
Inclut Pagination
dataSyncConflict[]openintegerNumber of open conflicts.ex.0
Exemple
{
"current_page": 1,
"data": [
{
"id": 8,
"status": "open",
"type": "field",
"type_label": "string",
"resource": "third_parties",
"record_id": 42,
"subject_id": 42,
"subject_label": "string",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"fields": [
{
"field": "string",
"label": "Facture Brasserie Dubuisson",
"server": null,
"client": null,
"winner": "string",
"rule": "string"
}
],
"client_data": {},
"server_data": {},
"server_version": 1,
"winner": "string",
"loser": "string",
"resolution": "string",
"resolved_by": 1,
"client_user": {},
"server_user": {},
"resolved_by_user": {},
"device_id": "mac-7F3A21",
"created_at": "2026-03-15T09:41:00+00:00",
"resolved_at": "2026-03-15T09:41:00+00:00",
"choices": [
"server"
]
}
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187,
"open": 0
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/conflicts" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/conflicts', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/conflicts", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/conflicts",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/sync/conflicts/{conflict}/resolveResolve a conflict sync
client applies the values that were refused, merge applies data, server acknowledges.
Integration tokens need the sync ability.
Error codes (code):
conflict_already_resolved: already resolvedconflict_choice_unavailable: choice not available for this conflict
Identifiant d'opération companies.sync.conflicts.resolve
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
conflict requis | integer | Id of the synchronisation conflict. ex. 8 |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
choicestringrequisserverclientmergedataobject | nullRequired formerge.
Exemple
{
"choice": "client"
}Réponses
200OK
Entêtes de réponse X-Operation-Id X-Idempotent-Replay
application/json
Schéma object
resolvedbooleanconflictSyncConflictdataobject | null
Exemple
{
"resolved": true,
"conflict": {
"id": 8,
"status": "open",
"type": "field",
"type_label": "string",
"resource": "third_parties",
"record_id": 42,
"subject_id": 42,
"subject_label": "string",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"fields": [
{
"field": "string",
"label": "Facture Brasserie Dubuisson",
"server": null,
"client": null,
"winner": "string",
"rule": "string"
}
],
"client_data": {},
"server_data": {},
"server_version": 1,
"winner": "string",
"loser": "string",
"resolution": "string",
"resolved_by": 1,
"client_user": {},
"server_user": {},
"resolved_by_user": {},
"device_id": "mac-7F3A21",
"created_at": "2026-03-15T09:41:00+00:00",
"resolved_at": "2026-03-15T09:41:00+00:00",
"choices": [
"server"
]
},
"data": {}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/conflicts/8/resolve" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"choice": "client"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/conflicts/8/resolve', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'choice' => 'client',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/conflicts/8/resolve", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"choice": "client"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/sync/conflicts/8/resolve",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"choice": "client"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneMails sent to clients in the name of the firm, shared files.
POST/v1/companies/{company}/mail/documentsSend documents or an export by e-mail write Hors démo 20 / 1 min
Sends documents of the file and / or an export to a client, in the name of the firm. Above 10 MB (or with as_link) the files are sent as a signed download link valid 7 days. Manager role at least.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 20 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.mail.documents
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
tostring <email>[]requisccstring <email>[]subjectstring | nullmessagestringrequis5000 characters max.document_idsinteger[]exportobjectPropriétés
typestringrequisExport code orfull-dossier.formatstringpdfxlsxcsvzipfiscal_year_idinteger | nullfromstring <date> | nulltostring <date> | nulllangstringfrnlendeparamsobject | null
as_linkboolean
Exemple
{
"to": [
"gerant@comptoir-montois.example"
],
"subject": "Balance au 30 septembre",
"message": "Bonjour, vous trouverez ci-joint la balance arrêtée au 30 septembre.",
"export": {
"type": "trial-balance",
"format": "pdf",
"to": "2026-09-30"
}
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
messagestringsentintegerex.1modestringattachmentlinkrecipientsstring <email>[]attachmentsobject[]Propriétés
namestringex.balance-2026-09-30.pdfsizeintegerex.48211
link_expires_atstring <date-time> | null
Exemple
{
"message": "OK",
"sent": 1,
"mode": "attachment",
"recipients": [
"claire.dumont@fiduciaire-dumont.be"
],
"attachments": [
{
"name": "balance-2026-09-30.pdf",
"size": 48211
}
],
"link_expires_at": "2026-03-15T09:41:00+00:00"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/documents" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"to": [
"gerant@comptoir-montois.example"
],
"subject": "Balance au 30 septembre",
"message": "Bonjour, vous trouverez ci-joint la balance arrêtée au 30 septembre.",
"export": {
"type": "trial-balance",
"format": "pdf",
"to": "2026-09-30"
}
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/documents', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'to' => [
'gerant@comptoir-montois.example',
],
'subject' => 'Balance au 30 septembre',
'message' => 'Bonjour, vous trouverez ci-joint la balance arrêtée au 30 septembre.',
'export' => [
'type' => 'trial-balance',
'format' => 'pdf',
'to' => '2026-09-30',
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/documents", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"to": [
"gerant@comptoir-montois.example"
],
"subject": "Balance au 30 septembre",
"message": "Bonjour, vous trouverez ci-joint la balance arrêtée au 30 septembre.",
"export": {
"type": "trial-balance",
"format": "pdf",
"to": "2026-09-30"
}
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/documents",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"to": [
"gerant@comptoir-montois.example"
],
"subject": "Balance au 30 septembre",
"message": "Bonjour, vous trouverez ci-joint la balance arrêtée au 30 septembre.",
"export": {
"type": "trial-balance",
"format": "pdf",
"to": "2026-09-30"
}
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/companies/{company}/mail/document-requestAsk a client for missing documents write Hors démo 20 / 1 min
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 20 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération companies.mail.document-request
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Entêtes communs : Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Corps de la requête
application/json
Schéma object
tostring <email>[]requisitemsstring[]requismessagestring | nulldue_datestring <date> | null
Exemple
{
"to": [
"gerant@comptoir-montois.example"
],
"items": [
"Extrait bancaire de septembre",
"Facture Engie d'août"
],
"due_date": "2026-10-15"
}Réponses
201Created
Entêtes de réponse X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
sentintegerex.1messagestring
Exemple
{
"sent": 1,
"message": "OK"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/document-request" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Client-Mutation-Id: b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11" \
-d '{
"to": [
"gerant@comptoir-montois.example"
],
"items": [
"Extrait bancaire de septembre",
"Facture Engie d'\''août"
],
"due_date": "2026-10-15"
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/document-request', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
'X-Client-Mutation-Id' => 'b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11',
],
'json' => [
'to' => [
'gerant@comptoir-montois.example',
],
'items' => [
'Extrait bancaire de septembre',
'Facture Engie d\'août',
],
'due_date' => '2026-10-15',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/document-request", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
body: JSON.stringify({
"to": [
"gerant@comptoir-montois.example"
],
"items": [
"Extrait bancaire de septembre",
"Facture Engie d'août"
],
"due_date": "2026-10-15"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/document-request",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
"X-Client-Mutation-Id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
},
json={
"to": [
"gerant@comptoir-montois.example"
],
"items": [
"Extrait bancaire de septembre",
"Facture Engie d'août"
],
"due_date": "2026-10-15"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/companies/{company}/mail/logsMails sent for the file read
Integration tokens need the read ability.
Identifiant d'opération companies.mail.logs
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
company requis | string | Public token of the company file (public_token, 12 characters).ex. XBVD5O1L29HC |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
template | string | Template key. |
per_page | integer | 25 by default, 100 max. |
page | integer |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
dataMailLog[]metaobjectPropriétés
current_pageintegerex.1last_pageintegerex.1totalintegerex.12
Exemple
{
"data": [
{
"id": 9012,
"template_key": "documents.send",
"to": "gerant@comptoir-montois.example",
"subject": "Vos documents comptables",
"status": "queued",
"locale": "fr",
"created_at": "2026-03-15T09:41:00+00:00",
"sent_at": "2026-03-15T09:41:00+00:00",
"opened_at": "2026-03-15T09:41:00+00:00",
"attachments": [
{
"name": "balance-2026.pdf",
"size": 48211
}
]
}
],
"meta": {
"current_page": 1,
"last_page": 1,
"total": 12
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/logs" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/logs', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/logs", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/companies/XBVD5O1L29HC/mail/logs",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/mail/o/{token}.gifOpen pixel Public 240 / 1 min
Present in the mails only when tracking is switched on by the firm. Not meant to be called by integrations.
Public endpoint: no bearer token.
Rate limit: 240 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération mail.open
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
token requis | string | Opaque token. ex. a1B2c3D4e5 |
Réponses
200Transparent 1 × 1 GIF.
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
image/gif
Exemple d'appel
curl -X GET "https://api.novafisko.com/v1/mail/o/a1B2c3D4e5.gif" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/mail/o/a1B2c3D4e5.gif', [
'headers' => [
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/mail/o/a1B2c3D4e5.gif", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/mail/o/a1B2c3D4e5.gif",
headers={
"Accept": "application/json",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/mail/c/{token}Click redirection Public 240 / 1 min
Followed only when the signature of the target matches (no open redirect). Not meant to be called by integrations.
Public endpoint: no bearer token.
Rate limit: 240 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération mail.click
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
token requis | string | Opaque token. ex. a1B2c3D4e5 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
u requis | string | Encoded target. |
s requis | string | Signature. |
Réponses
302Redirection to the target.
| Entête de réponse | Description |
|---|---|
Location | Target of the redirection. |
Exemple d'appel
curl -X GET "https://api.novafisko.com/v1/mail/c/a1B2c3D4e5?u=string&s=string" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/mail/c/a1B2c3D4e5', [
'headers' => [
'Accept' => 'application/json',
],
'query' => [
'u' => 'string',
's' => 'string',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/mail/c/a1B2c3D4e5?u=string&s=string", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/mail/c/a1B2c3D4e5",
headers={
"Accept": "application/json",
},
params={
"u": "string",
"s": "string"
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneWebhooks
Outgoing webhooks of a firm: endpoints, test event, delivery log.
GET/v1/webhooks/eventsCatalogue of webhook events read
Integration tokens need the read ability.
Identifiant d'opération webhooks.events
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
dataobject[]Propriétés
eventstringex.entry.posteddescriptionstringex.An entry was posted.
Exemple
{
"data": [
{
"event": "entry.posted",
"description": "An entry was posted."
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/webhooks/events" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/webhooks/events', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/webhooks/events", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/webhooks/events",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/firms/{firm}/webhooksList the webhook endpoints read
Admins and managers of the firm (403 for other members, 404 for non-members).
Integration tokens need the read ability.
Identifiant d'opération firms.webhooks.index
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
dataWebhookEndpoint[]available_eventsstring[]
Exemple
{
"data": [
{
"id": 3,
"url": "https://erp.example.com/hooks/novafisko",
"description": "ERP connector",
"events": [
"entry.posted"
],
"is_active": true,
"secret_hint": "whsec_…ab12",
"last_delivery_at": "2026-03-15T09:41:00+00:00",
"last_status": "delivered",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00"
}
],
"available_events": [
"entry.posted"
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/firms/{firm}/webhooksCreate a webhook endpoint write Hors démo
The signing secret (whsec_…) is returned once. Events are queued and sent by a dispatcher that runs every minute.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Error codes (code):
webhook_limit_reached: 20 endpoints per firm at mostwebhook_url_refused: the URL is not HTTPS or targets a private / loopback address (production)
Identifiant d'opération firms.webhooks.store
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
urlstring <uri>requisHTTPS endpoint that receives the events (500 characters max).descriptionstring | nulleventsstring[]requisis_activeboolean
Exemple
{
"url": "https://erp.example.com/hooks/novafisko",
"description": "ERP connector",
"events": [
"entry.posted",
"document.booked",
"vat.declaration_validated"
]
}Réponses
201Created
application/json
Schéma object
webhookWebhookEndpointdataWebhookEndpointsecretstringSigning secret (whsec_ followed by 40 characters), shown once.ex.whsec_4Qm9x2kL8vT4nR7sW1pZ5cY3hJ6dF0gA9bE2uI4o
Exemple
{
"webhook": {
"id": 3,
"url": "https://erp.example.com/hooks/novafisko",
"description": "ERP connector",
"events": [
"entry.posted"
],
"is_active": true,
"secret_hint": "whsec_…ab12",
"last_delivery_at": "2026-03-15T09:41:00+00:00",
"last_status": "delivered",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00"
},
"data": {
"id": 3,
"url": "https://erp.example.com/hooks/novafisko",
"description": "ERP connector",
"events": [
"entry.posted"
],
"is_active": true,
"secret_hint": "whsec_…ab12",
"last_delivery_at": "2026-03-15T09:41:00+00:00",
"last_status": "delivered",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00"
},
"secret": "whsec_4Qm9x2kL8vT4nR7sW1pZ5cY3hJ6dF0gA9bE2uI4o"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://erp.example.com/hooks/novafisko",
"description": "ERP connector",
"events": [
"entry.posted",
"document.booked",
"vat.declaration_validated"
]
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'url' => 'https://erp.example.com/hooks/novafisko',
'description' => 'ERP connector',
'events' => [
'entry.posted',
'document.booked',
'vat.declaration_validated',
],
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"url": "https://erp.example.com/hooks/novafisko",
"description": "ERP connector",
"events": [
"entry.posted",
"document.booked",
"vat.declaration_validated"
]
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"url": "https://erp.example.com/hooks/novafisko",
"description": "ERP connector",
"events": [
"entry.posted",
"document.booked",
"vat.declaration_validated"
]
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePATCH/v1/firms/{firm}/webhooks/{webhook}Update a webhook endpoint write Hors démo
A paused endpoint keeps its pending deliveries; they are sent once it is active again.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Error codes (code):
webhook_url_refused: the URL is not HTTPS or targets a private / loopback address (production)
Identifiant d'opération firms.webhooks.update
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
webhook requis | integer | Id of the webhook endpoint. ex. 3 |
Entêtes communs : Accept-Language
Corps de la requête
application/json
Schéma object
urlstring <uri>descriptionstring | nulleventsstring[]is_activeboolean
Exemple
{
"is_active": false
}Réponses
200OK
application/json
Schéma object
webhookWebhookEndpoint
Exemple
{
"webhook": {
"id": 3,
"url": "https://erp.example.com/hooks/novafisko",
"description": "ERP connector",
"events": [
"entry.posted"
],
"is_active": true,
"secret_hint": "whsec_…ab12",
"last_delivery_at": "2026-03-15T09:41:00+00:00",
"last_status": "delivered",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00"
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. Errorerrors maps each field to its messages; code is present when the refusal has a machine reason. ErrorExemple d'appel
curl -X PATCH "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"is_active": false
}'<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
'json' => [
'is_active' => false,
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3", {
method: "PATCH",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"is_active": false
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.patch(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
json={
"is_active": False
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneDELETE/v1/firms/{firm}/webhooks/{webhook}Delete a webhook endpoint write Hors démo
Pending deliveries of the endpoint are dropped.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Identifiant d'opération firms.webhooks.destroy
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
webhook requis | integer | Id of the webhook endpoint. ex. 3 |
Entêtes communs : Accept-Language
Réponses
204Done, no body.
Pas de corps.
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X DELETE "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3", {
method: "DELETE",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.delete(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NonePOST/v1/firms/{firm}/webhooks/{webhook}/testSend a test event write Hors démo 12 / 1 min
Sends a webhook.test event immediately, signed like a real one. It is never retried: the returned delivery is delivered or failed.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Rate limit: 12 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération firms.webhooks.test
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
webhook requis | integer | Id of the webhook endpoint. ex. 3 |
Entêtes communs : Accept-Language
Réponses
202Test event sent.
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
deliveryWebhookDelivery
Exemple
{
"delivery": {
"id": 1871,
"event_id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "entry.posted",
"status": "pending",
"attempts": 1,
"next_attempt_at": "2026-03-15T09:41:00+00:00",
"response_status": 200,
"response_excerpt": "string",
"duration_ms": 184,
"delivered_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"payload": {
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "entry.posted",
"api_version": "v1",
"created_at": "2026-03-15T09:41:00+00:00",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {}
},
"attempt": 1,
"http_status": 200
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X POST "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3/test" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3/test', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3/test", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.post(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3/test",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/firms/{firm}/webhooks/{webhook}/deliveriesDeliveries of a webhook endpoint read
Newest first, with the status, the number of attempts and an excerpt of the answer (2000 characters max). Deliveries that are no longer pending are pruned after 30 days.
Integration tokens need the read ability.
Identifiant d'opération firms.webhooks.deliveries
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
firm requis | string | Public token of the firm (public_token, 12 characters).ex. NDTQVQU4AUAV |
webhook requis | integer | Id of the webhook endpoint. ex. 3 |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
status | string | pending delivered failed |
event | string | ex. entry.posted |
page | integer | Page number, starting at 1. ex. 1 |
per_page | integer | Items per page (default 25, maximum 100). ex. 25 |
Entêtes communs : Accept-Language
Réponses
200OK
application/json
Schéma object
dataWebhookDelivery[]metaobjectPropriétés
current_pageintegerex.1last_pageintegerex.3per_pageintegerex.25totalintegerex.61
Exemple
{
"data": [
{
"id": 1871,
"event_id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "entry.posted",
"status": "pending",
"attempts": 1,
"next_attempt_at": "2026-03-15T09:41:00+00:00",
"response_status": 200,
"response_excerpt": "string",
"duration_ms": 184,
"delivered_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"payload": {
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "entry.posted",
"api_version": "v1",
"created_at": "2026-03-15T09:41:00+00:00",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {}
},
"attempt": 1,
"http_status": 200
}
],
"meta": {
"current_page": 1,
"last_page": 3,
"per_page": 25,
"total": 61
}
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3/deliveries" \
-H "Accept: application/json" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3/deliveries', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.getenv('NOVAFISKO_TOKEN'),
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3/deliveries", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${process.env.NOVAFISKO_TOKEN}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/firms/NDTQVQU4AUAV/webhooks/3/deliveries",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {os.environ['NOVAFISKO_TOKEN']}",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneNovadesko bridge
Endpoints reserved to the Novadesko platform (shared secret).
GET/v1/bridge/pingPing of the Novadesko bridge Public 30 / 1 min
Used by Novadesko to check the shared secret. Reserved to the Novadesko platform.
Public endpoint: no bearer token.
Rate limit: 30 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération bridge.ping
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Secret requis | string | Shared secret of the bridge. |
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
okbooleanappstringex.NovaFiskotimestring <date-time>linked_firmsintegerlinked_companiesinteger
Exemple
{
"ok": true,
"app": "NovaFisko",
"time": "2026-03-15T09:41:00+00:00",
"linked_firms": 1,
"linked_companies": 1
}code. ErrorExemple d'appel
curl -X GET "https://api.novafisko.com/v1/bridge/ping" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/bridge/ping', [
'headers' => [
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/bridge/ping", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/bridge/ping",
headers={
"Accept": "application/json",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneGET/v1/bridge/shops/{token}/statusSynchronisation status of a Novadesko shop Public 60 / 1 min
Shown on the integration page of Novadesko. Reserved to the Novadesko platform (shared secret).
Public endpoint: no bearer token.
Rate limit: 60 requests per minute (429 beyond, see Retry-After).
Identifiant d'opération bridge.shop-status
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
token requis | string | Token of the Novadesko shop. ex. shp_8fK2mQ |
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Secret requis | string | Shared secret of the bridge. |
Réponses
200OK
Entêtes de réponse X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schéma object
okbooleanlinkedbooleancompanyobjectfirmobjectsynced_atstring <date-time> | nulldocumentsobjectPropriétés
totalintegerpendingintegerbookedintegerignoredintegerby_typeobject
bank_transactionsintegerfixed_assetsintegerjournal_entriesintegercorrectionsobjectPropriétés
totalintegerrecentobject[]
app_urlstring <uri>
Exemple
{
"ok": true,
"linked": true,
"company": {},
"firm": {},
"synced_at": "2026-03-15T09:41:00+00:00",
"documents": {
"total": 1,
"pending": 1,
"booked": 1,
"ignored": 1,
"by_type": {}
},
"bank_transactions": 1,
"fixed_assets": 1,
"journal_entries": 1,
"corrections": {
"total": 1,
"recent": [
{}
]
},
"app_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC"
}Exemple d'appel
curl -X GET "https://api.novafisko.com/v1/bridge/shops/shp_8fK2mQ/status" \
-H "Accept: application/json"<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.novafisko.com/v1/bridge/shops/shp_8fK2mQ/status', [
'headers' => [
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);const response = await fetch("https://api.novafisko.com/v1/bridge/shops/shp_8fK2mQ/status", {
method: "GET",
headers: {
"Accept": "application/json",
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.code ?? error.message);
}
const data = response.status === 204 ? null : await response.json();import os
import requests
response = requests.get(
"https://api.novafisko.com/v1/bridge/shops/shp_8fK2mQ/status",
headers={
"Accept": "application/json",
},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.content else NoneÉvénements webhook
Événements envoyés en POST aux points de terminaison webhook du cabinet. Chaque envoi est signé (entête X-Novafisko-Signature).
événementdocument.importedA document entered the company file (Novadesko synchronisation or document importer).
A document entered the company file (Novadesko synchronisation or document importer).
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Signature requis | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.ex. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event requis | string | Event name. ex. document.imported |
X-Novafisko-Delivery requis | string | Id of the delivery (stable across retries). ex. 1871 |
Charge utile
Schéma WebhookEvent
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "document.imported",
"api_version": "v1",
"created_at": "2026-10-05T08:21:48Z",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {
"id": 87,
"source": "novafisko",
"origin": "novafisko",
"type": "purchases",
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-04-14",
"third_party_id": 18,
"third_party_name": "Brasserie Dubuisson SA",
"third_party_vat": "BE0402531376",
"currency": "EUR",
"amount_net": "542.00",
"amount_vat": "113.82",
"amount_gross": "655.82",
"status": "pending",
"journal_entry_id": null
}
}Any 2xx answer within 10 seconds acknowledges the delivery. Anything else is retried with an exponential backoff (1, 2, 4, 8, 16, 32 and 64 minutes): 8 attempts, then the delivery is failed.
événementdocument.bookedA document was booked to an entry.
A document was booked to an entry.
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Signature requis | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.ex. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event requis | string | Event name. ex. document.booked |
X-Novafisko-Delivery requis | string | Id of the delivery (stable across retries). ex. 1871 |
Charge utile
Schéma WebhookEvent
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "document.booked",
"api_version": "v1",
"created_at": "2026-10-05T08:21:48Z",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {
"id": 87,
"source": "novafisko",
"origin": "novafisko",
"type": "purchases",
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-04-14",
"third_party_id": 18,
"third_party_name": "Brasserie Dubuisson SA",
"third_party_vat": "BE0402531376",
"currency": "EUR",
"amount_net": "542.00",
"amount_vat": "113.82",
"amount_gross": "655.82",
"status": "booked",
"journal_entry_id": 1284
}
}Any 2xx answer within 10 seconds acknowledges the delivery. Anything else is retried with an exponential backoff (1, 2, 4, 8, 16, 32 and 64 minutes): 8 attempts, then the delivery is failed.
événemententry.postedAn entry was posted.
An entry was posted.
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Signature requis | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.ex. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event requis | string | Event name. ex. entry.posted |
X-Novafisko-Delivery requis | string | Id of the delivery (stable across retries). ex. 1871 |
Charge utile
Schéma WebhookEvent
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "entry.posted",
"api_version": "v1",
"created_at": "2026-10-05T08:21:48Z",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {
"id": 1284,
"reference": "ACH 2026/000412",
"journal_code": "ACH",
"fiscal_year_code": "2026",
"number": 412,
"entry_date": "2026-03-15",
"due_date": "2026-04-14",
"label": "Facture Brasserie Dubuisson SA",
"document_reference": "F-2026-0412",
"status": "posted",
"origin": "manual",
"third_party_id": 18,
"total_debit": "655.82",
"total_credit": "655.82",
"lines_count": 4,
"reversed_entry_id": null,
"reversed_by_entry_id": null
}
}Any 2xx answer within 10 seconds acknowledges the delivery. Anything else is retried with an exponential backoff (1, 2, 4, 8, 16, 32 and 64 minutes): 8 attempts, then the delivery is failed.
événemententry.reversedAn entry was reversed; `reversed_by_entry_id` is the reversal entry.
An entry was reversed; reversed_by_entry_id is the reversal entry.
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Signature requis | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.ex. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event requis | string | Event name. ex. entry.reversed |
X-Novafisko-Delivery requis | string | Id of the delivery (stable across retries). ex. 1871 |
Charge utile
Schéma WebhookEvent
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "entry.reversed",
"api_version": "v1",
"created_at": "2026-10-05T08:21:48Z",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {
"id": 1284,
"reference": "ACH 2026/000412",
"journal_code": "ACH",
"fiscal_year_code": "2026",
"number": 412,
"entry_date": "2026-03-15",
"due_date": "2026-04-14",
"label": "Facture Brasserie Dubuisson SA",
"document_reference": "F-2026-0412",
"status": "reversed",
"origin": "manual",
"third_party_id": 18,
"total_debit": "655.82",
"total_credit": "655.82",
"lines_count": 4,
"reversed_entry_id": null,
"reversed_by_entry_id": 1301
}
}Any 2xx answer within 10 seconds acknowledges the delivery. Anything else is retried with an exponential backoff (1, 2, 4, 8, 16, 32 and 64 minutes): 8 attempts, then the delivery is failed.
événementbank.transaction_importedA bank transaction was imported (one event per transaction).
A bank transaction was imported (one event per transaction).
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Signature requis | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.ex. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event requis | string | Event name. ex. bank.transaction_imported |
X-Novafisko-Delivery requis | string | Id of the delivery (stable across retries). ex. 1871 |
Charge utile
Schéma WebhookEvent
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "bank.transaction_imported",
"api_version": "v1",
"created_at": "2026-10-05T08:21:48Z",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {
"id": 951,
"source": "novadesko",
"account_iban": "BE68539007547034",
"value_date": "2026-03-18",
"amount": "-655.82",
"currency": "EUR",
"counterpart_name": "Brasserie Dubuisson SA",
"counterpart_iban": "BE71096123456769",
"communication": "F-2026-0412",
"status": "pending"
}
}Any 2xx answer within 10 seconds acknowledges the delivery. Anything else is retried with an exponential backoff (1, 2, 4, 8, 16, 32 and 64 minutes): 8 attempts, then the delivery is failed.
événementvat.declaration_validatedA VAT declaration was validated and its settlement entry posted.
A VAT declaration was validated and its settlement entry posted.
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Signature requis | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.ex. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event requis | string | Event name. ex. vat.declaration_validated |
X-Novafisko-Delivery requis | string | Id of the delivery (stable across retries). ex. 1871 |
Charge utile
Schéma WebhookEvent
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "vat.declaration_validated",
"api_version": "v1",
"created_at": "2026-10-05T08:21:48Z",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {
"id": 14,
"period_type": "quarterly",
"year": 2026,
"period": 1,
"label": "1T 2026",
"starts_on": "2026-01-01",
"ends_on": "2026-03-31",
"amount_due": "157.50",
"amount_refund": "0.00",
"status": "validated",
"validated_at": "2026-04-14T09:02:11Z",
"journal_entry_id": 1420
}
}Any 2xx answer within 10 seconds acknowledges the delivery. Anything else is retried with an exponential backoff (1, 2, 4, 8, 16, 32 and 64 minutes): 8 attempts, then the delivery is failed.
événementfiscal_year.closedA fiscal year was closed.
A fiscal year was closed.
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Signature requis | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.ex. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event requis | string | Event name. ex. fiscal_year.closed |
X-Novafisko-Delivery requis | string | Id of the delivery (stable across retries). ex. 1871 |
Charge utile
Schéma WebhookEvent
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "fiscal_year.closed",
"api_version": "v1",
"created_at": "2026-10-05T08:21:48Z",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {
"id": 2,
"code": "2025",
"starts_on": "2025-01-01",
"ends_on": "2025-12-31",
"closed_at": "2026-05-28T14:30:00Z"
}
}Any 2xx answer within 10 seconds acknowledges the delivery. Anything else is retried with an exponential backoff (1, 2, 4, 8, 16, 32 and 64 minutes): 8 attempts, then the delivery is failed.
événementpeppol.status_changedThe Peppol registration of a company file changed status.
The Peppol registration of a company file changed status.
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Signature requis | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.ex. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event requis | string | Event name. ex. peppol.status_changed |
X-Novafisko-Delivery requis | string | Id of the delivery (stable across retries). ex. 1871 |
Charge utile
Schéma WebhookEvent
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "peppol.status_changed",
"api_version": "v1",
"created_at": "2026-10-05T08:21:48Z",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {
"id": 5,
"participant_id": "0208:0477472701",
"full_id": "iso6523-actorid-upis::0208:0477472701",
"status": "active",
"previous_status": "pending",
"incoming_enabled": true,
"activated_at": "2026-03-02T10:15:00Z"
}
}Any 2xx answer within 10 seconds acknowledges the delivery. Anything else is retried with an exponential backoff (1, 2, 4, 8, 16, 32 and 64 minutes): 8 attempts, then the delivery is failed.
événementthird_party.createdA customer or supplier was created.
A customer or supplier was created.
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Signature requis | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.ex. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event requis | string | Event name. ex. third_party.created |
X-Novafisko-Delivery requis | string | Id of the delivery (stable across retries). ex. 1871 |
Charge utile
Schéma WebhookEvent
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "third_party.created",
"api_version": "v1",
"created_at": "2026-10-05T08:21:48Z",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {
"id": 18,
"type": "supplier",
"code": "DUBUISSON",
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0402531376",
"country": "BE",
"email": "compta@dubuisson.example",
"peppol_identifier": "0208:0402531376",
"peppol_registered": true
}
}Any 2xx answer within 10 seconds acknowledges the delivery. Anything else is retried with an exponential backoff (1, 2, 4, 8, 16, 32 and 64 minutes): 8 attempts, then the delivery is failed.
événementthird_party.updatedA customer or supplier was updated; `changed` lists the columns.
A customer or supplier was updated; changed lists the columns.
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Signature requis | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.ex. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event requis | string | Event name. ex. third_party.updated |
X-Novafisko-Delivery requis | string | Id of the delivery (stable across retries). ex. 1871 |
Charge utile
Schéma WebhookEvent
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "third_party.updated",
"api_version": "v1",
"created_at": "2026-10-05T08:21:48Z",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {
"id": 18,
"type": "supplier",
"code": "DUBUISSON",
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0402531376",
"country": "BE",
"email": "facturation@dubuisson.example",
"peppol_identifier": "0208:0402531376",
"peppol_registered": true,
"changed": [
"email"
]
}
}Any 2xx answer within 10 seconds acknowledges the delivery. Anything else is retried with an exponential backoff (1, 2, 4, 8, 16, 32 and 64 minutes): 8 attempts, then the delivery is failed.
événementwebhook.testTest event sent by `POST /v1/firms/{firm}/webhooks/{webhook}/test`; `company` is null.
Test event sent by POST /v1/firms/{firm}/webhooks/{webhook}/test; company is null.
Entêtes
| Nom | Type | Description |
|---|---|---|
X-Novafisko-Signature requis | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.ex. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event requis | string | Event name. ex. webhook.test |
X-Novafisko-Delivery requis | string | Id of the delivery (stable across retries). ex. 1871 |
Charge utile
Schéma WebhookEvent
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "webhook.test",
"api_version": "v1",
"created_at": "2026-10-05T08:21:48Z",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": null,
"data": {
"message": "Test event from NovaFisko.",
"webhook_id": 3
}
}Any 2xx answer within 10 seconds acknowledges the delivery. Anything else is retried with an exponential backoff (1, 2, 4, 8, 16, 32 and 64 minutes): 8 attempts, then the delivery is failed.
Schémas
Structures de données réutilisées par les points d'accès. Les montants sont des chaînes décimales, les dates sont au format ISO 8601.
schémaAccount
idintegerex.580company_idintegerex.7numberstringPCMN account number (2 to 12 digits).ex.702000labelstringex.Prestations de servicestypestringassetliabilityexpenseincomeoff_balanceis_postablebooleanFalse for heading accounts.is_reconcilablebooleanLettering allowed (customers, suppliers…).purchase_gridinteger | nullVAT grid of purchases: 81, 82 or 83.ex.82default_vat_code_idinteger | nullcreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nulldefault_vat_codeobject | null
Exemple
{
"id": 580,
"company_id": 7,
"number": "702000",
"label": "Prestations de services",
"type": "asset",
"is_postable": true,
"is_reconcilable": true,
"purchase_grid": 82,
"default_vat_code_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"default_vat_code": {}
}schémaActivityFeed
dataActivityRow[]current_pageintegerex.1per_pageintegerex.50has_moreboolean
Exemple
{
"data": [
{
"source": "audit",
"at": "2026-03-15T09:41:00+00:00",
"recorded_at": "2026-03-15T09:41:00+00:00",
"user": null,
"action": "entry.posted",
"action_label": "Écriture validée",
"subject_type": "string",
"subject_id": 42,
"subject_label": "string",
"origin": "string",
"device_name": "MacBook de Claire",
"revision_id": 42,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"company_id": 7,
"changed_fields": [
"string"
],
"company": {
"token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
}
}
],
"current_page": 1,
"per_page": 50,
"has_more": true
}schémaActivityRow
sourcestringauditrevisionatstring <date-time>recorded_atstring <date-time>userobject | nullactionstringex.entry.postedaction_labelstringex.Écriture validéesubject_typestring | nullsubject_idinteger | nullsubject_labelstring | nulloriginstring | nulldevice_namestring | nullrevision_idinteger | nulloperation_idstring | nullcompany_idinteger | nullchanged_fieldsstring[]companyobject | nullFirm feed only.Propriétés
tokenstringnamestring
Exemple
{
"source": "audit",
"at": "2026-03-15T09:41:00+00:00",
"recorded_at": "2026-03-15T09:41:00+00:00",
"user": {
"id": 12,
"name": "Claire Dumont"
},
"action": "entry.posted",
"action_label": "Écriture validée",
"subject_type": "string",
"subject_id": 42,
"subject_label": "string",
"origin": "string",
"device_name": "MacBook de Claire",
"revision_id": 42,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"company_id": 7,
"changed_fields": [
"string"
],
"company": {
"token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
}
}schémaAnalyticCode
idintegerex.2company_idintegeraxisstringcost_centerprojectcodestringex.SALLElabelstringex.Salleis_activebooleancreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | null
Exemple
{
"id": 2,
"company_id": 7,
"axis": "cost_center",
"code": "SALLE",
"label": "Salle",
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1
}schémaBankRule
idintegerex.6company_idintegernamestringex.Frais bancairesfieldstringcounterpart_namecounterpart_ibancommunicationdescriptionanyoperatorstringcontainsequalsstartspatternstringex.frais de tenuedirectionstringinoutanyaccount_idintegerex.517third_party_idinteger | nulllabelstring | nullpriorityintegerex.100is_activebooleanapplied_countintegerex.14created_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nullaccountobjectPropriétés
idintegerIdex.580numberstringAccount numberex.702000labelstringLabelex.Prestations de services
third_partyobject | null
Exemple
{
"id": 6,
"company_id": 7,
"name": "Frais bancaires",
"field": "counterpart_name",
"operator": "contains",
"pattern": "frais de tenue",
"direction": "in",
"account_id": 517,
"third_party_id": 18,
"label": "Facture Brasserie Dubuisson",
"priority": 100,
"is_active": true,
"applied_count": 14,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"third_party": {}
}schémaBankTransaction
idintegerex.951company_idintegerex.7sourcestringex.novadeskoexternal_idstring | nullaccount_ibanstringex.BE68539007547034account_bankstring | nulljournal_idinteger | nullex.7amountstring <decimal>Positive = money in, negative = money out.ex.1210.00currencystringex.EURvalue_datestring <date-time>ex.2026-03-18T00:00:00.000000Zexecution_datestring <date-time> | nullcounterpart_namestring | nullex.ACME SAcounterpart_ibanstring | nullcommunicationstring | nullex.+++000/0000/00101+++descriptionstring | nullstatusstringpendingbookedignoredjournal_entry_idinteger | nullmatched_journal_entry_idinteger | nullInvoice proposed by the matching.match_confidencestring | nullhigh, medium or low.ex.highmatch_reasonstring | nullstructured_communication, novadesko_link, amount_and_third_party, rule…ex.structured_communicationmatched_atstring <date-time> | nullbooked_account_idinteger | nullmatched_rule_idinteger | nullsynced_atstring <date-time> | nullcreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3journalobject | nulllinksobject[]matched_entryobject | nullbooked_accountobject | nullmatched_ruleobject | nulljournal_entryobject | null
Exemple
{
"id": 951,
"company_id": 7,
"source": "novadesko",
"external_id": "string",
"account_iban": "BE68539007547034",
"account_bank": "string",
"journal_id": 7,
"amount": "1210.00",
"currency": "EUR",
"value_date": "2026-03-18T00:00:00.000000Z",
"execution_date": "2026-03-15T09:41:00+00:00",
"counterpart_name": "ACME SA",
"counterpart_iban": "string",
"communication": "+++000/0000/00101+++",
"description": "Description",
"status": "pending",
"journal_entry_id": 1284,
"matched_journal_entry_id": 42,
"match_confidence": "high",
"match_reason": "structured_communication",
"matched_at": "2026-03-15T09:41:00+00:00",
"booked_account_id": 42,
"matched_rule_id": 42,
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {},
"links": [
{}
],
"matched_entry": {},
"booked_account": {},
"matched_rule": {},
"journal_entry": {}
}schémaBudget
idintegercompany_idintegerfiscal_year_idintegerscenariostringex.defaultaccount_idintegercost_center_idinteger | nullperiod_numberintegerex.3amountstring <decimal>ex.1500.00accountobjectPropriétés
idintegerIdex.580numberstringAccount numberex.702000labelstringLabelex.Prestations de services
Exemple
{
"id": 42,
"company_id": 7,
"fiscal_year_id": 2,
"scenario": "default",
"account_id": 580,
"cost_center_id": 42,
"period_number": 3,
"amount": "1500.00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
}
}schémaCodaFile
idintegerex.31company_idintegersourcestringex.novadeskoexternal_idstring | nullfilenamestringex.CODA_2026_031.codsource_urlstring <uri> | nullaccount_ibanstringex.BE68539007547034account_bankstring | nulljournal_idinteger | nullstatement_numberstring | nullex.031sequencestring | nullopening_balancestring <decimal> | nullex.18420.11closing_balancestring <decimal> | nullex.19630.11period_fromstring <date-time> | nullperiod_tostring <date-time> | nulltransactions_countintegerex.12statusstringex.importedsynced_atstring <date-time> | nullcreated_atstring <date-time>updated_atstring <date-time>journalobject | null
Exemple
{
"id": 31,
"company_id": 7,
"source": "novadesko",
"external_id": "string",
"filename": "CODA_2026_031.cod",
"source_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"account_iban": "BE68539007547034",
"account_bank": "string",
"journal_id": 3,
"statement_number": "031",
"sequence": "string",
"opening_balance": "18420.11",
"closing_balance": "19630.11",
"period_from": "2026-03-15T09:41:00+00:00",
"period_to": "2026-03-15T09:41:00+00:00",
"transactions_count": 12,
"status": "imported",
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"journal": {}
}schémaCompanyCompany file (dossier). Addressed everywhere by its `public_token`.
Company file (dossier). Addressed everywhere by its public_token.
idintegerex.7public_tokenstringex.XBVD5O1L29HCfirm_idinteger | nullex.3codestring | nullex.COMPTOIRnamestringex.Le Comptoir Montois SRLlegal_formstring | nullex.SRLlegal_form_codestring | nullKBO / BCE legal form code.ex.610enterprise_numberstring | nullex.0477472701vat_numberstring | nullex.BE0477472701country_packstringBEFRLUvat_regimestringmonthlyquarterlyfranchiseexemptunitcurrencystringex.EURlocalestringfrnlendeaddressstring | nullex.Grand-Place 14, 7000 Monsstreetstring | nullStreetex.Grand-Placehouse_numberstring | nullNumberex.14boxstring | nullBoxpostal_codestring | nullPostal codeex.7000citystring | nullCityex.Monscountrystring | nullISO 3166-1 alpha-2ex.BElatitudestring | nullex.50.4541000longitudestring | nullex.3.9523000nace_codesobject[] | nullPropriétés
codestringex.56111classificationstringMAINSECOANCI
main_nace_codestring | nullex.56111company_sheet_atstring <date-time> | nulllogo_urlstring <uri> | nullicon_urlstring <uri> | nullfiscal_year_startstring <date> | nullfiscal_year_endstring <date> | nullsettingsCompanySettingsis_activebooleanis_demobooleanTrue for the company files of the demo firm.ex.falsesourcestringmanualnovadeskoexternal_idstring | nullsynced_atstring <date-time> | nullcreated_atstring <date-time>updated_atstring <date-time>deleted_atstring <date-time> | nulllock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3journal_entries_countintegerPresent on list / show.ex.1284firmobjectPropriétés
idintegerex.3public_tokenstringex.NDTQVQU4AUAVnamestringex.Fiduciaire Dumont & Associés
fiscal_yearsFiscalYear[]journalsJournal[]
Exemple
{
"id": 7,
"public_token": "XBVD5O1L29HC",
"firm_id": 3,
"code": "COMPTOIR",
"name": "Le Comptoir Montois SRL",
"legal_form": "SRL",
"legal_form_code": "610",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"country_pack": "BE",
"vat_regime": "monthly",
"currency": "EUR",
"locale": "fr",
"address": "Grand-Place 14, 7000 Mons",
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"latitude": "50.4541000",
"longitude": "3.9523000",
"nace_codes": [
{
"code": "56111",
"classification": "MAIN"
}
],
"main_nace_code": "56111",
"company_sheet_at": "2026-03-15T09:41:00+00:00",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"fiscal_year_start": "2026-03-15",
"fiscal_year_end": "2026-03-15",
"settings": {
"vat": {
"administration_cell": "string",
"structured_communication": "000000000101",
"directorate_number": "string",
"office_number": "string",
"declarant": {
"applicable": false,
"company_name": "string",
"signatory_1": "string",
"signatory_1_title": "string",
"signatory_2": "string",
"signatory_2_title": "string",
"phone": "+32 65 31 42 18",
"fax": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"language": "fr"
},
"sender_281_50": {
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"filer": {
"quality": "company",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
}
},
"legal": {
"rpm_district": "Hainaut, division Mons"
},
"annual_accounts": {
"scheme": "abbreviated",
"general_meeting_date": "2026-03-15",
"directors": "string",
"valuation_rules": "string"
},
"auto_entries": {
"vat": {
"payable_account": "451000",
"receivable_account": "411000",
"correction_payable_account": "string",
"correction_receivable_account": "string",
"journal_id": 3
},
"invoices_to_receive": {
"supplier_account": "444000",
"customer_account": "404000",
"journal_id": 3
},
"reconciliation_difference": {
"expense_account": "657000",
"income_account": "757000",
"max_amount": 1
},
"transfers": {
"transit_account": "580000",
"journal_id": 3
}
},
"history": {
"trash_retention_days": 90
}
},
"is_active": true,
"is_demo": false,
"source": "manual",
"external_id": "string",
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"deleted_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entries_count": 1284,
"firm": {
"id": 3,
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"fiscal_years": [
{
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{
"id": 16,
"fiscal_year_id": 2,
"number": 3,
"label": "Mars 2026",
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"is_locked": false,
"locked_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}
]
}
],
"journals": [
{
"id": 3,
"company_id": 7,
"code": "VEN",
"label": "Ventes",
"type": "purchase",
"control_account_id": 42,
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"last_number": 412,
"is_active": true,
"is_default": true,
"description": "Description",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"entries_count": 412,
"control_account": null,
"rules": [
{
"id": 4,
"company_id": 7,
"journal_id": 3,
"direction": "sale",
"match_field": "payment_provider",
"match_value": "TK",
"priority": 100,
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 3,
"code": "VEN",
"label": "Ventes",
"type": "sale"
}
}
]
}
]
}schémaCompanySettingsResolved settings of the company file (country pack defaults merged with the saved values).
Resolved settings of the company file (country pack defaults merged with the saved values).
vatobjectPropriétés
administration_cellstring | nullstructured_communicationstring | nulldirectorate_numberstring | nulloffice_numberstring | nulldeclarantobjectPropriétés
applicablebooleanex.falsecompany_namestring | nullsignatory_1string | nullsignatory_1_titlestring | nullsignatory_2string | nullsignatory_2_titlestring | nullphonestring | nullfaxstring | nullemailstring <email> | nulllanguagestringfrnlende
sender_281_50objectPropriétés
namestring | nullenterprise_numberstring | nulladdressstring | nullphonestring | nullemailstring <email> | null
filerobjectPropriétés
qualitystringcompanyaccountantnamestring | nullenterprise_numberstring | nullphonestring | nullemailstring <email> | null
legalobjectPropriétés
rpm_districtstring | nullRPM / RPR district printed on legal documents.ex.Hainaut, division Mons
annual_accountsobjectPropriétés
schemestringabbreviatedmicrogeneral_meeting_datestring <date> | nulldirectorsstring | nullvaluation_rulesstring | null
auto_entriesobjectPropriétés
vatobjectPropriétés
payable_accountstringex.451000receivable_accountstringex.411000correction_payable_accountstring | nullcorrection_receivable_accountstring | nulljournal_idinteger | null
invoices_to_receiveobjectPropriétés
supplier_accountstringex.444000customer_accountstringex.404000journal_idinteger | null
reconciliation_differenceobjectPropriétés
expense_accountstringex.657000income_accountstringex.757000max_amountnumberex.1
transfersobjectPropriétés
transit_accountstringex.580000journal_idinteger | null
historyobjectPropriétés
trash_retention_daysintegerex.90
Exemple
{
"vat": {
"administration_cell": "string",
"structured_communication": "000000000101",
"directorate_number": "string",
"office_number": "string",
"declarant": {
"applicable": false,
"company_name": "string",
"signatory_1": "string",
"signatory_1_title": "string",
"signatory_2": "string",
"signatory_2_title": "string",
"phone": "+32 65 31 42 18",
"fax": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"language": "fr"
},
"sender_281_50": {
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"filer": {
"quality": "company",
"name": "Le Comptoir Montois SRL",
"enterprise_number": "0477472701",
"phone": "+32 65 31 42 18",
"email": "claire.dumont@fiduciaire-dumont.be"
}
},
"legal": {
"rpm_district": "Hainaut, division Mons"
},
"annual_accounts": {
"scheme": "abbreviated",
"general_meeting_date": "2026-03-15",
"directors": "string",
"valuation_rules": "string"
},
"auto_entries": {
"vat": {
"payable_account": "451000",
"receivable_account": "411000",
"correction_payable_account": "string",
"correction_receivable_account": "string",
"journal_id": 3
},
"invoices_to_receive": {
"supplier_account": "444000",
"customer_account": "404000",
"journal_id": 3
},
"reconciliation_difference": {
"expense_account": "657000",
"income_account": "757000",
"max_amount": 1
},
"transfers": {
"transit_account": "580000",
"journal_id": 3
}
},
"history": {
"trash_retention_days": 90
}
}schémaCompanySheetNormalised company sheet (CompanySearch for BE / FR, VIES elsewhere).
Normalised company sheet (CompanySearch for BE / FR, VIES elsewhere).
identifierstringex.0477472701enterprise_numberstring | nullvat_numberstring | nullex.BE0477472701namestringex.Le Comptoir Montoislegal_formstring | nullex.SRLlegal_form_codestring | nullex.610statusstring | nullex.activestart_datestring <date> | nulladdressobjectPropriétés
streetstring | nullStreetex.Grand-Placehouse_numberstring | nullNumberex.14boxstring | nullBoxpostal_codestring | nullPostal codeex.7000citystring | nullCityex.Monscountrystring | nullISO 3166-1 alpha-2ex.BE
address_linestring | nulllatitudenumber | nulllongitudenumber | nullnace_codesobject[]Propriétés
codestringex.56111classificationstringMAINSECOANCIlabelstring | null
main_nace_codestring | nullemailstring | nullphonestring | nullwebsitestring | nullsourcestringex.companysearchfetched_atstring <date-time> | nullmapobjectPropriétés
querystringAddress used for the mapex.Grand-Place 14, 7000 Mons, Belgiqueapple_urlstring <uri>google_urlstring <uri>static_urlstring <uri> | nulllatitudenumber | nulllongitudenumber | null
Exemple
{
"identifier": "0477472701",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"name": "Le Comptoir Montois",
"legal_form": "SRL",
"legal_form_code": "610",
"status": "active",
"start_date": "2026-03-15",
"address": {
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
},
"address_line": "string",
"latitude": 12.5,
"longitude": 12.5,
"nace_codes": [
{
"code": "56111",
"classification": "MAIN",
"label": "Facture Brasserie Dubuisson"
}
],
"main_nace_code": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"website": "https://www.comptoir-montois.be",
"source": "companysearch",
"fetched_at": "2026-03-15T09:41:00+00:00",
"map": {
"query": "Grand-Place 14, 7000 Mons, Belgique",
"apple_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"google_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"static_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"latitude": 12.5,
"longitude": 12.5
}
}schémaDepreciationLine
idintegerfixed_asset_idintegerex.9yearintegerex.2026period_startstring <date-time>period_endstring <date-time>amountstring <decimal>ex.2269.37cumulative_amountstring <decimal>ex.2269.37remaining_valuestring <decimal>ex.10130.63statusstringplannedbookedjournal_entry_idinteger | nullbooked_amountstring <decimal>ex.0.00
Exemple
{
"id": 42,
"fixed_asset_id": 9,
"year": 2026,
"period_start": "2026-03-15T09:41:00+00:00",
"period_end": "2026-03-15T09:41:00+00:00",
"amount": "2269.37",
"cumulative_amount": "2269.37",
"remaining_value": "10130.63",
"status": "planned",
"journal_entry_id": 1284,
"booked_amount": "0.00"
}schémaDocumentImportFile uploaded to the document importer and its analysis.
File uploaded to the document importer and its analysis.
idintegerex.311company_idintegerex.7uploaded_byinteger | nullbatch_idstring <uuid>Groups the files of one upload.parent_import_idinteger | nullZIP the file was extracted from.original_namestringex.facture-dubuisson-0412.pdfmimestringex.application/pdfsizeintegerBytes.ex.184320file_hashstringSHA-256, used to detect duplicates.kindstringpdfimagexmlzipotherstatusstringqueuedanalyzingreadyneeds_reviewvalidatederrorduplicateexpandedprogressinteger0 to 100.ex.100stepstringuploadtextailinesmatchdoneenginestring | nullEngine that read the file.ex.apiextractedExtractedDocument | nullraw_textstring | nullText layer (absent from lists).warningsstring[] | nullerrorstring | nullsuggested_third_party_idinteger | nullsuggested_directionstring | nullduplicate_of_import_idinteger | nullduplicate_of_document_idinteger | nullimported_document_idinteger | nullDocument created by the validation.novadesko_document_idstring | nullnovadesko_locked_atstring <date-time> | nullstarted_atstring <date-time> | nullfinished_atstring <date-time> | nullcreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nullsuggested_third_partyobject | null
Exemple
{
"id": 311,
"company_id": 7,
"uploaded_by": 1,
"batch_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"parent_import_id": 42,
"original_name": "facture-dubuisson-0412.pdf",
"mime": "application/pdf",
"size": 184320,
"file_hash": "string",
"kind": "pdf",
"status": "queued",
"progress": 100,
"step": "upload",
"engine": "api",
"extracted": {
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-03-15",
"currency": "EUR",
"supplier": {
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"iban": "BE68539007547034",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"customer": {},
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"structured_communication": "000000000101",
"confidence": 0.93,
"lines": [
{
"description": "Fûts Bush Caractère 20 L",
"quantity": 6,
"unit_price": 84.5,
"tax_rate": 21,
"amount_net": "507.00",
"amount_vat": "106.47",
"account_id": 580,
"account_number": "604000",
"vat_code_id": 4,
"vat_code": "A21"
}
]
},
"raw_text": "string",
"warnings": [
"string"
],
"error": "string",
"suggested_third_party_id": 42,
"suggested_direction": "string",
"duplicate_of_import_id": 42,
"duplicate_of_document_id": 42,
"imported_document_id": 42,
"novadesko_document_id": "string",
"novadesko_locked_at": "2026-03-15T09:41:00+00:00",
"started_at": "2026-03-15T09:41:00+00:00",
"finished_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"suggested_third_party": {}
}schémaErrorError envelope. `message` is translated; `code` is a stable machine reason when the refusal has one; `errors`...
Error envelope. message is translated; code is a stable machine reason when the refusal has one; errors maps fields to messages (422).
messagestringrequisHuman-readable message (translated).ex.Le champ date de l'écriture est obligatoire.codestringMachine reason (token_ability_missing,session_token_required,demo_mode,conflict,period_locked,company_limit_reached,service_unavailable…).ex.period_lockederrorsobjectField => list of messages.
Exemple
{
"message": "Le champ date de l'écriture est obligatoire.",
"code": "period_locked",
"errors": {
"entry_date": [
"La période Mars 2026 est verrouillée."
]
}
}schémaExtractedDocumentData read from an uploaded file (AI extraction or UBL / CII parsing), editable before validation.
Data read from an uploaded file (AI extraction or UBL / CII parsing), editable before validation.
directionstringpurchasesaleis_credit_notebooleanex.falsenumberstring | nullex.F-2026-0412document_datestring <date> | nulldue_datestring <date> | nullcurrencystringex.EURsupplierobjectPropriétés
namestring | nullex.Brasserie Dubuisson SAvat_numberstring | nullex.BE0402531376enterprise_numberstring | nulladdressstring | nullpostal_codestring | nullcitystring | nullcountrystring | nullibanstring | nullemailstring | null
customerobject | nullamount_netstring | nullex.507.00amount_vatstring | nullex.106.47amount_grossstring | nullex.613.47structured_communicationstring | nullconfidencenumber0 to 1; below 0.6 the import needs a review.ex.0.93linesobject[]Propriétés
descriptionstringex.Fûts Bush Caractère 20 Lquantitynumber | nullex.6unit_pricenumber | nullex.84.5tax_ratenumber | nullex.21amount_netstringex.507.00amount_vatstring | nullex.106.47account_idinteger | nullSuggested account.account_numberstring | nullex.604000vat_code_idinteger | nullvat_codestring | nullex.A21
Exemple
{
"direction": "purchase",
"is_credit_note": false,
"number": "F-2026-0412",
"document_date": "2026-03-15",
"due_date": "2026-03-15",
"currency": "EUR",
"supplier": {
"name": "Brasserie Dubuisson SA",
"vat_number": "BE0402531376",
"enterprise_number": "0477472701",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons",
"country": "BE",
"iban": "BE68539007547034",
"email": "claire.dumont@fiduciaire-dumont.be"
},
"customer": {},
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"structured_communication": "000000000101",
"confidence": 0.93,
"lines": [
{
"description": "Fûts Bush Caractère 20 L",
"quantity": 6,
"unit_price": 84.5,
"tax_rate": 21,
"amount_net": "507.00",
"amount_vat": "106.47",
"account_id": 580,
"account_number": "604000",
"vat_code_id": 4,
"vat_code": "A21"
}
]
}schémaFirmAccounting firm (fiduciary) with its team and company files.
Accounting firm (fiduciary) with its team and company files.
public_tokenstringex.NDTQVQU4AUAVnamestringex.Fiduciaire Dumont & Associésenterprise_numberstring | nullex.0458662817vat_numberstring | nullex.BE0458662817itaa_numberstring | nullITAA membership number.ex.50.123.456itaa_statusstring | nullitaa_qualitystring | nulladdressstring | nullex.Rue de Nimy 52postal_codestring | nullex.7000citystring | nullex.Monswebsitestring | nulllogo_urlstring <uri> | nullis_partnerbooleancountry_codestringex.BElocalestringfrnlendeemailstring <email> | nullphonestring | nullsourcestringlocalnovadeskosynced_atstring <date-time> | nullcan_managebooleanTrue for admins and managers of the firm.membersFirmMember[]companiesobject[]Propriétés
public_tokenstringnamestringcodestring | nullicon_urlstring <uri> | nulllogo_urlstring <uri> | nullmembersobject[]Propriétés
idintegernamestringex.Thomas Peetersemailstring <email>rolestringmanagerencoderrevieweris_activeboolean
Exemple
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés",
"enterprise_number": "0458662817",
"vat_number": "BE0458662817",
"itaa_number": "50.123.456",
"itaa_status": "string",
"itaa_quality": "string",
"address": "Rue de Nimy 52",
"postal_code": "7000",
"city": "Mons",
"website": "https://www.comptoir-montois.be",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"is_partner": true,
"country_code": "BE",
"locale": "fr",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"source": "local",
"synced_at": "2026-03-15T09:41:00+00:00",
"can_manage": true,
"members": [
{
"id": 12,
"name": "Thomas Peeters",
"email": "thomas.peeters@fiduciaire-dumont.be",
"auth_source": "local",
"locale": "fr",
"role": "admin",
"is_active": true,
"all_companies": true,
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"role": "manager",
"is_active": true
}
]
}
],
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"icon_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"members": [
{
"id": 42,
"name": "Thomas Peeters",
"email": "claire.dumont@fiduciaire-dumont.be",
"role": "manager",
"is_active": true
}
]
}
]
}schémaFirmMember
idintegerex.12namestringex.Thomas Peetersemailstring <email>ex.thomas.peeters@fiduciaire-dumont.beauth_sourcestringlocalnovadeskolocalestringfrnlenderolestringadminmanagerencoderrevieweris_activebooleanall_companiesbooleanAdmins and managers see every company file of the firm.companiesobject[]Propriétés
public_tokenstringnamestringcodestring | nullrolestringmanagerencoderrevieweris_activeboolean
Exemple
{
"id": 12,
"name": "Thomas Peeters",
"email": "thomas.peeters@fiduciaire-dumont.be",
"auth_source": "local",
"locale": "fr",
"role": "admin",
"is_active": true,
"all_companies": true,
"companies": [
{
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"role": "manager",
"is_active": true
}
]
}schémaFiscalYear
idintegerex.2company_idintegerex.7codestringex.2026starts_onstring <date-time>ex.2026-01-01T00:00:00.000000Zends_onstring <date-time>ex.2026-12-31T00:00:00.000000Zis_closedbooleanex.falseclosed_atstring <date-time> | nullclosed_byinteger | nullcreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3periodsPeriod[]
Exemple
{
"id": 2,
"company_id": 7,
"code": "2026",
"starts_on": "2026-01-01T00:00:00.000000Z",
"ends_on": "2026-12-31T00:00:00.000000Z",
"is_closed": false,
"closed_at": "2026-03-15T09:41:00+00:00",
"closed_by": 1,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"periods": [
{
"id": 16,
"fiscal_year_id": 2,
"number": 3,
"label": "Mars 2026",
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"is_locked": false,
"locked_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}
]
}schémaFixedAsset
idintegerex.9company_idintegersourcestringmanualnovadeskoexternal_idstring | nullreferencestring | nullex.IMM-2026-003namestringex.Four mixte Rationalcategorystringit_equipmentvehiclefurnituremachinerybuildingsoftwareotherasset_groupstring | nullasset_account_idinteger | nulldepreciation_account_idinteger | nullexpense_account_idinteger | nullimported_document_idinteger | nullacquisition_datestring <date-time>ex.2026-02-01T00:00:00.000000Zacquisition_coststring <decimal>ex.12400.00residual_valuestring <decimal>ex.0.00useful_life_yearsintegerex.5methodstringlineardecliningprorata_temporisbooleanstart_datestring <date-time>statusstringactivefully_depreciateddisposednotesstring | nulldisposed_onstring <date-time> | nulldisposal_pricestring <decimal> | nulldisposal_entry_idinteger | nullinvestment_deduction_pctstring <decimal> | nullinvestment_deduction_spreadbooleancreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nulllinesDepreciationLine[]asset_accountobjectPropriétés
idintegerIdex.580numberstringAccount numberex.702000labelstringLabelex.Prestations de services
depreciation_accountobjectPropriétés
idintegerIdex.580numberstringAccount numberex.702000labelstringLabelex.Prestations de services
expense_accountobjectPropriétés
idintegerIdex.580numberstringAccount numberex.702000labelstringLabelex.Prestations de services
Exemple
{
"id": 9,
"company_id": 7,
"source": "manual",
"external_id": "string",
"reference": "IMM-2026-003",
"name": "Four mixte Rational",
"category": "it_equipment",
"asset_group": "string",
"asset_account_id": 42,
"depreciation_account_id": 42,
"expense_account_id": 42,
"imported_document_id": 42,
"acquisition_date": "2026-02-01T00:00:00.000000Z",
"acquisition_cost": "12400.00",
"residual_value": "0.00",
"useful_life_years": 5,
"method": "linear",
"prorata_temporis": true,
"start_date": "2026-03-15T09:41:00+00:00",
"status": "active",
"notes": "string",
"disposed_on": "2026-03-15T09:41:00+00:00",
"disposal_price": "1210.00",
"disposal_entry_id": 42,
"investment_deduction_pct": "1210.00",
"investment_deduction_spread": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"lines": [
{
"id": 42,
"fixed_asset_id": 9,
"year": 2026,
"period_start": "2026-03-15T09:41:00+00:00",
"period_end": "2026-03-15T09:41:00+00:00",
"amount": "2269.37",
"cumulative_amount": "2269.37",
"remaining_value": "10130.63",
"status": "planned",
"journal_entry_id": 1284,
"booked_amount": "0.00"
}
],
"asset_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"depreciation_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"expense_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
}
}schémaImportedDocumentInvoice, credit note or receipt of the company file: synchronised from Novadesko or created by the document im...
Invoice, credit note or receipt of the company file: synchronised from Novadesko or created by the document importer.
idintegerex.87company_idintegerex.7sourcestringex.novadeskooriginstring | nullnovafiskowhen created by the importer.external_idstring | nulltypestringpurchases, invoices, credit_notes, receipts…ex.purchasesdirectionstringsalepurchaseis_credit_notebooleanex.falsenaturestring | nullnumberstring | nullex.F-2026-0412payment_providerstring | nullnumber_seriesstring | nulldocument_datestring <date-time>ex.2026-03-15T00:00:00.000000Zdue_datestring <date-time> | nullsubjectstring | nullcommunicationstring | nullcurrencystringex.EURamount_netstring <decimal>ex.507.00amount_vatstring <decimal>ex.106.47amount_grossstring <decimal>ex.613.47is_paidbooleanthird_party_idinteger | nullthird_party_namestring | nullex.Brasserie Dubuisson SAthird_party_vatstring | nullpdf_urlstring <uri> | nullxml_urlstring <uri> | nullstatusstringpendingbookedignoredjournal_entry_idinteger | nullaccountant_lockedbooleanLocked for the shop: only the accountant can change it.novadesko_push_statusstring | nullnovadesko_pushed_atstring <date-time> | nullnovadesko_push_errorstring | nulldocument_import_idinteger | nullsynced_atstring <date-time> | nullcreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nullthird_partyobject | nulllinesImportedDocumentLine[]journal_entryJournalEntry | null
Exemple
{
"id": 87,
"company_id": 7,
"source": "novadesko",
"origin": "string",
"external_id": "string",
"type": "purchases",
"direction": "sale",
"is_credit_note": false,
"nature": "string",
"number": "F-2026-0412",
"payment_provider": "string",
"number_series": "TK",
"document_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"subject": "Vos documents comptables",
"communication": "string",
"currency": "EUR",
"amount_net": "507.00",
"amount_vat": "106.47",
"amount_gross": "613.47",
"is_paid": true,
"third_party_id": 18,
"third_party_name": "Brasserie Dubuisson SA",
"third_party_vat": "string",
"pdf_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"xml_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "pending",
"journal_entry_id": 1284,
"accountant_locked": true,
"novadesko_push_status": "string",
"novadesko_pushed_at": "2026-03-15T09:41:00+00:00",
"novadesko_push_error": "string",
"document_import_id": 42,
"synced_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"third_party": {},
"lines": [
{
"id": 640,
"imported_document_id": 87,
"external_id": "string",
"position": 1,
"description": "Fûts Bush Caractère 20 L",
"quantity": "6.000",
"unit_price": "84.5000",
"discount_pct": "1210.00",
"tax_rate": "21.00",
"amount_net": "507.00",
"amount_vat": "106.47",
"recorded_account_number": "604000",
"recorded_account_id": 42,
"actual_account_id": 42,
"vat_code_id": 4,
"purchase_category": "string",
"corrected_at": "2026-03-15T09:41:00+00:00",
"corrected_by": 1,
"correction_pushed": true,
"recorded_account": {},
"actual_account": {},
"vat_code": {}
}
],
"journal_entry": {
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}
]
}
}schémaImportedDocumentLine
idintegerex.640imported_document_idintegerex.87external_idstring | nullpositionintegerex.1descriptionstring | nullex.Fûts Bush Caractère 20 Lquantitystring | nullex.6.000unit_pricestring | nullex.84.5000discount_pctstring <decimal> | nulltax_ratestring <decimal> | nullex.21.00amount_netstring <decimal>ex.507.00amount_vatstring <decimal>ex.106.47recorded_account_numberstring | nullAccount as encoded at the source (« recorded » layer).ex.604000recorded_account_idinteger | nullactual_account_idinteger | nullAccount chosen by the accountant (« actual » layer).vat_code_idinteger | nullpurchase_categorystring | nullcorrected_atstring <date-time> | nullcorrected_byinteger | nullcorrection_pushedbooleanrecorded_accountobject | nullactual_accountobject | nullvat_codeobject | null
Exemple
{
"id": 640,
"imported_document_id": 87,
"external_id": "string",
"position": 1,
"description": "Fûts Bush Caractère 20 L",
"quantity": "6.000",
"unit_price": "84.5000",
"discount_pct": "1210.00",
"tax_rate": "21.00",
"amount_net": "507.00",
"amount_vat": "106.47",
"recorded_account_number": "604000",
"recorded_account_id": 42,
"actual_account_id": 42,
"vat_code_id": 4,
"purchase_category": "string",
"corrected_at": "2026-03-15T09:41:00+00:00",
"corrected_by": 1,
"correction_pushed": true,
"recorded_account": {},
"actual_account": {},
"vat_code": {}
}schémaIntegration
slugstringex.novadeskonamestringex.Novadeskocategorystringaccountingbankinge_invoicingdocumentspaymentsapidescriptionstringlogo_urlstring <uri> | nullstatusstringavailablebetacoming_sooncapabilitiesstring[]import_documentsimport_bankimport_assetsexport_entriese_invoicingconfig_schemaobject[]Propriétés
keystringlabelstringtypestringtextsecretselectboolrequiredboolean
open_tabstring | nullhas_driverbooleanis_enabledbooleanconnectionobject | nullPropriétés
is_activebooleanstatusstringconnecteddisconnectederrorconfig_maskedobjectlast_sync_atstring <date-time> | nulllast_errorstring | null
interestedbooleanactionsstring[]
Exemple
{
"slug": "novadesko",
"name": "Novadesko",
"category": "accounting",
"description": "Description",
"logo_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"status": "available",
"capabilities": [
"import_documents"
],
"config_schema": [
{
"key": "string",
"label": "Facture Brasserie Dubuisson",
"type": "text",
"required": true
}
],
"open_tab": "string",
"has_driver": true,
"is_enabled": true,
"connection": {
"is_active": true,
"status": "connected",
"config_masked": {},
"last_sync_at": "2026-03-15T09:41:00+00:00",
"last_error": "string"
},
"interested": true,
"actions": [
"string"
]
}schémaIntegrationRun
idintegerex.77statusstringrunningsuccesserrorstarted_atstring <date-time> | nullfinished_atstring <date-time> | nullduration_msinteger | nullex.1840summaryobject | nullmessagestring | null
Exemple
{
"id": 77,
"status": "running",
"started_at": "2026-03-15T09:41:00+00:00",
"finished_at": "2026-03-15T09:41:00+00:00",
"duration_ms": 1840,
"summary": {},
"message": "OK"
}schémaIntegrationTokenIntegration token (the secret is only returned once, by the creation).
Integration token (the secret is only returned once, by the creation).
idintegerex.57namestringex.ERP connectorabilitiesstring[]readwritesynccreated_atstring <date-time>expires_atstring <date-time> | nulllast_used_atstring <date-time> | null
Exemple
{
"id": 57,
"name": "ERP connector",
"abilities": [
"read"
],
"created_at": "2026-03-15T09:41:00+00:00",
"expires_at": "2026-03-15T09:41:00+00:00",
"last_used_at": "2026-03-15T09:41:00+00:00"
}schémaJournal
idintegerex.3company_idintegerex.7codestringex.VENlabelstringex.Ventestypestringpurchasesalepurchase_credit_notesale_credit_notefinancialmiscellaneouscontrol_account_idinteger | nullibanstring | nullbicstring | nulllast_numberintegerex.412is_activebooleanis_defaultbooleandescriptionstring | nullcreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nullentries_countintegerex.412control_accountobject | nullrulesJournalRule[]
Exemple
{
"id": 3,
"company_id": 7,
"code": "VEN",
"label": "Ventes",
"type": "purchase",
"control_account_id": 42,
"iban": "BE68539007547034",
"bic": "GEBABEBB",
"last_number": 412,
"is_active": true,
"is_default": true,
"description": "Description",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"entries_count": 412,
"control_account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"rules": [
{
"id": 4,
"company_id": 7,
"journal_id": 3,
"direction": "sale",
"match_field": "payment_provider",
"match_value": "TK",
"priority": 100,
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 3,
"code": "VEN",
"label": "Ventes",
"type": "sale"
}
}
]
}schémaJournalEntryPosted accounting entry. A posted entry is never modified nor deleted: it is reversed.
Posted accounting entry. A posted entry is never modified nor deleted: it is reversed.
idintegerex.1284company_idintegerex.7fiscal_year_idintegerex.2period_idintegerex.16journal_idintegerex.3numberintegerContinuous number in the journal and fiscal year.ex.412entry_datestring <date-time>ex.2026-03-15T00:00:00.000000Zdue_datestring <date-time> | nulllabelstringex.Facture Brasserie Dubuisson SAreferencestring | nullDocument number.ex.F-2026-0412structured_communicationstring | null12 digits, without +++ and /.ex.000000000101third_party_idinteger | nullex.18statusstringpostedreversedoriginstringmanual, import, bank, recurring, depreciation, vat, year_end…ex.manualcreated_byinteger | nullposted_atstring <date-time>reversed_entry_idinteger | nullEntry this one reverses.reversed_by_entry_idinteger | nullEntry that reversed this one.recurring_entry_idinteger | nullcreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3journalobjectPropriétés
idintegerex.3codestringex.VENtypestringex.sale
third_partyobjectPropriétés
idintegerex.18namestringex.Brasserie Dubuisson SA
linesJournalEntryLine[]
Exemple
{
"id": 1284,
"company_id": 7,
"fiscal_year_id": 2,
"period_id": 16,
"journal_id": 3,
"number": 412,
"entry_date": "2026-03-15T00:00:00.000000Z",
"due_date": "2026-03-15T09:41:00+00:00",
"label": "Facture Brasserie Dubuisson SA",
"reference": "F-2026-0412",
"structured_communication": "000000000101",
"third_party_id": 18,
"status": "posted",
"origin": "manual",
"created_by": 1,
"posted_at": "2026-03-15T09:41:00+00:00",
"reversed_entry_id": 42,
"reversed_by_entry_id": 42,
"recurring_entry_id": 42,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal": {
"id": 3,
"code": "VEN",
"type": "sale"
},
"third_party": {
"id": 18,
"name": "Brasserie Dubuisson SA"
},
"lines": [
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}
]
}schémaJournalEntryLine
idintegerex.3391journal_entry_idintegerex.1284positionintegerex.1account_idintegerex.580third_party_idinteger | nulllabelstring | nullex.Brasserie Dubuisson SAdebitstring <decimal>ex.0.00creditstring <decimal>ex.1000.00vat_code_idinteger | nullex.4vat_basestring <decimal> | nullex.1000.00reconciliation_codestring | nullLettering code.ex.ABcost_center_idinteger | nullproject_idinteger | nullreminder_levelintegerex.0reminder_sent_atstring <date-time> | nullaccountobjectPropriétés
idintegerIdex.580numberstringAccount numberex.702000labelstringLabelex.Prestations de services
vat_codeobject | null
Exemple
{
"id": 3391,
"journal_entry_id": 1284,
"position": 1,
"account_id": 580,
"third_party_id": 18,
"label": "Brasserie Dubuisson SA",
"debit": "0.00",
"credit": "1000.00",
"vat_code_id": 4,
"vat_base": "1000.00",
"reconciliation_code": "AB",
"cost_center_id": 42,
"project_id": 42,
"reminder_level": 0,
"reminder_sent_at": "2026-03-15T09:41:00+00:00",
"account": {
"id": 580,
"number": "702000",
"label": "Prestations de services"
},
"vat_code": {}
}schémaJournalRuleRoutes imported documents to a journal according to their numbering series, payment provider or third party.
Routes imported documents to a journal according to their numbering series, payment provider or third party.
idintegerex.4company_idintegerjournal_idintegerex.3directionstringsalepurchasematch_fieldstringpayment_providernumber_seriesnumber_prefixthird_partymatch_valuestringex.TKpriorityintegerex.100is_activebooleancreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nulljournalobjectPropriétés
idintegerex.3codestringex.VENlabelstringex.Ventestypestringex.sale
Exemple
{
"id": 4,
"company_id": 7,
"journal_id": 3,
"direction": "sale",
"match_field": "payment_provider",
"match_value": "TK",
"priority": 100,
"is_active": true,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 3,
"code": "VEN",
"label": "Ventes",
"type": "sale"
}
}schémaLicenceLicence and subscription of the firm: plan, status, usage of the month, estimate, last statements.
Licence and subscription of the firm: plan, status, usage of the month, estimate, last statements.
statusstringnonetrialactivepast_duesuspendedcancelledsubscriptionobject | nullplanobject | nullusageobjectPropriétés
monthstringex.2026-10companiesintegerex.25usersintegerex.4bank_accountsintegerex.31rowsobject[]Propriétés
company_idintegertokenstringnamestringcodestring | nullbank_accountsintegerex.1statusstringex.activeactivated_atstring <date-time>deactivated_atstring <date-time> | null
max_companiesinteger | nullover_limitbooleanex.falsesuggestionstring | null
estimateobject | nullEstimated invoice of the month (excl. VAT).companies_detailobject[]Propriétés
company_idintegernamestringpublic_tokenstringstatusstringex.activeactivated_atstring <date-time>deactivated_atstring <date-time> | nullbillableboolean
next_month_previewobjectPropriétés
companiesintegerex.25totalnumberex.121.5
over_limitbooleanex.falseover_limit_firm_totalnumber | nullentitlementsobjectPropriétés
accountingbooleanpeppolbooleancodabooleanclient_portalbooleanclient_invoicingbooleandocument_importboolean
limitsobjectPropriétés
max_usersinteger | nullmax_companiesinteger | nullusers_countintegerex.4companies_countintegerex.25
expires_atstring <date-time> | nullwarningstring | nullactivationobject | nullActive licence key (masked) when the subscription comes from a key.statementsobject[]options_availableobject[]Propriétés
codestringclient_portalclient_invoicingnamestringex.Portail clientprice_monthlynumberex.6.9unitstringex.client
can_manageboolean
Exemple
{
"status": "none",
"subscription": {},
"plan": {},
"usage": {
"month": "2026-10",
"companies": 25,
"users": 4,
"bank_accounts": 31,
"rows": [
{
"company_id": 7,
"token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL",
"code": "COMPTOIR",
"bank_accounts": 1,
"status": "active",
"activated_at": "2026-03-15T09:41:00+00:00",
"deactivated_at": "2026-03-15T09:41:00+00:00"
}
],
"max_companies": 1,
"over_limit": false,
"suggestion": "string"
},
"estimate": {},
"companies_detail": [
{
"company_id": 7,
"name": "Le Comptoir Montois SRL",
"public_token": "XBVD5O1L29HC",
"status": "active",
"activated_at": "2026-03-15T09:41:00+00:00",
"deactivated_at": "2026-03-15T09:41:00+00:00",
"billable": true
}
],
"next_month_preview": {
"companies": 25,
"total": 121.5
},
"over_limit": false,
"over_limit_firm_total": 12.5,
"entitlements": {
"accounting": true,
"peppol": true,
"coda": true,
"client_portal": true,
"client_invoicing": true,
"document_import": true
},
"limits": {
"max_users": 1,
"max_companies": 1,
"users_count": 4,
"companies_count": 25
},
"expires_at": "2026-03-15T09:41:00+00:00",
"warning": "string",
"activation": {},
"statements": [
{}
],
"options_available": [
{
"code": "client_portal",
"name": "Portail client",
"price_monthly": 6.9,
"unit": "client"
}
],
"can_manage": true
}schémaMailLog
idintegerex.9012template_keystringex.documents.sendtostring <email>ex.gerant@comptoir-montois.examplesubjectstringex.Vos documents comptablesstatusstringqueuedsentfailedbouncedlocalestringex.frcreated_atstring <date-time>sent_atstring <date-time> | nullopened_atstring <date-time> | nullattachmentsobject[]Propriétés
namestringex.balance-2026.pdfsizeintegerex.48211
Exemple
{
"id": 9012,
"template_key": "documents.send",
"to": "gerant@comptoir-montois.example",
"subject": "Vos documents comptables",
"status": "queued",
"locale": "fr",
"created_at": "2026-03-15T09:41:00+00:00",
"sent_at": "2026-03-15T09:41:00+00:00",
"opened_at": "2026-03-15T09:41:00+00:00",
"attachments": [
{
"name": "balance-2026.pdf",
"size": 48211
}
]
}schémaMessage
messagestringTranslated confirmation.ex.Mot de passe modifié.
Exemple
{
"message": "Mot de passe modifié."
}schémaPaginationLaravel length-aware pagination envelope; `data` holds the items.
Laravel length-aware pagination envelope; data holds the items.
current_pageintegerex.1dataany[]first_page_urlstring <uri> | nullfrominteger | nullex.1last_pageintegerex.4last_page_urlstring <uri> | nulllinksobject[]Propriétés
urlstring <uri> | nulllabelstringex.1pageinteger | nullactiveboolean
next_page_urlstring <uri> | nullpathstring <uri>per_pageintegerex.50prev_page_urlstring <uri> | nulltointeger | nullex.50totalintegerex.187
Exemple
{
"current_page": 1,
"data": [
null
],
"first_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"from": 1,
"last_page": 4,
"last_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"links": [
{
"url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"label": "1",
"page": 1,
"active": true
}
],
"next_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"path": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"per_page": 50,
"prev_page_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"to": 50,
"total": 187
}schémaPeppolAccessPoint
smp_hoststring | nullex.smp.b2brouter.netprovider_namestring | nullex.B2Brouterendpoint_urlstring <uri> | nulltechnical_contactstring | null
Exemple
{
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
}schémaPeppolDocumentType
idstringex.bis_billing_invoicenamestringex.Invoice BIS Billing 3.0familystringex.billingdescriptionstringex.Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.document_idstringFull Peppol document type identifier.
Exemple
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}schémaPeppolStatePeppol registration state of a company file.
Peppol registration state of a company file.
identityobject | nullRaw registration record.participant_idstring | nullex.0208:0477472701statusstringnonependingactiveinactivedeletederrorexternalaccountobject | nullPropriétés
idstringnamestring | nullarchivedboolean
transportobject | nullTransport options: enabled, reception, standard_documents, invoice, credit_note, self_billing, order, application_response.smpobjectPropriétés
publishedbooleanchecked_atstring <date-time> | null
access_pointPeppolAccessPointsupported_documentsPeppolDocumentType[]can_registerbooleanblockersstring[]blocker_codesstring[]managed_by_novadeskobooleanregistered_elsewherebooleanThe participant is already published by another access point.external_providerstring | nullprovider_configuredbooleanenvironmentstringproductionstagingcontactobjectlast_errorstring | null
Exemple
{
"identity": {},
"participant_id": "0208:0477472701",
"status": "none",
"account": {
"id": "string",
"name": "Le Comptoir Montois SRL",
"archived": true
},
"transport": {},
"smp": {
"published": true,
"checked_at": "2026-03-15T09:41:00+00:00"
},
"access_point": {
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
},
"supported_documents": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"can_register": true,
"blockers": [
"string"
],
"blocker_codes": [
"string"
],
"managed_by_novadesko": true,
"registered_elsewhere": true,
"external_provider": "string",
"provider_configured": true,
"environment": "production",
"contact": {},
"last_error": "string"
}schémaPeppolThirdPartyStatus
identifierstring | nullex.0208:0402531376registeredboolean | nullaccess_pointPeppolAccessPoint | nulldocument_typesPeppolDocumentType[]checked_atstring <date-time> | nullstalebooleanerrorstring | nullsourcestring | nullex.sml+smp
Exemple
{
"identifier": "0208:0402531376",
"registered": true,
"access_point": {
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
},
"document_types": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"checked_at": "2026-03-15T09:41:00+00:00",
"stale": true,
"error": "string",
"source": "sml+smp"
}schémaPeriod
idintegerex.16fiscal_year_idintegerex.2numberinteger0 = opening, 1-12 = months, 99 = closing.ex.3labelstringex.Mars 2026starts_onstring <date-time>ends_onstring <date-time>is_lockedbooleanex.falselocked_atstring <date-time> | nulllock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3
Exemple
{
"id": 16,
"fiscal_year_id": 2,
"number": 3,
"label": "Mars 2026",
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"is_locked": false,
"locked_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}schémaPeriodLockedError422 of a write whose period is locked or whose fiscal year is closed.
422 of a write whose period is locked or whose fiscal year is closed.
messagestringrequisex.La période Mars 2026 est verrouillée.codestringrequisperiod_lockedreasonstringrequisperiod_lockedfiscal_year_closederrorsobjectrequis
Exemple
{
"message": "La période Mars 2026 est verrouillée.",
"code": "period_locked",
"reason": "period_locked",
"errors": {
"entry_date": [
"La période Mars 2026 est verrouillée."
]
}
}schémaPricingGrid
currencystringex.EURvat_includedbooleanex.falseplansobject[]Propriétés
codestringstarterfirmnamestringex.Firmkindstringstarterfirmbase_price_monthlynumberex.49per_companynumberex.2.9tiersobject[]Propriétés
up_tointeger | nullex.100pricenumberex.2.9
max_companiesinteger | nullpeppol_fair_use_per_companyintegerex.100annual_discount_pctnumberex.10includedstring[]
optionsobject[]Propriétés
codestringex.client_portalnamestringex.Client portalprice_monthlynumberex.6.9unitstringex.client
annual_discount_pctnumberex.10winauditorobjectReference prices used for the comparison.pilotobjectPropriétés
free_monthsintegerex.3max_firmsintegerex.20
Exemple
{
"currency": "EUR",
"vat_included": false,
"plans": [
{
"code": "starter",
"name": "Firm",
"kind": "starter",
"base_price_monthly": 49,
"per_company": 2.9,
"tiers": [
{
"up_to": 100,
"price": 2.9
}
],
"max_companies": 1,
"peppol_fair_use_per_company": 100,
"annual_discount_pct": 10,
"included": [
"Unlimited users"
]
}
],
"options": [
{
"code": "client_portal",
"name": "Client portal",
"price_monthly": 6.9,
"unit": "client"
}
],
"annual_discount_pct": 10,
"winauditor": {},
"pilot": {
"free_months": 3,
"max_firms": 20
}
}schémaPricingSimulation
companiesintegerex.25yearlybooleanex.falsestarterobject | nullNull when the plan cannot hold that many companies.firmobjectPropriétés
planstringex.firmbilling_intervalstringmonthlyyearlycompaniesintegerex.25basenumberex.49companies_breakdownobject[]Propriétés
fromintegerex.1tointegerex.100quantityintegerex.25unit_pricenumberex.2.9totalnumberex.72.5
companies_totalnumberex.72.5optionsobject[]options_totalnumberex.0pilot_discountnumberex.0annual_discount_pctnumberex.0annual_discountnumberex.0discountnumberex.0totalnumberex.121.5yearly_totalnumberex.1458namestringex.Firmsaving_vs_winauditornumberex.36saving_pctnumberex.22.9
winauditornumberex.157.5cheapeststringstarterfirm
Exemple
{
"companies": 25,
"yearly": false,
"starter": {},
"firm": {
"plan": "firm",
"billing_interval": "monthly",
"companies": 25,
"base": 49,
"companies_breakdown": [
{
"from": 1,
"to": 100,
"quantity": 25,
"unit_price": 2.9,
"total": 72.5
}
],
"companies_total": 72.5,
"options": [
{}
],
"options_total": 0,
"pilot_discount": 0,
"annual_discount_pct": 0,
"annual_discount": 0,
"discount": 0,
"total": 121.5,
"yearly_total": 1458,
"name": "Firm",
"saving_vs_winauditor": 36,
"saving_pct": 22.9
},
"winauditor": 157.5,
"cheapest": "starter"
}schémaRecurringEntry
idintegerex.5company_idintegerjournal_idintegerex.5labelstringex.Loyer mensuelreferencestring | nullthird_party_idinteger | nullfrequencystringmonthlyquarterlyyearlynext_datestring <date-time>ex.2026-04-01T00:00:00.000000Zend_datestring <date-time> | nulllinesobject[]Propriétés
account_idintegerex.368debitstring | nullex.1500.00creditstring | nulllabelstring | nullthird_party_idinteger | null
is_activebooleanlast_generated_onstring <date> | nullgenerated_countintegerex.3created_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nulljournalobjectPropriétés
idintegercodestringex.ODlabelstringex.Opérations diverses
third_partyobject | null
Exemple
{
"id": 5,
"company_id": 7,
"journal_id": 5,
"label": "Loyer mensuel",
"reference": "F-2026-0412",
"third_party_id": 18,
"frequency": "monthly",
"next_date": "2026-04-01T00:00:00.000000Z",
"end_date": "2026-03-15T09:41:00+00:00",
"lines": [
{
"account_id": 368,
"debit": "1500.00",
"credit": "0.00",
"label": "Facture Brasserie Dubuisson",
"third_party_id": 18
}
],
"is_active": true,
"last_generated_on": "2026-03-15",
"generated_count": 3,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"journal": {
"id": 42,
"code": "OD",
"label": "Opérations diverses"
},
"third_party": {}
}schémaRevisionOne line of the version history.
One line of the version history.
idintegerex.2301actionstringcreatedupdateddeletedrestoredrevertedsyncedeffectstringex.updatedaction_labelstringex.Modification · Tierssubject_typestringex.third_partiessubject_type_labelstringex.Tierssubject_idintegerex.18subject_labelstringex.DUBUISSON · Brasserie Dubuisson SAuserobject | nullactor_namestring | nullex.Claire Dumontchangesobject[]Propriétés
fieldstringex.payment_terms_dayslabelstringex.Délai de paiementoldanynewany
versionintegerex.4operation_idstring <uuid>client_mutation_idstring | nulloriginstringonlineoffline_syncsystembridgedevice_idstring | nulldevice_namestring | nullreasonstring | nullreverts_revision_idinteger | nullreverted_atstring <date-time> | nullreverted_by_revision_idinteger | nulloccurred_atstring <date-time>created_atstring <date-time>can_revertbooleanrevert_blocked_reasonstring | nullrevert_blocked_messagestring | nullrevert_effectstring | nullupdate, trash, restore, recreate or reverse.snapshot_beforeobject | nullSingle revision only.snapshot_afterobject | nullSingle revision only.ipstring | nullSingle revision only.
Exemple
{
"id": 2301,
"action": "created",
"effect": "updated",
"action_label": "Modification · Tiers",
"subject_type": "third_parties",
"subject_type_label": "Tiers",
"subject_id": 18,
"subject_label": "DUBUISSON · Brasserie Dubuisson SA",
"user": {
"id": 12,
"name": "Claire Dumont"
},
"actor_name": "Claire Dumont",
"changes": [
{
"field": "payment_terms_days",
"label": "Délai de paiement",
"old": null,
"new": null
}
],
"version": 4,
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"origin": "online",
"device_id": "mac-7F3A21",
"device_name": "MacBook de Claire",
"reason": "string",
"reverts_revision_id": 42,
"reverted_at": "2026-03-15T09:41:00+00:00",
"reverted_by_revision_id": 42,
"occurred_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"can_revert": true,
"revert_blocked_reason": "string",
"revert_blocked_message": "string",
"revert_effect": "string",
"snapshot_before": {},
"snapshot_after": {},
"ip": "string"
}schémaSheetView
sheetCompanySheet | nullsheet_atstring <date-time> | nulladdressobjectPropriétés
streetstring | nullStreetex.Grand-Placehouse_numberstring | nullNumberex.14boxstring | nullBoxpostal_codestring | nullPostal codeex.7000citystring | nullCityex.Monscountrystring | nullISO 3166-1 alpha-2ex.BE
address_linestring | nulllegal_formobject | nullnace_codesobject[]Propriétés
codestringclassificationstringlabelstring | nullis_mainboolean
main_nace_codestring | nullvat_number_formattedstring | nullex.BE 0477.472.701mapobjectPropriétés
querystringAddress used for the mapex.Grand-Place 14, 7000 Mons, Belgiqueapple_urlstring <uri>google_urlstring <uri>static_urlstring <uri> | nulllatitudenumber | nulllongitudenumber | null
Exemple
{
"sheet": {
"identifier": "0477472701",
"enterprise_number": "0477472701",
"vat_number": "BE0477472701",
"name": "Le Comptoir Montois",
"legal_form": "SRL",
"legal_form_code": "610",
"status": "active",
"start_date": "2026-03-15",
"address": {
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
},
"address_line": "string",
"latitude": 12.5,
"longitude": 12.5,
"nace_codes": [
{
"code": "56111",
"classification": "MAIN",
"label": "Facture Brasserie Dubuisson"
}
],
"main_nace_code": "string",
"email": "claire.dumont@fiduciaire-dumont.be",
"phone": "+32 65 31 42 18",
"website": "https://www.comptoir-montois.be",
"source": "companysearch",
"fetched_at": "2026-03-15T09:41:00+00:00",
"map": {
"query": "Grand-Place 14, 7000 Mons, Belgique",
"apple_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"google_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"static_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"latitude": 12.5,
"longitude": 12.5
}
},
"sheet_at": "2026-03-15T09:41:00+00:00",
"address": {
"street": "Grand-Place",
"house_number": "14",
"box": "string",
"postal_code": "7000",
"city": "Mons",
"country": "BE"
},
"address_line": "string",
"legal_form": {},
"nace_codes": [
{
"code": "COMPTOIR",
"classification": "string",
"label": "Facture Brasserie Dubuisson",
"is_main": true
}
],
"main_nace_code": "string",
"vat_number_formatted": "BE 0477.472.701",
"map": {
"query": "Grand-Place 14, 7000 Mons, Belgique",
"apple_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"google_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"static_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"latitude": 12.5,
"longitude": 12.5
}
}schémaSyncChange
resourcestringex.third_partiesopstringupsertdeleteidintegerex.18versioninteger | nullex.4dataobject | nullResource serialised as by its list endpoint; null for a tombstone.changed_atstring <date-time>seqintegerPosition in the change feed.ex.1042
Exemple
{
"resource": "third_parties",
"op": "upsert",
"id": 18,
"version": 4,
"data": {},
"changed_at": "2026-03-15T09:41:00+00:00",
"seq": 1042
}schémaSyncConflict
idintegerex.8statusstringopenresolvedtypestringfielddelete_vs_updateupdate_vs_deleteduplicatelockedtype_labelstringresourcestringex.third_partiesrecord_idinteger | nullsubject_idinteger | nullsubject_labelstring | nullclient_mutation_idstring | nullfieldsobject[]Propriétés
fieldstringlabelstringserveranyclientanywinnerstringrulestring
client_dataobject | nullserver_dataobject | nullserver_versioninteger | nullwinnerstring | nullloserstring | nullresolutionstring | nullresolved_byinteger | nullclient_userobject | nullserver_userobject | nullresolved_by_userobject | nulldevice_idstring | nullcreated_atstring <date-time>resolved_atstring <date-time> | nullchoicesstring[]serverclientmerge
Exemple
{
"id": 8,
"status": "open",
"type": "field",
"type_label": "string",
"resource": "third_parties",
"record_id": 42,
"subject_id": 42,
"subject_label": "string",
"client_mutation_id": "b0a6f6f0-7d1c-4c5e-8a55-3f2b1c9d0e11",
"fields": [
{
"field": "string",
"label": "Facture Brasserie Dubuisson",
"server": null,
"client": null,
"winner": "string",
"rule": "string"
}
],
"client_data": {},
"server_data": {},
"server_version": 1,
"winner": "string",
"loser": "string",
"resolution": "string",
"resolved_by": 1,
"client_user": {},
"server_user": {},
"resolved_by_user": {},
"device_id": "mac-7F3A21",
"created_at": "2026-03-15T09:41:00+00:00",
"resolved_at": "2026-03-15T09:41:00+00:00",
"choices": [
"server"
]
}schémaSyncMutationOne action made offline, replayed through the matching REST action (same validation, same body).
One action made offline, replayed through the matching REST action (same validation, same body).
client_mutation_idstring <uuid>requisIdempotence key.occurred_atstring <date-time>Date of the action on the device.operation_idstring <uuid>resourcestringrequisthird_parties, accounts, journals, journal_rules, bank_rules, recurring_entries, analytic_codes, fixed_assets, entries, documents, document_lines, bank_transactions, company_settings.ex.third_partiesopstringrequiscreateupdatedeleteactionactionstringignorerestoreentryinvoicereversebookupdate_lineidinteger | string | nullServer id, or thetmp-…id of a record created earlier in the queue.client_temp_idstringTemporary id of a creation (tmp-<uuid>), mapped to the server id.ex.tmp-3c1fparent_idinteger | string | nullbase_versionintegerVersion the client edited.dataobjectBody of the equivalent REST request.
Exemple
{
"client_mutation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"occurred_at": "2026-03-15T09:41:00+00:00",
"operation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"resource": "third_parties",
"op": "create",
"action": "ignore",
"id": 42,
"client_temp_id": "tmp-3c1f",
"parent_id": 42,
"base_version": 1,
"data": {}
}schémaSyncMutationResult
client_mutation_idstring <uuid>statusstringappliedduplicateconflictrejectedoriginal_statusstring | nullcodestring | nulllocked, not_supported_offline, validation, not_found, forbidden, invalid_mutation, unknown_temp_id, unprocessable, server_error.messagestring | nullresourcestringopstringactionstring | nullidinteger | nullclient_temp_idstring | nullversioninteger | nulldataobject | nullerrorsobject | nullconflictobject | nullPropriétés
server_versionintegerserver_dataobjectfieldsobject[]Propriétés
fieldstringclientanyserveranywinnerstringclientserverrulestring
resolutionstring
duplicate_ofinteger | nullretryableboolean
Exemple
{
"client_mutation_id": "bf413a19-2136-4504-bc42-b314637eb5c7",
"status": "applied",
"original_status": "string",
"code": "COMPTOIR",
"message": "OK",
"resource": "string",
"op": "string",
"action": "string",
"id": 42,
"client_temp_id": "string",
"version": 3,
"data": {},
"errors": {},
"conflict": {
"server_version": 1,
"server_data": {},
"fields": [
{
"field": "string",
"client": null,
"server": null,
"winner": "client",
"rule": "string"
}
],
"resolution": "string"
},
"duplicate_of": 1,
"retryable": true
}schémaThirdPartyCustomer or supplier of a company file.
Customer or supplier of a company file.
idintegerex.18company_idintegerex.7typestringcustomersuppliercodestringex.DUBUISSONnamestringex.Brasserie Dubuisson SAcontact_namestring | nullvat_numberstring | nullex.BE0402531376enterprise_numberstring | nullex.0402531376legal_form_codestring | nullvat_statusstringsubjectnot_subjectexemptintra_eunon_eucountrystringex.BElanguagestring | nullex.frcategorystring | nullcurrencystringex.EURaddressstring | nullex.Chaussée de Mons 28house_numberstring | nullboxstring | nulladdress_line_2string | nullpostal_codestring | nullex.7904citystring | nullex.Pipaixnace_codestring | nullibanstring | nullex.BE71096123456769bicstring | nullex.GKCCBEBBbank_accountstring | nullemailstring <email> | nullex.compta@dubuisson.examplephonestring | nullfaxstring | nullwebsitestring | nullpayment_terms_daysintegerex.30form_281_50_typestring | nullprofession_281_50string | nullis_natural_personbooleanex.falsenotesstring | nulldefault_vat_code_idinteger | nulldefault_account_idinteger | nullvies_validboolean | nullvies_checked_atstring <date-time> | nullvies_namestring | nullpeppol_identifierstring | nullex.0208:0402531376peppol_registeredboolean | nullpeppol_access_pointobject | nullpeppol_document_typesPeppolDocumentType[] | nullpeppol_checked_atstring <date-time> | nullcreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nulldefault_accountobject | nullLoaded on the single sheet.default_vat_codeobject | nullLoaded on the single sheet.
Exemple
{
"id": 18,
"company_id": 7,
"type": "customer",
"code": "DUBUISSON",
"name": "Brasserie Dubuisson SA",
"contact_name": "string",
"vat_number": "BE0402531376",
"enterprise_number": "0402531376",
"legal_form_code": "string",
"vat_status": "subject",
"country": "BE",
"language": "fr",
"category": "string",
"currency": "EUR",
"address": "Chaussée de Mons 28",
"house_number": "14",
"box": "string",
"address_line_2": "string",
"postal_code": "7904",
"city": "Pipaix",
"nace_code": "string",
"iban": "BE71096123456769",
"bic": "GKCCBEBB",
"bank_account": "string",
"email": "compta@dubuisson.example",
"phone": "+32 65 31 42 18",
"fax": "string",
"website": "https://www.comptoir-montois.be",
"payment_terms_days": 30,
"form_281_50_type": "string",
"profession_281_50": "string",
"is_natural_person": false,
"notes": "string",
"default_vat_code_id": 42,
"default_account_id": 42,
"vies_valid": true,
"vies_checked_at": "2026-03-15T09:41:00+00:00",
"vies_name": "string",
"peppol_identifier": "0208:0402531376",
"peppol_registered": true,
"peppol_access_point": {},
"peppol_document_types": [
{
"id": "bis_billing_invoice",
"name": "Invoice BIS Billing 3.0",
"family": "billing",
"description": "Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.",
"document_id": "string"
}
],
"peppol_checked_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": 1,
"default_account": {},
"default_vat_code": {}
}schémaTrashItem
typestringex.third_partiesidintegerex.18labelstringex.DUBUISSON · Brasserie Dubuisson SAdeleted_atstring <date-time>deleted_byobject | nullpurge_atstring <date-time>Date of the definitive purge.restorablebooleanblocked_reasonstring | nullblocked_messagestring | nullversioninteger
Exemple
{
"type": "third_parties",
"id": 18,
"label": "DUBUISSON · Brasserie Dubuisson SA",
"deleted_at": "2026-03-15T09:41:00+00:00",
"deleted_by": {
"id": 12,
"name": "Claire Dumont"
},
"purge_at": "2026-03-15T09:41:00+00:00",
"restorable": true,
"blocked_reason": "string",
"blocked_message": "string",
"version": 3
}schémaTreasury
accountsobject[]Propriétés
journal_idintegerex.7codestringex.BNPlabelstringex.BNP Paribas Fortisibanstring | nullaccountstringex.550000accounting_balancestring <decimal>ex.19630.11last_statement_balancestring <decimal> | nullex.19630.11last_statement_datestring <date> | nullpending_countintegerex.3pending_amountstring <decimal>ex.1842.50differencestring <decimal> | nullex.0.00
total_accounting_balancestring <decimal>ex.21480.61
Exemple
{
"accounts": [
{
"journal_id": 7,
"code": "BNP",
"label": "BNP Paribas Fortis",
"iban": "BE68539007547034",
"account": "550000",
"accounting_balance": "19630.11",
"last_statement_balance": "19630.11",
"last_statement_date": "2026-03-15",
"pending_count": 3,
"pending_amount": "1842.50",
"difference": "0.00"
}
],
"total_accounting_balance": "21480.61"
}schémaUserAuthenticated user with the firms it belongs to.
Authenticated user with the firms it belongs to.
idintegerex.12namestringex.Claire Dumontemailstring <email>localestringfrnlendeemail_verifiedbooleanpending_emailstring <email> | nullNew address waiting for confirmation.is_platform_adminbooleanex.falseis_demobooleanTrue for the ephemeral user of the demo firm.ex.falsefirmsobject[]Propriétés
public_tokenstringex.NDTQVQU4AUAVnamestringex.Fiduciaire Dumont & Associésrolestringadminmanagerencoderreviewer
managed_firmsobject[]Propriétés
public_tokenstringex.NDTQVQU4AUAVnamestringex.Fiduciaire Dumont & Associés
Exemple
{
"id": 12,
"name": "Claire Dumont",
"email": "claire.dumont@fiduciaire-dumont.be",
"locale": "fr",
"email_verified": true,
"pending_email": "claire.dumont@fiduciaire-dumont.be",
"is_platform_admin": false,
"is_demo": false,
"firms": [
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés",
"role": "admin"
}
],
"managed_firms": [
{
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
}
]
}schémaVatCode
idintegerex.4company_idintegercodestringex.V21labelstringex.Ventes 21 %directionstringsalepurchaseratestring <decimal>ex.21.00naturestringstandardintra_eucocontractorexportexemptimportout_of_scopedeductible_pctstring <decimal>ex.100.00base_gridstring | nullGrid of the taxable base.ex.03vat_gridstring | nullGrid of the VAT.ex.54due_vat_gridstring | nullGrid of the VAT due (reverse charge).credit_base_gridstring | nullGrid of the base on a credit note.ex.49credit_vat_gridstring | nullex.64vat_accountstring | nullex.451100due_vat_accountstring | nulldescriptionstring | nullis_activebooleansort_orderintegerex.13created_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3
Exemple
{
"id": 4,
"company_id": 7,
"code": "V21",
"label": "Ventes 21 %",
"direction": "sale",
"rate": "21.00",
"nature": "standard",
"deductible_pct": "100.00",
"base_grid": "03",
"vat_grid": "54",
"due_vat_grid": "string",
"credit_base_grid": "49",
"credit_vat_grid": "64",
"vat_account": "451100",
"due_vat_account": "string",
"description": "Description",
"is_active": true,
"sort_order": 13,
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3
}schémaVatComputation
gridsobjectBelgian VAT grids: grid number => amount (decimal string).amount_duestring <decimal>Grid 71.ex.157.50amount_refundstring <decimal>Grid 72.ex.0.00warningsstring[]entriesintegerEntries carrying VAT in the period.ex.38
Exemple
{
"grids": {
"00": "0.00",
"01": "0.00",
"02": "0.00",
"03": "1000.00",
"54": "210.00",
"59": "52.50",
"71": "157.50",
"72": "0.00",
"81": "0.00",
"82": "250.00",
"83": "0.00"
},
"amount_due": "157.50",
"amount_refund": "0.00",
"warnings": [
"string"
],
"entries": 38
}schémaVatDeclaration
idintegerex.14company_idintegerperiod_typestringmonthlyquarterlyyearintegerex.2026periodintegerMonth (1-12) or quarter (1-4).ex.1starts_onstring <date-time>ends_onstring <date-time>gridsobjectBelgian VAT grids: grid number => amount (decimal string).amount_duestring <decimal>ex.157.50amount_refundstring <decimal>ex.0.00statusstringdraftvalidatedsubmittedvalidated_atstring <date-time> | nullvalidated_byinteger | nullsubmitted_atstring <date-time> | nullsubmission_referencestring | nullIntervat receipt reference.journal_entry_idinteger | nullVAT settlement entry.warningsstring[]created_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.ex.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.ex.3journal_entryobject | null
Exemple
{
"id": 14,
"company_id": 7,
"period_type": "monthly",
"year": 2026,
"period": 1,
"starts_on": "2026-03-15T09:41:00+00:00",
"ends_on": "2026-03-15T09:41:00+00:00",
"grids": {
"00": "0.00",
"01": "0.00",
"02": "0.00",
"03": "1000.00",
"54": "210.00",
"59": "52.50",
"71": "157.50",
"72": "0.00",
"81": "0.00",
"82": "250.00",
"83": "0.00"
},
"amount_due": "157.50",
"amount_refund": "0.00",
"status": "draft",
"validated_at": "2026-03-15T09:41:00+00:00",
"validated_by": 1,
"submitted_at": "2026-03-15T09:41:00+00:00",
"submission_reference": "string",
"journal_entry_id": 1284,
"warnings": [
"string"
],
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00",
"lock_version": 3,
"version": 3,
"journal_entry": {}
}schémaVersionConflict409 of the optimistic lock (`X-Base-Version`).
409 of the optimistic lock (X-Base-Version).
messagestringrequiscodestringrequisconflictserver_versionintegerrequisCurrent version on the server.ex.4server_dataobjectrequisCurrent state of the record.
Exemple
{
"message": "OK",
"code": "conflict",
"server_version": 4,
"server_data": {}
}schémaWebhookDelivery
idintegerex.1871event_idstringex.evt_01JD8X5Q2M7Z4W9K3T6B0N1VCEeventstringex.entry.postedstatusstringpendingdeliveredfailedattemptsinteger8 attempts at most.ex.1next_attempt_atstring <date-time> | nullresponse_statusinteger | nullex.200response_excerptstring | nullduration_msinteger | nullex.184delivered_atstring <date-time> | nullcreated_atstring <date-time>payloadWebhookEventattemptintegerAlias ofattempts.ex.1http_statusinteger | nullAlias ofresponse_status.ex.200
Exemple
{
"id": 1871,
"event_id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "entry.posted",
"status": "pending",
"attempts": 1,
"next_attempt_at": "2026-03-15T09:41:00+00:00",
"response_status": 200,
"response_excerpt": "string",
"duration_ms": 184,
"delivered_at": "2026-03-15T09:41:00+00:00",
"created_at": "2026-03-15T09:41:00+00:00",
"payload": {
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "entry.posted",
"api_version": "v1",
"created_at": "2026-03-15T09:41:00+00:00",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {}
},
"attempt": 1,
"http_status": 200
}schémaWebhookEndpoint
idintegerex.3urlstring <uri>ex.https://erp.example.com/hooks/novafiskodescriptionstring | nullex.ERP connectoreventsstring[]is_activebooleansecret_hintstringMasked signing secret.ex.whsec_…ab12last_delivery_atstring <date-time> | nulllast_statusstring | nullStatus of the last delivery.ex.deliveredcreated_atstring <date-time>updated_atstring <date-time>
Exemple
{
"id": 3,
"url": "https://erp.example.com/hooks/novafisko",
"description": "ERP connector",
"events": [
"entry.posted"
],
"is_active": true,
"secret_hint": "whsec_…ab12",
"last_delivery_at": "2026-03-15T09:41:00+00:00",
"last_status": "delivered",
"created_at": "2026-03-15T09:41:00+00:00",
"updated_at": "2026-03-15T09:41:00+00:00"
}schémaWebhookEventBody POSTed to a webhook endpoint. Verify `X-Novafisko-Signature` before trusting it.
Body POSTed to a webhook endpoint. Verify X-Novafisko-Signature before trusting it.
idstringrequisUnique event id; use it to deduplicate.ex.evt_01JD8X5Q2M7Z4W9K3T6B0N1VCEeventstringrequisex.entry.postedapi_versionstringrequisex.v1created_atstring <date-time>requisUTC.firmobjectrequisPropriétés
public_tokenstringex.NDTQVQU4AUAVnamestringex.Fiduciaire Dumont & Associés
companyobject | nullPropriétés
public_tokenstringex.XBVD5O1L29HCnamestringex.Le Comptoir Montois SRL
dataobjectrequisEvent-specific payload (ids, references, amounts).
Exemple
{
"id": "evt_01JD8X5Q2M7Z4W9K3T6B0N1VCE",
"event": "entry.posted",
"api_version": "v1",
"created_at": "2026-03-15T09:41:00+00:00",
"firm": {
"public_token": "NDTQVQU4AUAV",
"name": "Fiduciaire Dumont & Associés"
},
"company": {
"public_token": "XBVD5O1L29HC",
"name": "Le Comptoir Montois SRL"
},
"data": {}
}