01Überblick
Sie schicken ein JSON‑Objekt mit den Belegdaten Ihrer Rechnung. Der Dienst validiert die Werte, ergänzt fehlende Angaben (optional) und produziert daraus das eRechnungs‑Format Ihrer Wahl: als PDF/A‑3B mit eingebettetem XML (ZUGFeRD) oder als reines XRechnung‑XML.
factur‑x.xml (ZUGFeRD Comfort)XRechnung.xml (XRechnung CII), optional als PDF/A‑3BZusätzlich kann derselbe Aufruf das erzeugte Dokument direkt versenden (E‑Mail), archivieren oder Ihnen die Datei nur zum Download zurückgeben. Alles über einen einzigen Request.
Beim JSON‑Upload ist transform: "ZUGFeRD" die Voreinstellung. Für eine XRechnung setzen Sie ausdrücklich transform: "XRechnung".
02Voraussetzungen
In der Beispiel‑URL https://post.gotomaxx.com/IhrFirmenname steht IhrFirmenname nur als Platzhalter für den Namen Ihrer eigenen PDFMAILER‑CLOUD (Portal). Verwenden Sie immer Ihre eigene Cloud‑URL als Basis. Den genauen Endpunkt entnehmen Sie bitte Ihrer PDFMAILER CLOUD URL.
Bevor Sie den Endpunkt nutzen können, müssen ein paar Dinge erfüllt sein:
- Berechtigung: Ihr Portal‑Benutzer braucht die Berechtigung zum Versenden von Dokumenten.
- DSGVO‑AVV: Der Auftragsverarbeitungsvertrag muss für das Portal einmalig akzeptiert worden sein.
- Zugang: Ein aktives PDFMAILER‑Trial oder ein entsprechend gebuchter API‑Zugang.
Authentifizierung
Jeder Aufruf braucht Authentifizierung. Es gibt drei Wege:
| Methode | So geht's |
|---|---|
| Bearer‑Token | Empfohlen. Header Authorization: Bearer <token>. Token erzeugen Sie selbst in der PDFMAILER.CLOUD (siehe unten). |
| Basic Auth | HTTP‑Basic‑Authentifizierung mit Ihren Benutzer‑Zugangsdaten, falls Ihr Client kein OAuth2/Bearer unterstützt. |
| __sid | Gültige Session‑ID als Parameter __sid (GET oder POST) bei jedem Request mitsenden. |
Ihren API‑Token erzeugen Sie direkt in der PDFMAILER.CLOUD unter Einstellungen → Account und Sicherheit → REST API → „API erzeugen". Dort finden Sie außerdem einen Link zur Swagger UI.
Boolesche Parameter werden als 1 (true) bzw. 0 (false) übergeben.
Über version (1 bis 3, aktuell empfohlen 3) wählen Sie das API‑Verhalten. Verschiedene Versionen arbeiten unterschiedlich. Setzen Sie die Version nur bewusst. Das Portal kann eine Mindestversion vorgeben, die nicht unterschritten werden kann.
03So funktioniert es
Fünf Schritte vom JSON zur fertigen eRechnung.
-
Authentifizieren
Bearer‑Token besorgen und im
Authorization‑Header mitschicken. Sicherstellen, dass Berechtigung und Zugang passen. -
JSON‑Objekt aufbauen
Die Rechnungsdaten im Feld
jsonalsJsonDocument‑Objekt zusammenstellen:seller,buyer,header,itemssowie (falls nicht per Auto‑Complete ergänzt)vat,summary,payment. -
Zielformat & Optionen wählen
Über
transformdas Format bestimmen (ZUGFeRDoderXRechnung).tryAutoComplete: 1lässt fehlende Werte aus Portal‑ und Empfängerdaten ergänzen.fileNamefestlegen (bei Versand mit Endung.pdf). -
Request senden
Als
POSTmitContent-Type: application/jsonan/json. Wahlweise Versandziel (email), Archivierung odergetFileOnlyfür reinen Download angeben. -
Antwort auswerten
Standardmäßig kommt die Dokument‑ID zurück. Mit
getResponseein Antwortobjekt, mitgetFileOnlydie Datei, mitasynchronousein Request‑Token zum Abholen.testUploadliefert vorab das Testergebnis, ohne Credits zu verbrauchen.
04Das JSON‑Objekt
Der Kern ist das Objekt im Feld json (Typ gotomaxx_JsonDocument). Es gliedert sich in klar getrennte Bereiche. Zur Orientierung ist bei vielen Feldern als Referenz der zugehörige BT‑xx‑Code der EN‑16931‑Norm angegeben, auf den das Feld abgebildet wird.
seller: Verkäufer / Rechnungssteller
Ihre eigenen Firmendaten. Viele Kontakt‑ und Bankfelder können aus den Portal‑Metadaten ergänzt werden.
| Feld | Typ | Beschreibung |
|---|---|---|
| name | string | Firmenname Pflicht |
| addressLine | string | Straße / Adresszeile Pflicht |
| addressLine2/3 | string | Weitere Adresszeilen |
| zip | string | Postleitzahl Pflicht |
| city | string | Ort Auto aus PLZ |
| country | enum | Ländercode (DE, AT, CH …) Auto |
| id | string | Verkäufer‑ID BT‑29 |
| tradingName | string | Handelsname BT‑28 |
| taxId | taxid | Steuernummer / USt‑IdNr. BT‑31 (validiert) |
| taxRegId | string | Steuer‑Registrierungs‑ID BT‑32 |
| iban | iban | IBAN BT‑84 Auto aus Portal |
| bic | bic | BIC BT‑86 Auto |
| bankAccountOwner | string | Kontoinhaber BT‑85 |
| contactName | string | Ansprechpartner BT‑41 Auto |
| contactPhone | tel | Telefon BT‑42 Auto |
| contactEmail | E‑Mail BT‑43 Auto | |
| endPoint | string | Elektronische Adresse nur XRechnungAuto |
| endPointType | enum | Schema: EM, 0204, 9930, 0060 nur XRechnung |
buyer: Käufer / Rechnungsempfänger Pflicht
Die Empfängerdaten. Kontaktangaben können aus Ihrer Empfänger‑Datenbank ergänzt werden.
| Feld | Typ | Beschreibung |
|---|---|---|
| id | string | Käufer‑ID BT‑46 Pflicht |
| address | object | Anschrift (name, addressLine, zip, city, country) Pflicht |
| taxId | taxid | Steuernummer BT‑48 |
| contactName | string | Ansprechpartner BT‑56 |
| contactPhone | tel | Telefon BT‑57 Auto |
| contactEmail | E‑Mail BT‑58 Auto | |
| endPoint | string | Elektronische Adresse nur XRechnungAuto |
| endPointType | enum | EM, 0204, 9930, 0060 nur XRechnung |
header: Rechnungskopf Pflicht
| Feld | Typ | Beschreibung |
|---|---|---|
| id | string | Rechnungsnummer BT‑1 Pflicht |
| type | enum | Rechnungsart, z. B. 380 Rechnung, 326 Teilrechnung, 384 Korrektur, 381 Gutschrift |
| currency | enum | Währung, z. B. EUR |
| date | date | Rechnungsdatum BT‑2 (YYYY-MM-DD) Auto = heute |
| delivery | date | Lieferdatum BT‑72 Auto = Rechnungsdatum |
| routing | string | Leitweg‑ID BT‑10 nur XRechnung |
| buyerId | string | Käufer‑Referenz BT‑13 |
| note | string | Freitext‑Hinweis BT‑22 |
| project / contract / sales | string | Projekt‑ BT‑11, Vertrags‑ BT‑12, Auftrags‑Referenz BT‑14 |
| tender / object | string | Ausschreibungs‑ BT‑17, Objekt‑Referenz BT‑18 |
| periodStart / periodEnd | date | Abrechnungszeitraum BT‑73/74 |
| precedingInvoiceId / …Date | string / date | Vorausgehende Rechnung BT‑25/26 |
| vatExceptReason | string | Grund für Steuerbefreiung BT‑120 |
| test | boolean | Test‑Kennzeichen im Dokument |
items[]: Rechnungspositionen Pflicht
Mindestens eine Position. Preise und Summen sind rechnerisch verknüpft und können weitgehend automatisch ergänzt werden (siehe Formeln unten).
| Feld | Typ | Beschreibung |
|---|---|---|
| name | string | Bezeichnung BT‑153 Pflicht |
| quantity | number | Menge BT‑129 |
| unit | enum | Einheit (UN/ECE), z. B. H87 Stück, HUR Stunde, KGM kg, LTR Liter, MTR Meter |
| net | number | Nettopreis BT‑146 Auto aus gross |
| gross | number | Bruttopreis BT‑148 Auto aus net |
| discount | number | Rabatt (netto) BT‑147 |
| baseQuantity | number | Preis‑Basismenge BT‑149 |
| vat | number | USt‑Satz in % BT‑152 Auto |
| vatCategory | enum | USt‑Kategorie BT‑151 (S, Z, E, AE …) Auto |
| total | number | Positionssumme BT‑131 Auto |
| lineId | string | Positionsnummer BT‑126 Auto = Index |
| sellerId / buyerId | string | Artikel‑Nr. Verkäufer BT‑155 / Käufer BT‑156 |
| note | string | Positions‑Hinweis BT‑127 |
| allowance[] | array | Positionsbezogene Zu‑/Abschläge: type (CHARGE), amount BT‑136/141, reason Pflicht BT‑139/144 |
S Regelsteuersatz · Z Nullsatz · E steuerbefreit · AE Reverse‑Charge · K innergem. Lieferung · G Ausfuhr steuerfrei · O nicht steuerbar · L/M Kanaren / Ceuta & Melilla.
vat[]: Steueraufstellung
Auto Wird aus Positionen und Zu‑/Abschlägen berechnet. Nur nötig, wenn Sie die Aufstellung selbst kontrollieren wollen.
| Feld | Formel / Bedeutung |
|---|---|
| vat BT‑119 | Pflicht Steuersatz in % |
| vatCategory BT‑118 | USt‑Kategorie, z. B. S |
| amount BT‑116 | Σ items.total − Σ allowance + Σ charge |
| vatAmount BT‑117 | amount / 100 × vat |
summary: Rechnungssummen
Auto Ebenfalls vollständig berechenbar. Die Verknüpfungen:
| Feld | Formel |
|---|---|
| total BT‑106 | Σ items.total |
| allowance BT‑107 | Σ allowance.amount |
| charge BT‑108 | Σ charge.amount |
| net BT‑109 | Σ vat.amount |
| tax BT‑110 | Σ vat.vatAmount |
| gross BT‑112 | net + tax |
| prepaid BT‑113 | Bereits gezahlter Betrag |
| due BT‑115 | gross − prepaid |
payment: Zahlungsangaben
| Feld | Typ | Beschreibung |
|---|---|---|
| id | string | Verwendungszweck / Referenz BT‑83 Pflicht |
| due | date | Fälligkeitsdatum BT‑9 Auto = Rechnungsdatum + 7 Tage |
| terms | string | Zahlungsbedingungen BT‑82 |
| payment | enum | Zahlungsart‑Code BT‑81, z. B. 30 Überweisung, 58 SEPA‑Überweisung, 59 SEPA‑Lastschrift, 10 Bar, 57 Ständige Vereinbarung |
| description | string | Beschreibung BT‑20 |
allowance[]: Zu‑ & Abschläge (Beleg‑Ebene)
Rabatte oder Zuschläge, die für die gesamte Rechnung gelten.
| Feld | Typ | Beschreibung |
|---|---|---|
| type | enum | CHARGE (Zuschlag) oder ALLOWANCE (Abschlag) |
| amount | number | Nettobetrag BT‑92 |
| reason | string | Grund BT‑97 Pflicht |
| vat | number | USt‑Satz in % BT‑96 Auto |
| vatCategory | enum | USt‑Kategorie BT‑95 (S, Z, E, AE …) Auto |
shipping: Lieferanschrift
Optional. Gleicher Aufbau wie eine Adresse.
| Feld | Typ | Beschreibung |
|---|---|---|
| name | string | Name Pflicht |
| addressLine | string | Adresszeile Pflicht |
| addressLine2/3 | string | Weitere Adresszeilen |
| zip | string | Postleitzahl Pflicht |
| city | string | Ort Auto aus PLZ |
| country | enum | Ländercode (DE, AT, CH …) Auto |
attachments[]: Anhänge
Auto Standardmäßig leer. Über Anhänge liefern Sie zusätzliche Belege (Rechnungsdatenblatt, Referenzpapier) als Base64 oder ein eigenes Sicht‑PDF (siehe unten).
| Feld | Typ | Beschreibung |
|---|---|---|
| id | string | ID BT‑122 Pflicht |
| name | string | Bezeichnung BT‑123 Pflicht |
| fileName | string | Dateiname Pflicht |
| file | base64 | Dateiinhalt BT‑125. Pflicht, außer es ist die erzeugte PDF (isPdf) |
| mime | enum | PDF, PNG, JPEG, CSV, OXML, ODOC |
| type | enum | 50 geprüftes Angebot · 130 Rechnungsdatenblatt · 916 Referenzpapier |
| isPdf | boolean | Markiert das PDF, das als Sichtdokument dient (nur bei genau einem Anhang true). Bei ZUGFeRD wird es zum PDF‑Träger, bei XRechnung ins XML eingebettet. |
Bei ZUGFeRD können Sie ein eigenes PDF als Sichtdokument vorgeben, also den sichtbaren, lesbaren Teil, in den die XML eingebettet wird. Dazu hängen Sie das PDF als Anhang mit isPdf: true an (nur bei genau einem Anhang zulässig).
Ohne eigenes Sicht‑PDF rendert die API automatisch ein PDF aus Ihren Belegdaten.
"attachments": [
{
"id": "0",
"name": "test",
"isPdf": true,
"mime": "PDF",
"fileName": "Rechnung",
"file": "JVBERi0xLjcKJdPr6e…"
}
]
Auszug aus dem json‑Objekt. file enthält die Base64‑Daten des PDF (hier gekürzt).
05Auto‑Complete verstehen
Mit tryAutoComplete: 1 ergänzt der Dienst fehlende Pflichtangaben aus Portal‑Metadaten, Ihrer Empfänger‑Datenbank und aus rechnerischen Zusammenhängen. Das reduziert Ihr JSON auf das Wesentliche.
Auto‑Complete ist keine Auto‑Korrektur. Angegebene Werte müssen korrekt sein: Sie werden ergänzt, aber nicht repariert. Falsche Werte führen zu Validierungsfehlern.
Verarbeitungsreihenfolge
Die Ergänzung läuft in fester Reihenfolge, spätere Blöcke bauen auf früheren auf:
seller → Standard‑USt (aus Portal) → buyer → shipping → header → payment → items → allowance → vat → summary → attachments
Validierte Werte
Wo möglich werden Werte geprüft: Steuernummer · E‑Mail · Telefon · IBAN · BIC · Enum‑Werte · Werttypen · PLZ · MIME‑Typ.
Mit testUpload: 1 lassen Sie die Transformation inkl. Auto‑Complete durchspielen und sehen das Ergebnis, ohne Credits zu verbrauchen. Ideal beim Aufbau Ihres JSON.
06XRechnung vs. ZUGFeRD
Beide Formate entstehen aus demselben JSON, gesteuert über den Parameter transform. Sie unterscheiden sich im Ergebnis und in den Pflichtangaben.
transform: "ZUGFeRD"
Erzeugt eine PDF/A‑3B mit eingebettetem factur‑x.xml im ZUGFeRD Comfort‑Profil. Standard beim JSON‑Upload.
- Menschenlesbares PDF + maschinenlesbares XML in einem
- Sicht‑PDF automatisch aus den Belegdaten, alternativ eigenes PDF via
attachments(isPdf) pdfaist hier immertrue
transform: "XRechnung"
Erzeugt eine XRechnung.xml im XRechnung CII‑Format. Optional zusätzlich als PDF/A‑3B (über pdfa).
- Mit
attach: 1wird die XRechnung.xml angehängt - Benötigt separate Lizenz & Berechtigung
Zusätzliche Pflichtfelder für XRechnung
| Feld | Bedeutung |
|---|---|
| header.routing | Leitweg‑ID BT‑10 des Rechnungsempfängers (z. B. bei Behörden) |
| seller.endPoint + endPointType | Elektronische Adresse des Verkäufers (Auto‑Complete aus Portal möglich) |
| buyer.endPoint + endPointType | Elektronische Adresse des Käufers (Auto‑Complete aus Kundendaten möglich) |
Die transform‑Optionen gelten nur beim Upload von JSON (oder XML). Beim direkten Upload von fertigem ZUGFeRD‑ oder XRechnung‑Material stehen sie nicht zur Verfügung. Beim JSON‑Upload ohne Angabe wird ZUGFeRD verwendet.
07Request‑Optionen (Hülle)
Neben json steuern diese Felder Format, Versand, Rückgabe und Verarbeitung.
Format & Erzeugung
| Feld | Typ | Beschreibung |
|---|---|---|
| json | object/string | Die Rechnungsdaten (JsonDocument) Pflicht |
| fileName | string | Dateiname des Ergebnisses. Bei Versand muss er auf .pdf enden. Pflicht |
| transform | enum | None · ZUGFeRD · XRechnung · PDFA |
| pdfa | bool | Ergebnis als PDF/A‑3B. Bei ZUGFeRD/PDFA immer aktiv; wirkt bei XRechnung/JSON/XML. |
| attach | bool | Bei XRechnung: die XRechnung.xml anhängen? |
| tryAutoComplete | bool | Fehlende Werte automatisch ergänzen? |
| version | int | API‑Version (1 bis 3, empfohlen 3) |
Versand & Empfänger
| Feld | Typ | Beschreibung |
|---|---|---|
| Empfänger‑E‑Mail‑Adresse | ||
| emailSender | int | ID des Absenders |
| customer | string | Kundennummer (identifiziert bekannten Kunden) |
| customerGroup | int | Kundengruppen‑ID |
| copyRecipientData | bool | Empfängerdaten aus buyer für den Versand übernehmen? |
| source | string | Freie Quellkennung (woher kam der Upload) |
| sendingProfile | int | Versandprofil. -2 Profil des bekannten Kunden · -1 Standardprofil · 0 individuelles Profil des Kunden |
Rückgabe & Verarbeitung
| Feld | Typ | Beschreibung |
|---|---|---|
| getResponse | bool | Antwortobjekt statt reiner Dokument‑ID. Nicht mit getFileOnly kombinierbar. |
| getFileOnly | bool | Nur die erzeugte Datei (ZUGFeRD‑PDF / XRechnung‑XML) als Download, ohne Versand. Nicht mit getResponse. |
| testUpload | bool | Nur testen (Transformationen, nicht den finalen Import). Kostet keine Credits. |
| asynchronous | bool | Asynchron verarbeiten, liefert ein Request‑Token zum Abholen des Ergebnisses. |
| responseWebHook | uri | Webhook‑URL, an die das asynchrone Ergebnis als JSON gesendet wird (muss mit HTTP 200 quittieren). |
| archive | object | Archivierungs‑Optionen: inbox, folder, type/typeId, tags[], fields[], note, sender, recipient, email, archive. |
Async‑Requests werden in Eingangsreihenfolge verarbeitet (keine Zeitgarantie). Das Ergebnis können Sie per Token abfragen (Endstatus Ok/Error) oder per Webhook empfangen (OkHook/ErrorHook). Nicht abgeholte Daten werden nach einem Tag gelöscht. Test‑Uploads laufen nie asynchron.
08Antworten & Status
Was bei 200 zurückkommt, hängt von Ihren Optionen ab:
| Bei … | Rückgabe |
|---|---|
| Standard | Dokument‑ID |
| getResponse: 1 | Antwortobjekt |
| getFileOnly: 1 | Die Datei selbst (ZUGFeRD‑PDF oder XRechnung‑XML) mit passendem MIME‑Header |
| asynchronous: 1 | Request‑Token |
| testUpload: 1 | Testergebnis |
HTTP‑Statuscodes
| Code | Bedeutung |
|---|---|
| 200 | OK: Dokument‑ID / Objekt / Token / Datei / Testergebnis |
| 400 | Bad Request: Fehlermeldung als String |
| 401 | Unauthorized: Authentifizierung fehlt/ungültig |
| 403 | Forbidden: Berechtigung oder Zugang fehlt |
| 500 | Interner Serverfehler |
| 503 | Wartung: später erneut versuchen |
Antwortobjekt & Validierungsfehler
Mit getResponse: 1 (sowie bei testUpload: 1) erhalten Sie statt der reinen Dokument‑ID ein strukturiertes Antwortobjekt mit dem erzeugten Dokument und dem Validierungsergebnis. Das Objekt wird auch dann geliefert, wenn das Dokument ungültig ist. Prüfen Sie deshalb immer das Feld valid. Schlägt die Validierung fehl, trägt error eine Kurzmeldung und das jeweilige …Error‑Feld den ausführlichen Prüfbericht.
| Feld | Bedeutung |
|---|---|
| id | ID des erzeugten Dokuments |
| valid | Ist das erzeugte Dokument gültig? true / false |
| error | Kurze Fehlerbeschreibung (z. B. "XRechnung validation failed"), sonst null |
| type / target | Eingabeformat (z. B. JSON) und Zielformat (z. B. XRechnung3CII) |
| xrechnung / zugferd | Das erzeugte XRechnung‑XML bzw. ZUGFeRD‑PDF (auch bei Validierungsfehlern enthalten) |
| xml / json | Die intern gemappten Daten und das verarbeitete JSON |
| pdf / html | Erzeugtes Sicht‑PDF bzw. HTML, falls vorhanden |
| xrechnungError zugferdError | Ausführlicher Prüfbericht bei Validierungsfehlern (KoSIT‑Validator‑Report): listet jede verletzte EN‑16931‑/XRechnung‑Regel mit Regelcode, Meldung und XPath‑Position |
| xmlError / jsonError pdfError / htmlError | Fehler im jeweiligen Verarbeitungsschritt, sonst null |
| runtime | Verarbeitungsdauer |
{
"id": 671,
"test": false,
"valid": false,
"error": "XRechnung validation failed",
"type": "JSON",
"target": "XRechnung3CII",
"xrechnung": "<?xml … </rsm:CrossIndustryInvoice>",
"zugferd": null,
"xml": "<?xml … </DataDefinition>",
"json": "{…}",
"pdf": null,
"html": null,
"xrechnungError": "<rep:report valid='false'> … [BR-E-05] … BT-152 shall be 0 (zero) … </rep:report>",
"zugferdError": null,
"runtime": 0
}
Der Prüfbericht in xrechnungError nennt die konkrete Ursache, im Beispiel u. a. BR‑E‑05: Bei USt‑Kategorie „steuerbefreit" (E) muss der Steuersatz 0 % betragen.
09Vollständiges Beispiel
1 · ZUGFeRD erzeugen & per E‑Mail versenden
Minimaler Request mit Auto‑Complete: Beträge und Summen werden ergänzt.
{
"fileName": "rechnung-2026-001.pdf",
"transform": "ZUGFeRD",
"tryAutoComplete": 1,
"copyRecipientData": 1,
"email": "kunde@example.com",
"json": {
"seller": {
"name": "Muster GmbH",
"addressLine": "Musterstraße 1",
"zip": "76870",
"city": "Kandel",
"country": "DE",
"taxId": "DE123456789"
},
"buyer": {
"id": "K-1001",
"address": {
"name": "Beispiel AG",
"addressLine": "Beispielweg 5",
"zip": "10115",
"city": "Berlin",
"country": "DE"
}
},
"header": {
"id": "2026-001",
"type": "380",
"currency": "EUR",
"date": "2026-07-02"
},
"payment": {
"id": "RE 2026-001",
"payment": "58"
},
"items": [
{
"name": "Beratungsleistung",
"quantity": 10,
"unit": "HUR",
"net": 120.00,
"vat": 19,
"vatCategory": "S"
}
]
}
}
Der passende HTTP‑Aufruf:
# Erzeugt & versendet die ZUGFeRD-Rechnung, gibt die Dokument-ID zurück
# IhrFirmenname durch den Namen Ihrer eigenen PDFMAILER CLOUD ersetzen
curl -X POST "https://post.gotomaxx.com/IhrFirmenname/service/rest/outgoing/json" \
-H "Authorization: Bearer IHR_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @rechnung.json
2 · XRechnung erzeugen (nur Datei, kein Versand)
Zusatzfelder für XRechnung: routing sowie endPoint/endPointType. Mit getFileOnly bekommen Sie das XML direkt zurück, mit testUpload prüfen Sie vorab.
{
"fileName": "xrechnung-2026-001.xml",
"transform": "XRechnung",
"tryAutoComplete": 1,
"getFileOnly": 1,
"testUpload": 1,
"json": {
"seller": {
"name": "Muster GmbH",
"addressLine": "Musterstraße 1",
"zip": "76870", "city": "Kandel", "country": "DE",
"endPoint": "info@muster-gmbh.de",
"endPointType": "EM"
},
"buyer": {
"id": "K-1001",
"endPoint": "991-12345-67",
"endPointType": "0204",
"address": { "name": "Behörde XY", "addressLine": "Amtsweg 3",
"zip": "10115", "city": "Berlin", "country": "DE" }
},
"header": {
"id": "2026-001", "type": "380", "currency": "EUR",
"routing": "04011000-1234512345-06" // Leitweg-ID (BT-10)
},
"items": [
{ "name": "Lizenzgebühr", "quantity": 1, "unit": "H87",
"net": 500.00, "vat": 19, "vatCategory": "S" }
]
}
}
Hinweis: JSON kennt keine Kommentare. Die //‑Anmerkungen dienen hier nur der Erklärung und müssen im echten Request entfernt werden.
10Tipps & Fallstricke
- Booleans als 1/0: Alle bool‑Parameter als
1oder0übergeben. - Dateiname bei Versand: Soll versendet werden, muss
fileNameauf.pdfenden. - Sich ausschließende Optionen:
getResponseundgetFileOnlynicht zusammen. MitgetFileOnlyfindet kein Versand statt. - Erst testen:
testUpload: 1nutzen, um JSON und Transformation zu prüfen, ohne Credits zu verbrauchen (der finale PDF‑Import wird dabei nicht ausgeführt). - Auto‑Complete ≠ Korrektur: Gelieferte Werte müssen korrekt sein: Validierung greift bei Steuernummer, IBAN, BIC, E‑Mail, Telefon, PLZ, Enums, MIME.
- XRechnung‑Pflichten:
routingsowieendPoint/endPointTypefür Verkäufer und Käufer nicht vergessen (oder Auto‑Complete sicherstellen). - Eigenes Sicht‑PDF: Bei ZUGFeRD über
attachmentsmitisPdf: trueein eigenes PDF als Sichtdokument vorgeben; ohne Angabe rendert die API es automatisch aus den Belegdaten. - Async‑Ergebnis verfällt: Nicht abgeholte asynchrone Ergebnisse werden nach einem Tag gelöscht.
- Version bewusst wählen: API‑Versionen verhalten sich unterschiedlich; das Portal kann eine Mindestversion erzwingen.
Klein anfangen: seller, buyer, header und eine items‑Position mit net, vat, vatCategory, dazu tryAutoComplete: 1 und testUpload: 1. Passt das Testergebnis, testUpload entfernen und Versand‑ bzw. Rückgabeoptionen ergänzen.