Aller au contenu
Documentation
Français
Ouvrir l'application

Conventions

Formats de dates et de montants, identifiants public_token et id numériques, langue des messages et en-têtes reconnus par l'API NovaFisko.

Cette page rassemble les règles communes à toutes les routes. Les respecter évite la plupart des erreurs 422.

Requêtes

  • Envoyez Accept: application/json sur chaque appel. L'hôte api.novafisko.com répond toujours en JSON, mais cet en-tête garantit le même comportement derrière un proxy.
  • Les corps sont en JSON (Content-Type: application/json), encodés en UTF-8.
  • Le dépôt de fichiers (document-imports) utilise multipart/form-data.
  • Les noms de champs sont en anglais et en snake_case. Les segments d'URL sont en kebab-case (third-parties, vat-declarations).

Dates et heures

Nature Format Exemple
Date comptable (entry_date, due_date, starts_on, from, to) AAAA-MM-JJ 2026-03-31
Horodatage (created_at, posted_at, server_time) ISO 8601 avec fuseau, en UTC 2026-10-05T08:30:11+00:00
Mois de facturation AAAA-MM 2026-10

Une date comptable n'a pas de fuseau : le 31 mars reste le 31 mars quel que soit l'endroit d'où vous appelez. Les horodatages sont stockés et renvoyés en UTC. Convertissez-les dans le fuseau de votre utilisateur au moment de l'affichage.

Note

Dans les réponses, une date comptable d'un modèle peut apparaître sous la forme longue 2026-03-31T00:00:00.000000Z. Ne retenez que les dix premiers caractères. En entrée, envoyez toujours AAAA-MM-JJ.

Montants

Les montants sont exprimés en euros, sous forme de chaînes décimales avec un point et deux décimales : "1250.00", "0.21", "-48.40".

{
  "debit": "1250.00",
  "credit": "0.00",
  "balance": "1250.00"
}

Ce choix évite les erreurs d'arrondi des nombres flottants. Dans votre code, utilisez un type décimal (BigDecimal, decimal, Decimal, bcmath) ou travaillez en centimes entiers.

En entrée, l'API accepte aussi bien "1250.00" que 1250 ou 1250.5. Elle convertit tout en centimes avant de calculer. Nous recommandons d'envoyer des chaînes.

Attention

Quelques réponses de gestion (licence, grille tarifaire, simulateur) renvoient des nombres JSON, par exemple "total": 149.0. Ce sont des montants commerciaux, pas des montants comptables. Tous les états comptables (balance, grand livre, écritures, TVA) utilisent des chaînes.

Une écriture doit être équilibrée au centime près : la somme des débits égale la somme des crédits, sinon la requête est refusée avec 422.

Identifiants

NovaFisko utilise deux familles d'identifiants.

Ressource Identifiant dans l'URL Forme Exemple
Cabinet (firm) public_token 12 caractères alphanumériques Fd7hQ2mN8sXa
Dossier (company) public_token 12 caractères alphanumériques k3Jd9fPq2LmX
Tout ce qui vit dans un dossier (écriture, tiers, compte, journal, document, exercice...) id numérique entier 1842

Le public_token est opaque, stable et non devinable. C'est lui que vous devez stocker pour désigner un cabinet ou un dossier. Les id numériques n'ont de sens qu'à l'intérieur de leur dossier : une route companies/{company}/entries/{id} répond 404 si l'écriture appartient à un autre dossier.

/v1/companies/k3Jd9fPq2LmX/entries/1842
              └─ public_token       └─ id

Certains champs acceptent une forme lisible à la place de l'id. Dans une écriture, par exemple, une ligne peut désigner son compte par account_id (entier) ou par account (numéro de compte, "604000"). De même, une ligne de facture accepte vat_code_id ou vat_code.

Données importées

Les enregistrements issus d'une autre source portent trois champs : source (par exemple novadesko), external_id (l'identifiant dans la source) et synced_at. Servez-vous de external_id pour retrouver un enregistrement que vous avez vous-même poussé.

Version d'un enregistrement

Les ressources suivies par l'historique exposent un entier version qui augmente à chaque modification. Renvoyez-le dans X-Base-Version pour activer le verrou optimiste décrit dans Idempotence.

Langue des messages

Les libellés et messages d'erreur existent en français, néerlandais, anglais et allemand. La langue est choisie ainsi :

  1. le paramètre de requête locale (routes d'historique, de corbeille et de synchronisation) ou lang (exports, licence) quand il est fourni ;
  2. sinon la langue du profil de l'utilisateur propriétaire du jeton ;
  3. sinon l'en-tête Accept-Language ;
  4. sinon la langue par défaut de la plateforme.
GET /v1/firms/Fd7hQ2mN8sXa/licence?lang=nl HTTP/1.1
Accept-Language: nl-BE,nl;q=0.9,fr;q=0.6
Astuce

Ne faites jamais dépendre votre logique du texte de message, qui varie selon la langue. Appuyez-vous sur le statut HTTP et sur le champ code.

En-têtes de requête

En-tête Rôle
Authorization Bearer <jeton>
Accept application/json
Accept-Language Langue souhaitée pour les messages
X-Client-Mutation-Id Clé d'idempotence d'une écriture, 64 caractères max. Voir Idempotence
X-Base-Version Version connue de l'enregistrement modifié (verrou optimiste)
X-Operation-Id UUID qui regroupe tous les changements d'une même action. Généré par le serveur s'il est absent
X-Device-Id Identifiant stable de l'installation ou du connecteur, 64 caractères max
X-Device-Name Nom lisible de l'appareil, encodé en pourcentage, 120 caractères max
X-Device-Platform Plateforme (web, macos, linux, integration...)
X-Occurred-At Date ISO 8601 de l'action côté client, bornée à plus ou moins 24 heures autour de l'heure serveur
X-Origin offline_sync quand la requête rejoue une action faite hors ligne

Les en-têtes X-Device-* sont facultatifs mais utiles : ils apparaissent dans l'onglet Historique, ce qui permet à un comptable de voir qu'une modification vient de votre connecteur.

curl -X POST https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/third-parties \
  -H "Authorization: Bearer $NOVAFISKO_TOKEN" \
  -H "Content-Type: application/json" \
  -H "X-Device-Id: erp-atelier-prod" \
  -H "X-Device-Name: ERP%20Atelier" \
  -H "X-Client-Mutation-Id: 6f1c2f0e-7a53-4f0b-9c58-0b8a4a7c2d11" \
  -d '{"type": "supplier", "name": "Brasserie des Collines SA", "vat_number": "BE0999900134"}'

En-têtes de réponse

En-tête Signification
X-Operation-Id Identifiant de l'opération quand quelque chose a été historisé. Il sert au retour en arrière : POST history/operations/{operation}/revert
X-Trashed: 1 Le DELETE a placé l'enregistrement dans la corbeille au lieu de le détruire. Il reste restaurable
X-Idempotent-Replay: 1 La réponse est le résultat mémorisé d'une requête déjà exécutée
X-Export-Fingerprint Empreinte SHA-256 du jeu de données exporté
Content-Disposition Nom du fichier pour les exports
Retry-After Délai en secondes avant de réessayer après un 429

Suppressions

Une suppression ne détruit presque jamais rien immédiatement :

  • un tiers, un compte, un journal, une règle ou une immobilisation part à la corbeille (X-Trashed: 1) et peut être restauré pendant la durée de rétention du dossier, 90 jours par défaut ;
  • une écriture validée ne se supprime pas : elle s'extourne avec POST entries/{id}/reverse, ce qui préserve la numérotation continue.

Voir aussi