API-Referenz
Vollständige Referenz der NovaFisko-API v1, aus der OpenAPI-Spezifikation generiert, mit Parametern, Schemas und Beispielen für jede Route.
Diese Referenz wird aus der OpenAPI-3.1-Spezifikation von NovaFisko generiert. Sie beschreibt jede Route mit ihren Parametern, dem erwarteten Body, den möglichen Antworten und einem Beispielaufruf in curl, PHP, JavaScript und Python.
Alle Routen sind relativ zu https://api.novafisko.com/v1 und verlangen, sofern nicht anders angegeben, den Header Authorization: Bearer <Token>. Die Routen sind nach Bereichen gruppiert. Die Schemas lassen sich mit einem Klick aufklappen, und jedes Beispiel lässt sich mit der Schaltfläche Kopieren kopieren.
Sie arbeiten lieber in Ihrem eigenen Werkzeug? Laden Sie die Spezifikation als JSON oder YAML herunter oder importieren Sie die Postman-Collection.
Wenn Sie die API neu kennenlernen, beginnen Sie mit dem Überblick, der Authentifizierung und den Konventionen. Die Anwendungsfälle zeigen, wie Sie die Aufrufe verketten.
Vollständige Referenz der NovaFisko-API v1.0.0: 240 Endpunkte, nach Bereich gruppiert und aus der OpenAPI-3.1-Spezifikation erzeugt. Klappen Sie einen Endpunkt auf, um Parameter, Body, Antworten und einen Beispielaufruf zu sehen.
Zusammenfassungen und Beschreibungen der Endpunkte sind auf Englisch: Sie stammen direkt aus der Spezifikation.
https://api.novafisko.comGemeinsame Header und Parameter Idempotenz, optimistische Sperre, Gerät, Sprache und signierte URLs: hier einmal beschrieben.
| Name | Typ | Beschreibung |
|---|---|---|
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.z. B. 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.z. B. 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. z. B. erp-connector-01 |
X-Device-Nameheader | string | Readable device name, percent-encoded (120 characters max). z. B. 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. |
Antwort-Header
| Antwort-Header | Beschreibung |
|---|---|
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 Öffentlich
Name and version of the API.
Public endpoint: no bearer token.
Antworten
200OK
application/json
Schema object
namestringz. B.NovaFisko APIversionstringz. B.v1statusstringz. B.ok
Beispiel
{
"name": "NovaFisko API",
"version": "v1",
"status": "ok"
}Beispielaufruf
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 Öffentlich
Public endpoint: no bearer token.
Antworten
200OK
application/json
Schema object
okbooleantimestring <date-time>
Beispiel
{
"ok": true,
"time": "2026-03-15T09:41:00+00:00"
}Beispielaufruf
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 Öffentlich
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.
Antworten
200OK
application/json
Schema object
okbooleanserver_timestring <date-time>
Beispiel
{
"ok": true,
"server_time": "2026-03-15T09:41:00+00:00"
}Beispielaufruf
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.
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object[]
Array von
codestringBEFRLUcurrencystringz. B.EURvat_regimesstring[]monthlyquarterlyfranchiseexemptunit
Beispiel
[
{
"code": "BE",
"currency": "EUR",
"vat_regimes": [
"monthly"
]
}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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 Öffentlich 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).
Request-Body
application/json
Schema object
emailstring <email>erforderlichpasswordstringerforderlichz. B.••••••••device_namestringLabel of the token (100 characters max).z. B.MacBook de Claire
Beispiel
{
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "correct horse battery staple",
"device_name": "ERP connector"
}Antworten
201Signed in
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
tokenstringBearer token, shown once.userUser
Beispiel
{
"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. ErrorBeispielaufruf
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 Öffentlich 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
Request-Body optional
application/json
Schema object
localestringfrnlendedevice_namestring100 characters max.
Beispiel
{
"locale": "fr"
}Antworten
201Demo session opened
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
tokenstringuserUserdemoobjectEigenschaften
firmobjectEigenschaften
public_tokenstringnamestringz. B.Fiduciaire Démo
companiesobject[]Eigenschaften
public_tokenstringcodestringz. B.COMPTOIRnamestringz. B.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.
Beispiel
{
"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
Schema Error
Beispiel
{
"message": "La démonstration est momentanément indisponible.",
"code": "demo_unavailable"
}Beispielaufruf
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.
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema User
Beispiel
{
"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. ErrorBeispielaufruf
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.
Gemeinsame Header: Accept-Language
Antworten
204Token revoked.
Kein Body.
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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 Öffentlich 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).
Operations-ID auth.forgot-password
Request-Body
application/json
Schema object
emailstring <email>erforderlichlocalestringfrnlende
Beispiel
{
"email": "claire.dumont@fiduciaire-dumont.be",
"locale": "fr"
}Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema Message
Beispiel
{
"message": "Mot de passe modifié."
}errors maps each field to its messages; code is present when the refusal has a machine reason. ErrorBeispielaufruf
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 Öffentlich 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).
Operations-ID auth.reset-password
Request-Body
application/json
Schema object
tokenstringerforderlichemailstring <email>erforderlichpasswordstringerforderlich8 characters at least.password_confirmationstringerforderlich
Beispiel
{
"token": "XBVD5O1L29HC",
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "string",
"password_confirmation": "string"
}Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema Message
Beispiel
{
"message": "Mot de passe modifié."
}errors maps each field to its messages; code is present when the refusal has a machine reason. ErrorBeispielaufruf
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 Signierte URL 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).
Operations-ID auth.email.verify
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
id erforderlich | integer | Id of the record. z. B. 42 |
hash erforderlich | string | SHA-1 of the e-mail address being confirmed. z. B. 5f2b8c… |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
format | string | Answer JSON instead of redirecting.json |
Gemeinsame Header: signature expires
Antworten
200Confirmed (format=json).
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
verifiedboolean
Beispiel
{
"verified": true
}302Redirection to app.novafisko.com/email-verified.
| Antwort-Header | Beschreibung |
|---|---|
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
Schema object
verifiedbooleanz. B.false
Beispiel
{
"verified": false
}Beispielaufruf
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 Sitzungstoken Nicht in der Demo 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).
Operations-ID auth.change-password
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
current_passwordstringerforderlichpasswordstringerforderlich8 characters at least, different from the current one.password_confirmationstringerforderlich
Beispiel
{
"current_password": "string",
"password": "string",
"password_confirmation": "string"
}Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema Message
Beispiel
{
"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. ErrorBeispielaufruf
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 Sitzungstoken Nicht in der Demo 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).
Operations-ID auth.change-email
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
emailstring <email>erforderlichpasswordstringerforderlich
Beispiel
{
"email": "claire.dumont@fiduciaire-dumont.be",
"password": "string"
}Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
messagestringpending_emailstring <email>
Beispiel
{
"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. ErrorBeispielaufruf
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 Sitzungstoken Nicht in der Demo 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).
Operations-ID auth.email.resend
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
sentbooleanmessagestring
Beispiel
{
"sent": true,
"message": "OK"
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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.
Operations-ID auth.notification-preferences
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
categoriesobject[]Eigenschaften
keystringaccountfirmbillingdocumentsintegrationsplatformlabelstringz. B.DocumentsdescriptionstringlockedbooleanLocked categories (account security) cannot be switched off.enabledboolean
Beispiel
{
"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. ErrorBeispielaufruf
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 Sitzungstoken
Locked categories and unknown keys are ignored.
Session token only: integration tokens are refused with 403 session_token_required.
Operations-ID auth.notification-preferences.update
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
prefsobjecterforderlichCategory => enabled.
Beispiel
{
"prefs": {
"documents": true,
"billing": false
}
}Antworten
200OK
application/json
Schema object
categoriesobject[]Eigenschaften
keystringaccountfirmbillingdocumentsintegrationsplatformlabelstringz. B.DocumentsdescriptionstringlockedbooleanLocked categories (account security) cannot be switched off.enabledboolean
Beispiel
{
"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. ErrorBeispielaufruf
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 Sitzungstoken
Integration tokens of the current user. The secret is never returned again.
Session token only: integration tokens are refused with 403 session_token_required.
Operations-ID auth.tokens.index
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
dataIntegrationToken[]
Beispiel
{
"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. ErrorBeispielaufruf
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 Sitzungstoken Nicht in der Demo 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
Operations-ID auth.tokens.store
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
namestringerforderlichLabel (100 characters max).abilitiesstring[]erforderlichreadwritesyncexpires_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.
Beispiel
{
"name": "ERP connector",
"abilities": [
"read",
"sync"
],
"expires_in_days": 365
}Antworten
201Token created (data and integration_token are the same object)
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
tokenstringPlain token (id, a pipe, then the secret), shown once.dataIntegrationTokenintegration_tokenIntegrationToken
Beispiel
{
"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. ErrorBeispielaufruf
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 Sitzungstoken Nicht in der Demo
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.
Operations-ID auth.tokens.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
token erforderlich | integer | Id of the integration token. z. B. 57 |
Gemeinsame Header: Accept-Language
Antworten
204Token revoked.
Kein Body.
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema Firm
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
Admins and managers of the firm.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema 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
Beispiel
{
"phone": "+32 65 31 42 18",
"website": "https://www.fiduciaire-dumont.be"
}Antworten
200OK
application/json
Schema Firm
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema Firm
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
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
Operations-ID firms.members.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
emailstring <email>erforderlichnamestringRequired for a new account.passwordstring | null8 characters at least; required for a new account.rolestringerforderlichadminmanagerencoderreviewerlocalestringfrnlendecompany_tokensstring[]
Beispiel
{
"email": "thomas.peeters@fiduciaire-dumont.be",
"name": "Thomas Peeters",
"password": "S3cure-Pass!",
"role": "encoder",
"company_tokens": [
"XBVD5O1L29HC"
]
}Antworten
200Existing user attached
application/json
Schema FirmMember
Beispiel
{
"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
Schema FirmMember
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
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.
Operations-ID firms.members.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
user erforderlich | integer | Id of the user (member of the firm). z. B. 12 |
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
rolestringadminmanagerencoderrevieweris_activebooleannamestringpasswordstring | null
Beispiel
{
"role": "manager"
}Antworten
200OK
application/json
Schema FirmMember
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
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.
Operations-ID firms.members.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
user erforderlich | integer | Id of the user (member of the firm). z. B. 12 |
Gemeinsame Header: Accept-Language
Antworten
204Done, no body.
Kein Body.
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. ErrorBeispielaufruf
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 Nicht in der Demo
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Operations-ID firms.members.companies
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
user erforderlich | integer | Id of the user (member of the firm). z. B. 12 |
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
company_tokensstring[]erforderlichrolestringmanagerencoderreviewer
Beispiel
{
"company_tokens": [
"XBVD5O1L29HC",
"K7MPL2QX9ZTA"
],
"role": "encoder"
}Antworten
200OK
application/json
Schema FirmMember
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Operations-ID firms.companies.members
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
membersobject[]erforderlichEigenschaften
user_idintegererforderlichrolestringmanagerencoderreviewer
Beispiel
{
"members": [
{
"user_id": 12,
"role": "manager"
},
{
"user_id": 15,
"role": "encoder"
}
]
}Antworten
200OK
application/json
Schema Firm
Beispiel
{
"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. ErrorBeispielaufruf
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.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
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. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema ActivityFeed
Beispiel
{
"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. ErrorBeispielaufruf
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 Signierte URL 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).
Operations-ID firms.files.view
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
url erforderlich | string <uri> | Relayed file. |
Gemeinsame Header: signature expires
Antworten
200The file, inline.
Antwort-Header 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. ErrorBeispielaufruf
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.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
lang | string | fr nl en de |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema Licence
Beispiel
{
"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. ErrorBeispielaufruf
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 Sitzungstoken Nicht in der Demo 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
Operations-ID firms.licence.activate
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
keystringerforderlichLicence key.z. B.NVFK-7Q2M-X4TA-9LDP
Beispiel
{
"key": "NVFK-7Q2M-X4TA-9LDP"
}Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema Licence
Beispiel
{
"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. ErrorBeispielaufruf
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 Sitzungstoken Nicht in der Demo
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.
Operations-ID firms.licence.release
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema Licence
Beispiel
{
"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. ErrorBeispielaufruf
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 Öffentlich 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).
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
locale | string | fr nl en de |
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema PricingGrid
Beispiel
{
"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
}
}Beispielaufruf
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 Öffentlich 120 / 1 Min.
Public endpoint: no bearer token.
Rate limit: 120 requests per minute (429 beyond, see Retry-After).
Operations-ID pricing.simulate
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
companies erforderlich | integer | Number of company files. z. B. 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 |
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema PricingSimulation
Beispiel
{
"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"
}Beispielaufruf
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.
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Beispiel
[
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
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
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
firmstring | nullFirm that manages the file.country_packstringBEFRLUcodestring | nullShort code, letters, digits, dash, underscore (20 max).namestringerforderlich200 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[]Eigenschaften
codestringerforderlichclassificationstringMAINSECOANCI
main_nace_codestring | nullfiscal_yearobjectEigenschaften
codestring10 characters max.starts_onstring <date>erforderlichends_onstring <date>erforderlich
banksobject[]Eigenschaften
codestringerforderlichJournal code, 6 characters max.labelstringerforderlichibanstring | null
Beispiel
{
"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"
}
]
}Antworten
201Created
application/json
Schema Company
Beispiel
{
"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. ErrorBeispielaufruf
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.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema Company
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema 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[]Eigenschaften
codestringerforderlichclassificationstringMAINSECOANCI
main_nace_codestring | nullsettingsCompanySettings
Beispiel
{
"vat_regime": "monthly",
"settings": {
"vat": {
"office_number": "0420"
},
"auto_entries": {
"reconciliation_difference": {
"max_amount": 2.5
}
}
}
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema Company
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
Soft delete: the file disappears from every list.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Operations-ID companies.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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. VersionConflictBeispielaufruf
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.
Operations-ID companies.integrity
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
debitnumberz. B.184320.55creditnumberz. B.184320.55entriesintegerz. B.1284is_balancedboolean
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.settings
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
settingsCompanySettingsjournalsobject[]Eigenschaften
idintegercodestringz. B.ODlabelstringz. B.Opérations diversestypestringz. B.miscellaneous
Beispiel
{
"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. ErrorBeispielaufruf
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.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema SheetView
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.apply-sheet
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
identifierstringerforderlichEnterprise or VAT number.z. B.0477472701refreshboolean | nullIgnore the 24 h cache.overwriteboolean | nullReplace the fields already filled in.
Beispiel
{
"identifier": "0477472701",
"refresh": true,
"overwrite": true
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
companyCompanysheetCompanySheetmapobject
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.third-parties.sheet
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema SheetView
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.third-parties.apply-sheet
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
identifierstringerforderlichEnterprise or VAT number.z. B.0477472701refreshboolean | nullIgnore the 24 h cache.overwriteboolean | nullReplace the fields already filled in.
Beispiel
{
"identifier": "0477472701",
"refresh": true,
"overwrite": true
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
third_partyThirdPartysheetCompanySheetmapobject
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID reference.legal-forms
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
country | string | ISO country, BE by default. z. B. BE |
q | string | Code, abbreviation or label. z. B. srl |
common | boolean | Only the common forms. |
lang | string | fr nl en de |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
dataobject[]Eigenschaften
codestringz. B.610labelstringz. B.Société à responsabilité limitéelabel_frstringlabel_nlstringz. B.Besloten Vennootschaplabel_destringlabel_enstringabbreviationstring | nullz. B.SRLis_commonboolean
countrystringz. B.BEnomenclature_countrystringz. B.BE
Beispiel
{
"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. ErrorBeispielaufruf
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.
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
country | string | z. B. BE |
q | string | z. B. restauration |
limit | integer | 1 to 200, 30 by default. |
level | integer | 1 to 7. |
edition | string | z. B. 2025 |
lang | string | fr nl en de |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
dataobject[]Eigenschaften
codestringz. B.56111labelstringz. B.Restauration à service completlabel_frstringlabel_nlstringlabel_destringlabel_enstringlevelintegerz. B.5editionstringz. B.2025
countrystringnomenclature_countrystringlocalestring
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID lookup.capabilities
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
country | string | z. B. BE |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
countrystringz. B.BEsearchbooleansheetbooleanvatbooleancitiesbooleanstreetsbooleansourcestringz. B.companysearchprovider_configuredboolean
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
q erforderlich | string | 2 characters at least. z. B. comptoir montois |
country | string | z. B. BE |
limit | integer | 1 to 25. |
lang | string | fr nl en de |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
dataobject[]Eigenschaften
identifierstringz. B.0477472701namestringz. B.Le Comptoir Montoislegal_formstring | nullz. B.SRLvat_numberstring | nullpostal_codestring | nullz. B.7000citystring | nullz. B.Monsstatusstring | nullz. B.active
search_supportedbooleanprovider_configuredbooleansourcestringcountrystring
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID lookup.companies.show
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
identifier erforderlich | string | Enterprise number or VAT number of the company to look up. z. B. 0477472701 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
country | string | |
refresh | boolean | Ignore the cache. |
lang | string | fr nl en de |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema CompanySheet
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
vat erforderlich | string | z. B. BE0477472701 |
country | string |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
validboolean | nullvalid_formatbooleanvat_numberstringenterprise_numberstring | nullnamestring | nulladdress_linestring | nullstatusstring | nullpeppolobject | nullreasonstring | nullsourcestring
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
q erforderlich | string | z. B. Mons |
country | string | z. B. BE |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
dataobject[]Eigenschaften
postal_codestringz. B.7000citystringz. B.Monscity_frstring | nullcity_nlstring | nullz. B.Bergencountrystringz. B.BE
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
zipcode erforderlich | string | Four digits. z. B. 7000 |
q | string | z. B. Grand |
country | string | z. B. BE |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
dataobject[]Eigenschaften
streetstringz. B.Grand-Placestreet_frstring | nullstreet_nlstring | nullpostal_codestringcitystringcountrystring
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.lookup.capabilities
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
country | string | z. B. BE |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
countrystringz. B.BEsearchbooleansheetbooleanvatbooleancitiesbooleanstreetsbooleansourcestringz. B.companysearchprovider_configuredboolean
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.lookup.search
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
q erforderlich | string | 2 characters at least. z. B. comptoir montois |
country | string | z. B. BE |
limit | integer | 1 to 25. |
lang | string | fr nl en de |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
dataobject[]Eigenschaften
identifierstringz. B.0477472701namestringz. B.Le Comptoir Montoislegal_formstring | nullz. B.SRLvat_numberstring | nullpostal_codestring | nullz. B.7000citystring | nullz. B.Monsstatusstring | nullz. B.active
search_supportedbooleanprovider_configuredbooleansourcestringcountrystring
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.lookup.companies.show
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
identifier erforderlich | string | Enterprise number or VAT number of the company to look up. z. B. 0477472701 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
country | string | |
refresh | boolean | Ignore the cache. |
lang | string | fr nl en de |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema CompanySheet
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.lookup.vat
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
vat erforderlich | string | z. B. BE0477472701 |
country | string |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
validboolean | nullvalid_formatbooleanvat_numberstringenterprise_numberstring | nullnamestring | nulladdress_linestring | nullstatusstring | nullpeppolobject | nullreasonstring | nullsourcestring
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.lookup.cities
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
q erforderlich | string | z. B. Mons |
country | string | z. B. BE |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
dataobject[]Eigenschaften
postal_codestringz. B.7000citystringz. B.Monscity_frstring | nullcity_nlstring | nullz. B.Bergencountrystringz. B.BE
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.lookup.streets
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
zipcode erforderlich | string | Four digits. z. B. 7000 |
q | string | z. B. Grand |
country | string | z. B. BE |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
dataobject[]Eigenschaften
streetstringz. B.Grand-Placestreet_frstring | nullstreet_nlstring | nullpostal_codestringcitystringcountrystring
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.accounts.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
q | string | Number prefix or part of the label. z. B. 6120 |
postable | boolean | Only the accounts entries can be posted to. |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.accounts.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
numberstringerforderlich2 to 12 digits, unique in the file.typestringerforderlichassetliabilityexpenseincomeoff_balancelabelstringerforderlich200 characters max.is_postablebooleanis_reconcilablebooleanpurchase_gridinteger | null81, 82 or 83.default_vat_code_idinteger | null
Beispiel
{
"number": "612100",
"label": "Électricité",
"type": "expense",
"is_postable": true,
"purchase_grid": 82
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema Account
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.accounts.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
account erforderlich | integer | Id of the account (not its number). z. B. 223 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
labelstring200 characters max.is_postablebooleanis_reconcilablebooleanpurchase_gridinteger | null81, 82 or 83.default_vat_code_idinteger | null
Beispiel
{
"label": "Électricité et gaz"
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema Account
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.journals.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.journals.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
codestringerforderlichLetters and digits, 6 max, unique.labelstringerforderlichtypestringerforderlichpurchasesalepurchase_credit_notesale_credit_notefinancialmiscellaneouscontrol_account_idinteger | nullibanstring | nullbicstring | null
Beispiel
{
"code": "ING",
"label": "ING Business",
"type": "financial",
"iban": "BE12310123456789"
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema Journal
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.journals.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
journal erforderlich | integer | Id of the journal. z. B. 3 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
labelstringdescriptionstring | nullcontrol_account_idinteger | nullibanstring | nullis_activebooleanis_defaultboolean
Beispiel
{
"is_default": true
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema Journal
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.journals.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
journal erforderlich | integer | Id of the journal. z. B. 3 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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. ErrorBeispielaufruf
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.
Operations-ID companies.journal-rules.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema JournalRule[]
Array von JournalRule
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.journal-rules.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
journal_idintegererforderlichdirectionstringerforderlichsalepurchasematch_fieldstringerforderlichpayment_providernumber_seriesnumber_prefixthird_partymatch_valuestringerforderlich100 characters max.priorityinteger1 to 999, lowest first.is_activeboolean
Beispiel
{
"journal_id": 3,
"direction": "sale",
"match_field": "number_prefix",
"match_value": "TK"
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema JournalRule
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.journal-rules.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
journalRule erforderlich | integer | Id of the journal rule. z. B. 4 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
journal_idintegerdirectionstringsalepurchasematch_fieldstringpayment_providernumber_seriesnumber_prefixthird_partymatch_valuestring100 characters max.priorityinteger1 to 999, lowest first.is_activeboolean
Beispiel
{
"priority": 10
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema JournalRule
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.journal-rules.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
journalRule erforderlich | integer | Id of the journal rule. z. B. 4 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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. VersionConflictBeispielaufruf
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.
Operations-ID companies.documents.series
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object[]
Array von
directionstringsalepurchaseis_credit_notebooleannumber_seriesstring | nullz. B.TKpayment_providerstring | nulldocumentsintegerz. B.214pendingintegerz. B.6sample_numberstring | nullz. B.TK-2026-00214journalobject | null
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.fiscal-years.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema FiscalYear[]
Array von FiscalYear
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.fiscal-years.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
codestringerforderlichUnique, 10 characters max.starts_onstring <date>erforderlichends_onstring <date>erforderlich
Beispiel
{
"code": "2027",
"starts_on": "2027-01-01",
"ends_on": "2027-12-31"
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema FiscalYear
Beispiel
{
"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. ErrorBeispielaufruf
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)
Operations-ID companies.fiscal-years.periods.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
period erforderlich | integer | Id of the period. z. B. 16 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
is_lockedbooleanerforderlich
Beispiel
{
"is_locked": true
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema Period
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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.
Operations-ID companies.fiscal-years.close
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
reopenboolean
Beispiel
{
"reopen": false
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema FiscalYear
Beispiel
{
"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. ErrorBeispielaufruf
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)
Operations-ID companies.fiscal-years.year-end
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
resultstring <decimal>Result of the year.z. B.18420.11closing_entryJournalEntry | nullopening_entryJournalEntry | nullfiscal_yearFiscalYearnext_fiscal_yearFiscalYear
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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.
Operations-ID companies.third-parties.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
type | string | customer supplier |
q | string | Name, code or VAT number. |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema ThirdParty[]
Array von ThirdParty
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.third-parties.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
typestringerforderlichcustomersuppliercodestring | nullUnique per type; generated from the name when absent.namestringerforderlichcontact_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
Beispiel
{
"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
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema ThirdParty
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.third-parties.show
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema ThirdParty
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.third-parties.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema 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
Beispiel
{
"payment_terms_days": 45,
"email": "compta@dubuisson.example"
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema ThirdParty
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.third-parties.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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. ErrorBeispielaufruf
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.
Operations-ID companies.third-parties.entries
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
lettered | string | all yes no |
fiscal_year_id | integer |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
rowsobject[]Eigenschaften
line_idintegerz. B.3391entry_idintegerz. B.1284journal_codestringz. B.VENentry_numberintegerz. B.412document_numberstring | nullz. B.2026/0412period_numberintegerz. B.3entry_datestring <date>due_datestring <date> | nullamountstring <decimal>z. B.1210.00debitstring <decimal>z. B.1210.00creditstring <decimal>z. B.0.00reconciliation_codestring | nulllabelstring | nullreminder_levelintegerz. B.0reminder_sent_atstring <date-time> | nullis_letteredbooleanz. B.false
summaryobjectEigenschaften
balancestring <decimal>z. B.1210.00open_countintegerz. B.1lettered_countintegerz. B.0
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.third-parties.letter
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
line_idsinteger[]erforderlich
Beispiel
{
"line_ids": [
3391,
3518
]
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
codestringLettering code given.z. B.ABline_idsinteger[]
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.third-parties.unletter
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
codestring | nullline_idsinteger[]
Beispiel
{
"code": "AB"
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
codesstring[]line_idsinteger[]
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.third-parties.letter-auto
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
groupsintegerz. B.3line_idsinteger[]
Beispiel
{
"groups": 3,
"line_ids": [
1
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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 Nicht in der Demo
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.
Operations-ID companies.third-parties.remind
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
line erforderlich | integer | Id of the line. z. B. 3391 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
The row, as in the entries list.
Beispiel
{}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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.
Operations-ID companies.third-parties.reminders
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object[]
Array von object
Beispiel
[
{}
]token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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.
Operations-ID companies.third-parties.totals
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
mode | string | balance debit credit |
fiscal_year_id | integer |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
fiscal_yearobjectEigenschaften
idintegercodestringz. B.2026
modestringz. B.balancerowsobject[]Eigenschaften
period_numberintegerz. B.1period_labelstringz. B.Janvier 2026amountstring <decimal>
totalstring <decimal>
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.vies.check
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
vat_number erforderlich | string | z. B. BE0402531376 |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
validboolean | nullNull when VIES did not answer.namestring | nullz. B.BRASSERIE DUBUISSONaddressstring | nullcountrystringz. B.BEnumberstringz. B.0402531376errorstring | nullinvalid_format, service_unavailable or the VIES user error.
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.third-parties.vies
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
validboolean | nullNull when VIES did not answer.namestring | nullz. B.BRASSERIE DUBUISSONaddressstring | nullcountrystringz. B.BEnumberstringz. B.0402531376errorstring | nullinvalid_format, service_unavailable or the VIES user error.third_partyThirdParty
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.entries.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
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. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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)
Operations-ID companies.entries.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
journal_idintegererforderlichentry_datestring <date>erforderlichInside an open fiscal year and an unlocked period.due_datestring <date> | nulllabelstringerforderlich200 characters max.referencestring | null60 characters max.structured_communicationstring | nullBelgian structured communication.third_party_idinteger | nulllinesobject[]erforderlichEigenschaften
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.
Beispiel
{
"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"
}
]
}Antworten
201Entry posted
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema JournalEntry
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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)
Operations-ID companies.entries.invoice
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
journal_idintegererforderlichJournal of a purchase or sale type.third_party_idintegererforderlichentry_datestring <date>erforderlichdue_datestring <date> | nulllabelstring | nullreferencestring | nullInvoice number.structured_communicationstring | nulllinesobject[]erforderlichEigenschaften
account_idintegerRequired withoutaccount.accountstringAccount number.amountstringerforderlichNet 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.
Beispiel
{
"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"
}
]
}Antworten
201Invoice posted
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema JournalEntry
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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.
Operations-ID companies.entries.show
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
journalEntry erforderlich | integer | Id of the journal entry. z. B. 1284 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema JournalEntry
Beispiel
{
"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. ErrorBeispielaufruf
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)
Operations-ID companies.entries.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
journalEntry erforderlich | integer | Id of the journal entry. z. B. 1284 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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). PeriodLockedErrorBeispielaufruf
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)
Operations-ID companies.entries.reverse
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
journalEntry erforderlich | integer | Id of the journal entry. z. B. 1284 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
entry_datestring <date> | nullDate of the reversal; the original date by default.labelstring | null
Beispiel
{
"entry_date": "2026-03-31"
}Antworten
201Reversal entry
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema JournalEntry
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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.
Operations-ID companies.recurring.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema RecurringEntry[]
Array von RecurringEntry
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.recurring.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
journal_idintegererforderlichlabelstringerforderlichreferencestring | nullthird_party_idinteger | nullfrequencystringerforderlichmonthlyquarterlyyearlynext_datestring <date>erforderlichend_datestring <date> | nullis_activebooleanlinesobject[]erforderlichEigenschaften
account_idintegererforderlichPostable account.debitstring | nullDecimal.creditstring | nullDecimal.labelstring | nullthird_party_idinteger | null
Beispiel
{
"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
}
]
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema RecurringEntry
Beispiel
{
"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. ErrorBeispielaufruf
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)
Operations-ID companies.recurring.generate-all
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
generatedintegerz. B.2entriesobject[]Eigenschaften
idintegerreferencestringz. B.OD 2026/000031entry_datestring <date>
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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.
Operations-ID companies.recurring.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
recurringEntry erforderlich | integer | Id of the recurring entry template. z. B. 5 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
journal_idintegerlabelstringreferencestring | nullthird_party_idinteger | nullfrequencystringmonthlyquarterlyyearlynext_datestring <date>end_datestring <date> | nullis_activebooleanlinesobject[]Eigenschaften
account_idintegererforderlichPostable account.debitstring | nullDecimal.creditstring | nullDecimal.labelstring | nullthird_party_idinteger | null
Beispiel
{
"is_active": false
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema RecurringEntry
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.recurring.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
recurringEntry erforderlich | integer | Id of the recurring entry template. z. B. 5 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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. VersionConflictBeispielaufruf
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)
Operations-ID companies.recurring.generate
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
recurringEntry erforderlich | integer | Id of the recurring entry template. z. B. 5 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
generatedintegerz. B.1entriesobject[]Eigenschaften
idintegerreferencestringz. B.OD 2026/000031entry_datestring <date>
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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.
Operations-ID companies.quality
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
checked_atstring <date-time>scoreintegerChecks passed.z. B.8totalintegerz. B.10checksobject[]Eigenschaften
codestringz. B.bank_pendingseveritystringokinfowarningerrorcountintegerz. B.3detailobject | null
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.documents.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
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. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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)
Operations-ID companies.documents.book-all
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
type | string | |
direction | string | sale purchase |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
bookedintegerz. B.42skippedintegerz. B.3skipped_documentsobject[]Eigenschaften
idintegernumberstring | nullthird_partystring | nullreasonstringz. B.Aucun compte d'imputation sur la ligne 2.
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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.
Operations-ID companies.documents.show
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
importedDocument erforderlich | integer | Id of the document. z. B. 87 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema ImportedDocument
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.documents.lines.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
importedDocument erforderlich | integer | Id of the document. z. B. 87 |
line erforderlich | integer | Id of the line. z. B. 3391 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
account_idinteger | nullPostable account.vat_code_idinteger | null
Beispiel
{
"account_id": 361
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema ImportedDocumentLine
Beispiel
{
"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. ErrorBeispielaufruf
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)
Operations-ID companies.documents.book
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
importedDocument erforderlich | integer | Id of the document. z. B. 87 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
201Booked, with journal_entry
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema ImportedDocument
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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.
Operations-ID companies.documents.ignore
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
importedDocument erforderlich | integer | Id of the document. z. B. 87 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
restoreboolean
Beispiel
{
"restore": false
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema ImportedDocument
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.document-imports.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
batch_id | string <uuid> | |
status | string | Comma-separated statuses. z. B. ready,needs_review |
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.document-imports.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
multipart/form-data
Schema object
files[]string <binary>[]erforderlichbatch_idstring <uuid>Reuse a batch to add files to it.
Antworten
201Files stored
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
batch_idstring <uuid>importsDocumentImport[]
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.document-imports.engines
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
enginesobject[]Eigenschaften
idstringz. B.apiconfiguredboolean
Beispiel
{
"engines": [
{
"id": "api",
"configured": true
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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.
Operations-ID companies.document-imports.show
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
documentImport erforderlich | integer | Id of the import (uploaded file). z. B. 311 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema DocumentImport
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.document-imports.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
documentImport erforderlich | integer | Id of the import (uploaded file). z. B. 311 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
Beispiel
{
"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"
}
]
}
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema DocumentImport
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.document-imports.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
documentImport erforderlich | integer | Id of the import (uploaded file). z. B. 311 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-Trashed
application/json
Schema object
deletedboolean
Beispiel
{
"deleted": true
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorX-Base-Version. Nothing was modified. VersionConflictBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.document-imports.process
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
documentImport erforderlich | integer | Id of the import (uploaded file). z. B. 311 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema DocumentImport
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.document-imports.retry
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
documentImport erforderlich | integer | Id of the import (uploaded file). z. B. 311 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
forceboolean
Beispiel
{
"force": true
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema DocumentImport
Beispiel
{
"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. ErrorBeispielaufruf
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)
Operations-ID companies.document-imports.validate
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
documentImport erforderlich | integer | Id of the import (uploaded file). z. B. 311 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
extractedExtractedDocumentthird_party_idinteger | nullnew_third_partyobjectEigenschaften
typestringsuppliercustomernamestringerforderlichvat_numberstring | nullenterprise_numberstring | nulladdressstring | nullpostal_codestring | nullcitystring | nullcountrystring | nullibanstring | nullbicstring | nullemailstring <email> | nullphonestring | null
directionstringpurchasesalelinesobject[]Eigenschaften
account_idinteger | nullvat_code_idinteger | null
bookbooleanTrue by default.push_to_novadeskoboolean | nullforcebooleanValidate despite a duplicate warning.
Beispiel
{
"third_party_id": 18,
"direction": "purchase",
"lines": [
{
"account_id": 361,
"vat_code_id": 25
}
],
"book": true
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
importDocumentImportdocumentImportedDocumententryJournalEntry | nullnovadeskoobjectEigenschaften
statusstringpushed, skipped, failed or not_linked.z. B.skippedmessagestring | null
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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 Signierte URL 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).
Operations-ID document-imports.file
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
documentImport erforderlich | integer | Id of the import (uploaded file). z. B. 311 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
preview | string | 0 serves the original file.0 1 |
Gemeinsame Header: signature expires
Antworten
200The file, inline.
Antwort-Header 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. ErrorBeispielaufruf
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.
Operations-ID companies.bank-transactions.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
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. z. B. 1 |
per_page | integer | Items per page (default 100, maximum 500). z. B. 100 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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).
Operations-ID companies.bank-transactions.match
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
proposalsintegerz. B.17
Beispiel
{
"proposals": 17
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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).
Operations-ID companies.bank-transactions.book-matched
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
include_mediumboolean
Beispiel
{
"include_medium": false
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
bookedintegerz. B.14skippedobject[]Eigenschaften
idintegerreasonstring
Beispiel
{
"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. ErrorBeispielaufruf
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)
Operations-ID companies.bank-transactions.book
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
bankTransaction erforderlich | integer | Id of the bank transaction. z. B. 951 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
account_idinteger | nullPostable account; absent = payment of the matched invoice.third_party_idinteger | nulllabelstring | null
Beispiel
{
"account_id": 517,
"label": "Frais de tenue de compte"
}Antworten
201Booked, with journal_entry
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema BankTransaction
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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.
Operations-ID companies.bank-transactions.ignore
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
bankTransaction erforderlich | integer | Id of the bank transaction. z. B. 951 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
restoreboolean
Beispiel
{
"restore": false
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema BankTransaction
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.treasury
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema Treasury
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.bank-rules.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.bank-rules.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
namestringerforderlichfieldstringerforderlichcounterpart_namecounterpart_ibancommunicationdescriptionanyoperatorstringcontainsequalsstartspatternstringerforderlichdirectionstringinoutanyaccount_idintegererforderlichPostable account.third_party_idinteger | nulllabelstring | nullpriorityinteger1 to 999.is_activeboolean
Beispiel
{
"name": "Frais bancaires",
"field": "description",
"operator": "contains",
"pattern": "frais de tenue",
"direction": "out",
"account_id": 517
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema BankRule
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.bank-rules.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
bankRule erforderlich | integer | Id of the bank rule. z. B. 6 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
namestringfieldstringcounterpart_namecounterpart_ibancommunicationdescriptionanyoperatorstringcontainsequalsstartspatternstringdirectionstringinoutanyaccount_idintegerPostable account.third_party_idinteger | nulllabelstring | nullpriorityinteger1 to 999.is_activeboolean
Beispiel
{
"is_active": false
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema BankRule
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.bank-rules.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
bankRule erforderlich | integer | Id of the bank rule. z. B. 6 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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. VersionConflictBeispielaufruf
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.
Operations-ID companies.coda-files.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
journal_id | integer | |
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.coda-files.download
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
codaFile erforderlich | integer | Id of the CODA file. z. B. 31 |
Gemeinsame Header: Accept-Language
Antworten
200The CODA file.
Antwort-Header Content-Disposition
text/plain
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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.
Operations-ID companies.payments.open-items
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
itemsobject[]Eigenschaften
line_idintegerentry_idintegerreferencestringz. B.ACH 2026/000412journal_codestringz. B.ACHentry_datestring <date>due_datestring <date> | nulloverduebooleanlabelstringexternal_referencestring | nullz. B.F-2026-0412structured_communicationstring | nullthird_party_idintegerthird_partystringz. B.Brasserie Dubuisson SAibanstring | nullbicstring | nullamountstring <decimal>z. B.655.82payableboolean
totalstring <decimal>z. B.655.82payable_countintegerz. B.1
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.payments.sepa
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
journal_idintegererforderlichFinancial journal with an IBAN.line_idsinteger[]erforderlichexecution_datestring <date>erforderlichToday or later.
Beispiel
{
"journal_id": 7,
"line_ids": [
3394,
3410
],
"execution_date": "2026-04-02"
}Antworten
200SEPA pain.001 file. Headers X-Sepa-Count and X-Sepa-Total give the number of transfers and their total.
Antwort-Header 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. ErrorBeispielaufruf
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.
Operations-ID companies.vat-codes.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
all | boolean | Include the inactive codes. |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.vat-codes.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
vatCode erforderlich | integer | Id of the VAT code. z. B. 4 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
is_activebooleandescriptionstring | null
Beispiel
{
"is_active": false
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema VatCode
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.vat.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
year | integer | Current year by default. z. B. 2026 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
yearintegerz. B.2026period_typestringmonthlyquarterlyperiodsobject[]Eigenschaften
periodintegerz. B.1labelstringz. B.1T 2026starts_onstring <date>ends_onstring <date>declarationVatDeclaration | nullpreviewVatComputation | null
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.vat.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
yearintegererforderlich2000 to 2100.z. B.2026periodintegererforderlichMonth (1-12) or quarter (1-4) according to the VAT regime of the file.z. B.1
Beispiel
{
"year": 2026,
"period": 1
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema VatDeclaration
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.vat.preview
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
year erforderlich | integer | 2000 to 2100. z. B. 2026 |
period erforderlich | integer | Month (1-12) or quarter (1-4) according to the VAT regime of the file. z. B. 1 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.vat.intracom-listing
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
year erforderlich | integer | 2000 to 2100. z. B. 2026 |
period erforderlich | integer | Month (1-12) or quarter (1-4) according to the VAT regime of the file. z. B. 1 |
format | string | xml |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
yearintegerperiodintegerperiod_typestringfromstring <date>tostring <date>clientsobject[]Eigenschaften
vat_numberstringz. B.NL853746333B01countrystringz. B.NLnamestringcodestringL goods, S services, T triangular.z. B.Samountstring <decimal>
totalstring <decimal>total_goodsstring <decimal>total_servicesstring <decimal>
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.vat.client-listing
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
year erforderlich | integer | Calendar year. z. B. 2026 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
format | string | xml |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
yearintegerz. B.2026clientsobject[]Eigenschaften
vat_numberstringz. B.BE0403170701namestringz. B.ACME SAturnovernumberz. B.18250vatnumberz. B.3832.5declareboolean
total_turnovernumbertotal_vatnumber
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.vat.show
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
vatDeclaration erforderlich | integer | Id of the VAT declaration. z. B. 14 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema VatDeclaration
Beispiel
{
"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. ErrorBeispielaufruf
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)
Operations-ID companies.vat.validate
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
vatDeclaration erforderlich | integer | Id of the VAT declaration. z. B. 14 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema VatDeclaration
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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.
Operations-ID companies.vat.submit
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
vatDeclaration erforderlich | integer | Id of the VAT declaration. z. B. 14 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
referencestring | nullIntervat receipt reference.
Beispiel
{
"reference": "INTERVAT-2026-04-0098123"
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema VatDeclaration
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.vat.xml
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
vatDeclaration erforderlich | integer | Id of the VAT declaration. z. B. 14 |
Gemeinsame Header: Accept-Language
Antworten
200Intervat XML file.
Antwort-Header Content-Disposition
application/xml
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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.
Operations-ID companies.fixed-assets.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema FixedAsset[]
Array von FixedAsset
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.fixed-assets.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
namestringerforderlichreferencestring | nullcategorystringerforderlichit_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>erforderlichacquisition_coststringerforderlichDecimal, excl. VAT.residual_valuestring | nullDecimal.useful_life_yearsintegererforderlich1 to 50.methodstringlineardecliningprorata_temporisbooleanTrue by default.start_datestring <date> | nullStart of the depreciation; the acquisition date by default.notesstring | null
Beispiel
{
"name": "Four mixte Rational",
"category": "machinery",
"acquisition_date": "2026-02-01",
"acquisition_cost": "12400.00",
"useful_life_years": 5
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema FixedAsset
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.fixed-assets.groups
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
fiscal_yearstringz. B.2026groupsobject[]Eigenschaften
groupstringz. B.machinerycountintegerz. B.1acquisition_coststring <decimal>z. B.12400.00accumulatedstring <decimal>z. B.2269.37net_book_valuestring <decimal>z. B.10130.63year_depreciationstring <decimal>z. B.2269.37investment_deductionstring <decimal>z. B.0.00assetsobject[]
totalsobjectEigenschaften
acquisition_coststring <decimal>accumulatedstring <decimal>net_book_valuestring <decimal>year_depreciationstring <decimal>investment_deductionstring <decimal>
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.fixed-assets.show
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fixedAsset erforderlich | integer | Id of the fixed asset. z. B. 9 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema FixedAsset
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.fixed-assets.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fixedAsset erforderlich | integer | Id of the fixed asset. z. B. 9 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
namestringcategorystringit_equipmentvehiclefurnituremachinerybuildingsoftwareotherasset_groupstring | nullinvestment_deduction_pctnumber | nullinvestment_deduction_spreadbooleanasset_account_idinteger | nullresidual_valuestringuseful_life_yearsintegermethodstringlineardecliningprorata_temporisbooleanstatusstringactivefully_depreciateddisposednotesstring | null
Beispiel
{
"useful_life_years": 7
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema FixedAsset
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.fixed-assets.book-period
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
period_numberintegererforderlich1 to 12.
Beispiel
{
"period_number": 3
}Antworten
200Nothing to book
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
entryJournalEntry | nullperiodstringz. B.Mars 2026
Beispiel
{
"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
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
entryJournalEntryperiodstringz. B.Mars 2026
Beispiel
{
"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. ErrorBeispielaufruf
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)
Operations-ID companies.fixed-assets.book
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fixedAsset erforderlich | integer | Id of the fixed asset. z. B. 9 |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema FixedAsset
Beispiel
{
"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). PeriodLockedErrorBeispielaufruf
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.
Operations-ID companies.fixed-assets.dispose
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fixedAsset erforderlich | integer | Id of the fixed asset. z. B. 9 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
datestring <date>erforderlichsale_pricestring | nullDecimal, excl. VAT.labelstring | null
Beispiel
{
"date": "2026-09-30",
"sale_price": "4500.00"
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
assetFixedAssetentryJournalEntry
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.reports.journal
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
journal erforderlich | integer | Id of the journal. z. B. 3 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
from | string <date> | |
to | string <date> |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema JournalEntry[]
Array von JournalEntry
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.reports.trial-balance
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
from | string <date> | |
to | string <date> | |
include_empty | boolean | Include the accounts without movement. |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
fiscal_yearstringz. B.2026fromstring <date>tostring <date>linesobject[]Eigenschaften
account_idintegerz. B.223numberstringz. B.400000labelstringz. B.Clientstypestringz. B.assetdebitstring <decimal>z. B.1210.00creditstring <decimal>z. B.0.00debit_balancestring <decimal>z. B.1210.00credit_balancestring <decimal>z. B.0.00balancestring <decimal>z. B.1210.00
totalsobjectEigenschaften
debitstring <decimal>z. B.1512.50creditstring <decimal>z. B.1512.50is_balancedbooleanresultstring <decimal>Result of the period.z. B.750.00
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.reports.balance-by-period
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
fiscal_yearstringz. B.2026periodsobject[]Eigenschaften
idintegernumberintegerlabelstringz. B.Janvier 2026is_lockedboolean
accountsobject[]Eigenschaften
account_idintegerz. B.223numberstringz. B.400000labelstringz. B.Clientstypestringz. B.assetperiodsstring <decimal>[]totalstring <decimal>
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.reports.financial-statements
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
to | string <date> | Situation at this date. |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
fiscal_yearstringz. B.2026tostring <date>schemestringz. B.BEbalance_sheetobject[]Eigenschaften
codestringz. B.20/28labelstringz. B.ACTIFS IMMOBILISÉSsidestringassetliabilitygroupbooleanamountstring <decimal> | null
totalsobjectEigenschaften
assetsstring <decimal>z. B.1262.50liabilitiesstring <decimal>z. B.1262.50is_balancedboolean
income_statementobject[]Eigenschaften
codestringz. B.70labelstringz. B.Chiffre d'affairessidestringincomeexpensedetailbooleanamountstring <decimal>z. B.1000.00
resultstring <decimal>z. B.750.00
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.reports.general-ledger
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
account erforderlich | integer | Id of the account (not its number). z. B. 223 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
from | string <date> | |
to | string <date> |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
account_idintegerz. B.223fromstring <date>tostring <date>opening_balancestring <decimal>z. B.0.00movementsobject[]Eigenschaften
line_idintegerentry_idintegerentry_datestring <date>journalstringz. B.VENdocumentstringz. B.2026/000412labelstring | nullreferencestring | nullthird_partystring | nulldebitstring <decimal>creditstring <decimal>balancestring <decimal>reconciliation_codestring | null
totalsobjectEigenschaften
debitstring <decimal>creditstring <decimal>balancestring <decimal>
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.reports.consistency
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
fiscal_yearstringz. B.2026missing_numbersobject[]period_mismatchesobject[]entries_outside_fiscal_yearintegerz. B.0is_consistentboolean
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.reports.third-party-balance
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
type erforderlich | string | Side of the balance.customer supplier |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
to | string <date> |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object[]
Array von
third_party_idintegercodestringz. B.ACMEnamestringz. B.ACME SAdebitstring <decimal>creditstring <decimal>outstandingstring <decimal>z. B.1210.00open_itemsintegerz. B.1
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.reports.aged-balance
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
type erforderlich | string | Side of the balance.customer supplier |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
to | string <date> | Today by default. |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
typestringz. B.customertostring <date>rowsobject[]Eigenschaften
third_party_idintegercodestringnamestringtotalstring <decimal>currentstring <decimal>d30string <decimal>d60string <decimal>d90string <decimal>d90plusstring <decimal>
totalsobjectEigenschaften
currentstring <decimal>d30string <decimal>d60string <decimal>d90string <decimal>d90plusstring <decimal>totalstring <decimal>
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.analytic-codes.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
axis | string | cost_center project |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema AnalyticCode[]
Array von AnalyticCode
Beispiel
[
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.analytic-codes.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
axisstringerforderlichcost_centerprojectcodestringerforderlichUnique per axis, 20 max.labelstringerforderlichis_activeboolean
Beispiel
{
"axis": "cost_center",
"code": "SALLE",
"label": "Salle"
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema AnalyticCode
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.analytic-codes.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
analyticCode erforderlich | integer | Id of the analytic code. z. B. 2 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
labelstringis_activeboolean
Beispiel
{
"is_active": false
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema AnalyticCode
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.reports.analytic
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
axis | string | cost_center project |
from | string <date> | |
to | string <date> |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
axisstringfiscal_yearstringgroupsobject[]Eigenschaften
codestring | nullz. B.SALLElabelstring | nullexpensesstring <decimal>incomestring <decimal>resultstring <decimal>accountsobject[]Eigenschaften
account_idintegerz. B.223numberstringz. B.400000labelstringz. B.Clientstypestringz. B.assetamountstring <decimal>
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.budgets.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
scenario | string | default when absent. |
Gemeinsame Header: Accept-Language
Antworten
200OK
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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.
Operations-ID companies.budgets.save
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
scenariostringcellsobject[]erforderlichEigenschaften
account_idintegererforderlichcost_center_idinteger | nullperiod_numberintegererforderlich1 to 12.amountstringerforderlichDecimal.
spread_yearlyboolean
Beispiel
{
"cells": [
{
"account_id": 378,
"period_number": 1,
"amount": "18000.00"
}
],
"spread_yearly": true
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
savedintegerz. B.1
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.reports.budget
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
scenario | string | |
cost_center_id | integer | |
upto_period | integer | 1 to 12. |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
scenariostringfiscal_yearstringupto_periodintegerlinesobject[]Eigenschaften
account_idintegerz. B.223numberstringz. B.400000labelstringz. B.Clientstypestringz. B.assetbudgetobjectPeriod number => amount.actualobjectPeriod number => amount.budget_ytdstring <decimal>actual_ytdstring <decimal>variancestring <decimal>variance_pctnumber | nullbudget_yearstring <decimal>
totalsobjectEigenschaften
expenses_minus_income_budgetstring <decimal>expenses_minus_income_actualstring <decimal>
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.exports.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
lang | string | fr nl en de |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
typesstring[]formatsstring[]pdfxlsxcsvdefault_formatstringz. B.csvfull_dossierstringz. B.zipgroupsobject[]Eigenschaften
codestringbooksstatementsvatthird_partiesassetsdatalabelstringz. B.Livres comptables
common_paramsstring[]catalogobject[]Eigenschaften
codestringz. B.general-ledgerlabelstringz. B.Grand livredescriptionstringgroupstringz. B.booksgroup_labelstringformatsstring[]datedbooleanrequires_fiscal_yearbooleanparamsobject[]
Beispiel
{
"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. ErrorBeispielaufruf
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).
Operations-ID companies.exports.full-dossier
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
fiscalYear erforderlich | integer | Id of the fiscal year. z. B. 2 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
lang | string | fr nl en de |
Gemeinsame Header: Accept-Language
Antworten
200ZIP archive.
Antwort-Header Content-Disposition X-RateLimit-Limit X-RateLimit-Remaining
application/zip
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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).
Operations-ID companies.exports.preview-url
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
type erforderlich | string | Export code from the catalogue of GET exports (journals, general-ledger, trial-balance, vat-declaration, …).z. B. trial-balance |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
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 |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
urlstring <uri>expires_inintegerSeconds.z. B.900formatstringz. B.pdf
Beispiel
{
"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. ErrorBeispielaufruf
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).
Operations-ID companies.exports.download
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
type erforderlich | string | Export code from the catalogue of GET exports (journals, general-ledger, trial-balance, vat-declaration, …).z. B. trial-balance |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
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 |
Gemeinsame Header: Accept-Language
Antworten
200The file.
Antwort-Header 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. ErrorBeispielaufruf
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) Signierte URL 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).
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
type erforderlich | string | Export code from the catalogue of GET exports (journals, general-ledger, trial-balance, vat-declaration, …).z. B. trial-balance |
Gemeinsame Header: signature expires
Antworten
200The PDF, inline.
Antwort-Header Content-Disposition X-RateLimit-Limit X-RateLimit-Remaining
application/pdf
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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.
Operations-ID companies.peppol.show
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema PeppolState
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
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.
Operations-ID companies.peppol.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
reason_typestringerforderlichexpensiveaccountantothercustom_reasonstring | nullRequired when the reason isother.
Beispiel
{
"reason_type": "accountant"
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-Trashed
application/json
Schema PeppolState
Beispiel
{
"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
Beispiel
{
"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"
]
}Beispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.peppol.register
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
emailstring <email> | nullContact of the registration.phonestring | nulladdressstring | nullpostal_codestring | nullcitystring | nullprovincestring | nulloptionsobjectEigenschaften
round_before_sumboolean | nullapply_taxes_per_lineboolean | nullregistered_for_empl_taxboolean | null
Beispiel
{
"email": "gerant@comptoir-montois.example",
"address": "Grand-Place 14",
"postal_code": "7000",
"city": "Mons"
}Antworten
200Already registered
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema PeppolState
Beispiel
{
"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
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema PeppolState
Beispiel
{
"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
Beispiel
{
"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"
]
}Beispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.peppol.refresh
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema PeppolState
Beispiel
{
"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
Beispiel
{
"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"
]
}Beispielaufruf
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 Nicht in der Demo
Reception and the document families received through Peppol.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Operations-ID companies.peppol.transport
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
enabledboolean | nullreceptionboolean | nullstandard_documentsboolean | nullinvoiceboolean | nullcredit_noteboolean | nullself_billingboolean | nullorderboolean | nullapplication_responseboolean | null
Beispiel
{
"reception": true,
"credit_note": true
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema PeppolState
Beispiel
{
"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
Beispiel
{
"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"
]
}Beispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.peppol.lookup
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
identifier | string | z. B. 0208:0402531376 |
vat | string | z. B. BE0402531376 |
country | string | z. B. BE |
enterprise_number | string |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema PeppolThirdPartyStatus
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.peppol.document-types
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
document_typesPeppolDocumentType[]familiesstring[]identifier_schemesobjectCountry => ISO 6523 scheme (BE: 0208).
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.peppol.logs
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
limit | integer | 1 to 200, 50 by default. |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
logsobject[]
Beispiel
{
"logs": [
{}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.third-parties.peppol.check-all
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
only_staleboolean | nullOnly the statuses older than 7 days.
Beispiel
{
"only_stale": true
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
checkedintegerz. B.42registeredintegerz. B.17errorsintegerz. B.0skippedintegerThird parties without a usable identifier.z. B.1
Beispiel
{
"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. ErrorBeispielaufruf
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).
Operations-ID companies.third-parties.peppol
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
thirdParty erforderlich | integer | Id of the third party. z. B. 18 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
refresh | boolean |
Gemeinsame Header: Accept-Language
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema PeppolThirdPartyStatus
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.integrations.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
lang | string | fr nl en de |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
integrationsIntegration[]
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
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
Operations-ID companies.integrations.activate
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
integration erforderlich | string | Slug of the integration (novadesko, peppol, file_import, …).z. B. novadesko |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
configobject | nullValues of the configuration schema.
Beispiel
{
"config": []
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema Integration
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
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
Operations-ID companies.integrations.deactivate
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
integration erforderlich | string | Slug of the integration (novadesko, peppol, file_import, …).z. B. novadesko |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema Integration
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
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
Operations-ID companies.integrations.config
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
integration erforderlich | string | Slug of the integration (novadesko, peppol, file_import, …).z. B. novadesko |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
configobjecterforderlich
Beispiel
{
"config": {}
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema Integration
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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
Operations-ID companies.integrations.test
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
integration erforderlich | string | Slug of the integration (novadesko, peppol, file_import, …).z. B. novadesko |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
okbooleanmessagestring | nullintegrationIntegration
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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
Operations-ID companies.integrations.sync
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
integration erforderlich | string | Slug of the integration (novadesko, peppol, file_import, …).z. B. novadesko |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
fullbooleanFull resynchronisation instead of incremental.
Beispiel
{
"full": false
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
resultobject | nullCounters of the driver (documents, bank transactions, assets…).integrationIntegration
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.integrations.runs
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
integration erforderlich | string | Slug of the integration (novadesko, peppol, file_import, …).z. B. novadesko |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
limit | integer | 1 to 100, 20 by default. |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
runsIntegrationRun[]
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
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.
Operations-ID companies.integrations.interest
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
integration erforderlich | string | Slug of the integration (novadesko, peppol, file_import, …).z. B. novadesko |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
registeredbooleanregistered_atstring <date-time>slugstringz. B.codabox
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.sync.novadesko
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
fullbooleanReload everything instead of the changes since the last run.
Beispiel
{
"full": false
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
documentsintegerDocuments created or updated.z. B.12bank_transactionsintegerz. B.34coda_filesintegerz. B.2fixed_assetsintegerz. B.0errorstring | nullsynced_atstring <date-time>
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.files.preview-url
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
url erforderlich | string <uri> | File on web.novadesko.com. |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
urlstring <uri>expires_inintegerz. B.1200
Beispiel
{
"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. ErrorBeispielaufruf
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 Signierte URL 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).
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
url erforderlich | string <uri> |
Gemeinsame Header: signature expires
Antworten
200The file, inline.
Antwort-Header 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. ErrorBeispielaufruf
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.
Operations-ID companies.history.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
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. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.history.users
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
dataobject[]Eigenschaften
idintegernamestringz. B.Claire Dumontrevisionsintegerz. B.214last_atstring <date-time> | nullrolestringz. B.firm_admin
devicesobject[]Eigenschaften
idstringnamestring | nullrevisionsinteger
subject_typesobject[]Eigenschaften
keystringz. B.third_partieslabelstringz. B.Tiers
actionsobject[]Eigenschaften
keystringz. B.createdlabelstringz. B.Création
Beispiel
{
"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. ErrorBeispielaufruf
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).
Operations-ID companies.history.export
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
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. |
Gemeinsame Header: Accept-Language
Antworten
200CSV file.
Antwort-Header Content-Disposition X-RateLimit-Limit X-RateLimit-Remaining
text/csv
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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.
Operations-ID companies.history.settings
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
trash_retention_daysintegerz. B.90default_trash_retention_daysintegerz. B.90min_trash_retention_daysintegerz. B.7max_trash_retention_daysintegerz. B.3650sync_retention_daysintegerz. B.90can_editboolean
Beispiel
{
"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. ErrorBeispielaufruf
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
Operations-ID companies.history.settings.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Request-Body
application/json
Schema object
trash_retention_daysintegererforderlich7 to 3650.
Beispiel
{
"trash_retention_days": 180
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
trash_retention_daysintegerz. B.180default_trash_retention_daysintegerz. B.90min_trash_retention_daysintegerz. B.7max_trash_retention_daysintegerz. B.3650sync_retention_daysintegerz. B.90can_editboolean
Beispiel
{
"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. ErrorBeispielaufruf
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
Operations-ID companies.history.operations.revert
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
operation erforderlich | string <uuid> | Operation id (X-Operation-Id) grouping the changes of one action.z. B. bf413a19-2136-4504-bc42-b314637eb5c7 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
reasonstring | nullforcebooleanOverwrite newer values (managers).
Beispiel
{
"reason": "Erreur de saisie"
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
revertedbooleanoperation_idstring <uuid>countintegerz. B.3revisionsRevision[]skippedobject[]
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.history.show
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
revision erforderlich | integer | Id of the revision (history line). z. B. 2301 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema Revision
Beispiel
{
"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. ErrorBeispielaufruf
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
Operations-ID companies.history.revert
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
revision erforderlich | integer | Id of the revision (history line). z. B. 2301 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
reasonstring | nullforceboolean
Beispiel
{
"reason": "Mauvais tiers"
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.activity
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
user_id | integer | |
from | string <date> | |
to | string <date> | |
type | string | |
source | string | audit revision |
q | string | |
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema ActivityFeed
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.trash.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
type | string | Recycle bin type. |
q | string | |
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
dataTrashItem[]countsobjectType => count.typesobject[]Eigenschaften
keystringlabelstringcountinteger
totalintegercurrent_pageintegerper_pageintegerlast_pageintegerretention_daysintegerz. B.90can_purgeboolean
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.trash.restore-all
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body optional
application/json
Schema object
typestring | null
Beispiel
{
"type": "third_parties"
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
restoredintegerz. B.4skippedobject[]Eigenschaften
typestringidintegerlabelstringblocked_reasonstringz. B.code_taken
Beispiel
{
"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. ErrorBeispielaufruf
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
Operations-ID companies.trash.restore
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
type erforderlich | string | Recycle bin type: third_parties, accounts, journals, journal_rules, bank_rules, recurring_entries, analytic_codes, fixed_assets, documents, document_imports, integrations.z. B. third_parties |
id erforderlich | integer | Id of the record. z. B. 42 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
restoredbooleantypestringidintegerlabelstringversionintegerdataobject
Beispiel
{
"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. ErrorBeispielaufruf
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
Operations-ID companies.trash.purge
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
type erforderlich | string | Recycle bin type: third_parties, accounts, journals, journal_rules, bank_rules, recurring_entries, analytic_codes, fixed_assets, documents, document_imports, integrations.z. B. third_parties |
id erforderlich | integer | Id of the record. z. B. 42 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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. VersionConflictBeispielaufruf
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.
Operations-ID companies.history.subject.third-parties
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.history.subject.entries
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.history.subject.documents
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.history.subject.accounts
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.history.subject.bank-transactions
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.history.subject.fixed-assets
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.history.subject.journals
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.history.subject.recurring-entries
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.history.subject.vat-declarations
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Beispiel
{
"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. ErrorBeispielaufruf
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
Operations-ID companies.trash.destroy.accounts
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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. ErrorBeispielaufruf
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
Operations-ID companies.trash.destroy.analytic-codes
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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. ErrorBeispielaufruf
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
Operations-ID companies.trash.destroy.fixed-assets
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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. ErrorBeispielaufruf
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
Operations-ID companies.trash.destroy.documents
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
id erforderlich | integer | Id of the record. z. B. 42 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin X-Base-Version
Antworten
204Done, no body.
Antwort-Header 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. ErrorBeispielaufruf
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.
Operations-ID companies.sync.bootstrap
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
cursorintegerz. B.1042server_timestring <date-time>full_resyncbooleanz. B.falseretention_daysintegerz. B.90resourcesobject[]Eigenschaften
namestringz. B.third_partiescountintegerz. B.187endpointstringz. B.companies/XBVD5O1L29HC/third-partiespaginatedbooleanz. B.false
companyCompanycompany_settingsCompanySettingsuserobjectEigenschaften
idintegernamestringz. B.Claire Dumontrolestringz. B.firm_adminrole_rankintegercan_writebooleancan_forceboolean
pushobjectEigenschaften
resourcesstring[]max_mutationsintegerz. B.200temp_id_prefixstringz. B.tmp-
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.sync.pull
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
since | integer | Cursor of the previous pull or bootstrap. z. B. 1042 |
resources | string | Comma-separated resource names. z. B. third_parties,entries |
limit | integer | 500 by default, 1000 max. |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
cursorintegerz. B.1057has_morebooleanz. B.falsefull_resyncbooleanz. B.falsechangesSyncChange[]server_timestring <date-time>
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.sync.push
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
deviceobjectEigenschaften
idstringnamestringplatformstringz. B.macos
Beispiel
{
"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"
}
}
]
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
resultsSyncMutationResult[]cursorintegerserver_timestring <date-time>
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.sync.status
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
cursorintegerserver_timestring <date-time>pending_conflictsintegerz. B.0last_push_atstring <date-time> | nulldevicesobject[]Eigenschaften
idstringnamestring | nullplatformstring | nulluserobject | nulllast_seen_atstring <date-time> | nulllast_push_atstring <date-time> | nulllast_cursorinteger | null
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.sync.conflicts
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
status | string | open resolved |
resource | string | |
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 50, maximum 200). z. B. 50 |
Gemeinsame Header: Accept-Language
Antworten
200Paginated list
application/json
Schema Pagination & object
Enthält Pagination
dataSyncConflict[]openintegerNumber of open conflicts.z. B.0
Beispiel
{
"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. ErrorBeispielaufruf
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
Operations-ID companies.sync.conflicts.resolve
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
conflict erforderlich | integer | Id of the synchronisation conflict. z. B. 8 |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
choicestringerforderlichserverclientmergedataobject | nullRequired formerge.
Beispiel
{
"choice": "client"
}Antworten
200OK
Antwort-Header X-Operation-Id X-Idempotent-Replay
application/json
Schema object
resolvedbooleanconflictSyncConflictdataobject | null
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.mail.documents
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
tostring <email>[]erforderlichccstring <email>[]subjectstring | nullmessagestringerforderlich5000 characters max.document_idsinteger[]exportobjectEigenschaften
typestringerforderlichExport code orfull-dossier.formatstringpdfxlsxcsvzipfiscal_year_idinteger | nullfromstring <date> | nulltostring <date> | nulllangstringfrnlendeparamsobject | null
as_linkboolean
Beispiel
{
"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"
}
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
messagestringsentintegerz. B.1modestringattachmentlinkrecipientsstring <email>[]attachmentsobject[]Eigenschaften
namestringz. B.balance-2026-09-30.pdfsizeintegerz. B.48211
link_expires_atstring <date-time> | null
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID companies.mail.document-request
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Gemeinsame Header: Accept-Language X-Client-Mutation-Id X-Operation-Id X-Device-Id X-Device-Name X-Occurred-At X-Origin
Request-Body
application/json
Schema object
tostring <email>[]erforderlichitemsstring[]erforderlichmessagestring | nulldue_datestring <date> | null
Beispiel
{
"to": [
"gerant@comptoir-montois.example"
],
"items": [
"Extrait bancaire de septembre",
"Facture Engie d'août"
],
"due_date": "2026-10-15"
}Antworten
201Created
Antwort-Header X-Operation-Id X-Idempotent-Replay X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
sentintegerz. B.1messagestring
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID companies.mail.logs
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
company erforderlich | string | Public token of the company file (public_token, 12 characters).z. B. XBVD5O1L29HC |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
template | string | Template key. |
per_page | integer | 25 by default, 100 max. |
page | integer |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
dataMailLog[]metaobjectEigenschaften
current_pageintegerz. B.1last_pageintegerz. B.1totalintegerz. B.12
Beispiel
{
"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. ErrorBeispielaufruf
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 Öffentlich 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).
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
token erforderlich | string | Opaque token. z. B. a1B2c3D4e5 |
Antworten
200Transparent 1 × 1 GIF.
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
image/gif
Beispielaufruf
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 Öffentlich 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).
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
token erforderlich | string | Opaque token. z. B. a1B2c3D4e5 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
u erforderlich | string | Encoded target. |
s erforderlich | string | Signature. |
Antworten
302Redirection to the target.
| Antwort-Header | Beschreibung |
|---|---|
Location | Target of the redirection. |
Beispielaufruf
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.
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
dataobject[]Eigenschaften
eventstringz. B.entry.posteddescriptionstringz. B.An entry was posted.
Beispiel
{
"data": [
{
"event": "entry.posted",
"description": "An entry was posted."
}
]
}token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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.
Operations-ID firms.webhooks.index
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
dataWebhookEndpoint[]available_eventsstring[]
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
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)
Operations-ID firms.webhooks.store
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
urlstring <uri>erforderlichHTTPS endpoint that receives the events (500 characters max).descriptionstring | nulleventsstring[]erforderlichis_activeboolean
Beispiel
{
"url": "https://erp.example.com/hooks/novafisko",
"description": "ERP connector",
"events": [
"entry.posted",
"document.booked",
"vat.declaration_validated"
]
}Antworten
201Created
application/json
Schema object
webhookWebhookEndpointdataWebhookEndpointsecretstringSigning secret (whsec_ followed by 40 characters), shown once.z. B.whsec_4Qm9x2kL8vT4nR7sW1pZ5cY3hJ6dF0gA9bE2uI4o
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
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)
Operations-ID firms.webhooks.update
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
webhook erforderlich | integer | Id of the webhook endpoint. z. B. 3 |
Gemeinsame Header: Accept-Language
Request-Body
application/json
Schema object
urlstring <uri>descriptionstring | nulleventsstring[]is_activeboolean
Beispiel
{
"is_active": false
}Antworten
200OK
application/json
Schema object
webhookWebhookEndpoint
Beispiel
{
"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. ErrorBeispielaufruf
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 Nicht in der Demo
Pending deliveries of the endpoint are dropped.
Integration tokens need the write ability.
Not available in demo mode: answers 403 demo_mode.
Operations-ID firms.webhooks.destroy
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
webhook erforderlich | integer | Id of the webhook endpoint. z. B. 3 |
Gemeinsame Header: Accept-Language
Antworten
204Done, no body.
Kein Body.
token_ability_missing, session_token_required), demo restriction (demo_mode) or invalid URL signature. ErrorBeispielaufruf
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 Nicht in der Demo 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).
Operations-ID firms.webhooks.test
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
webhook erforderlich | integer | Id of the webhook endpoint. z. B. 3 |
Gemeinsame Header: Accept-Language
Antworten
202Test event sent.
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
deliveryWebhookDelivery
Beispiel
{
"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. ErrorBeispielaufruf
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.
Operations-ID firms.webhooks.deliveries
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
firm erforderlich | string | Public token of the firm (public_token, 12 characters).z. B. NDTQVQU4AUAV |
webhook erforderlich | integer | Id of the webhook endpoint. z. B. 3 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
status | string | pending delivered failed |
event | string | z. B. entry.posted |
page | integer | Page number, starting at 1. z. B. 1 |
per_page | integer | Items per page (default 25, maximum 100). z. B. 25 |
Gemeinsame Header: Accept-Language
Antworten
200OK
application/json
Schema object
dataWebhookDelivery[]metaobjectEigenschaften
current_pageintegerz. B.1last_pageintegerz. B.3per_pageintegerz. B.25totalintegerz. B.61
Beispiel
{
"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. ErrorBeispielaufruf
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 Öffentlich 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).
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Secret erforderlich | string | Shared secret of the bridge. |
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
okbooleanappstringz. B.NovaFiskotimestring <date-time>linked_firmsintegerlinked_companiesinteger
Beispiel
{
"ok": true,
"app": "NovaFisko",
"time": "2026-03-15T09:41:00+00:00",
"linked_firms": 1,
"linked_companies": 1
}code. ErrorBeispielaufruf
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 Öffentlich 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).
Operations-ID bridge.shop-status
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
token erforderlich | string | Token of the Novadesko shop. z. B. shp_8fK2mQ |
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Secret erforderlich | string | Shared secret of the bridge. |
Antworten
200OK
Antwort-Header X-RateLimit-Limit X-RateLimit-Remaining
application/json
Schema object
okbooleanlinkedbooleancompanyobjectfirmobjectsynced_atstring <date-time> | nulldocumentsobjectEigenschaften
totalintegerpendingintegerbookedintegerignoredintegerby_typeobject
bank_transactionsintegerfixed_assetsintegerjournal_entriesintegercorrectionsobjectEigenschaften
totalintegerrecentobject[]
app_urlstring <uri>
Beispiel
{
"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"
}Beispielaufruf
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 NoneWebhook-Ereignisse
Ereignisse, die per POST an die Webhook-Endpunkte der Kanzlei gesendet werden. Jede Zustellung ist signiert (Header X-Novafisko-Signature).
Ereignisdocument.importedA document entered the company file (Novadesko synchronisation or document importer).
A document entered the company file (Novadesko synchronisation or document importer).
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Signature erforderlich | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.z. B. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event erforderlich | string | Event name. z. B. document.imported |
X-Novafisko-Delivery erforderlich | string | Id of the delivery (stable across retries). z. B. 1871 |
Payload
Schema 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.
Ereignisdocument.bookedA document was booked to an entry.
A document was booked to an entry.
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Signature erforderlich | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.z. B. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event erforderlich | string | Event name. z. B. document.booked |
X-Novafisko-Delivery erforderlich | string | Id of the delivery (stable across retries). z. B. 1871 |
Payload
Schema 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.
Ereignisentry.postedAn entry was posted.
An entry was posted.
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Signature erforderlich | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.z. B. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event erforderlich | string | Event name. z. B. entry.posted |
X-Novafisko-Delivery erforderlich | string | Id of the delivery (stable across retries). z. B. 1871 |
Payload
Schema 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.
Ereignisentry.reversedAn entry was reversed; `reversed_by_entry_id` is the reversal entry.
An entry was reversed; reversed_by_entry_id is the reversal entry.
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Signature erforderlich | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.z. B. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event erforderlich | string | Event name. z. B. entry.reversed |
X-Novafisko-Delivery erforderlich | string | Id of the delivery (stable across retries). z. B. 1871 |
Payload
Schema 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.
Ereignisbank.transaction_importedA bank transaction was imported (one event per transaction).
A bank transaction was imported (one event per transaction).
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Signature erforderlich | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.z. B. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event erforderlich | string | Event name. z. B. bank.transaction_imported |
X-Novafisko-Delivery erforderlich | string | Id of the delivery (stable across retries). z. B. 1871 |
Payload
Schema 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.
Ereignisvat.declaration_validatedA VAT declaration was validated and its settlement entry posted.
A VAT declaration was validated and its settlement entry posted.
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Signature erforderlich | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.z. B. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event erforderlich | string | Event name. z. B. vat.declaration_validated |
X-Novafisko-Delivery erforderlich | string | Id of the delivery (stable across retries). z. B. 1871 |
Payload
Schema 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.
Ereignisfiscal_year.closedA fiscal year was closed.
A fiscal year was closed.
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Signature erforderlich | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.z. B. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event erforderlich | string | Event name. z. B. fiscal_year.closed |
X-Novafisko-Delivery erforderlich | string | Id of the delivery (stable across retries). z. B. 1871 |
Payload
Schema 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.
Ereignispeppol.status_changedThe Peppol registration of a company file changed status.
The Peppol registration of a company file changed status.
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Signature erforderlich | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.z. B. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event erforderlich | string | Event name. z. B. peppol.status_changed |
X-Novafisko-Delivery erforderlich | string | Id of the delivery (stable across retries). z. B. 1871 |
Payload
Schema 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.
Ereignisthird_party.createdA customer or supplier was created.
A customer or supplier was created.
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Signature erforderlich | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.z. B. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event erforderlich | string | Event name. z. B. third_party.created |
X-Novafisko-Delivery erforderlich | string | Id of the delivery (stable across retries). z. B. 1871 |
Payload
Schema 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.
Ereignisthird_party.updatedA customer or supplier was updated; `changed` lists the columns.
A customer or supplier was updated; changed lists the columns.
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Signature erforderlich | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.z. B. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event erforderlich | string | Event name. z. B. third_party.updated |
X-Novafisko-Delivery erforderlich | string | Id of the delivery (stable across retries). z. B. 1871 |
Payload
Schema 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.
Ereigniswebhook.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.
Header
| Name | Typ | Beschreibung |
|---|---|---|
X-Novafisko-Signature erforderlich | string | t=<unix timestamp>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>. Compare in constant time and refuse timestamps older than five minutes.z. B. t=1791189214,v1=5d2f0c9a7b6e4d1f8a3c2b1e0f9d8c7b6a5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c |
X-Novafisko-Event erforderlich | string | Event name. z. B. webhook.test |
X-Novafisko-Delivery erforderlich | string | Id of the delivery (stable across retries). z. B. 1871 |
Payload
Schema 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.
Schemas
Datenstrukturen, die von den Endpunkten gemeinsam genutzt werden. Beträge sind Dezimalzeichenketten, Datumsangaben folgen ISO 8601.
SchemaAccount
idintegerz. B.580company_idintegerz. B.7numberstringPCMN account number (2 to 12 digits).z. B.702000labelstringz. B.Prestations de servicestypestringassetliabilityexpenseincomeoff_balanceis_postablebooleanFalse for heading accounts.is_reconcilablebooleanLettering allowed (customers, suppliers…).purchase_gridinteger | nullVAT grid of purchases: 81, 82 or 83.z. B.82default_vat_code_idinteger | nullcreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nulldefault_vat_codeobject | null
Beispiel
{
"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": {}
}SchemaActivityFeed
dataActivityRow[]current_pageintegerz. B.1per_pageintegerz. B.50has_moreboolean
Beispiel
{
"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
}SchemaActivityRow
sourcestringauditrevisionatstring <date-time>recorded_atstring <date-time>userobject | nullactionstringz. B.entry.postedaction_labelstringz. B.Écriture validéesubject_typestring | nullsubject_idinteger | nullsubject_labelstring | nulloriginstring | nulldevice_namestring | nullrevision_idinteger | nulloperation_idstring | nullcompany_idinteger | nullchanged_fieldsstring[]companyobject | nullFirm feed only.Eigenschaften
tokenstringnamestring
Beispiel
{
"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"
}
}SchemaAnalyticCode
idintegerz. B.2company_idintegeraxisstringcost_centerprojectcodestringz. B.SALLElabelstringz. B.Salleis_activebooleancreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | null
Beispiel
{
"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
}SchemaBankRule
idintegerz. B.6company_idintegernamestringz. B.Frais bancairesfieldstringcounterpart_namecounterpart_ibancommunicationdescriptionanyoperatorstringcontainsequalsstartspatternstringz. B.frais de tenuedirectionstringinoutanyaccount_idintegerz. B.517third_party_idinteger | nulllabelstring | nullpriorityintegerz. B.100is_activebooleanapplied_countintegerz. B.14created_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nullaccountobjectEigenschaften
idintegerIdz. B.580numberstringAccount numberz. B.702000labelstringLabelz. B.Prestations de services
third_partyobject | null
Beispiel
{
"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": {}
}SchemaBankTransaction
idintegerz. B.951company_idintegerz. B.7sourcestringz. B.novadeskoexternal_idstring | nullaccount_ibanstringz. B.BE68539007547034account_bankstring | nulljournal_idinteger | nullz. B.7amountstring <decimal>Positive = money in, negative = money out.z. B.1210.00currencystringz. B.EURvalue_datestring <date-time>z. B.2026-03-18T00:00:00.000000Zexecution_datestring <date-time> | nullcounterpart_namestring | nullz. B.ACME SAcounterpart_ibanstring | nullcommunicationstring | nullz. B.+++000/0000/00101+++descriptionstring | nullstatusstringpendingbookedignoredjournal_entry_idinteger | nullmatched_journal_entry_idinteger | nullInvoice proposed by the matching.match_confidencestring | nullhigh, medium or low.z. B.highmatch_reasonstring | nullstructured_communication, novadesko_link, amount_and_third_party, rule…z. B.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.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3journalobject | nulllinksobject[]matched_entryobject | nullbooked_accountobject | nullmatched_ruleobject | nulljournal_entryobject | null
Beispiel
{
"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": {}
}SchemaBudget
idintegercompany_idintegerfiscal_year_idintegerscenariostringz. B.defaultaccount_idintegercost_center_idinteger | nullperiod_numberintegerz. B.3amountstring <decimal>z. B.1500.00accountobjectEigenschaften
idintegerIdz. B.580numberstringAccount numberz. B.702000labelstringLabelz. B.Prestations de services
Beispiel
{
"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"
}
}SchemaCodaFile
idintegerz. B.31company_idintegersourcestringz. B.novadeskoexternal_idstring | nullfilenamestringz. B.CODA_2026_031.codsource_urlstring <uri> | nullaccount_ibanstringz. B.BE68539007547034account_bankstring | nulljournal_idinteger | nullstatement_numberstring | nullz. B.031sequencestring | nullopening_balancestring <decimal> | nullz. B.18420.11closing_balancestring <decimal> | nullz. B.19630.11period_fromstring <date-time> | nullperiod_tostring <date-time> | nulltransactions_countintegerz. B.12statusstringz. B.importedsynced_atstring <date-time> | nullcreated_atstring <date-time>updated_atstring <date-time>journalobject | null
Beispiel
{
"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": {}
}SchemaCompanyCompany file (dossier). Addressed everywhere by its `public_token`.
Company file (dossier). Addressed everywhere by its public_token.
idintegerz. B.7public_tokenstringz. B.XBVD5O1L29HCfirm_idinteger | nullz. B.3codestring | nullz. B.COMPTOIRnamestringz. B.Le Comptoir Montois SRLlegal_formstring | nullz. B.SRLlegal_form_codestring | nullKBO / BCE legal form code.z. B.610enterprise_numberstring | nullz. B.0477472701vat_numberstring | nullz. B.BE0477472701country_packstringBEFRLUvat_regimestringmonthlyquarterlyfranchiseexemptunitcurrencystringz. B.EURlocalestringfrnlendeaddressstring | nullz. B.Grand-Place 14, 7000 Monsstreetstring | nullStreetz. B.Grand-Placehouse_numberstring | nullNumberz. B.14boxstring | nullBoxpostal_codestring | nullPostal codez. B.7000citystring | nullCityz. B.Monscountrystring | nullISO 3166-1 alpha-2z. B.BElatitudestring | nullz. B.50.4541000longitudestring | nullz. B.3.9523000nace_codesobject[] | nullEigenschaften
codestringz. B.56111classificationstringMAINSECOANCI
main_nace_codestring | nullz. B.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.z. B.falsesourcestringmanualnovadeskoexternal_idstring | nullsynced_atstring <date-time> | nullcreated_atstring <date-time>updated_atstring <date-time>deleted_atstring <date-time> | nulllock_versionintegerInternal lock counter.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3journal_entries_countintegerPresent on list / show.z. B.1284firmobjectEigenschaften
idintegerz. B.3public_tokenstringz. B.NDTQVQU4AUAVnamestringz. B.Fiduciaire Dumont & Associés
fiscal_yearsFiscalYear[]journalsJournal[]
Beispiel
{
"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"
}
}
]
}
]
}SchemaCompanySettingsResolved 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).
vatobjectEigenschaften
administration_cellstring | nullstructured_communicationstring | nulldirectorate_numberstring | nulloffice_numberstring | nulldeclarantobjectEigenschaften
applicablebooleanz. B.falsecompany_namestring | nullsignatory_1string | nullsignatory_1_titlestring | nullsignatory_2string | nullsignatory_2_titlestring | nullphonestring | nullfaxstring | nullemailstring <email> | nulllanguagestringfrnlende
sender_281_50objectEigenschaften
namestring | nullenterprise_numberstring | nulladdressstring | nullphonestring | nullemailstring <email> | null
filerobjectEigenschaften
qualitystringcompanyaccountantnamestring | nullenterprise_numberstring | nullphonestring | nullemailstring <email> | null
legalobjectEigenschaften
rpm_districtstring | nullRPM / RPR district printed on legal documents.z. B.Hainaut, division Mons
annual_accountsobjectEigenschaften
schemestringabbreviatedmicrogeneral_meeting_datestring <date> | nulldirectorsstring | nullvaluation_rulesstring | null
auto_entriesobjectEigenschaften
vatobjectEigenschaften
payable_accountstringz. B.451000receivable_accountstringz. B.411000correction_payable_accountstring | nullcorrection_receivable_accountstring | nulljournal_idinteger | null
invoices_to_receiveobjectEigenschaften
supplier_accountstringz. B.444000customer_accountstringz. B.404000journal_idinteger | null
reconciliation_differenceobjectEigenschaften
expense_accountstringz. B.657000income_accountstringz. B.757000max_amountnumberz. B.1
transfersobjectEigenschaften
transit_accountstringz. B.580000journal_idinteger | null
historyobjectEigenschaften
trash_retention_daysintegerz. B.90
Beispiel
{
"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
}
}SchemaCompanySheetNormalised company sheet (CompanySearch for BE / FR, VIES elsewhere).
Normalised company sheet (CompanySearch for BE / FR, VIES elsewhere).
identifierstringz. B.0477472701enterprise_numberstring | nullvat_numberstring | nullz. B.BE0477472701namestringz. B.Le Comptoir Montoislegal_formstring | nullz. B.SRLlegal_form_codestring | nullz. B.610statusstring | nullz. B.activestart_datestring <date> | nulladdressobjectEigenschaften
streetstring | nullStreetz. B.Grand-Placehouse_numberstring | nullNumberz. B.14boxstring | nullBoxpostal_codestring | nullPostal codez. B.7000citystring | nullCityz. B.Monscountrystring | nullISO 3166-1 alpha-2z. B.BE
address_linestring | nulllatitudenumber | nulllongitudenumber | nullnace_codesobject[]Eigenschaften
codestringz. B.56111classificationstringMAINSECOANCIlabelstring | null
main_nace_codestring | nullemailstring | nullphonestring | nullwebsitestring | nullsourcestringz. B.companysearchfetched_atstring <date-time> | nullmapobjectEigenschaften
querystringAddress used for the mapz. B.Grand-Place 14, 7000 Mons, Belgiqueapple_urlstring <uri>google_urlstring <uri>static_urlstring <uri> | nulllatitudenumber | nulllongitudenumber | null
Beispiel
{
"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
}
}SchemaDepreciationLine
idintegerfixed_asset_idintegerz. B.9yearintegerz. B.2026period_startstring <date-time>period_endstring <date-time>amountstring <decimal>z. B.2269.37cumulative_amountstring <decimal>z. B.2269.37remaining_valuestring <decimal>z. B.10130.63statusstringplannedbookedjournal_entry_idinteger | nullbooked_amountstring <decimal>z. B.0.00
Beispiel
{
"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"
}SchemaDocumentImportFile uploaded to the document importer and its analysis.
File uploaded to the document importer and its analysis.
idintegerz. B.311company_idintegerz. B.7uploaded_byinteger | nullbatch_idstring <uuid>Groups the files of one upload.parent_import_idinteger | nullZIP the file was extracted from.original_namestringz. B.facture-dubuisson-0412.pdfmimestringz. B.application/pdfsizeintegerBytes.z. B.184320file_hashstringSHA-256, used to detect duplicates.kindstringpdfimagexmlzipotherstatusstringqueuedanalyzingreadyneeds_reviewvalidatederrorduplicateexpandedprogressinteger0 to 100.z. B.100stepstringuploadtextailinesmatchdoneenginestring | nullEngine that read the file.z. B.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.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nullsuggested_third_partyobject | null
Beispiel
{
"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": {}
}SchemaErrorError 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).
messagestringerforderlichHuman-readable message (translated).z. B.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…).z. B.period_lockederrorsobjectField => list of messages.
Beispiel
{
"message": "Le champ date de l'écriture est obligatoire.",
"code": "period_locked",
"errors": {
"entry_date": [
"La période Mars 2026 est verrouillée."
]
}
}SchemaExtractedDocumentData 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_notebooleanz. B.falsenumberstring | nullz. B.F-2026-0412document_datestring <date> | nulldue_datestring <date> | nullcurrencystringz. B.EURsupplierobjectEigenschaften
namestring | nullz. B.Brasserie Dubuisson SAvat_numberstring | nullz. B.BE0402531376enterprise_numberstring | nulladdressstring | nullpostal_codestring | nullcitystring | nullcountrystring | nullibanstring | nullemailstring | null
customerobject | nullamount_netstring | nullz. B.507.00amount_vatstring | nullz. B.106.47amount_grossstring | nullz. B.613.47structured_communicationstring | nullconfidencenumber0 to 1; below 0.6 the import needs a review.z. B.0.93linesobject[]Eigenschaften
descriptionstringz. B.Fûts Bush Caractère 20 Lquantitynumber | nullz. B.6unit_pricenumber | nullz. B.84.5tax_ratenumber | nullz. B.21amount_netstringz. B.507.00amount_vatstring | nullz. B.106.47account_idinteger | nullSuggested account.account_numberstring | nullz. B.604000vat_code_idinteger | nullvat_codestring | nullz. B.A21
Beispiel
{
"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"
}
]
}SchemaFirmAccounting firm (fiduciary) with its team and company files.
Accounting firm (fiduciary) with its team and company files.
public_tokenstringz. B.NDTQVQU4AUAVnamestringz. B.Fiduciaire Dumont & Associésenterprise_numberstring | nullz. B.0458662817vat_numberstring | nullz. B.BE0458662817itaa_numberstring | nullITAA membership number.z. B.50.123.456itaa_statusstring | nullitaa_qualitystring | nulladdressstring | nullz. B.Rue de Nimy 52postal_codestring | nullz. B.7000citystring | nullz. B.Monswebsitestring | nulllogo_urlstring <uri> | nullis_partnerbooleancountry_codestringz. B.BElocalestringfrnlendeemailstring <email> | nullphonestring | nullsourcestringlocalnovadeskosynced_atstring <date-time> | nullcan_managebooleanTrue for admins and managers of the firm.membersFirmMember[]companiesobject[]Eigenschaften
public_tokenstringnamestringcodestring | nullicon_urlstring <uri> | nulllogo_urlstring <uri> | nullmembersobject[]Eigenschaften
idintegernamestringz. B.Thomas Peetersemailstring <email>rolestringmanagerencoderrevieweris_activeboolean
Beispiel
{
"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
}
]
}
]
}SchemaFirmMember
idintegerz. B.12namestringz. B.Thomas Peetersemailstring <email>z. B.thomas.peeters@fiduciaire-dumont.beauth_sourcestringlocalnovadeskolocalestringfrnlenderolestringadminmanagerencoderrevieweris_activebooleanall_companiesbooleanAdmins and managers see every company file of the firm.companiesobject[]Eigenschaften
public_tokenstringnamestringcodestring | nullrolestringmanagerencoderrevieweris_activeboolean
Beispiel
{
"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
}
]
}SchemaFiscalYear
idintegerz. B.2company_idintegerz. B.7codestringz. B.2026starts_onstring <date-time>z. B.2026-01-01T00:00:00.000000Zends_onstring <date-time>z. B.2026-12-31T00:00:00.000000Zis_closedbooleanz. B.falseclosed_atstring <date-time> | nullclosed_byinteger | nullcreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3periodsPeriod[]
Beispiel
{
"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
}
]
}SchemaFixedAsset
idintegerz. B.9company_idintegersourcestringmanualnovadeskoexternal_idstring | nullreferencestring | nullz. B.IMM-2026-003namestringz. B.Four mixte Rationalcategorystringit_equipmentvehiclefurnituremachinerybuildingsoftwareotherasset_groupstring | nullasset_account_idinteger | nulldepreciation_account_idinteger | nullexpense_account_idinteger | nullimported_document_idinteger | nullacquisition_datestring <date-time>z. B.2026-02-01T00:00:00.000000Zacquisition_coststring <decimal>z. B.12400.00residual_valuestring <decimal>z. B.0.00useful_life_yearsintegerz. B.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.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nulllinesDepreciationLine[]asset_accountobjectEigenschaften
idintegerIdz. B.580numberstringAccount numberz. B.702000labelstringLabelz. B.Prestations de services
depreciation_accountobjectEigenschaften
idintegerIdz. B.580numberstringAccount numberz. B.702000labelstringLabelz. B.Prestations de services
expense_accountobjectEigenschaften
idintegerIdz. B.580numberstringAccount numberz. B.702000labelstringLabelz. B.Prestations de services
Beispiel
{
"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"
}
}SchemaImportedDocumentInvoice, 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.
idintegerz. B.87company_idintegerz. B.7sourcestringz. B.novadeskooriginstring | nullnovafiskowhen created by the importer.external_idstring | nulltypestringpurchases, invoices, credit_notes, receipts…z. B.purchasesdirectionstringsalepurchaseis_credit_notebooleanz. B.falsenaturestring | nullnumberstring | nullz. B.F-2026-0412payment_providerstring | nullnumber_seriesstring | nulldocument_datestring <date-time>z. B.2026-03-15T00:00:00.000000Zdue_datestring <date-time> | nullsubjectstring | nullcommunicationstring | nullcurrencystringz. B.EURamount_netstring <decimal>z. B.507.00amount_vatstring <decimal>z. B.106.47amount_grossstring <decimal>z. B.613.47is_paidbooleanthird_party_idinteger | nullthird_party_namestring | nullz. B.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.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nullthird_partyobject | nulllinesImportedDocumentLine[]journal_entryJournalEntry | null
Beispiel
{
"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": {}
}
]
}
}SchemaImportedDocumentLine
idintegerz. B.640imported_document_idintegerz. B.87external_idstring | nullpositionintegerz. B.1descriptionstring | nullz. B.Fûts Bush Caractère 20 Lquantitystring | nullz. B.6.000unit_pricestring | nullz. B.84.5000discount_pctstring <decimal> | nulltax_ratestring <decimal> | nullz. B.21.00amount_netstring <decimal>z. B.507.00amount_vatstring <decimal>z. B.106.47recorded_account_numberstring | nullAccount as encoded at the source (« recorded » layer).z. B.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
Beispiel
{
"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": {}
}SchemaIntegration
slugstringz. B.novadeskonamestringz. B.Novadeskocategorystringaccountingbankinge_invoicingdocumentspaymentsapidescriptionstringlogo_urlstring <uri> | nullstatusstringavailablebetacoming_sooncapabilitiesstring[]import_documentsimport_bankimport_assetsexport_entriese_invoicingconfig_schemaobject[]Eigenschaften
keystringlabelstringtypestringtextsecretselectboolrequiredboolean
open_tabstring | nullhas_driverbooleanis_enabledbooleanconnectionobject | nullEigenschaften
is_activebooleanstatusstringconnecteddisconnectederrorconfig_maskedobjectlast_sync_atstring <date-time> | nulllast_errorstring | null
interestedbooleanactionsstring[]
Beispiel
{
"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"
]
}SchemaIntegrationRun
idintegerz. B.77statusstringrunningsuccesserrorstarted_atstring <date-time> | nullfinished_atstring <date-time> | nullduration_msinteger | nullz. B.1840summaryobject | nullmessagestring | null
Beispiel
{
"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"
}SchemaIntegrationTokenIntegration token (the secret is only returned once, by the creation).
Integration token (the secret is only returned once, by the creation).
idintegerz. B.57namestringz. B.ERP connectorabilitiesstring[]readwritesynccreated_atstring <date-time>expires_atstring <date-time> | nulllast_used_atstring <date-time> | null
Beispiel
{
"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"
}SchemaJournal
idintegerz. B.3company_idintegerz. B.7codestringz. B.VENlabelstringz. B.Ventestypestringpurchasesalepurchase_credit_notesale_credit_notefinancialmiscellaneouscontrol_account_idinteger | nullibanstring | nullbicstring | nulllast_numberintegerz. B.412is_activebooleanis_defaultbooleandescriptionstring | nullcreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nullentries_countintegerz. B.412control_accountobject | nullrulesJournalRule[]
Beispiel
{
"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"
}
}
]
}SchemaJournalEntryPosted 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.
idintegerz. B.1284company_idintegerz. B.7fiscal_year_idintegerz. B.2period_idintegerz. B.16journal_idintegerz. B.3numberintegerContinuous number in the journal and fiscal year.z. B.412entry_datestring <date-time>z. B.2026-03-15T00:00:00.000000Zdue_datestring <date-time> | nulllabelstringz. B.Facture Brasserie Dubuisson SAreferencestring | nullDocument number.z. B.F-2026-0412structured_communicationstring | null12 digits, without +++ and /.z. B.000000000101third_party_idinteger | nullz. B.18statusstringpostedreversedoriginstringmanual, import, bank, recurring, depreciation, vat, year_end…z. B.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.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3journalobjectEigenschaften
idintegerz. B.3codestringz. B.VENtypestringz. B.sale
third_partyobjectEigenschaften
idintegerz. B.18namestringz. B.Brasserie Dubuisson SA
linesJournalEntryLine[]
Beispiel
{
"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": {}
}
]
}SchemaJournalEntryLine
idintegerz. B.3391journal_entry_idintegerz. B.1284positionintegerz. B.1account_idintegerz. B.580third_party_idinteger | nulllabelstring | nullz. B.Brasserie Dubuisson SAdebitstring <decimal>z. B.0.00creditstring <decimal>z. B.1000.00vat_code_idinteger | nullz. B.4vat_basestring <decimal> | nullz. B.1000.00reconciliation_codestring | nullLettering code.z. B.ABcost_center_idinteger | nullproject_idinteger | nullreminder_levelintegerz. B.0reminder_sent_atstring <date-time> | nullaccountobjectEigenschaften
idintegerIdz. B.580numberstringAccount numberz. B.702000labelstringLabelz. B.Prestations de services
vat_codeobject | null
Beispiel
{
"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": {}
}SchemaJournalRuleRoutes 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.
idintegerz. B.4company_idintegerjournal_idintegerz. B.3directionstringsalepurchasematch_fieldstringpayment_providernumber_seriesnumber_prefixthird_partymatch_valuestringz. B.TKpriorityintegerz. B.100is_activebooleancreated_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nulljournalobjectEigenschaften
idintegerz. B.3codestringz. B.VENlabelstringz. B.Ventestypestringz. B.sale
Beispiel
{
"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"
}
}SchemaLicenceLicence 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 | nullusageobjectEigenschaften
monthstringz. B.2026-10companiesintegerz. B.25usersintegerz. B.4bank_accountsintegerz. B.31rowsobject[]Eigenschaften
company_idintegertokenstringnamestringcodestring | nullbank_accountsintegerz. B.1statusstringz. B.activeactivated_atstring <date-time>deactivated_atstring <date-time> | null
max_companiesinteger | nullover_limitbooleanz. B.falsesuggestionstring | null
estimateobject | nullEstimated invoice of the month (excl. VAT).companies_detailobject[]Eigenschaften
company_idintegernamestringpublic_tokenstringstatusstringz. B.activeactivated_atstring <date-time>deactivated_atstring <date-time> | nullbillableboolean
next_month_previewobjectEigenschaften
companiesintegerz. B.25totalnumberz. B.121.5
over_limitbooleanz. B.falseover_limit_firm_totalnumber | nullentitlementsobjectEigenschaften
accountingbooleanpeppolbooleancodabooleanclient_portalbooleanclient_invoicingbooleandocument_importboolean
limitsobjectEigenschaften
max_usersinteger | nullmax_companiesinteger | nullusers_countintegerz. B.4companies_countintegerz. B.25
expires_atstring <date-time> | nullwarningstring | nullactivationobject | nullActive licence key (masked) when the subscription comes from a key.statementsobject[]options_availableobject[]Eigenschaften
codestringclient_portalclient_invoicingnamestringz. B.Portail clientprice_monthlynumberz. B.6.9unitstringz. B.client
can_manageboolean
Beispiel
{
"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
}SchemaMailLog
idintegerz. B.9012template_keystringz. B.documents.sendtostring <email>z. B.gerant@comptoir-montois.examplesubjectstringz. B.Vos documents comptablesstatusstringqueuedsentfailedbouncedlocalestringz. B.frcreated_atstring <date-time>sent_atstring <date-time> | nullopened_atstring <date-time> | nullattachmentsobject[]Eigenschaften
namestringz. B.balance-2026.pdfsizeintegerz. B.48211
Beispiel
{
"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
}
]
}SchemaMessage
messagestringTranslated confirmation.z. B.Mot de passe modifié.
Beispiel
{
"message": "Mot de passe modifié."
}SchemaPaginationLaravel length-aware pagination envelope; `data` holds the items.
Laravel length-aware pagination envelope; data holds the items.
current_pageintegerz. B.1dataany[]first_page_urlstring <uri> | nullfrominteger | nullz. B.1last_pageintegerz. B.4last_page_urlstring <uri> | nulllinksobject[]Eigenschaften
urlstring <uri> | nulllabelstringz. B.1pageinteger | nullactiveboolean
next_page_urlstring <uri> | nullpathstring <uri>per_pageintegerz. B.50prev_page_urlstring <uri> | nulltointeger | nullz. B.50totalintegerz. B.187
Beispiel
{
"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
}SchemaPeppolAccessPoint
smp_hoststring | nullz. B.smp.b2brouter.netprovider_namestring | nullz. B.B2Brouterendpoint_urlstring <uri> | nulltechnical_contactstring | null
Beispiel
{
"smp_host": "smp.b2brouter.net",
"provider_name": "B2Brouter",
"endpoint_url": "https://api.novafisko.com/v1/companies/XBVD5O1L29HC",
"technical_contact": "string"
}SchemaPeppolDocumentType
idstringz. B.bis_billing_invoicenamestringz. B.Invoice BIS Billing 3.0familystringz. B.billingdescriptionstringz. B.Facture électronique européenne (EN 16931), format Peppol BIS Billing 3.0.document_idstringFull Peppol document type identifier.
Beispiel
{
"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"
}SchemaPeppolStatePeppol registration state of a company file.
Peppol registration state of a company file.
identityobject | nullRaw registration record.participant_idstring | nullz. B.0208:0477472701statusstringnonependingactiveinactivedeletederrorexternalaccountobject | nullEigenschaften
idstringnamestring | nullarchivedboolean
transportobject | nullTransport options: enabled, reception, standard_documents, invoice, credit_note, self_billing, order, application_response.smpobjectEigenschaften
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
Beispiel
{
"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"
}SchemaPeppolThirdPartyStatus
identifierstring | nullz. B.0208:0402531376registeredboolean | nullaccess_pointPeppolAccessPoint | nulldocument_typesPeppolDocumentType[]checked_atstring <date-time> | nullstalebooleanerrorstring | nullsourcestring | nullz. B.sml+smp
Beispiel
{
"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"
}SchemaPeriod
idintegerz. B.16fiscal_year_idintegerz. B.2numberinteger0 = opening, 1-12 = months, 99 = closing.z. B.3labelstringz. B.Mars 2026starts_onstring <date-time>ends_onstring <date-time>is_lockedbooleanz. B.falselocked_atstring <date-time> | nulllock_versionintegerInternal lock counter.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3
Beispiel
{
"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
}SchemaPeriodLockedError422 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.
messagestringerforderlichz. B.La période Mars 2026 est verrouillée.codestringerforderlichperiod_lockedreasonstringerforderlichperiod_lockedfiscal_year_closederrorsobjecterforderlich
Beispiel
{
"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."
]
}
}SchemaPricingGrid
currencystringz. B.EURvat_includedbooleanz. B.falseplansobject[]Eigenschaften
codestringstarterfirmnamestringz. B.Firmkindstringstarterfirmbase_price_monthlynumberz. B.49per_companynumberz. B.2.9tiersobject[]Eigenschaften
up_tointeger | nullz. B.100pricenumberz. B.2.9
max_companiesinteger | nullpeppol_fair_use_per_companyintegerz. B.100annual_discount_pctnumberz. B.10includedstring[]
optionsobject[]Eigenschaften
codestringz. B.client_portalnamestringz. B.Client portalprice_monthlynumberz. B.6.9unitstringz. B.client
annual_discount_pctnumberz. B.10winauditorobjectReference prices used for the comparison.pilotobjectEigenschaften
free_monthsintegerz. B.3max_firmsintegerz. B.20
Beispiel
{
"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
}
}SchemaPricingSimulation
companiesintegerz. B.25yearlybooleanz. B.falsestarterobject | nullNull when the plan cannot hold that many companies.firmobjectEigenschaften
planstringz. B.firmbilling_intervalstringmonthlyyearlycompaniesintegerz. B.25basenumberz. B.49companies_breakdownobject[]Eigenschaften
fromintegerz. B.1tointegerz. B.100quantityintegerz. B.25unit_pricenumberz. B.2.9totalnumberz. B.72.5
companies_totalnumberz. B.72.5optionsobject[]options_totalnumberz. B.0pilot_discountnumberz. B.0annual_discount_pctnumberz. B.0annual_discountnumberz. B.0discountnumberz. B.0totalnumberz. B.121.5yearly_totalnumberz. B.1458namestringz. B.Firmsaving_vs_winauditornumberz. B.36saving_pctnumberz. B.22.9
winauditornumberz. B.157.5cheapeststringstarterfirm
Beispiel
{
"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"
}SchemaRecurringEntry
idintegerz. B.5company_idintegerjournal_idintegerz. B.5labelstringz. B.Loyer mensuelreferencestring | nullthird_party_idinteger | nullfrequencystringmonthlyquarterlyyearlynext_datestring <date-time>z. B.2026-04-01T00:00:00.000000Zend_datestring <date-time> | nulllinesobject[]Eigenschaften
account_idintegerz. B.368debitstring | nullz. B.1500.00creditstring | nulllabelstring | nullthird_party_idinteger | null
is_activebooleanlast_generated_onstring <date> | nullgenerated_countintegerz. B.3created_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3deleted_atstring <date-time> | nullSet while the record is in the recycle bin.deleted_byinteger | nulljournalobjectEigenschaften
idintegercodestringz. B.ODlabelstringz. B.Opérations diverses
third_partyobject | null
Beispiel
{
"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": {}
}SchemaRevisionOne line of the version history.
One line of the version history.
idintegerz. B.2301actionstringcreatedupdateddeletedrestoredrevertedsyncedeffectstringz. B.updatedaction_labelstringz. B.Modification · Tierssubject_typestringz. B.third_partiessubject_type_labelstringz. B.Tierssubject_idintegerz. B.18subject_labelstringz. B.DUBUISSON · Brasserie Dubuisson SAuserobject | nullactor_namestring | nullz. B.Claire Dumontchangesobject[]Eigenschaften
fieldstringz. B.payment_terms_dayslabelstringz. B.Délai de paiementoldanynewany
versionintegerz. B.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.
Beispiel
{
"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"
}SchemaSheetView
sheetCompanySheet | nullsheet_atstring <date-time> | nulladdressobjectEigenschaften
streetstring | nullStreetz. B.Grand-Placehouse_numberstring | nullNumberz. B.14boxstring | nullBoxpostal_codestring | nullPostal codez. B.7000citystring | nullCityz. B.Monscountrystring | nullISO 3166-1 alpha-2z. B.BE
address_linestring | nulllegal_formobject | nullnace_codesobject[]Eigenschaften
codestringclassificationstringlabelstring | nullis_mainboolean
main_nace_codestring | nullvat_number_formattedstring | nullz. B.BE 0477.472.701mapobjectEigenschaften
querystringAddress used for the mapz. B.Grand-Place 14, 7000 Mons, Belgiqueapple_urlstring <uri>google_urlstring <uri>static_urlstring <uri> | nulllatitudenumber | nulllongitudenumber | null
Beispiel
{
"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
}
}SchemaSyncChange
resourcestringz. B.third_partiesopstringupsertdeleteidintegerz. B.18versioninteger | nullz. B.4dataobject | nullResource serialised as by its list endpoint; null for a tombstone.changed_atstring <date-time>seqintegerPosition in the change feed.z. B.1042
Beispiel
{
"resource": "third_parties",
"op": "upsert",
"id": 18,
"version": 4,
"data": {},
"changed_at": "2026-03-15T09:41:00+00:00",
"seq": 1042
}SchemaSyncConflict
idintegerz. B.8statusstringopenresolvedtypestringfielddelete_vs_updateupdate_vs_deleteduplicatelockedtype_labelstringresourcestringz. B.third_partiesrecord_idinteger | nullsubject_idinteger | nullsubject_labelstring | nullclient_mutation_idstring | nullfieldsobject[]Eigenschaften
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
Beispiel
{
"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"
]
}SchemaSyncMutationOne 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>erforderlichIdempotence key.occurred_atstring <date-time>Date of the action on the device.operation_idstring <uuid>resourcestringerforderlichthird_parties, accounts, journals, journal_rules, bank_rules, recurring_entries, analytic_codes, fixed_assets, entries, documents, document_lines, bank_transactions, company_settings.z. B.third_partiesopstringerforderlichcreateupdatedeleteactionactionstringignorerestoreentryinvoicereversebookupdate_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.z. B.tmp-3c1fparent_idinteger | string | nullbase_versionintegerVersion the client edited.dataobjectBody of the equivalent REST request.
Beispiel
{
"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": {}
}SchemaSyncMutationResult
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 | nullEigenschaften
server_versionintegerserver_dataobjectfieldsobject[]Eigenschaften
fieldstringclientanyserveranywinnerstringclientserverrulestring
resolutionstring
duplicate_ofinteger | nullretryableboolean
Beispiel
{
"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
}SchemaThirdPartyCustomer or supplier of a company file.
Customer or supplier of a company file.
idintegerz. B.18company_idintegerz. B.7typestringcustomersuppliercodestringz. B.DUBUISSONnamestringz. B.Brasserie Dubuisson SAcontact_namestring | nullvat_numberstring | nullz. B.BE0402531376enterprise_numberstring | nullz. B.0402531376legal_form_codestring | nullvat_statusstringsubjectnot_subjectexemptintra_eunon_eucountrystringz. B.BElanguagestring | nullz. B.frcategorystring | nullcurrencystringz. B.EURaddressstring | nullz. B.Chaussée de Mons 28house_numberstring | nullboxstring | nulladdress_line_2string | nullpostal_codestring | nullz. B.7904citystring | nullz. B.Pipaixnace_codestring | nullibanstring | nullz. B.BE71096123456769bicstring | nullz. B.GKCCBEBBbank_accountstring | nullemailstring <email> | nullz. B.compta@dubuisson.examplephonestring | nullfaxstring | nullwebsitestring | nullpayment_terms_daysintegerz. B.30form_281_50_typestring | nullprofession_281_50string | nullis_natural_personbooleanz. B.falsenotesstring | nulldefault_vat_code_idinteger | nulldefault_account_idinteger | nullvies_validboolean | nullvies_checked_atstring <date-time> | nullvies_namestring | nullpeppol_identifierstring | nullz. B.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.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.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.
Beispiel
{
"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": {}
}SchemaTrashItem
typestringz. B.third_partiesidintegerz. B.18labelstringz. B.DUBUISSON · Brasserie Dubuisson SAdeleted_atstring <date-time>deleted_byobject | nullpurge_atstring <date-time>Date of the definitive purge.restorablebooleanblocked_reasonstring | nullblocked_messagestring | nullversioninteger
Beispiel
{
"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
}SchemaTreasury
accountsobject[]Eigenschaften
journal_idintegerz. B.7codestringz. B.BNPlabelstringz. B.BNP Paribas Fortisibanstring | nullaccountstringz. B.550000accounting_balancestring <decimal>z. B.19630.11last_statement_balancestring <decimal> | nullz. B.19630.11last_statement_datestring <date> | nullpending_countintegerz. B.3pending_amountstring <decimal>z. B.1842.50differencestring <decimal> | nullz. B.0.00
total_accounting_balancestring <decimal>z. B.21480.61
Beispiel
{
"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"
}SchemaUserAuthenticated user with the firms it belongs to.
Authenticated user with the firms it belongs to.
idintegerz. B.12namestringz. B.Claire Dumontemailstring <email>localestringfrnlendeemail_verifiedbooleanpending_emailstring <email> | nullNew address waiting for confirmation.is_platform_adminbooleanz. B.falseis_demobooleanTrue for the ephemeral user of the demo firm.z. B.falsefirmsobject[]Eigenschaften
public_tokenstringz. B.NDTQVQU4AUAVnamestringz. B.Fiduciaire Dumont & Associésrolestringadminmanagerencoderreviewer
managed_firmsobject[]Eigenschaften
public_tokenstringz. B.NDTQVQU4AUAVnamestringz. B.Fiduciaire Dumont & Associés
Beispiel
{
"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"
}
]
}SchemaVatCode
idintegerz. B.4company_idintegercodestringz. B.V21labelstringz. B.Ventes 21 %directionstringsalepurchaseratestring <decimal>z. B.21.00naturestringstandardintra_eucocontractorexportexemptimportout_of_scopedeductible_pctstring <decimal>z. B.100.00base_gridstring | nullGrid of the taxable base.z. B.03vat_gridstring | nullGrid of the VAT.z. B.54due_vat_gridstring | nullGrid of the VAT due (reverse charge).credit_base_gridstring | nullGrid of the base on a credit note.z. B.49credit_vat_gridstring | nullz. B.64vat_accountstring | nullz. B.451100due_vat_accountstring | nulldescriptionstring | nullis_activebooleansort_orderintegerz. B.13created_atstring <date-time>updated_atstring <date-time>lock_versionintegerInternal lock counter.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3
Beispiel
{
"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
}SchemaVatComputation
gridsobjectBelgian VAT grids: grid number => amount (decimal string).amount_duestring <decimal>Grid 71.z. B.157.50amount_refundstring <decimal>Grid 72.z. B.0.00warningsstring[]entriesintegerEntries carrying VAT in the period.z. B.38
Beispiel
{
"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
}SchemaVatDeclaration
idintegerz. B.14company_idintegerperiod_typestringmonthlyquarterlyyearintegerz. B.2026periodintegerMonth (1-12) or quarter (1-4).z. B.1starts_onstring <date-time>ends_onstring <date-time>gridsobjectBelgian VAT grids: grid number => amount (decimal string).amount_duestring <decimal>z. B.157.50amount_refundstring <decimal>z. B.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.z. B.3versionintegerVersion of the record, to send back asX-Base-Version/base_version.z. B.3journal_entryobject | null
Beispiel
{
"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": {}
}SchemaVersionConflict409 of the optimistic lock (`X-Base-Version`).
409 of the optimistic lock (X-Base-Version).
messagestringerforderlichcodestringerforderlichconflictserver_versionintegererforderlichCurrent version on the server.z. B.4server_dataobjecterforderlichCurrent state of the record.
Beispiel
{
"message": "OK",
"code": "conflict",
"server_version": 4,
"server_data": {}
}SchemaWebhookDelivery
idintegerz. B.1871event_idstringz. B.evt_01JD8X5Q2M7Z4W9K3T6B0N1VCEeventstringz. B.entry.postedstatusstringpendingdeliveredfailedattemptsinteger8 attempts at most.z. B.1next_attempt_atstring <date-time> | nullresponse_statusinteger | nullz. B.200response_excerptstring | nullduration_msinteger | nullz. B.184delivered_atstring <date-time> | nullcreated_atstring <date-time>payloadWebhookEventattemptintegerAlias ofattempts.z. B.1http_statusinteger | nullAlias ofresponse_status.z. B.200
Beispiel
{
"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
}SchemaWebhookEndpoint
idintegerz. B.3urlstring <uri>z. B.https://erp.example.com/hooks/novafiskodescriptionstring | nullz. B.ERP connectoreventsstring[]is_activebooleansecret_hintstringMasked signing secret.z. B.whsec_…ab12last_delivery_atstring <date-time> | nulllast_statusstring | nullStatus of the last delivery.z. B.deliveredcreated_atstring <date-time>updated_atstring <date-time>
Beispiel
{
"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"
}SchemaWebhookEventBody 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.
idstringerforderlichUnique event id; use it to deduplicate.z. B.evt_01JD8X5Q2M7Z4W9K3T6B0N1VCEeventstringerforderlichz. B.entry.postedapi_versionstringerforderlichz. B.v1created_atstring <date-time>erforderlichUTC.firmobjecterforderlichEigenschaften
public_tokenstringz. B.NDTQVQU4AUAVnamestringz. B.Fiduciaire Dumont & Associés
companyobject | nullEigenschaften
public_tokenstringz. B.XBVD5O1L29HCnamestringz. B.Le Comptoir Montois SRL
dataobjecterforderlichEvent-specific payload (ids, references, amounts).
Beispiel
{
"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": {}
}