Docs

3 API3.3

3.3

Soumettre du XML : POST /invoices/xml

XML UBL, CII ou FA(3).

  • Dans le bac à sable

En termes simples

Cet appel soumet une facture qui existe déjà sous forme de fichier XML finalisé. Elle passe un contrôle de sécurité et les validateurs propres au canal, puis va dans la file d’attente si elle les réussit.

POST /invoices/xml reçoit un fichier UBL, CII ou FA(3) finalisé. Aucun mapping n’a lieu. Le service contrôle la sécurité et le type du fichier, exécute les validateurs officiels du canal, puis le met en file d’attente et l’envoie tel quel. Pour FA(3), les contrôles sont le schéma plus les règles de fichier et de date de KSeF.

Remarque

Un 202 signifie que le fichier a passé le contrôle de sécurité et qu’il est en file d’attente. Pour contrôler un fichier avant de l’envoyer, envoyez la facture en JSON à POST /validate.

La requête

ÉlémentSignification
Paramètre de requête routeObligatoire. L’un des cinq canaux.
Paramètre de requête invoice_refObligatoire. L’identifiant du document propre à l’ERP, jusqu’à 100 caractères.
Paramètre de requête clientFacultatif. La clé propre d’un client peut l’omettre ou indiquer son propre client.
En-tête Idempotency-KeyObligatoire, de 8 à 100 caractères.
En-tête Content-Typeapplication/xml ou text/xml. application/pdf est stocké et mis en file d’attente de la même façon.

Le fichier accepté par chaque canal :

CanalAccepte
DE-XRECHNUNGUBL, CII
FR-PAUBL, CII
PEPPOLUBL
RO-EFACTURAUBL
PL-KSEFFA(3)

Un fichier accepté

L’exemple est fa3-pl-ksef.xml, un fichier FA(3) polonais avec des parties fictives. L’état est queued.

curl -X POST "https://api-sandbox-eu.eurinvoice.com/invoices/xml?route=PL-KSEF&invoice_ref=INV-2026-0042" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/xml" \
  -H "Idempotency-Key: order-2026-0042" \
  --data-binary @fa3-pl-ksef.xml
Réponse202 Accepted
{
  "links": {
    "self": "/invoices/inv_d249e33382ce2911876b7295",
    "events": "/invoices/inv_d249e33382ce2911876b7295/events"
  },
  "id": "inv_d249e33382ce2911876b7295",
  "state": "queued"
}
Enregistré le 7 oct. 2026.

Un fichier envoyé deux fois

Le même fichier envoyé à nouveau pour le même client et le même canal est la facture déjà détenue. La réponse contient duplicate_of, l’identifiant de la première facture, et rien de nouveau n’est envoyé. Une soumission qui s’est terminée en rejected, validation_failed ou cancelled ne compte pas : le fichier peut donc être renvoyé.

Fichiers refusés

Un XML bien formé qui n’est pas une facture reçoit 422 avec EI-XML-TYPE.

curl -X POST "https://api-sandbox-eu.eurinvoice.com/invoices/xml?route=PEPPOL&invoice_ref=INV-2026-0051" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/xml" \
  -H "Idempotency-Key: order-2026-0051" \
  --data-binary @not-an-invoice.xml
Réponse422 Unprocessable Content
{
  "type": "https://eurinvoice.com/problems/validation-failed",
  "title": "The invoice did not pass the checks",
  "errors": [
    {
      "code": "EI-XML-TYPE",
      "fix_hint": "Send the invoice itself, in the format agreed for the route.",
      "who_fixes": "erp",
      "source": "XML-safety",
      "message": "The file is not an invoice in a format this route accepts. Please send the invoice in the agreed format."
    }
  ],
  "status": 422
}
Enregistré le 7 oct. 2026. Le fichier est [not-an-invoice.xml](/samples/not-an-invoice.xml).

Un fichier avec un DOCTYPE reçoit 422 avec EI-XML-DTD, avant qu’un validateur ne le lise. Un fichier mal formé reçoit EI-XML-SYNTAX.

curl -X POST "https://api-sandbox-eu.eurinvoice.com/invoices/xml?route=PEPPOL&invoice_ref=INV-2026-0052" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/xml" \
  -H "Idempotency-Key: order-2026-0052" \
  --data-binary @with-doctype.xml
Réponse422 Unprocessable Content
{
  "type": "https://eurinvoice.com/problems/validation-failed",
  "title": "The invoice did not pass the checks",
  "errors": [
    {
      "code": "EI-XML-DTD",
      "fix_hint": "Export the invoice without the DOCTYPE line. If the ERP adds one on purpose, raise it with the ERP vendor: no e-invoicing format uses it.",
      "who_fixes": "erp",
      "source": "XML-safety",
      "message": "The invoice file contains a DOCTYPE declaration, which e-invoices never use, so we refused it for security before reading it. Export it again without the DOCTYPE line."
    }
  ],
  "status": 422
}
Enregistré le 7 oct. 2026. Le fichier est [with-doctype.xml](/samples/with-doctype.xml).

Un type de contenu autre que XML ou PDF reçoit 415.

curl -X POST "https://api-sandbox-eu.eurinvoice.com/invoices/xml?route=PEPPOL&invoice_ref=INV-2026-0053" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: text/plain" \
  -H "Idempotency-Key: order-2026-0053" \
  --data-binary @hello.txt
Réponse415 Unsupported Media Type
{
  "type": "https://eurinvoice.com/problems/unsupported-media",
  "title": "Not UBL, CII or FA(3)",
  "status": 415
}
Enregistré le 7 oct. 2026.

Un en-tête Idempotency-Key absent ou trop court reçoit 400.

curl -X POST "https://api-sandbox-eu.eurinvoice.com/invoices/xml?route=PEPPOL&invoice_ref=INV-2026-0054" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/xml" \
  --data-binary @ubl-peppol.xml
Réponse400 Bad Request
{
  "detail": "Idempotency-Key must be between 8 and 100 characters.",
  "type": "https://eurinvoice.com/problems/bad-request",
  "title": "The request could not be read",
  "status": 400
}
Enregistré le 7 oct. 2026.

Réponses

StatutSignification
202Acceptée et mise en file d’attente. Location contient l’URL de la facture.
400Un paramètre de requête ou l’en-tête Idempotency-Key est absent ou erroné.
401Aucune clé, ou une clé inconnue.
403La clé n’a pas la portée submit, ou indique un autre client (forbidden).
409La clé a été utilisée avec un corps différent (idempotency-conflict), ou sa première requête est encore en cours (request-in-progress).
413Le corps dépasse 5 Mo (payload-too-large).
415Le type de contenu n’est ni XML ni PDF (unsupported-media).
422Un fichier refusé : EI-XML-DTD, EI-XML-SYNTAX ou EI-XML-TYPE.
429Trop de requêtes pour la clé. Attendez Retry-After secondes.
503Une autre requête pour le même document est encore en cours de stockage (busy). Réessayez après Retry-After secondes.

Sur cette page