Docs

3 API3.3

3.3

XML indienen: POST /invoices/xml

XML in UBL, CII of FA(3).

  • In de sandbox

In gewone woorden

Deze aanroep dient een factuur in die al als kant-en-klaar XML-bestand bestaat. Ze krijgt een veiligheidscontrole en de eigen validators van het verzendkanaal, en gaat naar de wachtrij als ze slaagt.

POST /invoices/xml neemt een kant-en-klaar UBL-, CII- of FA(3)-bestand aan. Er gebeurt geen mapping. De dienst controleert het bestand op veiligheid en type, voert de officiële validators voor het verzendkanaal uit, zet het daarna in de wachtrij en verzendt het ongewijzigd. Voor FA(3) zijn de controles het schema plus de bestands- en datumregels van KSeF.

Opmerking

Een 202 betekent dat het bestand de veiligheidscontrole heeft doorstaan en in de wachtrij staat. Stuur de factuur om een bestand te controleren voordat u het verzendt als JSON naar POST /validate.

Het verzoek

OnderdeelBetekenis
Queryparameter routeVerplicht. Een van de vijf verzendkanalen.
Queryparameter invoice_refVerplicht. De eigen document-ID van het ERP, maximaal 100 tekens.
Queryparameter clientOptioneel. De eigen sleutel van een eindklant mag het weglaten of de eigen eindklant noemen.
Header Idempotency-KeyVerplicht, 8 tot 100 tekens.
Header Content-Typeapplication/xml of text/xml. application/pdf wordt op dezelfde manier opgeslagen en in de wachtrij gezet.

Welk bestand elk verzendkanaal aanneemt:

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

Een geaccepteerd bestand

Het voorbeeld is fa3-pl-ksef.xml, een Pools FA(3)-bestand met verzonnen partijen. De status is 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
Antwoord202 Accepted
{
  "links": {
    "self": "/invoices/inv_d249e33382ce2911876b7295",
    "events": "/invoices/inv_d249e33382ce2911876b7295/events"
  },
  "id": "inv_d249e33382ce2911876b7295",
  "state": "queued"
}
Vastgelegd op 7 okt. 2026.

Een bestand dat twee keer is gestuurd

Hetzelfde bestand dat opnieuw wordt gestuurd voor dezelfde eindklant en hetzelfde verzendkanaal, is de factuur die al in bezit is. Het antwoord bevat duplicate_of, de ID van de eerste factuur, en er wordt niets nieuws verzonden. Een indiening die eindigde op rejected, validation_failed of cancelled telt niet mee, dus het bestand kan opnieuw worden gestuurd.

Geweigerde bestanden

XML die welgevormd is maar geen factuur, krijgt 422 met 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
Antwoord422 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
}
Vastgelegd op 7 okt. 2026. Het bestand is [not-an-invoice.xml](/samples/not-an-invoice.xml).

Een bestand met een DOCTYPE krijgt 422 met EI-XML-DTD, voordat een validator het leest. Een bestand dat niet welgevormd is, krijgt 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
Antwoord422 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
}
Vastgelegd op 7 okt. 2026. Het bestand is [with-doctype.xml](/samples/with-doctype.xml).

Een contenttype dat geen XML of PDF is, krijgt 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
Antwoord415 Unsupported Media Type
{
  "type": "https://eurinvoice.com/problems/unsupported-media",
  "title": "Not UBL, CII or FA(3)",
  "status": 415
}
Vastgelegd op 7 okt. 2026.

Een ontbrekende of te korte Idempotency-Key krijgt 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
Antwoord400 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
}
Vastgelegd op 7 okt. 2026.

Antwoorden

StatusBetekenis
202Geaccepteerd en in de wachtrij gezet. Location bevat de URL van de factuur.
400Een queryparameter of de Idempotency-Key ontbreekt of is fout.
401Geen sleutel, of een onbekende sleutel.
403De sleutel mist de scope submit, of noemt een andere eindklant (forbidden).
409De sleutel werd gebruikt met een andere body (idempotency-conflict), of het eerste verzoek ermee loopt nog (request-in-progress).
413De body is groter dan 5 MB (payload-too-large).
415Het contenttype is geen XML of PDF (unsupported-media).
422Een geweigerd bestand: EI-XML-DTD, EI-XML-SYNTAX of EI-XML-TYPE.
429Te veel aanvragen voor de sleutel. Wacht het aantal seconden in Retry-After.
503Een ander verzoek voor hetzelfde document wordt nog opgeslagen (busy). Probeer het opnieuw na het aantal seconden in Retry-After.

Op deze pagina