Zbudowanie i sprawdzenie dokumentu bez jego wysyłania
- W sandboxie
Prostymi słowami
Uruchamia schemat, kontrole wstępne, serializator dla kanału i każdą oficjalną warstwę walidacji,
po czym zwraca raport i zbudowane dokumenty, każdy z bajtami w content_base64, jeśli ma 2 MiB lub mniej. Nic nie jest wysyłane i nic nie jest przechowywane poza
dziennikiem żądań. Przydaje się przy mapowaniu nowego klienta. Liczba poza limitami (patrz konwencje) daje odpowiedź 422
przed jakąkolwiek kontrolą.
apiKeyAuthorizationBearer <token>Klucz należy wysyłać jako token typu bearer: Authorization: Bearer <your-api-key>. Wywołanie stanu usługi jest jedynym, które nie wymaga klucza.
application/json- body
Przebieg próbny. Należy wysłać document (fakturę kanoniczną) albo connector z export (jeden dokument ERP),
nie oba naraz. Oba działają na każdym kanale; na kanale innym niż DE-XRECHNUNG raport zaczyna się od warstwy mapping konektora
i kontroli sum z ERP (pre-check). formats przyjmuje własne formaty kanału: Niemcy mogą podać
kilka i dostają każdy; inny kanał podaje jeden (Francja: ubl, cii lub facturx, ostatni sprawdzany jako CII i jako PDF).
invoice_ref?stringlength <= 100route?RouteKrajowy kanał przesyłania. Te same wartości co country_route w zdarzeniach statusu.
"PEPPOL""PL-KSEF""RO-EFACTURA""FR-PA""DE-XRECHNUNG"environment?string"sandbox""production"client?stringTylko klucz operatora. Stosuje do eksportu ustawienia konektora tego klienta; klucz klienta zawsze używa własnych.
^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$document*Jedna faktura w modelu kanonicznym. Znaczenie pól odpowiada modelowi semantycznemu EN 16931. Sumy nie są częścią modelu: usługa oblicza je z pozycji.
connector?stringZ którego ERP pochodzi eksport. business-central: jedna faktura sprzedaży Business Central API v2.0. Inny obiekt SAP, na przykład zamówienie lub wersja robocza, daje odpowiedź 400.
"business-central""sap-b1"export?Dokument ERP w postaci zwróconej przez ERP. Pola, których mapowanie nie odczytuje, są pomijane.
mapping_version?stringWersja mapowania tego konektora. Aktywna, gdy pominięto; nieznana daje odpowiedź 400.
^v[0-9]+$formats?array<>Które dokumenty wytworzyć tam, gdzie kanał pozwala na wybór (Niemcy: xrechnung-ubl,
xrechnung-cii lub zugferd; Francja: ubl, cii lub facturx). Wartości domyślne dla kanału są ustawiane przy wdrożeniu.
W POST /invoices należy podać najwyżej jeden: to jest dokument, który jest budowany, sprawdzany i wysyłany (pierwszy z każdej
powyższej listy, gdy pominięto). Peppol i Rumunia przyjmują ubl, Polska fa3. Inna wartość lub więcej niż jedna
daje odpowiedź 400. Factur-X i ZUGFeRD są sprawdzane dwukrotnie: najpierw CII w środku według reguł kanału, potem PDF.
W kanale niemieckim dokument bez profile jest budowany jako XRechnung.
erp_totals?Sumy obliczone przez ERP. Usługa oblicza własne z pozycji i odrzuca fakturę (422, EI-TOTALS-MISMATCH, ze wskazaniem pola ERP), jeśli się różnią, zamiast wysyłać dokument, z którym ERP się nie zgadza. Konektor odczytuje je z samego eksportu; sumy podane tutaj mają pierwszeństwo.
Raport, niezależnie od tego, czy dokument jest poprawny.
application/json- response
mapping_version?stringUżyta wersja mapowania konektora
valid*booleanroute*RouteKrajowy kanał przesyłania. Te same wartości co country_route w zdarzeniach statusu.
"PEPPOL""PL-KSEF""RO-EFACTURA""FR-PA""DE-XRECHNUNG"layers*array<>Każda kontrola po kolei, z jej ustaleniami.
documents?array<>curl -X POST "https://example.com/validate" \ -H "Authorization: Bearer <your-api-key>" \ -H "Content-Type: application/json" \ -d '{ "invoice_ref": "CAPTURE-DE-OK-1790961440", "route": "DE-XRECHNUNG", "environment": "sandbox", "document": { "lang": "de", "country": "DE", "invoice": { "number": "CAPTURE-DE-OK-1790961440", "issue_date": "2026-09-26", "due_date": "2026-10-10", "type_code": 380, "currency": "EUR", "buyer_reference": "PO-88731", "period": { "start": "2026-09-01", "end": "2026-09-30" }, "notes": [ "Vielen Dank für Ihren Auftrag." ] }, "seller": { "name": "Nordlicht Software GmbH", "address": { "street": "Hafenstraße 12", "city": "Hamburg", "postcode": "20457", "country": "DE" }, "vat_id": "DE938296582", "tax_number": "27/123/45678", "company_id": "HRB 123456", "register": "Amtsgericht Hamburg HRB 123456", "managing_directors": "Geschäftsführer: Jana Petersen", "legal_info": "GmbH", "endpoint": { "id": "DE938296582", "scheme": "9930" }, "contact": { "name": "Jana Petersen", "email": "[email protected]", "phone": "+49 40 1234567" }, "brand_color": "#1160FF", "accent_color": "#FF9021" }, "buyer": { "name": "Brauhaus Weber AG", "address": { "street": "Marienplatz 4", "city": "München", "postcode": "80331", "country": "DE" }, "vat_id": "DE965003781", "endpoint": { "id": "DE965003781", "scheme": "9930" } }, "lines": [ { "name": "E-Rechnung Einführung (Festpreis)", "description": "Mapping Business Central → EN 16931, Validierung XRechnung, Test im Peppol-Testnetz", "quantity": 1, "unit": "LS", "unit_price": 5900, "vat_category": "S", "vat_rate": 19 }, { "name": "Betreuung abgelehnter Rechnungen", "description": "Care Plus, September 2026", "quantity": 1, "unit": "MON", "unit_price": 349, "vat_category": "S", "vat_rate": 19 }, { "name": "Zusätzliche Schulung", "description": "Remote, Buchhaltungsteam", "quantity": 3, "unit": "HUR", "unit_price": 120, "vat_category": "S", "vat_rate": 19 } ], "payment": { "means_code": 58, "iban": "DE89 3704 0044 0532 0130 00", "bic": "COBADEFFXXX", "reference": "RE-2026-0143", "terms": "Zahlbar innerhalb von 14 Tagen ohne Abzug." }, "profile": "xrechnung" } }'{ "valid": true, "route": "DE-XRECHNUNG", "documents": [ { "sha256": "e21ab9d5097022bea30bfa9f9fe0a4c7ca9afdbd672b0ce2f9150461db773625", "kind": "xrechnung-ubl", "content_base64": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEludm9pY2UgeG1sbnM9InVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkludm9pY2UtMiIgeG1sbnM6Y2FjPSJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25BZ2dyZWdhdGVDb21wb25lbnRzLTIiIHhtbG5zOmNiYz0idXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQmFzaWNDb21wb25lbnRzLTIiPjxjYmM6Q3VzdG9taXphdGlvbklEPnVybjpjZW4uZXU6ZW4xNjkzMToyMDE3I2NvbXBsaWFudCN1cm46eGVpbmthdWYuZGU6a29zaXQ6eHJlY2hudW5nXzMuMDwvY2JjOkN1c3RvbWl6YXRpb25JRD48Y2JjOlByb2ZpbGVJRD51cm46ZmRjOnBlcHBvbC5ldToyMDE3OnBvYWNjOmJpbGxpbmc6MDE6MS4wPC9jYmM6UHJvZmlsZUlEPjxjYmM6SUQ+Q0FQVFVSRS1ERS1PSy0xNzkwOTYxNDQwPC9jYmM6SUQ+PGNiYzpJc3N1ZURhdGU+MjAyNi0wOS0yNjwvY2JjOklzc3VlRGF0ZT48Y2JjOkR1ZURhdGU+MjAyNi0xMC0xMDwvY2JjOkR1ZURhdGU+PGNiYzpJbnZvaWNlVHlwZUNvZGU+MzgwPC9jYmM6SW52b2ljZVR5cGVDb2RlPjxjYmM6Tm90ZT5WaWVsZW4gRGFuayBmw7xyIElocmVuIEF1ZnRyYWcuPC9jYmM6Tm90ZT48Y2JjOkRvY3VtZW50Q3VycmVuY3lDb2RlPkVVUjwvY2JjOkRvY3VtZW50Q3VycmVuY3lDb2RlPjxjYmM6QnV5ZXJSZWZlcmVuY2U+UE8tODg3MzE8L2NiYzpCdXllclJlZmVyZW5jZT48Y2FjOkludm9pY2VQZXJpb2Q+PGNiYzpTdGFydERhdGU+MjAyNi0wOS0wMTwvY2JjOlN0YXJ0RGF0ZT48Y2JjOkVuZERhdGU+MjAyNi0wOS0zMDwvY2JjOkVuZERhdGU+PC9jYWM6SW52b2ljZVBlcmlvZD48Y2FjOkFjY291bnRpbmdTdXBwbGllclBhcnR5PjxjYWM6UGFydHk+PGNiYzpFbmRwb2ludElEIHNjaGVtZUlEPSI5OTMwIj5ERTkzODI5NjU4MjwvY2JjOkVuZHBvaW50SUQ+PGNhYzpQb3N0YWxBZGRyZXNzPjxjYmM6U3RyZWV0TmFtZT5IYWZlbnN0cmHDn2UgMTI8L2NiYzpTdHJlZXROYW1lPjxjYmM6Q2l0eU5hbWU+SGFtYnVyZzwvY2JjOkNpdHlOYW1lPjxjYmM6UG9zdGFsWm9uZT4yMDQ1NzwvY2JjOlBvc3RhbFpvbmU+PGNhYzpDb3VudHJ5PjxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkRFPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPjwvY2FjOkNvdW50cnk+PC9jYWM6UG9zdGFsQWRkcmVzcz48Y2FjOlBhcnR5VGF4U2NoZW1lPjxjYmM6Q29tcGFueUlEPkRFOTM4Mjk2NTgyPC9jYmM6Q29tcGFueUlEPjxjYWM6VGF4U2NoZW1lPjxjYmM6SUQ+VkFUPC9jYmM6SUQ+PC9jYWM6VGF4U2NoZW1lPjwvY2FjOlBhcnR5VGF4U2NoZW1lPjxjYWM6UGFydHlMZWdhbEVudGl0eT48Y2JjOlJlZ2lzdHJhdGlvbk5hbWU+Tm9yZGxpY2h0IFNvZnR3YXJlIEdtYkg8L2NiYzpSZWdpc3RyYXRpb25OYW1lPjxjYmM6Q29tcGFueUlEPkhSQiAxMjM0NTY8L2NiYzpDb21wYW55SUQ+PGNiYzpDb21wYW55TGVnYWxGb3JtPkdtYkg8L2NiYzpDb21wYW55TGVnYWxGb3JtPjwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+PGNhYzpDb250YWN0PjxjYmM6TmFtZT5KYW5hIFBldGVyc2VuPC9jYmM6TmFtZT48Y2JjOlRlbGVwaG9uZT4rNDkgNDAgMTIzNDU2NzwvY2JjOlRlbGVwaG9uZT48Y2JjOkVsZWN0cm9uaWNNYWlsPnJlY2hudW5nQG5vcmRsaWNodC5leGFtcGxlPC9jYmM6RWxlY3Ryb25pY01haWw+PC9jYWM6Q29udGFjdD48L2NhYzpQYXJ0eT48L2NhYzpBY2NvdW50aW5nU3VwcGxpZXJQYXJ0eT48Y2FjOkFjY291bnRpbmdDdXN0b21lclBhcnR5PjxjYWM6UGFydHk+PGNiYzpFbmRwb2ludElEIHNjaGVtZUlEPSI5OTMwIj5ERTk2NTAwMzc4MTwvY2JjOkVuZHBvaW50SUQ+PGNhYzpQb3N0YWxBZGRyZXNzPjxjYmM6U3RyZWV0TmFtZT5NYXJpZW5wbGF0eiA0PC9jYmM6U3RyZWV0TmFtZT48Y2JjOkNpdHlOYW1lPk3DvG5jaGVuPC9jYmM6Q2l0eU5hbWU+PGNiYzpQb3N0YWxab25lPjgwMzMxPC9jYmM6UG9zdGFsWm9uZT48Y2FjOkNvdW50cnk+PGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REU8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+PC9jYWM6Q291bnRyeT48L2NhYzpQb3N0YWxBZGRyZXNzPjxjYWM6UGFydHlUYXhTY2hlbWU+PGNiYzpDb21wYW55SUQ+REU5NjUwMDM3ODE8L2NiYzpDb21wYW55SUQ+PGNhYzpUYXhTY2hlbWU+PGNiYzpJRD5WQVQ8L2NiYzpJRD48L2NhYzpUYXhTY2hlbWU+PC9jYWM6UGFydHlUYXhTY2hlbWU+PGNhYzpQYXJ0eUxlZ2FsRW50aXR5PjxjYmM6UmVnaXN0cmF0aW9uTmFtZT5CcmF1aGF1cyBXZWJlciBBRzwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+PC9jYWM6UGFydHlMZWdhbEVudGl0eT48L2NhYzpQYXJ0eT48L2NhYzpBY2NvdW50aW5nQ3VzdG9tZXJQYXJ0eT48Y2FjOlBheW1lbnRNZWFucz48Y2JjOlBheW1lbnRNZWFuc0NvZGU+NTg8L2NiYzpQYXltZW50TWVhbnNDb2RlPjxjYmM6UGF5bWVudElEPlJFLTIwMjYtMDE0MzwvY2JjOlBheW1lbnRJRD48Y2FjOlBheWVlRmluYW5jaWFsQWNjb3VudD48Y2JjOklEPkRFODkzNzA0MDA0NDA1MzIwMTMwMDA8L2NiYzpJRD48Y2JjOk5hbWU+Tm9yZGxpY2h0IFNvZnR3YXJlIEdtYkg8L2NiYzpOYW1lPjxjYWM6RmluYW5jaWFsSW5zdGl0dXRpb25CcmFuY2g+PGNiYzpJRD5DT0JBREVGRlhYWDwvY2JjOklEPjwvY2FjOkZpbmFuY2lhbEluc3RpdHV0aW9uQnJhbmNoPjwvY2FjOlBheWVlRmluYW5jaWFsQWNjb3VudD48L2NhYzpQYXltZW50TWVhbnM+PGNhYzpQYXltZW50VGVybXM+PGNiYzpOb3RlPlphaGxiYXIgaW5uZXJoYWxiIHZvbiAxNCBUYWdlbiBvaG5lIEFienVnLjwvY2JjOk5vdGU+PC9jYWM6UGF5bWVudFRlcm1zPjxjYWM6VGF4VG90YWw+PGNiYzpUYXhBbW91bnQgY3VycmVuY3lJRD0iRVVSIj4xMjU1LjcxPC9jYmM6VGF4QW1vdW50PjxjYWM6VGF4U3VidG90YWw+PGNiYzpUYXhhYmxlQW1vdW50IGN1cnJlbmN5SUQ9IkVVUiI+NjYwOS4wMDwvY2JjOlRheGFibGVBbW91bnQ+PGNiYzpUYXhBbW91bnQgY3VycmVuY3lJRD0iRVVSIj4xMjU1LjcxPC9jYmM6VGF4QW1vdW50PjxjYWM6VGF4Q2F0ZWdvcnk+PGNiYzpJRD5TPC9jYmM6SUQ+PGNiYzpQZXJjZW50PjE5LjAwPC9jYmM6UGVyY2VudD48Y2FjOlRheFNjaGVtZT48Y2JjOklEPlZBVDwvY2JjOklEPjwvY2FjOlRheFNjaGVtZT48L2NhYzpUYXhDYXRlZ29yeT48L2NhYzpUYXhTdWJ0b3RhbD48L2NhYzpUYXhUb3RhbD48Y2FjOkxlZ2FsTW9uZXRhcnlUb3RhbD48Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD0iRVVSIj42NjA5LjAwPC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD48Y2JjOlRheEV4Y2x1c2l2ZUFtb3VudCBjdXJyZW5jeUlEPSJFVVIiPjY2MDkuMDA8L2NiYzpUYXhFeGNsdXNpdmVBbW91bnQ+PGNiYzpUYXhJbmNsdXNpdmVBbW91bnQgY3VycmVuY3lJRD0iRVVSIj43ODY0LjcxPC9jYmM6VGF4SW5jbHVzaXZlQW1vdW50PjxjYmM6UGF5YWJsZUFtb3VudCBjdXJyZW5jeUlEPSJFVVIiPjc4NjQuNzE8L2NiYzpQYXlhYmxlQW1vdW50PjwvY2FjOkxlZ2FsTW9uZXRhcnlUb3RhbD48Y2FjOkludm9pY2VMaW5lPjxjYmM6SUQ+MTwvY2JjOklEPjxjYmM6SW52b2ljZWRRdWFudGl0eSB1bml0Q29kZT0iTFMiPjE8L2NiYzpJbnZvaWNlZFF1YW50aXR5PjxjYmM6TGluZUV4dGVuc2lvbkFtb3VudCBjdXJyZW5jeUlEPSJFVVIiPjU5MDAuMDA8L2NiYzpMaW5lRXh0ZW5zaW9uQW1vdW50PjxjYWM6SXRlbT48Y2JjOkRlc2NyaXB0aW9uPk1hcHBpbmcgQnVzaW5lc3MgQ2VudHJhbCDihpIgRU4gMTY5MzEsIFZhbGlkaWVydW5nIFhSZWNobnVuZywgVGVzdCBpbSBQZXBwb2wtVGVzdG5ldHo8L2NiYzpEZXNjcmlwdGlvbj48Y2JjOk5hbWU+RS1SZWNobnVuZyBFaW5mw7xocnVuZyAoRmVzdHByZWlzKTwvY2JjOk5hbWU+PGNhYzpDbGFzc2lmaWVkVGF4Q2F0ZWdvcnk+PGNiYzpJRD5TPC9jYmM6SUQ+PGNiYzpQZXJjZW50PjE5LjAwPC9jYmM6UGVyY2VudD48Y2FjOlRheFNjaGVtZT48Y2JjOklEPlZBVDwvY2JjOklEPjwvY2FjOlRheFNjaGVtZT48L2NhYzpDbGFzc2lmaWVkVGF4Q2F0ZWdvcnk+PC9jYWM6SXRlbT48Y2FjOlByaWNlPjxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD0iRVVSIj41OTAwLjAwPC9jYmM6UHJpY2VBbW91bnQ+PC9jYWM6UHJpY2U+PC9jYWM6SW52b2ljZUxpbmU+PGNhYzpJbnZvaWNlTGluZT48Y2JjOklEPjI8L2NiYzpJRD48Y2JjOkludm9pY2VkUXVhbnRpdHkgdW5pdENvZGU9Ik1PTiI+MTwvY2JjOkludm9pY2VkUXVhbnRpdHk+PGNiYzpMaW5lRXh0ZW5zaW9uQW1vdW50IGN1cnJlbmN5SUQ9IkVVUiI+MzQ5LjAwPC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD48Y2FjOkl0ZW0+PGNiYzpEZXNjcmlwdGlvbj5DYXJlIFBsdXMsIFNlcHRlbWJlciAyMDI2PC9jYmM6RGVzY3JpcHRpb24+PGNiYzpOYW1lPkJldHJldXVuZyBhYmdlbGVobnRlciBSZWNobnVuZ2VuPC9jYmM6TmFtZT48Y2FjOkNsYXNzaWZpZWRUYXhDYXRlZ29yeT48Y2JjOklEPlM8L2NiYzpJRD48Y2JjOlBlcmNlbnQ+MTkuMDA8L2NiYzpQZXJjZW50PjxjYWM6VGF4U2NoZW1lPjxjYmM6SUQ+VkFUPC9jYmM6SUQ+PC9jYWM6VGF4U2NoZW1lPjwvY2FjOkNsYXNzaWZpZWRUYXhDYXRlZ29yeT48L2NhYzpJdGVtPjxjYWM6UHJpY2U+PGNiYzpQcmljZUFtb3VudCBjdXJyZW5jeUlEPSJFVVIiPjM0OS4wMDwvY2JjOlByaWNlQW1vdW50PjwvY2FjOlByaWNlPjwvY2FjOkludm9pY2VMaW5lPjxjYWM6SW52b2ljZUxpbmU+PGNiYzpJRD4zPC9jYmM6SUQ+PGNiYzpJbnZvaWNlZFF1YW50aXR5IHVuaXRDb2RlPSJIVVIiPjM8L2NiYzpJbnZvaWNlZFF1YW50aXR5PjxjYmM6TGluZUV4dGVuc2lvbkFtb3VudCBjdXJyZW5jeUlEPSJFVVIiPjM2MC4wMDwvY2JjOkxpbmVFeHRlbnNpb25BbW91bnQ+PGNhYzpJdGVtPjxjYmM6RGVzY3JpcHRpb24+UmVtb3RlLCBCdWNoaGFsdHVuZ3N0ZWFtPC9jYmM6RGVzY3JpcHRpb24+PGNiYzpOYW1lPlp1c8OkdHpsaWNoZSBTY2h1bHVuZzwvY2JjOk5hbWU+PGNhYzpDbGFzc2lmaWVkVGF4Q2F0ZWdvcnk+PGNiYzpJRD5TPC9jYmM6SUQ+PGNiYzpQZXJjZW50PjE5LjAwPC9jYmM6UGVyY2VudD48Y2FjOlRheFNjaGVtZT48Y2JjOklEPlZBVDwvY2JjOklEPjwvY2FjOlRheFNjaGVtZT48L2NhYzpDbGFzc2lmaWVkVGF4Q2F0ZWdvcnk+PC9jYWM6SXRlbT48Y2FjOlByaWNlPjxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD0iRVVSIj4xMjAuMDA8L2NiYzpQcmljZUFtb3VudD48L2NhYzpQcmljZT48L2NhYzpJbnZvaWNlTGluZT48L0ludm9pY2U+Cg==" } ], "layers": [ { "findings": [], "passed": true, "layer": "schema" }, { "findings": [], "passed": true, "layer": "mapping" }, { "findings": [], "passed": true, "layer": "pre-check" }, { "findings": [], "passed": true, "layer": "kosit" } ]}Lista zdarzeń statusu jednej faktury GET
Te same zdarzenia, które dostarcza webhook, w kolejności sequence. Służy do nadrobienia zaległości po przerwie.
Pobranie ustawień webhooka (operatora albo, z kluczem administratora klienta, tego klienta) GET
Od 0.16.0 klucz operatora odczytuje ustawienia jednego klienta po podaniu client. Klucz administratora klienta może podać tylko własnego klienta; każdy inny daje odpowiedź 404. Nieznany lub powtórzony parametr albo puste client daje odpowiedź 400. Ustawianie i testowanie webhooka nie przyjmują żadnych parametrów zapytania (400): pozostają przy kluczu samego webhooka.