Aller au contenu

Référence des codes d'erreur

Cette page est la référence centralisée pour les réponses d’erreur de toutes les API fiskaly. Utilisez l’explorateur interactif ci-dessous pour rechercher et filtrer les erreurs, ou faites défiler vers le bas pour consulter les tableaux de référence statiques.

36 errors found


Commencez par l’arbre de décision de dépannage si vous avez une erreur et avez besoin d’une réponse rapide, ou consultez les tableaux spécifiques aux produits pour les codes d’erreur détaillés.

Toutes les API fiskaly retournent les erreurs dans un format JSON cohérent :

{
"status_code": 400,
"error": "Bad Request",
"code": "E_SOME_ERROR",
"message": "Une description lisible de ce qui s'est mal passé"
}
ChampTypeDescription
status_codeentierCode de statut HTTP
errorchaîneTexte de statut HTTP
codechaîneCode d’erreur spécifique à fiskaly (préfixé par E_)
messagechaîneDescription de l’erreur lisible par l’humain
CodeSignificationQuand vous le voyez
200OKLa requête a réussi ; le corps de la réponse contient le résultat
201CrééRessource créée avec succès
204Pas de contenuLa requête a réussi, pas de corps de réponse (ex. opérations DELETE)

Celles-ci indiquent un problème avec votre requête. Ne pas réessayer avec le même payload — corrigez d’abord le problème.

CodeSignificationCauses courantes
400Requête incorrecteJSON malformé, champs obligatoires manquants, valeurs de champ invalides
401Non autoriséToken d’accès expiré ou manquant, identifiants API invalides
403InterditPermissions insuffisantes pour la ressource demandée
404Non trouvéLa ressource n’existe pas, ou chemin URL incorrect
409ConflitLa ressource existe déjà (tentative de création en double)
422Entité non traitableJSON valide mais sémantiquement incorrect (ex. transition d’état invalide)
423VerrouilléLa ressource est actuellement verrouillée par une autre opération
429Trop de requêtesLimite de fréquence dépassée — reculez et réessayez avec un délai exponentiel

Celles-ci indiquent un problème temporaire du côté de fiskaly. Sûr à réessayer avec backoff exponentiel.

CodeSignificationAction
500Erreur interne du serveurRéessayez après un court délai ; si persistant, vérifiez status.fiskaly.com
502Mauvaise passerelleService amont temporairement indisponible ; réessayez
503Service indisponibleLe service est temporairement en maintenance ; réessayez
504Délai de passerelle dépasséLa requête a expiré en amont ; réessayez avec un timeout plus long

Ce sont les erreurs les plus courantes rencontrées par les développeurs lors de l’intégration.

Code d’erreurStatut HTTPCauseSolution
E_UNAUTHORIZED_ACCESS401Token d’accès expiré ou non fourniRé-authentifiez-vous en utilisant votre clé et secret API
E_INVALID_CREDENTIALS401La clé ou le secret API est incorrectVérifiez les identifiants dans le HUB
E_TOKEN_EXPIRED401Le token d’accès JWT a expiréUtilisez le token de rafraîchissement ou ré-authentifiez-vous
E_ACCESS_FORBIDDEN403Votre clé API n’a pas la permission pour cette ressourceVérifiez les portées de la clé API dans le HUB
Clé API + Secret → POST /auth → access_token (24h) + refresh_token (48h)
├── Utiliser pour tous les appels API
└── Sur 401 → ré-authentifier (pas à chaque requête)
Code d’erreurStatut HTTPCauseSolution
E_TSS_NOT_FOUND404L’ID TSS n’existe pasVérifiez l’ID TSS ; listez tous les TSS via GET /tss
E_TSS_NOT_INITIALIZED400Le TSS n’a pas encore été initialiséSuivez toutes les étapes nécessaires : créer le TSS, le mettre à UNINITIALIZED, définir le PIN Admin, se connecter en tant qu’Admin et mettre le TSS à INITIALIZED
E_TSS_DISABLED400Le TSS a été désactivéLe TSS ne peut plus signer de transactions ; créez un nouveau TSS
E_TSS_IN_USE409Le TSS est en cours de modification par une autre requêteAttendez et réessayez
E_CLIENT_NOT_FOUND404L’ID client n’existe pas pour ce TSSCréez un client via PUT /tss/{tss_id}/client/{client_id}
E_CLIENT_NOT_REGISTERED400Le client existe mais n’est pas enregistréEnregistrez le client avant de créer des transactions
E_TX_NOT_FOUND404L’ID de transaction n’existe pasVérifiez l’ID de transaction et le contexte TSS
E_TX_INVALID_STATE422La transaction est dans un état qui ne permet pas cette opérationVérifiez l’état actuel de la transaction ; suivez la machine à états
E_EXPORT_NOT_FOUND404L’ID d’export n’existe pasVérifiez l’ID d’export ; les exports peuvent prendre du temps à traiter
E_EXPORT_IN_PROGRESS409L’export est encore en cours de générationInterrogez l’état de l’export jusqu’à state: COMPLETED
Code d’erreurStatut HTTPCauseSolution
E_ESTABLISHMENT_NOT_FOUND404ID d’établissement non trouvéVérifiez que l’établissement existe pour votre organisation
E_TAXPAYER_NOT_FOUND404Enregistrement du contribuable non trouvéCréez d’abord la ressource contribuable
E_TAXPAYER_ADDRESS_NOT_FOUND404Adresse du contribuable non configuréeAjoutez des données d’adresse à la ressource contribuable
E_TAXPAYER_PERSON_NOT_FOUND404Enregistrement de personne du contribuable manquantAjoutez des données de personne à la ressource contribuable
E_SUBMISSION_NOT_FOUND404ID de déclaration non trouvéVérifiez l’ID de déclaration ; vérifiez que la déclaration a été créée
E_CLIENT_ADDITIONAL_DATA_NOT_FOUND404Données supplémentaires du client manquantesFournissez les données supplémentaires requises pour le client
E_LOCKED_RESOURCE423La ressource est verrouillée par une opération en coursAttendez la fin de l’opération en cours, puis réessayez
Code d’erreurStatut HTTPCauseSolution
E_CASH_REGISTER_NOT_FOUND404Caisse enregistreuse non trouvéeCréez d’abord la caisse enregistreuse via l’API DSFinV-K
E_CASH_POINT_CLOSING_NOT_FOUND404Clôture de point de vente non trouvéeVérifiez l’ID de clôture
E_VAT_DEFINITION_NOT_FOUND404Définition de TVA non configuréeCréez les définitions de TVA avant d’insérer des clôtures
E_INVALID_CLOSING_DATA400Le payload de clôture ne correspond pas au schéma attenduValidez votre payload par rapport à la spécification DSFinV-K

Ces erreurs sont partagées par tous les produits de l’API Unifiée (SIGN FR, SIGN IT, SIGN ES).

Code d’erreurStatut HTTPCauseSolution
E_ORGANIZATION_NOT_FOUND404L’ID organisation n’existe pasVérifiez l’ID org ; assurez-vous qu’elle a été créée sous le bon GROUP
E_TAXPAYER_NOT_COMMISSIONED400Le contribuable existe mais son état n’est pas COMMISSIONEDMettez à jour l’état du contribuable à COMMISSIONED avant les opérations
E_IDEMPOTENCY_KEY_REUSED409La clé d’idempotence a déjà été utilisée pour une autre requêteGénérez un nouveau UUID pour chaque nouvelle requête
E_API_VERSION_NOT_SUPPORTED400L’header X-Api-Version contient une date non supportéeUtilisez la dernière version supportée (ex. 2026-02-03)
E_SCOPE_IDENTIFIER_MISSING400Header X-Scope-Identifier non fourniIncluez l’ID d’organisation dans X-Scope-Identifier
E_SUBJECT_NOT_FOUND404Subject (clé API) non trouvéVérifiez que le subject a été créé sous la bonne organisation
E_TOKEN_INVALID401Le token est malformé ou expiréRé-authentifiez-vous via POST /api/v1/auth/token
E_LOCATION_NOT_COMMISSIONED400L’emplacement existe mais n’est pas commissionnéMettez à jour l’état de l’emplacement à COMMISSIONED
E_SYSTEM_NOT_COMMISSIONED400Le système existe mais n’est pas commissionnéMettez à jour l’état du système à COMMISSIONED
Code d’erreurStatut HTTPCauseSolution
E_RECORD_INVALID_OPERATION422Le type d’opération du record n’est pas valide pour l’état actuelVérifiez le flux Intention → Transaction ; assurez la bonne séquence
E_RECORD_INTENTION_REQUIRED400Record de transaction créé sans Intention préalableCréez d’abord un record Intention, puis référencez son ID
E_TAXPAYER_CREDENTIALS_INVALID400Les identifiants de fiscalisation française (NF 525) sont invalidesVérifiez tax_id_number (SIREN) et les identifiants
E_CLOSURE_IN_PROGRESS409Une clôture fiscale est déjà en coursAttendez la fin de la clôture en cours
Code d’erreurStatut HTTPCauseSolution
E_RT_DEVICE_NOT_FOUND404Dispositif Registratore Telematico non trouvéVérifiez que le dispositif RT a été créé et commissionné
E_RT_SUBMISSION_FAILED502Envoi à Agenzia delle Entrate échouéRéessayez ; vérifiez l’état du service AdE si persistant
E_LOTTERY_CODE_INVALID400Le format du code de la loterie des reçus est invalideAssurez-vous que le code de la loterie comporte 8 caractères alphanumériques
E_FISCAL_CODE_INVALID400Le format du codice fiscale italien est incorrectVérifiez le format du code fiscal à 16 caractères

SIGN ES retourne les erreurs de validation dans un tableau validations dans la réponse, chacune avec un code et une description. Celles-ci sont spécifiques aux transmissions TicketBAI / Verifactu / SII.

Code de validationCause
V_TICKETBAIErreur inconnue ou non gérée de TicketBAI
V_XSD_SCHEMA_NOT_COMPLYLe fichier XML n’est pas conforme au schéma XML
V_INVOICE_WITHOUT_LINESLe fichier XML n’inclut pas de lignes de détail
V_REQUIRED_FIELD_MISSING_OR_INCORRECTDes données obligatoires sont manquantes ou incorrectes
V_INVOICE_ALREADY_REGISTEREDUne facture avec le même numéro/série/année était déjà enregistrée
V_SERVICE_NOT_AVAILABLELe service de réception n’est pas disponible
V_INCORRECT_SENDER_CERTIFICATELe certificat de l’expéditeur est inconnu
V_INVALID_SENDER_CERTIFICATELe certificat de l’expéditeur n’est pas valide
V_WRONG_SIGNATURELa validation de la signature a échoué
V_INCORRECT_INVOICE_CHAININGL’enchaînement des factures était incorrect
V_INVALID_TBAI_LICENSELicence TicketBAI non enregistrée ou non valide
V_DEVICE_NOT_REGISTEREDLe certificat de dispositif utilisé pour l’envoi est en attente d’enregistrement
V_EXPIRED_SIGNATURE_CERTIFICATELe certificat utilisé pour signer le fichier TicketBAI a expiré
V_EXPIRED_SENDER_CERTIFICATELe certificat de l’expéditeur n’est pas valide ou a expiré
V_EXPIRED_SIGNER_CERTIFICATELe certificat utilisé pour la signature n’est pas valide ou a expiré
V_FULL_AMOUNT_MISMATCHLa somme des full_amount des lignes n’est pas égale au full_amount de la facture
V_ISSUE_DATE_OUT_OF_RANGELa date d’émission a plus de 20 ans ou est dans le futur
V_INVALID_VAT_RATELe taux de TVA n’est pas une valeur valide pour la région du contribuable
V_INVOICE_ALREADY_CANCELLEDLa facture a déjà été annulée
V_INVOICE_ALREADY_CORRECTEDLa facture a déjà été corrigée
V_INCOMPATIBLE_VAT_SYSTEMSLes systèmes de TVA fournis ne sont pas compatibles entre eux
V_INCORRECT_ITEM_VAT_CALCULATIONUn article de la facture a un calcul de TVA appliqué de manière incorrecte

Les différentes opérations ont des durées attendues différentes. Configurez vos timeouts en conséquence :

OpérationTimeout recommandéNotes
Authentification (POST /auth)3-4 secondesOpération rapide ; ne pas bloquer le paiement
Signature de transaction (PUT /tx)3-5 secondesNe devrait jamais bloquer la caisse
Création / initialisation TSS30 secondesConfiguration unique ; traitement plus lourd
Clôtures de point de vente DSFinV-KJusqu’à 10 minutesTraitement lourd avec de grands jeux de données
Génération d’exportBasée sur pollingUtilisez le polling asynchrone, pas l’attente synchrone

Pour les erreurs transitoires (5xx, timeouts, limites de fréquence), utilisez le backoff exponentiel :

async function callWithRetry(fn, maxRetries = 3) {
for (let attempt = 0; attempt <= maxRetries; attempt++) {
try {
return await fn();
} catch (error) {
if (attempt === maxRetries) throw error;
const isRetryable =
error.status >= 500 ||
error.status === 429 ||
error.code === "ETIMEDOUT";
if (!isRetryable) throw error;
const delay = Math.min(1000 * 2 ** attempt, 30000);
await new Promise((r) => setTimeout(r, delay));
}
}
}
Vous avez une erreur ?
├── 401 Unauthorized
│ └── Votre token a-t-il expiré ?
│ ├── Oui → Ré-authentifiez-vous avec clé API + secret
│ └── Non → Vérifiez les identifiants dans le HUB
├── 400 Bad Request
│ └── Vérifiez le champ `message` pour savoir quel champ est invalide
│ └── Validez votre payload JSON par rapport au schéma API
├── 404 Not Found
│ └── La ressource existe-t-elle ?
│ ├── Vérifiez que l'ID est correct (format UUIDv4)
│ └── Assurez-vous que la ressource a été créée dans le bon environnement (TEST vs LIVE)
├── 409 Conflict
│ └── La ressource existe déjà ou est en cours de modification
│ └── Utilisez GET pour vérifier l'état actuel avant de réessayer
├── 429 Rate Limited
│ └── Reculez avec un délai exponentiel
│ └── Vérifiez si vous vous ré-authentifiez à chaque requête (ne le faites pas)
└── Erreur 5xx du serveur
└── Vérifiez status.fiskaly.com
├── Incident connu → Attendez la résolution
└── Pas d'incident → Réessayez avec backoff exponentiel ; contactez le support si persistant

Surveillez l’état du service fiskaly sur status.fiskaly.com.

Ce sont les erreurs que le support fiskaly voit le plus souvent de la part des équipes lors de leur première intégration. Les éviter économise un temps de débogage significatif.

ErreurCe qui se passeComment l’éviter
Se ré-authentifier à chaque requêteErreurs de limite de fréquence 429 ; latence inutile à chaque paiementMettez en cache le token d’accès (TTL 24h). Ré-authentifiez-vous seulement sur 401.
Ne pas sauvegarder le admin_pukImpossible de définir le PIN Admin sur le TSS ; bloqué en état UNINITIALIZEDSauvegardez le admin_puk de la réponse de création du TSS immédiatement.
Réutiliser des UUIDsErreurs 409 Conflict lors de la création de TSS, clients ou transactionsGénérez un nouveau UUIDv4 pour chaque appel de création de ressource.
Bloquer le paiement sur un échec de signatureLes clients attendent indéfiniment si le TSS est lent ou indisponibleDéfinissez un timeout de 3-5 secondes sur la signature. Émettez le reçu avec “TSS non disponible” et réessayez plus tard.
Utiliser des identifiants TEST en LIVE (ou vice versa)401 Unauthorized — les identifiants sont spécifiques à l’environnementVérifiez que l’URL de base correspond à l’environnement de la clé API. TEST et LIVE sont complètement séparés.
Passer l’initialisation du TSS400 E_TSS_NOT_INITIALIZED lors de la création de clients ou de transactionsSuivez toutes les étapes nécessaires : créer le TSS, le mettre à UNINITIALIZED, définir le PIN Admin, se connecter en tant qu’Admin et mettre le TSS à INITIALIZED.
Ne pas gérer correctement tx_revision422 E_TX_INVALID_STATE ou erreurs de transaction en doubleCommencez avec tx_revision=1 (ACTIVE), finissez avec tx_revision=2 (FINISHED). Incrémentez toujours.
Polling synchrone des exportsTimeouts sur la génération d’exports DSFinV-K (peut prendre jusqu’à 10 minutes)Utilisez le polling asynchrone : déclenchez l’export, puis interrogez l’endpoint de statut jusqu’à state: COMPLETED.
Hardcoder les timeoutsL’équipe de développement ne peut pas les ajuster sans une release de codeRendez les timeouts configurables (ex. 1,5-5 secondes pour les transactions). Ajustable par l’administrateur est l’idéal.

Was this page helpful?