Docs

3 API3.3

3.3

Przesłanie XML: POST /invoices/xml

XML w formacie UBL, CII lub FA(3).

  • W sandboxie

Prostymi słowami

To wywołanie przesyła fakturę, która istnieje już jako gotowy plik XML. Plik przechodzi kontrolę bezpieczeństwa i walidatory właściwe dla kanału, a jeśli je przejdzie, trafia do kolejki.

POST /invoices/xml przyjmuje gotowy plik UBL, CII lub FA(3). Plik nie jest mapowany. Usługa sprawdza bezpieczeństwo i typ pliku, uruchamia oficjalne walidatory właściwe dla kanału, a potem umieszcza plik w kolejce i wysyła go w niezmienionej postaci. Dla FA(3) kontrole to schemat oraz reguły KSeF dotyczące pliku i dat.

Uwaga

202 oznacza, że plik przeszedł kontrolę bezpieczeństwa i jest w kolejce. Aby sprawdzić plik przed wysłaniem, należy wysłać fakturę jako JSON do POST /validate.

Żądanie

CzęśćZnaczenie
Parametr zapytania routeWymagany. Jeden z pięciu kanałów przesyłania.
Parametr zapytania invoice_refWymagany. Własny identyfikator dokumentu w ERP, maksymalnie 100 znaków.
Parametr zapytania clientOpcjonalny. Klucz klienta może pominąć ten parametr albo podać własnego klienta.
Nagłówek Idempotency-KeyWymagany, od 8 do 100 znaków.
Nagłówek Content-Typeapplication/xml lub text/xml. application/pdf jest zapisywany i umieszczany w kolejce w ten sam sposób.

Jaki plik przyjmuje każdy kanał:

KanałPrzyjmuje
DE-XRECHNUNGUBL, CII
FR-PAUBL, CII
PEPPOLUBL
RO-EFACTURAUBL
PL-KSEFFA(3)

Przyjęty plik

Przykład to fa3-pl-ksef.xml, polski plik FA(3) z fikcyjnymi stronami transakcji. Stan to 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
Odpowiedź202 Accepted
{
  "links": {
    "self": "/invoices/inv_d249e33382ce2911876b7295",
    "events": "/invoices/inv_d249e33382ce2911876b7295/events"
  },
  "id": "inv_d249e33382ce2911876b7295",
  "state": "queued"
}
Zarejestrowano 7 paź 2026.

Plik wysłany dwa razy

Ten sam plik wysłany ponownie dla tego samego klienta i kanału to faktura, którą już mamy. Odpowiedź zawiera duplicate_of, identyfikator pierwszej faktury, a nic nowego nie jest wysyłane. Przesłanie, które zakończyło się stanem rejected, validation_failed lub cancelled, się nie liczy, więc plik można wysłać ponownie.

Odrzucone pliki

Dla poprawnie sformułowanego XML, który nie jest fakturą, usługa zwraca 422 z kodem 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
Odpowiedź422 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
}
Zarejestrowano 7 paź 2026. Plik to [not-an-invoice.xml](/samples/not-an-invoice.xml).

Dla pliku z deklaracją DOCTYPE usługa zwraca 422 z kodem EI-XML-DTD, zanim odczyta go jakikolwiek walidator. Dla pliku, który nie jest poprawnie sformułowany, zwraca 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
Odpowiedź422 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
}
Zarejestrowano 7 paź 2026. Plik to [with-doctype.xml](/samples/with-doctype.xml).

Dla typu treści innego niż XML lub PDF usługa zwraca 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
Odpowiedź415 Unsupported Media Type
{
  "type": "https://eurinvoice.com/problems/unsupported-media",
  "title": "Not UBL, CII or FA(3)",
  "status": 415
}
Zarejestrowano 7 paź 2026.

Gdy brakuje Idempotency-Key albo jest on zbyt krótki, usługa zwraca 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
Odpowiedź400 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
}
Zarejestrowano 7 paź 2026.

Odpowiedzi

StatusZnaczenie
202Przyjęty i umieszczony w kolejce. Location zawiera adres URL faktury.
400Brakuje parametru zapytania lub nagłówka Idempotency-Key albo któryś z nich jest błędny.
401Brak klucza lub nieznany klucz.
403Klucz nie ma zakresu submit albo wskazuje innego klienta (forbidden).
409Klucz został użyty z inną treścią (idempotency-conflict) albo jego pierwsze żądanie jeszcze trwa (request-in-progress).
413Treść przekracza 5 MB (payload-too-large).
415Typ treści nie jest ani XML, ani PDF (unsupported-media).
422Odrzucony plik: EI-XML-DTD, EI-XML-SYNTAX lub EI-XML-TYPE.
429Zbyt wiele żądań dla klucza. Należy odczekać liczbę sekund podaną w Retry-After.
503Inne żądanie dotyczące tego samego dokumentu jest jeszcze zapisywane (busy). Należy ponowić po liczbie sekund podanej w Retry-After.

Na tej stronie