> ## Documentation Index
> Fetch the complete documentation index at: https://api-doc.fidly.be/llms.txt
> Use this file to discover all available pages before exploring further.

# Erreurs

> Une seule enveloppe pour toutes les erreurs, avec un code machine-readable, classées par ressource.

Toutes les erreurs utilisent la même enveloppe, en anglais :

```json theme={null}
{
  "error": {
    "code": "invalid_filter",
    "message": "Invalid type 'x'. Allowed: [...]"
  }
}
```

`code` est stable et en snake\_case — branchez-vous dessus, pas sur le message.
`message` est lisible et loggable. Aucune stack trace n'est jamais renvoyée.

## Général

<ResponseField name="validation_error" type="422">
  Corps ou paramètre refusé par la validation de schéma ; message au format
  `champ: raison`.
</ResponseField>

<ResponseField name="invalid_filter" type="400">
  Valeur inconnue dans un filtre de liste (aussi : `language` inconnu sur les
  listes de référence, `format` inconnu au téléchargement d'un fichier).
</ResponseField>

<ResponseField name="invalid_parameter" type="422">
  Paramètre de query qui ne s'applique pas à la ressource visée (ex.
  `?ignore_duplicate` sur un contact).
</ResponseField>

<ResponseField name="field_not_editable" type="422">
  Champ en lecture seule dans un `PATCH` — `bic`/`reference` d'un compte bancaire
  non manuel, `code`/`category`/`sequence_scope` d'un journal, `type`/`journal_id`
  d'un document — ou champ qui n'existe pas pour le type de la relation.
</ResponseField>

<ResponseField name="not_found" type="404">
  Route inconnue ou UUID inconnu (y compris un UUID d'une autre entreprise).
</ResponseField>

<ResponseField name="internal_error" type="500">
  Erreur serveur inattendue, loggée de notre côté. Réessayez plus tard ; si elle
  persiste, contactez le support en indiquant le `X-Request-ID` de l'en-tête de
  réponse — il nous permet de récupérer la trace de cette requête immédiatement et
  d'accélérer le traitement (voir [Conventions](/fr/conventions#suivre-une-requête)).
</ResponseField>

## Authentification

<ResponseField name="invalid_request" type="400">
  Champ d'identification manquant sur `/auth/token`.
</ResponseField>

<ResponseField name="invalid_credentials" type="401">
  `client_id` inconnu ou `client_secret` erroné.
</ResponseField>

<ResponseField name="invalid_grant" type="401">
  `refresh_token` inconnu, déjà utilisé ou révoqué.
</ResponseField>

<ResponseField name="client_inactive" type="401">
  Le client a été désactivé.
</ResponseField>

<ResponseField name="invalid_token" type="401">
  `access_token` absent, malformé ou expiré.
</ResponseField>

<ResponseField name="insufficient_permissions" type="403">
  L'`access_token` ne porte pas le droit requis.
</ResponseField>

<ResponseField name="too_many_requests" type="429">
  Trop d'authentifications échouées sur ce `client_id`.
</ResponseField>

## Documents

<ResponseField name="invalid_relation" type="422">
  `relation_id` inconnu, d'une autre entreprise, ou sans adresse.
</ResponseField>

<ResponseField name="invalid_journal" type="422">
  Journal inconnu, inactif, d'une autre entreprise, ou de la mauvaise catégorie
  pour le type du document.
</ResponseField>

<ResponseField name="no_default_journal" type="422">
  Pas de `journal_id` fourni et aucun journal par défaut pour la catégorie.
</ResponseField>

<ResponseField name="invalid_delivery_location" type="422">
  Adresse de livraison inconnue ou appartenant à un autre tiers que celui du
  document.
</ResponseField>

<ResponseField name="invalid_amount" type="422">
  Total du document négatif.
</ResponseField>

<ResponseField name="invalid_paid_amount" type="422">
  `paid_amount` déclaré au-dessus du total du document.
</ResponseField>

<ResponseField name="invalid_allowance_charge" type="422">
  Remise/majoration de document sur des lignes totalisant 0, ou taux de TVA dont
  les lignes totalisent un montant négatif.
</ResponseField>

<ResponseField name="invalid_issue_date" type="422">
  Date hors de l'encadrement des documents numérotés voisins, ou hors de la
  fenêtre de numérotation.
</ResponseField>

<ResponseField name="invalid_document_lines" type="422">
  Lignes stockées inutilisables pour un recalcul — envoyer le tableau `lines`
  complet en remplacement.
</ResponseField>

<ResponseField name="self_billing_disabled" type="422">
  Création d'un document d'achat alors que l'auto-facturation n'est pas activée
  pour la société.
</ResponseField>

<ResponseField name="not_sendable" type="422">
  Envoi d'un type que Peppol ne transporte pas (ex. un proforma). En `409` : envoi
  d'un document **reçu**.
</ResponseField>

<ResponseField name="send_failed" type="422">
  Le workflow d'envoi n'a pas pu démarrer. Avec `?send_peppol=true` le document
  **est** créé — le message donne son id ; la reprise est
  `POST /documents/{id}/send`, jamais une seconde création.
</ResponseField>

<ResponseField name="already_sent" type="409">
  Envoi Peppol d'un document déjà parti — seul un envoi en échec (`peppol_status`
  `failed` ou `rejected`) se relance.
</ResponseField>

<ResponseField name="duplicate_attachment" type="409">
  Nom de pièce jointe déjà porté par le document.
</ResponseField>

<ResponseField name="document_not_editable" type="409">
  `PATCH` d'un document déjà envoyé au client, déjà transmis à la comptabilité, ou
  reçu.
</ResponseField>

<ResponseField name="document_not_deletable" type="409">
  `DELETE` d'un document qui n'est pas le dernier de sa séquence, déjà envoyé,
  transmis, ou reçu.
</ResponseField>

<ResponseField name="document_in_use" type="409">
  `DELETE` d'un document lié à un rapprochement, une ligne de prestation facturée
  ou une intention de paiement.
</ResponseField>

L'import et les pièces jointes renvoient aussi des statuts HTTP nus : `413`
(fichier trop gros) et `415` (extension refusée).

## Relations

<ResponseField name="duplicate_relation" type="409">
  Société dont le `vat`, l'`identifier` ou l'`electronic_address` existe déjà —
  contournable avec `?ignore_duplicate=true` ; le message donne l'id existant.
</ResponseField>

<ResponseField name="invalid_address" type="422">
  Adresse sans `country_code`, ou `street_number` sans `street`.
</ResponseField>

<ResponseField name="relation_in_use" type="409">
  `DELETE` d'un tiers encore référencé (document, abonnement, projet, ligne de
  prestation, correspondance comptable...). Le message dit ce qui bloque.
</ResponseField>

## Adresses de livraison

<ResponseField name="invalid_address" type="422">
  Adresse sans `country_code`, ou `street_number` sans `street` — les mêmes règles
  que l'adresse d'un tiers.
</ResponseField>

<ResponseField name="invalid_identifier" type="422">
  Paire `identifier` / `identifier_scheme` à moitié remplie.
</ResponseField>

<ResponseField name="invalid_delivery_location" type="422">
  Sur un document : adresse inconnue ou appartenant à un autre tiers que celui du
  document.
</ResponseField>

<ResponseField name="delivery_location_in_use" type="409">
  `DELETE` d'une adresse de livraison à laquelle un document est livré.
</ResponseField>

## Comptes bancaires

<ResponseField name="duplicate_bank_account" type="409">
  Compte avec la même `reference` (IBAN) déjà présent.
</ResponseField>

<ResponseField name="default_account_required" type="422">
  Rétrogradation du compte bancaire par défaut sans en promouvoir un autre.
</ResponseField>

## Journaux

<ResponseField name="duplicate_journal_code" type="409">
  `code` de journal déjà porté dans l'entreprise.
</ResponseField>

<ResponseField name="default_journal_required" type="422">
  Journal par défaut créé ou laissé inactif, ou rétrogradation du dernier défaut
  d'une catégorie.
</ResponseField>

<ResponseField name="invalid_bank_account" type="422">
  `bank_account_id` ne correspondant à aucun compte de l'entreprise.
</ResponseField>

## Brandings

<ResponseField name="default_branding_required" type="422">
  Rétrogradation du branding par défaut — en promouvoir un autre à la place.
</ResponseField>
