rechnungsapi.de
    Startseite
    Lösungen
    Steuerberater & KanzleienUnternehmen & MittelstandIT-Teams & SoftwareanbieterE-Invoicing-Berater & PartnerStartups & SaaSInternational & Peppol
    PreiseValidatorBlogKontakt
    Dokumentation
    DokumentationOrdner-Integration & SFTP, ohne ProgrammierungAPI DocsREST-API-Referenz für Entwickler
    🔑Anmelden🚀Loslegen
    RechnungsAPIv1.0.10

    Server

    https://api.rechnungsapi.de

    Erste Schritte

    AuthentifizierungSchnellstart

    Endpunkte

    PDF Analyse

    POSTRechnungs-PDF analysieren (V2 — empfohlen)POSTRechnungs-PDF analysieren (Asynchron — Einreichen)GETStatus der asynchronen Analyse abfragenPOSTRechnungs-PDF analysieren (V1 — legacy)

    Rechnungserzeugung

    POSTPDF zu ZUGFeRD konvertieren (ein Aufruf)POSTXRechnung-XML aus JSON erzeugenPOSTZUGFeRD aus JSON + PDF erzeugenPOSTZUGFeRD-PDF aus XRechnung erstellenPOSTZUGFeRD-Rechnungs-PDF aus JSON erzeugen (Template)

    E-Mail-Versand

    POSTEigenständigen E-Mail-Versand auslösenPOSTE-Mail erneut versenden

    Extraktion

    POSTXRechnung aus ZUGFeRD als JSON extrahieren

    Validierung

    POSTXRechnung-XML validierenPOSTZUGFeRD-PDF validieren

    Referenz

    RechnungsobjektE-Mail-VersandFehlerMCP-Server & SDK

    Weitere Dokumentation

    Ordner-Integration & SFTP

    API-Dokumentation

    EN-16931-konforme E-Rechnungen (XRechnung & ZUGFeRD) erzeugen, validieren, extrahieren und analysieren – über eine einfache REST- + JSON-Schnittstelle.

    v1.0.10 — Produktivhttps://api.rechnungsapi.de

    Ohne Programmierung? Die Ordner-Integration erzeugt ZUGFeRD-Rechnungen aus PDFs und Bildern per Nextcloud oder SFTP.

    Authentifizierung

    Alle Anfragen werden mit einem Bearer-Token authentifiziert. Senden Sie ihn bei jedem Aufruf im Authorization-Header. Tokens sind kontogebunden – geben Sie sie nicht weiter und committen Sie sie nicht.

    Header-Format

    json
    Authorization: Bearer <your-token>
    1. Melden Sie sich im Dashboard an unter rechnungsapi.de.
    2. Öffnen Sie Ihr Profil und kopieren Sie unten den API-Token.
    3. Speichern Sie den Token sicher (Env-Variable oder Secret-Manager) und übergeben Sie ihn bei jeder Anfrage.
    Sicherheitshinweis: Behandeln Sie Ihren API-Token wie ein Passwort. Rotieren Sie ihn bei Verdacht auf Leaks sofort über das Dashboard.

    Schnellstart

    Machen Sie Ihren ersten Aufruf in unter einer Minute. Das folgende Beispiel analysiert ein PNG-Rechnungsfoto mit dem V2-Analyzer und liefert strukturiertes JSON sowie einen Konfidenzwert — PDF, PNG, JPEG und TIFF werden alle im selben Feld akzeptiert.

    curl -X POST "https://api.v2.rechnungsapi.de/createJSONFromAnalysedPdf" \
      -H "Authorization: Bearer $RECHNUNGSAPI_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "pdfInvoiceBase64": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB...",
        "withLineItems": true
      }'
    # PDF, PNG, JPEG, and TIFF are all accepted in this same field — the type is
    # detected from the base64 content, not from a filename or MIME type.

    Setzen Sie die Umgebungsvariable RECHNUNGSAPI_TOKEN auf Ihren API-Token, bevor Sie das Snippet ausführen.

    Endpunkte

    Die meisten Endpunkte sind POST und akzeptieren application/json; der Status-Endpunkt der asynchronen Analyse ist ein GET mit Query-Parameter. Wählen Sie den Workflow passend zu Ihrem Anwendungsfall – Erzeugung, Analyse, Extraktion oder Validierung.

    PDF Analyse

    POSThttps://api.v2.rechnungsapi.de/createJSONFromAnalysedPdf

    Rechnungs-PDF analysieren (V2 — empfohlen)

    Analyzer der nächsten Generation mit höherer Genauigkeit und Unterstützung für große, mehrseitige Rechnungen. Akzeptiert PDF, PNG, JPEG oder TIFF im selben Feld pdfInvoiceBase64 — der Typ wird anhand des Base64-Inhalts selbst erkannt (Dateiname/MIME-Type sind irrelevant), der Feldname bleibt aus Gründen der Abwärtskompatibilität unverändert. Akzeptiert ein optionales withLineItems-Flag, um die Positions-Extraktion für eine schnellere reine Kopfdaten-Analyse zu überspringen. Hinweis: V2 läuft auf einem separaten Host (api.v2.rechnungsapi.de) — bitte die oben angezeigte vollständige URL verwenden. Derselbe Bearer-Token authentifiziert V1 und V2. Ablehnungen (fehlerhafte Eingabe, Auth, zu große Datei) antworten in deutlich unter einer Sekunde; eine erfolgreiche Extraktion dauert je nach OCR-/Modellzeit etwa 7–25 Sekunden, unabhängig von der Dateigröße — Client-Timeouts auf mindestens 60s setzen, oder für große bzw. mehrseitige Dokumente den Async-Endpunkt unten verwenden.

    FieldTypeRequiredDescription
    pdfInvoiceBase64stringrequiredBase64-kodierter Inhalt der Rechnungsdatei — PDF, PNG, JPEG oder TIFF. Wird anhand des Inhalts erkannt, nicht anhand von Feldname oder Dateiendung. Wird auch unter den Feldnamen invoiceBase64 und fileBase64 akzeptiert. Ein data:*;base64,-Präfix wird toleriert und serverseitig entfernt; Zeilenumbrüche im Base64 werden ebenfalls toleriert. Größenlimit: 11 MB roh (≈14,7 MB base64) — Bodies über ~12 MB werden bereits von der Plattform abgelehnt, bevor dieser Endpunkt überhaupt läuft (siehe FILE_TOO_LARGE unten).
    withLineItemsbooleanoptionalBei true werden zusätzlich zu den Kopfdaten auch einzelne Rechnungspositionen extrahiert. Bei false werden nur die Kopfdaten zurückgegeben — etwa 2× schneller. Im Playground standardmäßig true.

    Beispiel

    json
    {
      "pdfInvoiceBase64": "JVBERi0xLjQKJf...",
      "withLineItems": true
    }

    Beispielantwort

    json
    {
      "extractionConfidence": 96,
      "invoice": {
        "invoiceNumber": "RE-2026-08-0815",
        "invoiceIssueDate": "24.08.2026",
        "invoiceTypeCode": "380",
        "invoiceCurrencyCode": "EUR",
        "paymentDueDate": "23.09.2026",
        "buyerReference": "04011000-12345-67",
        "purchaseOrderReference": "BST-2026-4471",
        "paymentTerms": "Zahlbar innerhalb von 30 Tagen ohne Abzug …",
        "seller": {
          "sellerName": "Müller & Söhne Großhandel GmbH",
          "sellerVatIdentifier": "DE812345678"
        },
        "buyer": {
          "buyerName": "Bäckerei Schröder KG"
        },
        "deliveryInformation": {
          "actualDeliveryDate": "31.07.2026"
        },
        "paymentInstructions": {
          "paymentMeansTypeCode": "58",
          "creditTransfer": [
            {
              "paymentAccountIdentifier": "DE02 3005 0110 0012 3456 78",
              "paymentAccountName": "Müller & Söhne Großhandel GmbH",
              "paymentServiceProviderIdentifier": "DUSSDEDDXXX"
            }
          ]
        },
        "documentTotals": {
          "sumOfInvoiceLineNetAmount": 6519.7,
          "invoiceTotalAmountWithoutVat": 6519.7,
          "invoiceTotalVatAmount": 1234.1,
          "invoiceTotalAmountWithVat": 7753.8,
          "amountDueForPayment": 7753.8
        },
        "vatBreakdown": [
          {
            "vatCategoryTaxableAmount": 6481,
            "vatCategoryTaxAmount": 1231.39,
            "vatCategoryCode": "S",
            "vatCategoryRate": 19
          },
          {
            "vatCategoryTaxableAmount": 38.7,
            "vatCategoryTaxAmount": 2.71,
            "vatCategoryCode": "S",
            "vatCategoryRate": 7
          }
        ],
        "invoiceLine": [
          {
            "invoiceLineIdentifier": "1",
            "invoicedQuantity": 12,
            "invoicedQuantityUnitOfMeasureCode": "HUR",
            "invoiceLineNetAmount": 1740,
            "priceDetails": {
              "itemNetPrice": 145
            },
            "lineVatInformation": [
              {
                "invoicedItemVatCategoryCode": "S",
                "invoicedItemVatRate": 19
              }
            ],
            "itemInformation": {
              "itemName": "Beratungsleistung Softwarearchitektur"
            }
          }
        ]
      }
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    POSThttps://api.v2.rechnungsapi.de/createJSONFromAnalysedPdfAsync

    Rechnungs-PDF analysieren (Asynchron — Einreichen)

    Reicht ein PDF oder TIFF zur Hintergrundanalyse ein, statt auf die Antwort inline zu warten — für große oder mehrseitige Rechnungen, die das 60-Sekunden-Timeout des synchronen Endpunkts überschreiten würden. Antwortet sofort mit einer job_id (HTTP 200, nicht 202); den Status-Endpunkt unten alle ~3s abfragen, bis "done" oder "failed" gemeldet wird — Jobs und deren Ergebnisse werden 24 Stunden aufbewahrt. Für kleine, einseitige Rechnungen den synchronen V2-Endpunkt oben bevorzugen — einfacher und liefert das Ergebnis direkt. Gleiche Authentifizierung wie V2: ein roher Token (ohne "Bearer "-Präfix) oder ein authtoken-Header liefern beide 403 — nur Authorization: Bearer <token> wird akzeptiert.

    FieldTypeRequiredDescription
    pdfInvoiceBase64stringrequiredBase64-kodierter Inhalt der Rechnungsdatei — PDF oder TIFF (gleiche Varianten und Erkennung wie beim V2-Endpunkt oben; aktuell kein PNG/JPEG bei Async). Wird auch unter den Feldnamen invoiceBase64 und fileBase64 akzeptiert. Ein data:*;base64,-Präfix wird toleriert und serverseitig entfernt; Zeilenumbrüche im Base64 werden ebenfalls toleriert. Gleiches 11-MB-Limit wie bei V2 — siehe FILE_TOO_LARGE unten.
    withLineItemsbooleanoptionalBei true (Standard) werden zusätzlich zu den Kopfdaten auch einzelne Rechnungspositionen extrahiert. Bei false wird invoice.invoiceLine[] im Ergebnis weggelassen.

    Beispiel

    json
    {
      "pdfInvoiceBase64": "JVBERi0xLjQKJf...",
      "withLineItems": true
    }

    Beispielantwort

    json
    {
      "job_id": "1b2c3d4e-5f6a-7890-abcd-ef1234567890",
      "status": "processing"
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    GEThttps://api.v2.rechnungsapi.de/rechnungsapi-invoice-async-status

    Status der asynchronen Analyse abfragen

    Fragt das Ergebnis eines Jobs ab, der über den obigen asynchronen Submit-Endpunkt erstellt wurde. ⚠️ Dieser Pfad wird nicht aus dem Submit-Pfad abgeleitet — er ist ein fester, unabhängiger Routenname (rechnungsapi-invoice-async-status), identisch auf jedem Host; nicht durch Anhängen von "Status" an den Submit-Endpunkt konstruieren. Ergebnisse werden 24 Stunden nach Abschluss aufbewahrt und danach gelöscht.

    FieldTypeRequiredDescription
    idstring (uuid, query param)requiredDie vom Submit-Aufruf zurückgegebene job_id. Muss eine UUID sein — jeder andere Wert wird als nicht gefunden behandelt.

    Beispiel

    json
    https://api.v2.rechnungsapi.de/rechnungsapi-invoice-async-status?id=1b2c3d4e-5f6a-7890-abcd-ef1234567890

    Beispielantwort

    json
    {
      "job_id": "1b2c3d4e-5f6a-7890-abcd-ef1234567890",
      "status": "processing"
    }

    Beispielantwort

    json
    {
      "job_id": "1b2c3d4e-5f6a-7890-abcd-ef1234567890",
      "status": "done",
      "result": {
        "extractionConfidence": 96,
        "invoice": {
          "invoiceNumber": "RE-2026-08-0815",
          "invoiceIssueDate": "24.08.2026",
          "invoiceTypeCode": "380",
          "invoiceCurrencyCode": "EUR",
          "paymentDueDate": "23.09.2026",
          "buyerReference": "04011000-12345-67",
          "purchaseOrderReference": "BST-2026-4471",
          "paymentTerms": "Zahlbar innerhalb von 30 Tagen ohne Abzug …",
          "seller": {
            "sellerName": "Müller & Söhne Großhandel GmbH",
            "sellerVatIdentifier": "DE812345678"
          },
          "buyer": {
            "buyerName": "Bäckerei Schröder KG"
          },
          "deliveryInformation": {
            "actualDeliveryDate": "31.07.2026"
          },
          "paymentInstructions": {
            "paymentMeansTypeCode": "58",
            "creditTransfer": [
              {
                "paymentAccountIdentifier": "DE02 3005 0110 0012 3456 78",
                "paymentAccountName": "Müller & Söhne Großhandel GmbH",
                "paymentServiceProviderIdentifier": "DUSSDEDDXXX"
              }
            ]
          },
          "documentTotals": {
            "sumOfInvoiceLineNetAmount": 6519.7,
            "invoiceTotalAmountWithoutVat": 6519.7,
            "invoiceTotalVatAmount": 1234.1,
            "invoiceTotalAmountWithVat": 7753.8,
            "amountDueForPayment": 7753.8
          },
          "vatBreakdown": [
            {
              "vatCategoryTaxableAmount": 6481,
              "vatCategoryTaxAmount": 1231.39,
              "vatCategoryCode": "S",
              "vatCategoryRate": 19
            },
            {
              "vatCategoryTaxableAmount": 38.7,
              "vatCategoryTaxAmount": 2.71,
              "vatCategoryCode": "S",
              "vatCategoryRate": 7
            }
          ],
          "invoiceLine": [
            {
              "invoiceLineIdentifier": "1",
              "invoicedQuantity": 12,
              "invoicedQuantityUnitOfMeasureCode": "HUR",
              "invoiceLineNetAmount": 1740,
              "priceDetails": {
                "itemNetPrice": 145
              },
              "lineVatInformation": [
                {
                  "invoicedItemVatCategoryCode": "S",
                  "invoicedItemVatRate": 19
                }
              ],
              "itemInformation": {
                "itemName": "Beratungsleistung Softwarearchitektur"
              }
            }
          ]
        }
      }
    }

    Beispielantwort

    json
    {
      "job_id": "1b2c3d4e-5f6a-7890-abcd-ef1234567890",
      "status": "failed",
      "error": {
        "code": "PDF_NO_TEXT",
        "userMessage": "Diese Datei enthält keinen auslesbaren Text (vermutlich ein reines Scan- oder Bilddokument). Bitte laden Sie eine Version mit Textebene hoch oder wenden Sie sich an den Support.",
        "reference": "REA-144853"
      }
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    POST/api/v1/zugferd/createJSONFromAnalysedPdf

    Rechnungs-PDF analysieren (V1 — legacy)

    Analysiert das übergebene Rechnungs-PDF und extrahiert strukturierte Daten: Käufer, Verkäufer, Positionen, MwSt. und Gesamtbeträge. Bestehende Integrationen funktionieren weiterhin; neue Integrationen sollten den V2-Endpunkt oben für höhere Genauigkeit und Unterstützung großer Rechnungen bevorzugen.

    FieldTypeRequiredDescription
    pdfInvoiceBase64stringrequiredBase64-kodierter Inhalt der PDF-Rechnung.

    Beispiel

    json
    {
      "pdfInvoiceBase64": "JVBERi0xLjQKJf..."
    }

    Beispielantwort

    json
    {
      "apiStatus": 200,
      "invoice": {
        "invoiceNumber": "String | BT-1",
        "invoiceIssueDate": "Date | BT-2",
        "invoiceTypeCode": "String | BT-3",
        "invoiceCurrencyCode": "String | BT-5",
        "vatAccountingCurrencyCode": "String | BT-6",
        "valueAddedTaxPointDate": "String | BT-7",
        "valueAddedTaxPointDateCode": "String | BT-8",
        "paymentDueDate": "Date | BT-9",
        "buyerReference": "String | BT-10",
        "projectReference": {
          "projectReferenceIdentifier": "String | BT-11",
          "projectReferenceName": "String | BT-11-0"
        },
        "contractReference": "String | BT-12",
        "purchaseOrderReference": "String | BT-13",
        "salesOrderReference": "String | BT-14",
        "receivingAdviceReference": "String | BT-15",
        "despatchAdviceReference": "String | BT-16",
        "tenderOrLotReference": "String | BT-17",
        "invoicedObjectIdentifier": "String | BT-18",
        "buyerAccountingReference": "String | BT-19",
        "paymentTerms": "String | BT-20",
        "invoiceNote": [
          {
            "invoiceNoteSubjectCode": "String | BT-21",
            "invoiceNote": "String | BT-22"
          }
        ],
        "processControl": {
          "businessProcessTypeIdentifier": "String | BT-23",
          "specificationIdentifier": "String | BT-24"
        },
        "precedingInvoiceReference": [
          {
            "precedingInvoiceReference": "String | BT-25",
            "precedingInvoiceIssueDate": "Date | BT-26"
          }
        ],
        "seller": {
          "sellerName": "String | BT-27",
          "sellerTradingName": "String | BT-28",
          "sellerIdentifier": [
            "String | BT-29"
          ],
          "sellerLegalRegistrationIdentifier": "String | BT-30",
          "sellerVatIdentifier": "String | BT-31",
          "sellerTaxRegistrationIdentifier": "String | BT-32",
          "sellerAdditionalLegalInformation": "String | BT-33",
          "sellerElectronicAddress": "String | BT-34",
          "sellerPostalAddress": {
            "sellerAddressLine1": "String | BT-35",
            "sellerAddressLine2": "String | BT-36",
            "sellerAddressLine3": "String | BT-162",
            "sellerCity": "String | BT-37",
            "sellerPostCode": "String | BT-38",
            "sellerCountrySubdivision": "String | BT-39",
            "sellerCountryCode": "String | BT-40"
          },
          "sellerContact": {
            "sellerContactPoint": "String | BT-41",
            "sellerContactTelephoneNumber": "String | BT-42",
            "sellerContactEmailAddress": "String | BT-43"
          }
        },
        "buyer": {
          "buyerName": "String | BT-44",
          "buyerTradingName": "String | BT-45",
          "buyerIdentifier": "String | BT-46",
          "buyerLegalRegistrationIdentifier": "String | BT-47",
          "buyerVatIdentifier": "String | BT-48",
          "buyerElectronicAddress": "String | BT-49",
          "buyerPostalAddress": {
            "buyerAddressLine1": "String | BT-50",
            "buyerAddressLine2": "String | BT-51",
            "buyerAddressLine3": "String | BT-163",
            "buyerCity": "String | BT-52",
            "buyerPostCode": "String | BT-53",
            "buyerCountrySubdivision": "String | BT-54",
            "buyerCountryCode": "String | BT-55"
          },
          "buyerContact": {
            "buyerContactPoint": "String | BT-56",
            "buyerContactTelephoneNumber": "String | BT-57",
            "buyerContactEmailAddress": "String | BT-58"
          }
        },
        "payee": {
          "payeeName": "String | BT-59",
          "payeeIdentifier": "String | BT-60",
          "payeeLegalRegistrationIdentifier": "String | BT-61"
        },
        "sellerTaxRepresentativeParty": {
          "sellerTaxRepresentativeName": "String | BT-62",
          "sellerTaxRepresentativeVatIdentifier": "String | BT-63",
          "sellerTaxRepresentativePostalAddress": {
            "taxRepresentativeAddressLine1": "String | BT-64",
            "taxRepresentativeAddressLine2": "String | BT-65",
            "taxRepresentativeAddressLine3": "String | BT-164",
            "taxRepresentativeCity": "String | BT-66",
            "taxRepresentativePostCode": "String | BT-67",
            "taxRepresentativeCountrySubdivision": "String | BT-68",
            "taxRepresentativeCountryCode": "String | BT-69"
          }
        },
        "deliveryInformation": {
          "deliverToPartyName": "String | BT-70",
          "deliverToLocationIdentifier": "String | BT-71",
          "actualDeliveryDate": "Date | BT-72",
          "deliverToAddress": {
            "deliverToAddressLine1": "String | BT-75",
            "deliverToAddressLine2": "String | BT-76",
            "deliverToAddressLine3": "String | BT-165",
            "deliverToCity": "String | BT-77",
            "deliverToPostCode": "String | BT-78",
            "deliverToCountrySubdivision": "String | BT-79",
            "deliverToCountryCode": "String | BT-80"
          }
        },
        "invoicingPeriod": {
          "invoicingPeriodStartDate": "Date | BT-73",
          "invoicingPeriodEndDate": "Date | BT-74"
        },
        "paymentInstructions": {
          "paymentMeansTypeCode": "String | BT-81",
          "paymentMeansText": "String | BT-82",
          "remittanceInformation": "String | BT-83",
          "creditTransfer": [
            {
              "paymentAccountIdentifier": "String | BT-84",
              "paymentAccountName": "String | BT-85",
              "paymentServiceProviderIdentifier": "String | BT-86"
            }
          ],
          "paymentCardInformation": {
            "paymentCardPrimaryAccountNumber": "String | BT-87",
            "paymentCardHolderName": "String | BT-88"
          },
          "directDebit": {
            "mandateReferenceIdentifier": "String | BT-89",
            "bankAssignedCreditorIdentifier": "String | BT-90",
            "debitedAccountIdentifier": "String | BT-91"
          }
        },
        "documentLevelAllowances": [
          {
            "documentLevelAllowanceAmount": "Decimal | BT-92",
            "documentLevelAllowanceBaseAmount": "Decimal | BT-93",
            "documentLevelAllowancePercentage": "Decimal | BT-94",
            "documentLevelAllowanceVatCategoryCode": "String | BT-95",
            "documentLevelAllowanceVatRate": "Decimal | BT-96",
            "documentLevelAllowanceReason": "String | BT-97",
            "documentLevelAllowanceReasonCode": "String | BT-98"
          }
        ],
        "documentLevelCharges": [
          {
            "documentLevelChargeAmount": "Decimal | BT-99",
            "documentLevelChargeBaseAmount": "Decimal | BT-100",
            "documentLevelChargePercentage": "Decimal | BT-101",
            "documentLevelChargeVatCategoryCode": "String | BT-102",
            "documentLevelChargeVatRate": "Decimal | BT-103",
            "documentLevelChargeReason": "String | BT-104",
            "documentLevelChargeReasonCode": "String | BT-105"
          }
        ],
        "documentTotals": {
          "sumOfInvoiceLineNetAmount": "Decimal | BT-106",
          "sumOfAllowancesOnDocumentLevel": "Decimal | BT-107",
          "sumOfChargesOnDocumentLevel": "Decimal | BT-108",
          "invoiceTotalAmountWithoutVat": "Decimal | BT-109",
          "invoiceTotalVatAmount": "Decimal | BT-110",
          "invoiceTotalVatAmountInAccountingCurrency": "Decimal | BT-111",
          "invoiceTotalAmountWithVat": "Decimal | BT-112",
          "paidAmount": "Decimal | BT-113",
          "roundingAmount": "Decimal | BT-114",
          "amountDueForPayment": "Decimal | BT-115"
        },
        "vatBreakdown": [
          {
            "vatCategoryTaxableAmount": "Decimal | BT-116",
            "vatCategoryTaxAmount": "Decimal | BT-117",
            "vatCategoryCode": "String | BT-118",
            "vatCategoryRate": "Decimal | BT-119",
            "vatExemptionReasonText": "String | BT-120",
            "vatExemptionReasonCode": "String | BT-121"
          }
        ],
        "additionalSupportingDocuments": [
          {
            "supportingDocumentReference": "String | BT-122",
            "supportingDocumentDescription": "String | BT-123",
            "externalDocumentLocation": "String | BT-124",
            "attachedDocument": "String | BT-125"
          }
        ],
        "invoiceLine": [
          {
            "invoiceLineIdentifier": "String | BT-126",
            "invoiceLineNote": "String | BT-127",
            "invoiceLineObjectIdentifier": "String | BT-128",
            "invoicedQuantity": "Decimal | BT-129",
            "invoicedQuantityUnitOfMeasureCode": "String | BT-130",
            "invoiceLineNetAmount": "Decimal | BT-131",
            "referencedPurchaseOrderLineReference": "String | BT-132",
            "invoiceLineBuyerAccountingReference": "String | BT-133",
            "invoiceLinePeriod": {
              "invoiceLinePeriodStartDate": "Date | BT-134",
              "invoiceLinePeriodEndDate": "Date | BT-135"
            },
            "invoiceLineAllowances": [
              {
                "invoiceLineAllowanceAmount": "Decimal | BT-136",
                "invoiceLineAllowanceBaseAmount": "Decimal | BT-137",
                "invoiceLineAllowancePercentage": "Decimal | BT-138",
                "invoiceLineAllowanceReason": "String | BT-139",
                "invoiceLineAllowanceReasonCode": "String | BT-140"
              }
            ],
            "invoiceLineCharges": [
              {
                "invoiceLineChargeAmount": "Decimal | BT-141",
                "invoiceLineChargeBaseAmount": "Decimal | BT-142",
                "invoiceLineChargePercentage": "Decimal | BT-143",
                "invoiceLineChargeReason": "String | BT-144",
                "invoiceLineChargeReasonCode": "String | BT-145"
              }
            ],
            "priceDetails": {
              "itemNetPrice": "Decimal | BT-146",
              "itemPriceDiscount": "Decimal | BT-147",
              "itemGrossPrice": "Decimal | BT-148",
              "itemPriceBaseQuantity": "Decimal | BT-149",
              "itemPriceBaseQuantityUnitOfMeasure": "String | BT-150"
            },
            "lineVatInformation": [
              {
                "invoicedItemVatCategoryCode": "String | BT-151",
                "invoicedItemVatRate": "Decimal | BT-152"
              }
            ],
            "itemInformation": {
              "itemName": "String | BT-153",
              "itemDescription": "String | BT-154",
              "itemSellersIdentifier": "String | BT-155",
              "itemBuyersIdentifier": "String | BT-156",
              "itemStandardIdentifier": "String | BT-157",
              "itemStandardIdentifierSchemeIdentifier": "String | BT-157-1",
              "itemClassificationIdentifier": [
                {
                  "itemClassificationIdentifier": "String | BT-158",
                  "itemClassificationIdentifierListIdentifier": "String | BT-158-1",
                  "itemClassificationIdentifierListVersionIdentifier": "String | BT-158-2"
                }
              ],
              "itemCountryOfOrigin": "String | BT-159",
              "itemAttributes": [
                {
                  "itemAttributeName": "String | BT-160",
                  "itemAttributeValue": "String | BT-161"
                }
              ]
            }
          }
        ]
      }
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    Rechnungserzeugung

    POSThttps://api.v2.rechnungsapi.de/createZugferdFromPdf

    PDF zu ZUGFeRD konvertieren (ein Aufruf)

    Sendet ein PDF oder ein gescanntes Rechnungsbild und liefert entweder ein validiertes ZUGFeRD-PDF/A-3 (eingebettetes EN-16931-XML, bereits ZUGFeRD- und XRechnung-validiert) oder eine detaillierte JSON-Begründung, warum keines erzeugt werden konnte — nie beides. Anders als der zweistufige Ablauf createJSONFromAnalysedPdf → createZugferdFromJson unten analysiert, prüft und baut dieser Endpunkt das ZUGFeRD-Dokument in einer einzigen synchronen Anfrage: aus den extrahierten Positionen berechnete Summen werden gegen die auf der Seite gedruckten Summen geprüft, und die Konvertierung wird abgelehnt, statt ein Dokument mit nicht belegten Beträgen auszuliefern. Hinweis: Wie der V2-Analyzer oben läuft dieser Endpunkt auf einem separaten Host (api.v2.rechnungsapi.de) — bitte die oben angezeigte vollständige URL verwenden, nicht die an anderer Stelle auf dieser Seite genutzte Basis api.rechnungsapi.de. Derselbe Bearer-Token authentifiziert beide Hosts. Der Aufruf ist synchron, ohne Polling — Analyse und Build zusammen können je nach Seitenzahl und OCR-Aufwand wenige Sekunden bis mehrere Minuten dauern; Client- (und vorgelagerte Proxy-)Timeouts daher auf mindestens 600s setzen. Abrechnung: Eine erfolgreiche Konvertierung erfasst je eine Nutzung pro Seite sowohl für den Analyse- als auch den Build-Schritt; es gibt keinen Idempotency-Key, identische Anfragen konvertieren und berechnen also erneut — Mehrfach-Übermittlungen clientseitig deduplizieren. Jede Fehlerantwort enthält zudem ein versandfertiges email-Objekt ({subject, text, html}) zur Benachrichtigung des Rechnungseigentümers — im ersten Fehlerbeispiel unten einmalig gezeigt.

    FieldTypeRequiredDescription
    pdfInvoiceBase64string (base64)requiredBase64 des Rechnungsdokuments — PDF, PNG, JPEG oder TIFF, erkannt anhand des Inhalts (Magic Bytes), nicht anhand von Dateiname oder Content-Type. Ein data:…;base64,-Präfix sowie Leerzeichen werden automatisch entfernt. Wird auch unter invoiceBase64 und fileBase64 akzeptiert (in dieser Reihenfolge). Nicht unterstützt: HEIC/HEIF, WEBP, BMP, GIF, SVG, Office-Dateien, ZIP — HEIC clientseitig zuerst in JPEG konvertieren. Größenlimit dekodiert: 11 MiB (≈14,7 MB Base64); der umgebende HTTP-Body ist zusätzlich von der Plattform auf 16 MB begrenzt, darüber erhalten Sie statt des JSON-Envelopes unten einen rohen Fehler — eigene clientseitige Größenprüfung vornehmen.
    fileNamestringoptionalUrsprünglicher Dateiname. Bestimmt den Ausgabedateinamen (…-zugferd.pdf) und den Wortlaut der Fehler-E-Mail. Wird serverseitig bereinigt (Steuerzeichen, Anführungszeichen und Backslashes werden zu Leerzeichen; / wird zu _; auf 200 Zeichen gekürzt). Standardwert: invoice.pdf.

    Beispiel

    json
    {
      "pdfInvoiceBase64": "JVBERi0xLjQKJc...",
      "fileName": "Rechnung-2026-0042.pdf"
    }

    Beispielantwort

    json
    {
      "// body": "raw PDF bytes (Content-Type: application/pdf) — not JSON",
      "headers": {
        "Content-Type": "application/pdf",
        "Content-Disposition": "attachment; filename=\"Rechnung-2026-0042-zugferd.pdf\"",
        "X-Zugferd-Status": "success",
        "X-Zugferd-Reference": "ZAPI-151430"
      }
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    POST/api/v1/zugferd/createXinvoiceFromJson

    XRechnung-XML aus JSON erzeugen

    Erzeugt ein EN-16931-konformes XRechnungs-XML-Dokument aus strukturierten JSON-Rechnungsdaten – kein PDF erforderlich.

    E-Mail-VersandDieses Payload akzeptiert zusätzlich ein optionales transport-Objekt, um die Rechnung im selben Aufruf per E-Mail zu versenden.
    FieldTypeRequiredDescription
    invoiceobjectrequiredRechnungsobjekt.

    Beispiel

    json
    {
      "invoice": {
        "invoiceNumber": "String | BT-1",
        "invoiceIssueDate": "Date | BT-2",
        "invoiceTypeCode": "String | BT-3",
        "invoiceCurrencyCode": "String | BT-5",
        "vatAccountingCurrencyCode": "String | BT-6",
        "valueAddedTaxPointDate": "String | BT-7",
        "valueAddedTaxPointDateCode": "String | BT-8",
        "paymentDueDate": "Date | BT-9",
        "buyerReference": "String | BT-10",
        "projectReference": {
          "projectReferenceIdentifier": "String | BT-11",
          "projectReferenceName": "String | BT-11-0"
        },
        "contractReference": "String | BT-12",
        "purchaseOrderReference": "String | BT-13",
        "salesOrderReference": "String | BT-14",
        "receivingAdviceReference": "String | BT-15",
        "despatchAdviceReference": "String | BT-16",
        "tenderOrLotReference": "String | BT-17",
        "invoicedObjectIdentifier": "String | BT-18",
        "buyerAccountingReference": "String | BT-19",
        "paymentTerms": "String | BT-20",
        "invoiceNote": [
          {
            "invoiceNoteSubjectCode": "String | BT-21",
            "invoiceNote": "String | BT-22"
          }
        ],
        "processControl": {
          "businessProcessTypeIdentifier": "String | BT-23",
          "specificationIdentifier": "String | BT-24"
        },
        "precedingInvoiceReference": [
          {
            "precedingInvoiceReference": "String | BT-25",
            "precedingInvoiceIssueDate": "Date | BT-26"
          }
        ],
        "seller": {
          "sellerName": "String | BT-27",
          "sellerTradingName": "String | BT-28",
          "sellerIdentifier": [
            "String | BT-29"
          ],
          "sellerLegalRegistrationIdentifier": "String | BT-30",
          "sellerVatIdentifier": "String | BT-31",
          "sellerTaxRegistrationIdentifier": "String | BT-32",
          "sellerAdditionalLegalInformation": "String | BT-33",
          "sellerElectronicAddress": "String | BT-34",
          "sellerPostalAddress": {
            "sellerAddressLine1": "String | BT-35",
            "sellerAddressLine2": "String | BT-36",
            "sellerAddressLine3": "String | BT-162",
            "sellerCity": "String | BT-37",
            "sellerPostCode": "String | BT-38",
            "sellerCountrySubdivision": "String | BT-39",
            "sellerCountryCode": "String | BT-40"
          },
          "sellerContact": {
            "sellerContactPoint": "String | BT-41",
            "sellerContactTelephoneNumber": "String | BT-42",
            "sellerContactEmailAddress": "String | BT-43"
          }
        },
        "buyer": {
          "buyerName": "String | BT-44",
          "buyerTradingName": "String | BT-45",
          "buyerIdentifier": "String | BT-46",
          "buyerLegalRegistrationIdentifier": "String | BT-47",
          "buyerVatIdentifier": "String | BT-48",
          "buyerElectronicAddress": "String | BT-49",
          "buyerPostalAddress": {
            "buyerAddressLine1": "String | BT-50",
            "buyerAddressLine2": "String | BT-51",
            "buyerAddressLine3": "String | BT-163",
            "buyerCity": "String | BT-52",
            "buyerPostCode": "String | BT-53",
            "buyerCountrySubdivision": "String | BT-54",
            "buyerCountryCode": "String | BT-55"
          },
          "buyerContact": {
            "buyerContactPoint": "String | BT-56",
            "buyerContactTelephoneNumber": "String | BT-57",
            "buyerContactEmailAddress": "String | BT-58"
          }
        },
        "payee": {
          "payeeName": "String | BT-59",
          "payeeIdentifier": "String | BT-60",
          "payeeLegalRegistrationIdentifier": "String | BT-61"
        },
        "sellerTaxRepresentativeParty": {
          "sellerTaxRepresentativeName": "String | BT-62",
          "sellerTaxRepresentativeVatIdentifier": "String | BT-63",
          "sellerTaxRepresentativePostalAddress": {
            "taxRepresentativeAddressLine1": "String | BT-64",
            "taxRepresentativeAddressLine2": "String | BT-65",
            "taxRepresentativeAddressLine3": "String | BT-164",
            "taxRepresentativeCity": "String | BT-66",
            "taxRepresentativePostCode": "String | BT-67",
            "taxRepresentativeCountrySubdivision": "String | BT-68",
            "taxRepresentativeCountryCode": "String | BT-69"
          }
        },
        "deliveryInformation": {
          "deliverToPartyName": "String | BT-70",
          "deliverToLocationIdentifier": "String | BT-71",
          "actualDeliveryDate": "Date | BT-72",
          "deliverToAddress": {
            "deliverToAddressLine1": "String | BT-75",
            "deliverToAddressLine2": "String | BT-76",
            "deliverToAddressLine3": "String | BT-165",
            "deliverToCity": "String | BT-77",
            "deliverToPostCode": "String | BT-78",
            "deliverToCountrySubdivision": "String | BT-79",
            "deliverToCountryCode": "String | BT-80"
          }
        },
        "invoicingPeriod": {
          "invoicingPeriodStartDate": "Date | BT-73",
          "invoicingPeriodEndDate": "Date | BT-74"
        },
        "paymentInstructions": {
          "paymentMeansTypeCode": "String | BT-81",
          "paymentMeansText": "String | BT-82",
          "remittanceInformation": "String | BT-83",
          "creditTransfer": [
            {
              "paymentAccountIdentifier": "String | BT-84",
              "paymentAccountName": "String | BT-85",
              "paymentServiceProviderIdentifier": "String | BT-86"
            }
          ],
          "paymentCardInformation": {
            "paymentCardPrimaryAccountNumber": "String | BT-87",
            "paymentCardHolderName": "String | BT-88"
          },
          "directDebit": {
            "mandateReferenceIdentifier": "String | BT-89",
            "bankAssignedCreditorIdentifier": "String | BT-90",
            "debitedAccountIdentifier": "String | BT-91"
          }
        },
        "documentLevelAllowances": [
          {
            "documentLevelAllowanceAmount": "Decimal | BT-92",
            "documentLevelAllowanceBaseAmount": "Decimal | BT-93",
            "documentLevelAllowancePercentage": "Decimal | BT-94",
            "documentLevelAllowanceVatCategoryCode": "String | BT-95",
            "documentLevelAllowanceVatRate": "Decimal | BT-96",
            "documentLevelAllowanceReason": "String | BT-97",
            "documentLevelAllowanceReasonCode": "String | BT-98"
          }
        ],
        "documentLevelCharges": [
          {
            "documentLevelChargeAmount": "Decimal | BT-99",
            "documentLevelChargeBaseAmount": "Decimal | BT-100",
            "documentLevelChargePercentage": "Decimal | BT-101",
            "documentLevelChargeVatCategoryCode": "String | BT-102",
            "documentLevelChargeVatRate": "Decimal | BT-103",
            "documentLevelChargeReason": "String | BT-104",
            "documentLevelChargeReasonCode": "String | BT-105"
          }
        ],
        "documentTotals": {
          "sumOfInvoiceLineNetAmount": "Decimal | BT-106",
          "sumOfAllowancesOnDocumentLevel": "Decimal | BT-107",
          "sumOfChargesOnDocumentLevel": "Decimal | BT-108",
          "invoiceTotalAmountWithoutVat": "Decimal | BT-109",
          "invoiceTotalVatAmount": "Decimal | BT-110",
          "invoiceTotalVatAmountInAccountingCurrency": "Decimal | BT-111",
          "invoiceTotalAmountWithVat": "Decimal | BT-112",
          "paidAmount": "Decimal | BT-113",
          "roundingAmount": "Decimal | BT-114",
          "amountDueForPayment": "Decimal | BT-115"
        },
        "vatBreakdown": [
          {
            "vatCategoryTaxableAmount": "Decimal | BT-116",
            "vatCategoryTaxAmount": "Decimal | BT-117",
            "vatCategoryCode": "String | BT-118",
            "vatCategoryRate": "Decimal | BT-119",
            "vatExemptionReasonText": "String | BT-120",
            "vatExemptionReasonCode": "String | BT-121"
          }
        ],
        "additionalSupportingDocuments": [
          {
            "supportingDocumentReference": "String | BT-122",
            "supportingDocumentDescription": "String | BT-123",
            "externalDocumentLocation": "String | BT-124",
            "attachedDocument": "String | BT-125"
          }
        ],
        "invoiceLine": [
          {
            "invoiceLineIdentifier": "String | BT-126",
            "invoiceLineNote": "String | BT-127",
            "invoiceLineObjectIdentifier": "String | BT-128",
            "invoicedQuantity": "Decimal | BT-129",
            "invoicedQuantityUnitOfMeasureCode": "String | BT-130",
            "invoiceLineNetAmount": "Decimal | BT-131",
            "referencedPurchaseOrderLineReference": "String | BT-132",
            "invoiceLineBuyerAccountingReference": "String | BT-133",
            "invoiceLinePeriod": {
              "invoiceLinePeriodStartDate": "Date | BT-134",
              "invoiceLinePeriodEndDate": "Date | BT-135"
            },
            "invoiceLineAllowances": [
              {
                "invoiceLineAllowanceAmount": "Decimal | BT-136",
                "invoiceLineAllowanceBaseAmount": "Decimal | BT-137",
                "invoiceLineAllowancePercentage": "Decimal | BT-138",
                "invoiceLineAllowanceReason": "String | BT-139",
                "invoiceLineAllowanceReasonCode": "String | BT-140"
              }
            ],
            "invoiceLineCharges": [
              {
                "invoiceLineChargeAmount": "Decimal | BT-141",
                "invoiceLineChargeBaseAmount": "Decimal | BT-142",
                "invoiceLineChargePercentage": "Decimal | BT-143",
                "invoiceLineChargeReason": "String | BT-144",
                "invoiceLineChargeReasonCode": "String | BT-145"
              }
            ],
            "priceDetails": {
              "itemNetPrice": "Decimal | BT-146",
              "itemPriceDiscount": "Decimal | BT-147",
              "itemGrossPrice": "Decimal | BT-148",
              "itemPriceBaseQuantity": "Decimal | BT-149",
              "itemPriceBaseQuantityUnitOfMeasure": "String | BT-150"
            },
            "lineVatInformation": [
              {
                "invoicedItemVatCategoryCode": "String | BT-151",
                "invoicedItemVatRate": "Decimal | BT-152"
              }
            ],
            "itemInformation": {
              "itemName": "String | BT-153",
              "itemDescription": "String | BT-154",
              "itemSellersIdentifier": "String | BT-155",
              "itemBuyersIdentifier": "String | BT-156",
              "itemStandardIdentifier": "String | BT-157",
              "itemStandardIdentifierSchemeIdentifier": "String | BT-157-1",
              "itemClassificationIdentifier": [
                {
                  "itemClassificationIdentifier": "String | BT-158",
                  "itemClassificationIdentifierListIdentifier": "String | BT-158-1",
                  "itemClassificationIdentifierListVersionIdentifier": "String | BT-158-2"
                }
              ],
              "itemCountryOfOrigin": "String | BT-159",
              "itemAttributes": [
                {
                  "itemAttributeName": "String | BT-160",
                  "itemAttributeValue": "String | BT-161"
                }
              ]
            }
          }
        ]
      },
      "transport": {
        "type": "email",
        "useTransport": true,
        "sender": "rechnung@ihre-domain.de",
        "senderName": "Ihre Firma GmbH",
        "receiver": "buchhaltung@kunde.de, rechnungen@kunde.de",
        "cc": "steuerberater@kanzlei.de",
        "bcc": "archiv@ihre-domain.de",
        "subject": "Rechnung {invoicenumber} vom {invoicedate}",
        "message": "<p>Guten Tag,</p><p>anbei erhalten Sie die Rechnung {invoicenumber} als ZUGFeRD-Datei.</p>",
        "attachments": [
          {
            "fileName": "Leistungsnachweis.pdf",
            "fileBase64": "<base64>"
          }
        ]
      }
    }

    Beispielantwort

    json
    {
      "message": "xInvoice generated",
      "downloadURL": "https://api.rechnungsapi.de/download/xinvoice_RE-2024-001.xml",
      "resendToken": "RjBcXJ9k2mZpQ7vT4uYs1LwNdHo6EaKf",
      "valid": true,
      "numberOfXInvoiceErrors": 0,
      "xInvoiceErrors": [],
      "xInvoice": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rsm:CrossIndustryInvoice>...</rsm:CrossIndustryInvoice>"
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    POST/api/v1/zugferd/createZugferdFromJson

    ZUGFeRD aus JSON + PDF erzeugen

    Kombiniert strukturierte JSON-Rechnungsdaten mit einem vorhandenen PDF zu einem ZUGFeRD-konformen PDF/A-3-Dokument mit eingebetteter XRechnungs-XML.

    E-Mail-VersandDieses Payload akzeptiert zusätzlich ein optionales transport-Objekt, um die Rechnung im selben Aufruf per E-Mail zu versenden.
    FieldTypeRequiredDescription
    invoiceobjectrequiredRechnungsobjekt.
    invoicePdf64string (base64)requiredBase64-kodiertes PDF für die XML-Einbettung.

    Beispiel

    json
    {
      "invoice": {
        "invoiceNumber": "String | BT-1",
        "invoiceIssueDate": "Date | BT-2",
        "invoiceTypeCode": "String | BT-3",
        "invoiceCurrencyCode": "String | BT-5",
        "vatAccountingCurrencyCode": "String | BT-6",
        "valueAddedTaxPointDate": "String | BT-7",
        "valueAddedTaxPointDateCode": "String | BT-8",
        "paymentDueDate": "Date | BT-9",
        "buyerReference": "String | BT-10",
        "projectReference": {
          "projectReferenceIdentifier": "String | BT-11",
          "projectReferenceName": "String | BT-11-0"
        },
        "contractReference": "String | BT-12",
        "purchaseOrderReference": "String | BT-13",
        "salesOrderReference": "String | BT-14",
        "receivingAdviceReference": "String | BT-15",
        "despatchAdviceReference": "String | BT-16",
        "tenderOrLotReference": "String | BT-17",
        "invoicedObjectIdentifier": "String | BT-18",
        "buyerAccountingReference": "String | BT-19",
        "paymentTerms": "String | BT-20",
        "invoiceNote": [
          {
            "invoiceNoteSubjectCode": "String | BT-21",
            "invoiceNote": "String | BT-22"
          }
        ],
        "processControl": {
          "businessProcessTypeIdentifier": "String | BT-23",
          "specificationIdentifier": "String | BT-24"
        },
        "precedingInvoiceReference": [
          {
            "precedingInvoiceReference": "String | BT-25",
            "precedingInvoiceIssueDate": "Date | BT-26"
          }
        ],
        "seller": {
          "sellerName": "String | BT-27",
          "sellerTradingName": "String | BT-28",
          "sellerIdentifier": [
            "String | BT-29"
          ],
          "sellerLegalRegistrationIdentifier": "String | BT-30",
          "sellerVatIdentifier": "String | BT-31",
          "sellerTaxRegistrationIdentifier": "String | BT-32",
          "sellerAdditionalLegalInformation": "String | BT-33",
          "sellerElectronicAddress": "String | BT-34",
          "sellerPostalAddress": {
            "sellerAddressLine1": "String | BT-35",
            "sellerAddressLine2": "String | BT-36",
            "sellerAddressLine3": "String | BT-162",
            "sellerCity": "String | BT-37",
            "sellerPostCode": "String | BT-38",
            "sellerCountrySubdivision": "String | BT-39",
            "sellerCountryCode": "String | BT-40"
          },
          "sellerContact": {
            "sellerContactPoint": "String | BT-41",
            "sellerContactTelephoneNumber": "String | BT-42",
            "sellerContactEmailAddress": "String | BT-43"
          }
        },
        "buyer": {
          "buyerName": "String | BT-44",
          "buyerTradingName": "String | BT-45",
          "buyerIdentifier": "String | BT-46",
          "buyerLegalRegistrationIdentifier": "String | BT-47",
          "buyerVatIdentifier": "String | BT-48",
          "buyerElectronicAddress": "String | BT-49",
          "buyerPostalAddress": {
            "buyerAddressLine1": "String | BT-50",
            "buyerAddressLine2": "String | BT-51",
            "buyerAddressLine3": "String | BT-163",
            "buyerCity": "String | BT-52",
            "buyerPostCode": "String | BT-53",
            "buyerCountrySubdivision": "String | BT-54",
            "buyerCountryCode": "String | BT-55"
          },
          "buyerContact": {
            "buyerContactPoint": "String | BT-56",
            "buyerContactTelephoneNumber": "String | BT-57",
            "buyerContactEmailAddress": "String | BT-58"
          }
        },
        "payee": {
          "payeeName": "String | BT-59",
          "payeeIdentifier": "String | BT-60",
          "payeeLegalRegistrationIdentifier": "String | BT-61"
        },
        "sellerTaxRepresentativeParty": {
          "sellerTaxRepresentativeName": "String | BT-62",
          "sellerTaxRepresentativeVatIdentifier": "String | BT-63",
          "sellerTaxRepresentativePostalAddress": {
            "taxRepresentativeAddressLine1": "String | BT-64",
            "taxRepresentativeAddressLine2": "String | BT-65",
            "taxRepresentativeAddressLine3": "String | BT-164",
            "taxRepresentativeCity": "String | BT-66",
            "taxRepresentativePostCode": "String | BT-67",
            "taxRepresentativeCountrySubdivision": "String | BT-68",
            "taxRepresentativeCountryCode": "String | BT-69"
          }
        },
        "deliveryInformation": {
          "deliverToPartyName": "String | BT-70",
          "deliverToLocationIdentifier": "String | BT-71",
          "actualDeliveryDate": "Date | BT-72",
          "deliverToAddress": {
            "deliverToAddressLine1": "String | BT-75",
            "deliverToAddressLine2": "String | BT-76",
            "deliverToAddressLine3": "String | BT-165",
            "deliverToCity": "String | BT-77",
            "deliverToPostCode": "String | BT-78",
            "deliverToCountrySubdivision": "String | BT-79",
            "deliverToCountryCode": "String | BT-80"
          }
        },
        "invoicingPeriod": {
          "invoicingPeriodStartDate": "Date | BT-73",
          "invoicingPeriodEndDate": "Date | BT-74"
        },
        "paymentInstructions": {
          "paymentMeansTypeCode": "String | BT-81",
          "paymentMeansText": "String | BT-82",
          "remittanceInformation": "String | BT-83",
          "creditTransfer": [
            {
              "paymentAccountIdentifier": "String | BT-84",
              "paymentAccountName": "String | BT-85",
              "paymentServiceProviderIdentifier": "String | BT-86"
            }
          ],
          "paymentCardInformation": {
            "paymentCardPrimaryAccountNumber": "String | BT-87",
            "paymentCardHolderName": "String | BT-88"
          },
          "directDebit": {
            "mandateReferenceIdentifier": "String | BT-89",
            "bankAssignedCreditorIdentifier": "String | BT-90",
            "debitedAccountIdentifier": "String | BT-91"
          }
        },
        "documentLevelAllowances": [
          {
            "documentLevelAllowanceAmount": "Decimal | BT-92",
            "documentLevelAllowanceBaseAmount": "Decimal | BT-93",
            "documentLevelAllowancePercentage": "Decimal | BT-94",
            "documentLevelAllowanceVatCategoryCode": "String | BT-95",
            "documentLevelAllowanceVatRate": "Decimal | BT-96",
            "documentLevelAllowanceReason": "String | BT-97",
            "documentLevelAllowanceReasonCode": "String | BT-98"
          }
        ],
        "documentLevelCharges": [
          {
            "documentLevelChargeAmount": "Decimal | BT-99",
            "documentLevelChargeBaseAmount": "Decimal | BT-100",
            "documentLevelChargePercentage": "Decimal | BT-101",
            "documentLevelChargeVatCategoryCode": "String | BT-102",
            "documentLevelChargeVatRate": "Decimal | BT-103",
            "documentLevelChargeReason": "String | BT-104",
            "documentLevelChargeReasonCode": "String | BT-105"
          }
        ],
        "documentTotals": {
          "sumOfInvoiceLineNetAmount": "Decimal | BT-106",
          "sumOfAllowancesOnDocumentLevel": "Decimal | BT-107",
          "sumOfChargesOnDocumentLevel": "Decimal | BT-108",
          "invoiceTotalAmountWithoutVat": "Decimal | BT-109",
          "invoiceTotalVatAmount": "Decimal | BT-110",
          "invoiceTotalVatAmountInAccountingCurrency": "Decimal | BT-111",
          "invoiceTotalAmountWithVat": "Decimal | BT-112",
          "paidAmount": "Decimal | BT-113",
          "roundingAmount": "Decimal | BT-114",
          "amountDueForPayment": "Decimal | BT-115"
        },
        "vatBreakdown": [
          {
            "vatCategoryTaxableAmount": "Decimal | BT-116",
            "vatCategoryTaxAmount": "Decimal | BT-117",
            "vatCategoryCode": "String | BT-118",
            "vatCategoryRate": "Decimal | BT-119",
            "vatExemptionReasonText": "String | BT-120",
            "vatExemptionReasonCode": "String | BT-121"
          }
        ],
        "additionalSupportingDocuments": [
          {
            "supportingDocumentReference": "String | BT-122",
            "supportingDocumentDescription": "String | BT-123",
            "externalDocumentLocation": "String | BT-124",
            "attachedDocument": "String | BT-125"
          }
        ],
        "invoiceLine": [
          {
            "invoiceLineIdentifier": "String | BT-126",
            "invoiceLineNote": "String | BT-127",
            "invoiceLineObjectIdentifier": "String | BT-128",
            "invoicedQuantity": "Decimal | BT-129",
            "invoicedQuantityUnitOfMeasureCode": "String | BT-130",
            "invoiceLineNetAmount": "Decimal | BT-131",
            "referencedPurchaseOrderLineReference": "String | BT-132",
            "invoiceLineBuyerAccountingReference": "String | BT-133",
            "invoiceLinePeriod": {
              "invoiceLinePeriodStartDate": "Date | BT-134",
              "invoiceLinePeriodEndDate": "Date | BT-135"
            },
            "invoiceLineAllowances": [
              {
                "invoiceLineAllowanceAmount": "Decimal | BT-136",
                "invoiceLineAllowanceBaseAmount": "Decimal | BT-137",
                "invoiceLineAllowancePercentage": "Decimal | BT-138",
                "invoiceLineAllowanceReason": "String | BT-139",
                "invoiceLineAllowanceReasonCode": "String | BT-140"
              }
            ],
            "invoiceLineCharges": [
              {
                "invoiceLineChargeAmount": "Decimal | BT-141",
                "invoiceLineChargeBaseAmount": "Decimal | BT-142",
                "invoiceLineChargePercentage": "Decimal | BT-143",
                "invoiceLineChargeReason": "String | BT-144",
                "invoiceLineChargeReasonCode": "String | BT-145"
              }
            ],
            "priceDetails": {
              "itemNetPrice": "Decimal | BT-146",
              "itemPriceDiscount": "Decimal | BT-147",
              "itemGrossPrice": "Decimal | BT-148",
              "itemPriceBaseQuantity": "Decimal | BT-149",
              "itemPriceBaseQuantityUnitOfMeasure": "String | BT-150"
            },
            "lineVatInformation": [
              {
                "invoicedItemVatCategoryCode": "String | BT-151",
                "invoicedItemVatRate": "Decimal | BT-152"
              }
            ],
            "itemInformation": {
              "itemName": "String | BT-153",
              "itemDescription": "String | BT-154",
              "itemSellersIdentifier": "String | BT-155",
              "itemBuyersIdentifier": "String | BT-156",
              "itemStandardIdentifier": "String | BT-157",
              "itemStandardIdentifierSchemeIdentifier": "String | BT-157-1",
              "itemClassificationIdentifier": [
                {
                  "itemClassificationIdentifier": "String | BT-158",
                  "itemClassificationIdentifierListIdentifier": "String | BT-158-1",
                  "itemClassificationIdentifierListVersionIdentifier": "String | BT-158-2"
                }
              ],
              "itemCountryOfOrigin": "String | BT-159",
              "itemAttributes": [
                {
                  "itemAttributeName": "String | BT-160",
                  "itemAttributeValue": "String | BT-161"
                }
              ]
            }
          }
        ]
      },
      "invoicePdf64": "JVBERi0xLjQK...",
      "transport": {
        "type": "email",
        "useTransport": true,
        "sender": "rechnung@ihre-domain.de",
        "senderName": "Ihre Firma GmbH",
        "receiver": "buchhaltung@kunde.de, rechnungen@kunde.de",
        "cc": "steuerberater@kanzlei.de",
        "bcc": "archiv@ihre-domain.de",
        "subject": "Rechnung {invoicenumber} vom {invoicedate}",
        "message": "<p>Guten Tag,</p><p>anbei erhalten Sie die Rechnung {invoicenumber} als ZUGFeRD-Datei.</p>",
        "attachments": [
          {
            "fileName": "Leistungsnachweis.pdf",
            "fileBase64": "<base64>"
          }
        ]
      }
    }

    Beispielantwort

    json
    {
      "message": "ZUGFeRD created",
      "downloadURL": "https://api.rechnungsapi.de/download/zugferd_RE-2024-001.pdf",
      "resendToken": "RjBcXJ9k2mZpQ7vT4uYs1LwNdHo6EaKf",
      "zugferdValid": false,
      "xInvoiceValid": false,
      "numberOfZugferdErrors": 1,
      "numberOfxInvoiceErrors": 1,
      "zugferd": "JVBERi0xLjcKJY/6qbAKMyAwIG9iago8PC9...",
      "zugferdErrorList": [],
      "xInvoice": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rsm:CrossIndustryInvoice>...</rsm:CrossIndustryInvoice>",
      "xInvoiceErrorList": []
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    POST/api/v1/zugferd/createZugferdPdfFromXinvoice

    ZUGFeRD-PDF aus XRechnung erstellen

    Erstellt ein ZUGFeRD-konformes PDF/A-3, indem eine vorhandene XRechnungs-XML in ein PDF-Dokument eingebettet wird.

    FieldTypeRequiredDescription
    xInvoiceXmlstringrequiredXRechnungs-XML als String.
    invoicePdf64string (base64)requiredBase64-kodiertes PDF für die XML-Einbettung.

    Beispiel

    json
    {
      "xInvoiceXml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rsm:CrossIndustryInvoice>...</rsm:CrossIndustryInvoice>",
      "invoicePdf64": "JVBERi0xLjQK..."
    }

    Beispielantwort

    json
    {
      "valid": false,
      "message": "zugferd created",
      "numberOfZugferdErrors": 0,
      "zugferdFile": "JVBERi0xLjcKJaOIwOMKMyAwIG9iago...",
      "zugferdErrors": []
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    POST/api/v1/zugferd/createInvoicePdfFromJson

    ZUGFeRD-Rechnungs-PDF aus JSON erzeugen (Template)

    Erzeugt ein ZUGFeRD-konformes Rechnungs-PDF aus JSON-Daten über ein eigenes Word- oder Design-Template. Ab 2027 in Deutschland verpflichtend. Unterstützt einen optionalen Idempotency-Key-Request-Header (beliebiger eindeutiger String, z. B. eine UUID): Die erste Anfrage mit einem bestimmten Key wird normal verarbeitet, ihre Antwort – inklusive Rechnungsnummer, Download-URL und ZUGFeRD-Daten – wird 24 Stunden lang zwischengespeichert. Wird derselbe Key mit identischem Body innerhalb dieses Zeitraums erneut gesendet, liefert die API die ursprünglich zwischengespeicherte Antwort zurück, statt eine neue Rechnung zu erzeugen – dabei werden keine Credits verbraucht. Der Response-Header X-Idempotency-Key-Reused zeigt an, was passiert ist: true bei einer wiederholten Antwort aus dem Cache, false bei einer frisch erzeugten. Wird derselbe Key mit abweichendem Request-Body wiederverwendet, wird die Anfrage mit 409 Conflict abgelehnt – ebenfalls ohne Credit-Verbrauch.

    E-Mail-VersandDieses Payload akzeptiert zusätzlich ein optionales transport-Objekt, um die Rechnung im selben Aufruf per E-Mail zu versenden.
    FieldTypeRequiredDescription
    invoiceobjectrequiredRechnungsobjekt.
    templateIdstringrequiredID des Templates für die PDF-Erzeugung.
    invoiceFilenamestringoptionalEigener Dateiname für die erzeugte PDF-Datei, anstelle des automatisch generierten Namens (z. B. für den E-Mail-Anhang bei Nutzung von transport, oder beim direkten Speichern der Response als Datei). Wird das Feld weggelassen, vergibt die API wie bisher automatisch einen Dateinamen.
    invoicePassthroughbooleanoptionalStandardmäßig true. Bei true wird die Rechnung erzeugt und zurückgegeben, ohne serverseitig etwas zu speichern – sie „durchläuft" Ihr Konto lediglich, ohne dass etwas zurückbehalten wird. Auf false setzen, um die Rechnung zu speichern, sodass sie in Ihrer Rechnungsliste erscheint. Hinweis zur Seite „Rechnung erstellen" im Dashboard: Dort wird dies invertiert als standardmäßig deaktiviertes Kontrollkästchen „Diese Rechnung speichern" dargestellt – bleibt es deaktiviert, wird invoicePassthrough: true gesendet (Standard), bei Aktivierung wird invoicePassthrough: false gesendet.

    Beispiel

    json
    {
      "templateId": "your-template-id",
      "invoiceFilename": "my-custom-invoice-name.pdf",
      "invoicePassthrough": false,
      "invoice": {
        "invoiceNumber": "String | BT-1",
        "invoiceIssueDate": "Date | BT-2",
        "invoiceTypeCode": "String | BT-3",
        "invoiceCurrencyCode": "String | BT-5",
        "vatAccountingCurrencyCode": "String | BT-6",
        "valueAddedTaxPointDate": "String | BT-7",
        "valueAddedTaxPointDateCode": "String | BT-8",
        "paymentDueDate": "Date | BT-9",
        "buyerReference": "String | BT-10",
        "projectReference": {
          "projectReferenceIdentifier": "String | BT-11",
          "projectReferenceName": "String | BT-11-0"
        },
        "contractReference": "String | BT-12",
        "purchaseOrderReference": "String | BT-13",
        "salesOrderReference": "String | BT-14",
        "receivingAdviceReference": "String | BT-15",
        "despatchAdviceReference": "String | BT-16",
        "tenderOrLotReference": "String | BT-17",
        "invoicedObjectIdentifier": "String | BT-18",
        "buyerAccountingReference": "String | BT-19",
        "paymentTerms": "String | BT-20",
        "invoiceNote": [
          {
            "invoiceNoteSubjectCode": "String | BT-21",
            "invoiceNote": "String | BT-22"
          }
        ],
        "processControl": {
          "businessProcessTypeIdentifier": "String | BT-23",
          "specificationIdentifier": "String | BT-24"
        },
        "precedingInvoiceReference": [
          {
            "precedingInvoiceReference": "String | BT-25",
            "precedingInvoiceIssueDate": "Date | BT-26"
          }
        ],
        "seller": {
          "sellerName": "String | BT-27",
          "sellerTradingName": "String | BT-28",
          "sellerIdentifier": [
            "String | BT-29"
          ],
          "sellerLegalRegistrationIdentifier": "String | BT-30",
          "sellerVatIdentifier": "String | BT-31",
          "sellerTaxRegistrationIdentifier": "String | BT-32",
          "sellerAdditionalLegalInformation": "String | BT-33",
          "sellerElectronicAddress": "String | BT-34",
          "sellerPostalAddress": {
            "sellerAddressLine1": "String | BT-35",
            "sellerAddressLine2": "String | BT-36",
            "sellerAddressLine3": "String | BT-162",
            "sellerCity": "String | BT-37",
            "sellerPostCode": "String | BT-38",
            "sellerCountrySubdivision": "String | BT-39",
            "sellerCountryCode": "String | BT-40"
          },
          "sellerContact": {
            "sellerContactPoint": "String | BT-41",
            "sellerContactTelephoneNumber": "String | BT-42",
            "sellerContactEmailAddress": "String | BT-43"
          }
        },
        "buyer": {
          "buyerName": "String | BT-44",
          "buyerTradingName": "String | BT-45",
          "buyerIdentifier": "String | BT-46",
          "buyerLegalRegistrationIdentifier": "String | BT-47",
          "buyerVatIdentifier": "String | BT-48",
          "buyerElectronicAddress": "String | BT-49",
          "buyerPostalAddress": {
            "buyerAddressLine1": "String | BT-50",
            "buyerAddressLine2": "String | BT-51",
            "buyerAddressLine3": "String | BT-163",
            "buyerCity": "String | BT-52",
            "buyerPostCode": "String | BT-53",
            "buyerCountrySubdivision": "String | BT-54",
            "buyerCountryCode": "String | BT-55"
          },
          "buyerContact": {
            "buyerContactPoint": "String | BT-56",
            "buyerContactTelephoneNumber": "String | BT-57",
            "buyerContactEmailAddress": "String | BT-58"
          }
        },
        "payee": {
          "payeeName": "String | BT-59",
          "payeeIdentifier": "String | BT-60",
          "payeeLegalRegistrationIdentifier": "String | BT-61"
        },
        "sellerTaxRepresentativeParty": {
          "sellerTaxRepresentativeName": "String | BT-62",
          "sellerTaxRepresentativeVatIdentifier": "String | BT-63",
          "sellerTaxRepresentativePostalAddress": {
            "taxRepresentativeAddressLine1": "String | BT-64",
            "taxRepresentativeAddressLine2": "String | BT-65",
            "taxRepresentativeAddressLine3": "String | BT-164",
            "taxRepresentativeCity": "String | BT-66",
            "taxRepresentativePostCode": "String | BT-67",
            "taxRepresentativeCountrySubdivision": "String | BT-68",
            "taxRepresentativeCountryCode": "String | BT-69"
          }
        },
        "deliveryInformation": {
          "deliverToPartyName": "String | BT-70",
          "deliverToLocationIdentifier": "String | BT-71",
          "actualDeliveryDate": "Date | BT-72",
          "deliverToAddress": {
            "deliverToAddressLine1": "String | BT-75",
            "deliverToAddressLine2": "String | BT-76",
            "deliverToAddressLine3": "String | BT-165",
            "deliverToCity": "String | BT-77",
            "deliverToPostCode": "String | BT-78",
            "deliverToCountrySubdivision": "String | BT-79",
            "deliverToCountryCode": "String | BT-80"
          }
        },
        "invoicingPeriod": {
          "invoicingPeriodStartDate": "Date | BT-73",
          "invoicingPeriodEndDate": "Date | BT-74"
        },
        "paymentInstructions": {
          "paymentMeansTypeCode": "String | BT-81",
          "paymentMeansText": "String | BT-82",
          "remittanceInformation": "String | BT-83",
          "creditTransfer": [
            {
              "paymentAccountIdentifier": "String | BT-84",
              "paymentAccountName": "String | BT-85",
              "paymentServiceProviderIdentifier": "String | BT-86"
            }
          ],
          "paymentCardInformation": {
            "paymentCardPrimaryAccountNumber": "String | BT-87",
            "paymentCardHolderName": "String | BT-88"
          },
          "directDebit": {
            "mandateReferenceIdentifier": "String | BT-89",
            "bankAssignedCreditorIdentifier": "String | BT-90",
            "debitedAccountIdentifier": "String | BT-91"
          }
        },
        "documentLevelAllowances": [
          {
            "documentLevelAllowanceAmount": "Decimal | BT-92",
            "documentLevelAllowanceBaseAmount": "Decimal | BT-93",
            "documentLevelAllowancePercentage": "Decimal | BT-94",
            "documentLevelAllowanceVatCategoryCode": "String | BT-95",
            "documentLevelAllowanceVatRate": "Decimal | BT-96",
            "documentLevelAllowanceReason": "String | BT-97",
            "documentLevelAllowanceReasonCode": "String | BT-98"
          }
        ],
        "documentLevelCharges": [
          {
            "documentLevelChargeAmount": "Decimal | BT-99",
            "documentLevelChargeBaseAmount": "Decimal | BT-100",
            "documentLevelChargePercentage": "Decimal | BT-101",
            "documentLevelChargeVatCategoryCode": "String | BT-102",
            "documentLevelChargeVatRate": "Decimal | BT-103",
            "documentLevelChargeReason": "String | BT-104",
            "documentLevelChargeReasonCode": "String | BT-105"
          }
        ],
        "documentTotals": {
          "sumOfInvoiceLineNetAmount": "Decimal | BT-106",
          "sumOfAllowancesOnDocumentLevel": "Decimal | BT-107",
          "sumOfChargesOnDocumentLevel": "Decimal | BT-108",
          "invoiceTotalAmountWithoutVat": "Decimal | BT-109",
          "invoiceTotalVatAmount": "Decimal | BT-110",
          "invoiceTotalVatAmountInAccountingCurrency": "Decimal | BT-111",
          "invoiceTotalAmountWithVat": "Decimal | BT-112",
          "paidAmount": "Decimal | BT-113",
          "roundingAmount": "Decimal | BT-114",
          "amountDueForPayment": "Decimal | BT-115"
        },
        "vatBreakdown": [
          {
            "vatCategoryTaxableAmount": "Decimal | BT-116",
            "vatCategoryTaxAmount": "Decimal | BT-117",
            "vatCategoryCode": "String | BT-118",
            "vatCategoryRate": "Decimal | BT-119",
            "vatExemptionReasonText": "String | BT-120",
            "vatExemptionReasonCode": "String | BT-121"
          }
        ],
        "additionalSupportingDocuments": [
          {
            "supportingDocumentReference": "String | BT-122",
            "supportingDocumentDescription": "String | BT-123",
            "externalDocumentLocation": "String | BT-124",
            "attachedDocument": "String | BT-125"
          }
        ],
        "invoiceLine": [
          {
            "invoiceLineIdentifier": "String | BT-126",
            "invoiceLineNote": "String | BT-127",
            "invoiceLineObjectIdentifier": "String | BT-128",
            "invoicedQuantity": "Decimal | BT-129",
            "invoicedQuantityUnitOfMeasureCode": "String | BT-130",
            "invoiceLineNetAmount": "Decimal | BT-131",
            "referencedPurchaseOrderLineReference": "String | BT-132",
            "invoiceLineBuyerAccountingReference": "String | BT-133",
            "invoiceLinePeriod": {
              "invoiceLinePeriodStartDate": "Date | BT-134",
              "invoiceLinePeriodEndDate": "Date | BT-135"
            },
            "invoiceLineAllowances": [
              {
                "invoiceLineAllowanceAmount": "Decimal | BT-136",
                "invoiceLineAllowanceBaseAmount": "Decimal | BT-137",
                "invoiceLineAllowancePercentage": "Decimal | BT-138",
                "invoiceLineAllowanceReason": "String | BT-139",
                "invoiceLineAllowanceReasonCode": "String | BT-140"
              }
            ],
            "invoiceLineCharges": [
              {
                "invoiceLineChargeAmount": "Decimal | BT-141",
                "invoiceLineChargeBaseAmount": "Decimal | BT-142",
                "invoiceLineChargePercentage": "Decimal | BT-143",
                "invoiceLineChargeReason": "String | BT-144",
                "invoiceLineChargeReasonCode": "String | BT-145"
              }
            ],
            "priceDetails": {
              "itemNetPrice": "Decimal | BT-146",
              "itemPriceDiscount": "Decimal | BT-147",
              "itemGrossPrice": "Decimal | BT-148",
              "itemPriceBaseQuantity": "Decimal | BT-149",
              "itemPriceBaseQuantityUnitOfMeasure": "String | BT-150"
            },
            "lineVatInformation": [
              {
                "invoicedItemVatCategoryCode": "String | BT-151",
                "invoicedItemVatRate": "Decimal | BT-152"
              }
            ],
            "itemInformation": {
              "itemName": "String | BT-153",
              "itemDescription": "String | BT-154",
              "itemSellersIdentifier": "String | BT-155",
              "itemBuyersIdentifier": "String | BT-156",
              "itemStandardIdentifier": "String | BT-157",
              "itemStandardIdentifierSchemeIdentifier": "String | BT-157-1",
              "itemClassificationIdentifier": [
                {
                  "itemClassificationIdentifier": "String | BT-158",
                  "itemClassificationIdentifierListIdentifier": "String | BT-158-1",
                  "itemClassificationIdentifierListVersionIdentifier": "String | BT-158-2"
                }
              ],
              "itemCountryOfOrigin": "String | BT-159",
              "itemAttributes": [
                {
                  "itemAttributeName": "String | BT-160",
                  "itemAttributeValue": "String | BT-161"
                }
              ]
            }
          }
        ]
      },
      "transport": {
        "type": "email",
        "useTransport": true,
        "sender": "rechnung@ihre-domain.de",
        "senderName": "Ihre Firma GmbH",
        "receiver": "buchhaltung@kunde.de, rechnungen@kunde.de",
        "cc": "steuerberater@kanzlei.de",
        "bcc": "archiv@ihre-domain.de",
        "subject": "Rechnung {invoicenumber} vom {invoicedate}",
        "message": "<p>Guten Tag,</p><p>anbei erhalten Sie die Rechnung {invoicenumber} als ZUGFeRD-Datei.</p>",
        "attachments": [
          {
            "fileName": "Leistungsnachweis.pdf",
            "fileBase64": "<base64>"
          }
        ]
      }
    }

    Beispielantwort

    json
    {
      "message": "invoice and pdf created",
      "downloadURL": "https://api.rechnungsapi.de/download/inv_2025-12-03-001.pdf",
      "resendToken": "RjBcXJ9k2mZpQ7vT4uYs1LwNdHo6EaKf",
      "iqDataId": 215,
      "documentId": 533,
      "fsNodeId": 5022,
      "fileName": "in-2525-4n4_20250805_1755765122.pdf",
      "fileExtension": "pdf",
      "fileSize": 78573,
      "filecontentB64": "JVBERi0xLjQK..."
    }

    Beispielantwort

    json
    {
      "message": "invoice and pdf created",
      "downloadURL": "https://api.rechnungsapi.de/download/inv_2025-12-03-001.pdf",
      "resendToken": "RjBcXJ9k2mZpQ7vT4uYs1LwNdHo6EaKf",
      "iqDataId": 215,
      "documentId": 533,
      "fsNodeId": 5022,
      "fileName": "in-2525-4n4_20250805_1755765122.pdf",
      "fileExtension": "pdf",
      "fileSize": 78573,
      "filecontentB64": "JVBERi0xLjQK..."
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    E-Mail-Versand

    POST/api/v1/delivery

    Eigenständigen E-Mail-Versand auslösen

    Versendet eine E-Mail an die angegebenen Empfänger — unabhängig von der Erzeugung eines Rechnungsdokuments über einen create...-Endpunkt. Nutzt ein erweitertes transport-Objekt im Vergleich zu den create...-Endpunkten (Felder verschachtelt unter transport.email, plus ein freies content-Objekt für Platzhalter), unter denselben Bedingungen (gebuchter Service, Template-Ersetzungen, Aussehen des Mailbody).

    FieldTypeRequiredDescription
    transport.typestringrequiredVersandkanal. Derzeit nur "email".
    transport.useTransportbooleanrequiredMuss auf true gesetzt sein, damit tatsächlich eine E-Mail versendet wird (siehe Response-Fall „nothing to do" unten).
    transport.email.sender / senderNamestringrequiredAbsender-E-Mail-Adresse und optionaler Anzeigename.
    transport.email.receiver / cc / bccstringrequiredEmpfänger; bei mehreren Adressen kommagetrennt.
    transport.email.subject / messagestringrequiredBetreff und Inhalt (Text oder vollständiges HTML). Beide unterstützen Platzhalter aus content unten — anders als bei den create...-Endpunkten gibt es hier kein invoice-Objekt zur automatischen Befüllung von {invoicenumber}/{invoicedate}/{lastname}, die Werte müssen explizit angegeben werden.
    transport.email.contentobjectoptionalFreie Schlüssel-Wert-Paare zur Befüllung von Platzhaltern in subject/message – z. B. füllt ein Schlüssel "invoicedate" den Platzhalter {invoicedate}. Es können beliebige eigene Schlüssel/Platzhalter-Namen verwendet werden.
    transport.email.attachmentsarrayoptionalAnhänge als { fileName, fileBase64 }-Objekte. Mehrere Anhänge möglich — anders als bei den create...-Endpunkten gibt es hier kein automatisch generiertes Dokument, das mit angehängt wird.

    Beispiel

    json
    {
      "transport": {
        "type": "email",
        "useTransport": true,
        "email": {
          "sender": "support@rechnungsapi.de",
          "senderName": "rechnungsAPI",
          "receiver": "empfaenger@domain.de",
          "cc": "cc1@domain.de, cc2@domain.de",
          "bcc": "bcc1@domain.de, bcc2@domain.de",
          "subject": "testrechnung vom {invoicedate}. Rechnungsnummer: {invoicenumber}",
          "message": "Hallo {lastname},\nIhre Rechnung {invoicenumber} vom {invoicedate} befindet sich im Anhang.",
          "content": {
            "invoicedate": "02.09.2026",
            "invoicenumber": "RE-2024-001",
            "lastname": "Mustermann"
          },
          "attachments": [
            {
              "fileBase64": "<BASE64>",
              "fileName": "file1.pdf"
            }
          ]
        }
      }
    }

    Beispielantwort

    json
    {
      "message": "email sent",
      "resendToken": "RjBcXJ9k2mZpQ7vT4uYs1LwNdHo6EaKf"
    }

    Beispielantwort

    json
    {
      "message": "nothing to do. Send option not set to sent"
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    POST/api/v1/sendEmailWithZugferdData

    E-Mail erneut versenden

    Versendet die E-Mail mit dem zuvor erzeugten Dokument erneut, ohne das Dokument neu zu generieren. Wird zusammen mit dem resendToken verwendet, den createXinvoiceFromJson, createZugferdFromJson, createInvoicePdfFromJson oder delivery in ihrer Response zurückgeben — vorausgesetzt, die Transport-Option wurde genutzt und es wurde ein gültiges Dokument erzeugt.

    FieldTypeRequiredDescription
    resendTokenstringrequiredDer resendToken aus der Response eines der create...-Endpunkte, oder von delivery.

    Beispiel

    json
    {
      "resendToken": "<RESENDTOKEN>"
    }

    Beispielantwort

    json
    {
      "message": "resend"
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    Extraktion

    POST/api/v1/zugferd/extractXinvoiceFromZugferdToJson

    XRechnung aus ZUGFeRD als JSON extrahieren

    Extrahiert die eingebettete XRechnungs-XML aus einem ZUGFeRD-PDF und gibt sie als strukturiertes JSON-Objekt für die Weiterverarbeitung zurück.

    FieldTypeRequiredDescription
    zugferd64string (base64)requiredDas ZUGFeRD-PDF-Dokument als Base64-kodierter String.

    Beispiel

    json
    {
      "zugferd64": "JVBERi0xLjcKJbe3wvUKMyAwIG9iago8PC9UeXBl..."
    }

    Beispielantwort

    json
    {
      "extractedInvoice": {
        "invoiceNumber": "String | BT-1",
        "invoiceIssueDate": "Date | BT-2",
        "invoiceTypeCode": "String | BT-3",
        "invoiceCurrencyCode": "String | BT-5",
        "vatAccountingCurrencyCode": "String | BT-6",
        "valueAddedTaxPointDate": "String | BT-7",
        "valueAddedTaxPointDateCode": "String | BT-8",
        "paymentDueDate": "Date | BT-9",
        "buyerReference": "String | BT-10",
        "projectReference": {
          "projectReferenceIdentifier": "String | BT-11",
          "projectReferenceName": "String | BT-11-0"
        },
        "contractReference": "String | BT-12",
        "purchaseOrderReference": "String | BT-13",
        "salesOrderReference": "String | BT-14",
        "receivingAdviceReference": "String | BT-15",
        "despatchAdviceReference": "String | BT-16",
        "tenderOrLotReference": "String | BT-17",
        "invoicedObjectIdentifier": "String | BT-18",
        "buyerAccountingReference": "String | BT-19",
        "paymentTerms": "String | BT-20",
        "invoiceNote": [
          {
            "invoiceNoteSubjectCode": "String | BT-21",
            "invoiceNote": "String | BT-22"
          }
        ],
        "processControl": {
          "businessProcessTypeIdentifier": "String | BT-23",
          "specificationIdentifier": "String | BT-24"
        },
        "precedingInvoiceReference": [
          {
            "precedingInvoiceReference": "String | BT-25",
            "precedingInvoiceIssueDate": "Date | BT-26"
          }
        ],
        "seller": {
          "sellerName": "String | BT-27",
          "sellerTradingName": "String | BT-28",
          "sellerIdentifier": [
            "String | BT-29"
          ],
          "sellerLegalRegistrationIdentifier": "String | BT-30",
          "sellerVatIdentifier": "String | BT-31",
          "sellerTaxRegistrationIdentifier": "String | BT-32",
          "sellerAdditionalLegalInformation": "String | BT-33",
          "sellerElectronicAddress": "String | BT-34",
          "sellerPostalAddress": {
            "sellerAddressLine1": "String | BT-35",
            "sellerAddressLine2": "String | BT-36",
            "sellerAddressLine3": "String | BT-162",
            "sellerCity": "String | BT-37",
            "sellerPostCode": "String | BT-38",
            "sellerCountrySubdivision": "String | BT-39",
            "sellerCountryCode": "String | BT-40"
          },
          "sellerContact": {
            "sellerContactPoint": "String | BT-41",
            "sellerContactTelephoneNumber": "String | BT-42",
            "sellerContactEmailAddress": "String | BT-43"
          }
        },
        "buyer": {
          "buyerName": "String | BT-44",
          "buyerTradingName": "String | BT-45",
          "buyerIdentifier": "String | BT-46",
          "buyerLegalRegistrationIdentifier": "String | BT-47",
          "buyerVatIdentifier": "String | BT-48",
          "buyerElectronicAddress": "String | BT-49",
          "buyerPostalAddress": {
            "buyerAddressLine1": "String | BT-50",
            "buyerAddressLine2": "String | BT-51",
            "buyerAddressLine3": "String | BT-163",
            "buyerCity": "String | BT-52",
            "buyerPostCode": "String | BT-53",
            "buyerCountrySubdivision": "String | BT-54",
            "buyerCountryCode": "String | BT-55"
          },
          "buyerContact": {
            "buyerContactPoint": "String | BT-56",
            "buyerContactTelephoneNumber": "String | BT-57",
            "buyerContactEmailAddress": "String | BT-58"
          }
        },
        "payee": {
          "payeeName": "String | BT-59",
          "payeeIdentifier": "String | BT-60",
          "payeeLegalRegistrationIdentifier": "String | BT-61"
        },
        "sellerTaxRepresentativeParty": {
          "sellerTaxRepresentativeName": "String | BT-62",
          "sellerTaxRepresentativeVatIdentifier": "String | BT-63",
          "sellerTaxRepresentativePostalAddress": {
            "taxRepresentativeAddressLine1": "String | BT-64",
            "taxRepresentativeAddressLine2": "String | BT-65",
            "taxRepresentativeAddressLine3": "String | BT-164",
            "taxRepresentativeCity": "String | BT-66",
            "taxRepresentativePostCode": "String | BT-67",
            "taxRepresentativeCountrySubdivision": "String | BT-68",
            "taxRepresentativeCountryCode": "String | BT-69"
          }
        },
        "deliveryInformation": {
          "deliverToPartyName": "String | BT-70",
          "deliverToLocationIdentifier": "String | BT-71",
          "actualDeliveryDate": "Date | BT-72",
          "deliverToAddress": {
            "deliverToAddressLine1": "String | BT-75",
            "deliverToAddressLine2": "String | BT-76",
            "deliverToAddressLine3": "String | BT-165",
            "deliverToCity": "String | BT-77",
            "deliverToPostCode": "String | BT-78",
            "deliverToCountrySubdivision": "String | BT-79",
            "deliverToCountryCode": "String | BT-80"
          }
        },
        "invoicingPeriod": {
          "invoicingPeriodStartDate": "Date | BT-73",
          "invoicingPeriodEndDate": "Date | BT-74"
        },
        "paymentInstructions": {
          "paymentMeansTypeCode": "String | BT-81",
          "paymentMeansText": "String | BT-82",
          "remittanceInformation": "String | BT-83",
          "creditTransfer": [
            {
              "paymentAccountIdentifier": "String | BT-84",
              "paymentAccountName": "String | BT-85",
              "paymentServiceProviderIdentifier": "String | BT-86"
            }
          ],
          "paymentCardInformation": {
            "paymentCardPrimaryAccountNumber": "String | BT-87",
            "paymentCardHolderName": "String | BT-88"
          },
          "directDebit": {
            "mandateReferenceIdentifier": "String | BT-89",
            "bankAssignedCreditorIdentifier": "String | BT-90",
            "debitedAccountIdentifier": "String | BT-91"
          }
        },
        "documentLevelAllowances": [
          {
            "documentLevelAllowanceAmount": "Decimal | BT-92",
            "documentLevelAllowanceBaseAmount": "Decimal | BT-93",
            "documentLevelAllowancePercentage": "Decimal | BT-94",
            "documentLevelAllowanceVatCategoryCode": "String | BT-95",
            "documentLevelAllowanceVatRate": "Decimal | BT-96",
            "documentLevelAllowanceReason": "String | BT-97",
            "documentLevelAllowanceReasonCode": "String | BT-98"
          }
        ],
        "documentLevelCharges": [
          {
            "documentLevelChargeAmount": "Decimal | BT-99",
            "documentLevelChargeBaseAmount": "Decimal | BT-100",
            "documentLevelChargePercentage": "Decimal | BT-101",
            "documentLevelChargeVatCategoryCode": "String | BT-102",
            "documentLevelChargeVatRate": "Decimal | BT-103",
            "documentLevelChargeReason": "String | BT-104",
            "documentLevelChargeReasonCode": "String | BT-105"
          }
        ],
        "documentTotals": {
          "sumOfInvoiceLineNetAmount": "Decimal | BT-106",
          "sumOfAllowancesOnDocumentLevel": "Decimal | BT-107",
          "sumOfChargesOnDocumentLevel": "Decimal | BT-108",
          "invoiceTotalAmountWithoutVat": "Decimal | BT-109",
          "invoiceTotalVatAmount": "Decimal | BT-110",
          "invoiceTotalVatAmountInAccountingCurrency": "Decimal | BT-111",
          "invoiceTotalAmountWithVat": "Decimal | BT-112",
          "paidAmount": "Decimal | BT-113",
          "roundingAmount": "Decimal | BT-114",
          "amountDueForPayment": "Decimal | BT-115"
        },
        "vatBreakdown": [
          {
            "vatCategoryTaxableAmount": "Decimal | BT-116",
            "vatCategoryTaxAmount": "Decimal | BT-117",
            "vatCategoryCode": "String | BT-118",
            "vatCategoryRate": "Decimal | BT-119",
            "vatExemptionReasonText": "String | BT-120",
            "vatExemptionReasonCode": "String | BT-121"
          }
        ],
        "additionalSupportingDocuments": [
          {
            "supportingDocumentReference": "String | BT-122",
            "supportingDocumentDescription": "String | BT-123",
            "externalDocumentLocation": "String | BT-124",
            "attachedDocument": "String | BT-125"
          }
        ],
        "invoiceLine": [
          {
            "invoiceLineIdentifier": "String | BT-126",
            "invoiceLineNote": "String | BT-127",
            "invoiceLineObjectIdentifier": "String | BT-128",
            "invoicedQuantity": "Decimal | BT-129",
            "invoicedQuantityUnitOfMeasureCode": "String | BT-130",
            "invoiceLineNetAmount": "Decimal | BT-131",
            "referencedPurchaseOrderLineReference": "String | BT-132",
            "invoiceLineBuyerAccountingReference": "String | BT-133",
            "invoiceLinePeriod": {
              "invoiceLinePeriodStartDate": "Date | BT-134",
              "invoiceLinePeriodEndDate": "Date | BT-135"
            },
            "invoiceLineAllowances": [
              {
                "invoiceLineAllowanceAmount": "Decimal | BT-136",
                "invoiceLineAllowanceBaseAmount": "Decimal | BT-137",
                "invoiceLineAllowancePercentage": "Decimal | BT-138",
                "invoiceLineAllowanceReason": "String | BT-139",
                "invoiceLineAllowanceReasonCode": "String | BT-140"
              }
            ],
            "invoiceLineCharges": [
              {
                "invoiceLineChargeAmount": "Decimal | BT-141",
                "invoiceLineChargeBaseAmount": "Decimal | BT-142",
                "invoiceLineChargePercentage": "Decimal | BT-143",
                "invoiceLineChargeReason": "String | BT-144",
                "invoiceLineChargeReasonCode": "String | BT-145"
              }
            ],
            "priceDetails": {
              "itemNetPrice": "Decimal | BT-146",
              "itemPriceDiscount": "Decimal | BT-147",
              "itemGrossPrice": "Decimal | BT-148",
              "itemPriceBaseQuantity": "Decimal | BT-149",
              "itemPriceBaseQuantityUnitOfMeasure": "String | BT-150"
            },
            "lineVatInformation": [
              {
                "invoicedItemVatCategoryCode": "String | BT-151",
                "invoicedItemVatRate": "Decimal | BT-152"
              }
            ],
            "itemInformation": {
              "itemName": "String | BT-153",
              "itemDescription": "String | BT-154",
              "itemSellersIdentifier": "String | BT-155",
              "itemBuyersIdentifier": "String | BT-156",
              "itemStandardIdentifier": "String | BT-157",
              "itemStandardIdentifierSchemeIdentifier": "String | BT-157-1",
              "itemClassificationIdentifier": [
                {
                  "itemClassificationIdentifier": "String | BT-158",
                  "itemClassificationIdentifierListIdentifier": "String | BT-158-1",
                  "itemClassificationIdentifierListVersionIdentifier": "String | BT-158-2"
                }
              ],
              "itemCountryOfOrigin": "String | BT-159",
              "itemAttributes": [
                {
                  "itemAttributeName": "String | BT-160",
                  "itemAttributeValue": "String | BT-161"
                }
              ]
            }
          }
        ]
      }
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    Validierung

    POST/api/v1/zugferd/validateXinvoiceXml

    XRechnung-XML validieren

    Validiert XRechnungs-XML gegen EN 16931 und XRechnung-Business-Regeln. Gibt strukturierte Fehler mit Regel-IDs und Positionen zurück, damit Verstöße vor dem Versand behoben werden können.

    FieldTypeRequiredDescription
    xinvoiceXMLstringrequiredXRechnungs-XML-Inhalt als String.

    Beispiel

    json
    {
      "xinvoiceXML": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>..."
    }

    Beispielantwort

    json
    {
      "valid": false,
      "message": "validated. (7835)",
      "xInvoiceErrors": [
        {
          "id": "BR-CO-25",
          "line": null,
          "location": "/rsm:CrossIndustryInvoice",
          "message": "In case the Amount due for payment (BT-115) is positive, either the Payment due date (BT-9) or the Payment terms (BT-20) shall be present.",
          "schemaFile": "EN16931-CII-validation",
          "type": "fatal"
        }
      ]
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    POST/api/v1/zugferd/validateZugferdPdf

    ZUGFeRD-PDF validieren

    Validiert ein bestehendes ZUGFeRD-PDF inkl. eingebettetem XML gegen EN 16931. Liefert ein klares Bestanden/Nicht-bestanden mit einer detaillierten Fehlerliste.

    FieldTypeRequiredDescription
    zugferdFile64string (base64)requiredBase64-kodiertes ZUGFeRD-PDF.
    comparePDF2XMLbooleanoptionalWenn true, wird zusätzlich geprüft, ob der sichtbare PDF-Inhalt mit den eingebetteten XML-Rechnungsdaten übereinstimmt. Standard: false.

    Beispiel

    json
    {
      "zugferdFile64": "JVBERi0xLjQK...",
      "comparePDF2XML": true
    }

    Beispielantwort

    json
    {
      "valid": false,
      "message": "File was validated",
      "numberOfZugferdErrors": 10,
      "zugferdErrors": [
        {
          "id": "BR-CO-25",
          "line": null,
          "location": "/rsm:CrossIndustryInvoice",
          "message": "In case the Amount due for payment (BT-115) is positive, either the Payment due date (BT-9) or the Payment terms (BT-20) shall be present.",
          "schemaFile": "EN16931-CII-validation",
          "type": "fatal"
        }
      ]
    }

    Playground

    Diesen Endpunkt live im Browser testen.

    Rechnungsobjekt – Referenz

    Das Rechnungsobjekt folgt dem europäischen Semantik-Standard EN 16931. Jedes Feld ist einem Business Term (BT-*) oder einer Business Group (BG-*) zugeordnet. Die folgenden Tabellen zeigen, welche Felder Pflicht und welche optional sind – gruppiert nach ihrer Rolle in der Rechnung.

    Wie diese Tabellen zu lesen sind

    • Pflichtfelder müssen vorhanden sein, damit die Rechnung gegen EN 16931 valide ist.
    • Mit „Min. 1 Pflicht“ markierte Arrays müssen mindestens einen Eintrag enthalten (z. B. Rechnungspositionen, USt-Aufschlüsselung).
    • Verschachtelte Felder werden mit Punktnotation dargestellt (z. B. sellerPostalAddress.sellerCity).
    required

    Pflichtfelder auf einen Blick

    Dies sind die Mindest-Pflichtfelder für eine valide EN-16931-Rechnung. Alles Übrige in den Tabellen unten ist optional und kann weggelassen werden.

    Kopfdaten (BT-1 bis BT-26)
    • BT-1invoiceNumber
    • BT-2invoiceIssueDate
    • BT-3invoiceTypeCode
    • BT-5invoiceCurrencyCode
    • BT-10buyerReference
    Verkäufer (BG-4, BT-27 bis BT-43)
    • BT-27sellerName
    • BT-31sellerVatIdentifier
    • BT-34sellerElectronicAddress
    • BT-37sellerPostalAddress.sellerCity
    • BT-38sellerPostalAddress.sellerPostCode
    • BT-40sellerPostalAddress.sellerCountryCode
    Käufer (BG-7, BT-44 bis BT-58)
    • BT-44buyerName
    • BT-49buyerElectronicAddress
    • BT-52buyerPostalAddress.buyerCity
    • BT-53buyerPostalAddress.buyerPostCode
    • BT-55buyerPostalAddress.buyerCountryCode
    Zahlungsanweisungen (BG-16, BT-81 bis BT-91)
    • BT-81paymentMeansTypeCode
    Rechnungsbeträge (BG-22, BT-106 bis BT-115)
    • BT-106sumOfInvoiceLineNetAmount
    • BT-109invoiceTotalAmountWithoutVat
    • BT-110invoiceTotalVatAmount
    • BT-112invoiceTotalAmountWithVat
    • BT-115amountDueForPayment
    USt-Aufschlüsselung (BG-23, BT-116 bis BT-121)· ≥ 1
    • BT-116vatCategoryTaxableAmount
    • BT-117vatCategoryTaxAmount
    • BT-118vatCategoryCode
    • BT-119vatCategoryRate
    Rechnungspositionen (BG-25, BT-126 bis BT-161)· ≥ 1
    • BT-126invoiceLineIdentifier
    • BT-129invoicedQuantity
    • BT-130invoicedQuantityUnitOfMeasureCode
    • BT-131invoiceLineNetAmount
    • BT-146priceDetails.itemNetPrice
    • BT-151lineVatInformation[].invoicedItemVatCategoryCode
    • BT-152lineVatInformation[].invoicedItemVatRate
    • BT-153itemInformation.itemName

    Kopfdaten (BT-1 bis BT-26)

    Top-Level-Rechnungsdaten: Nummer, Datumsangaben, Währung und Referenzen. Diese Felder identifizieren das Dokument und seinen Geschäftskontext.

    BTFieldTypePflichtBeschreibung
    BT-1invoiceNumberstringrequiredEindeutige Rechnungsnummer des Verkäufers.
    BT-2invoiceIssueDatedaterequiredAusstellungsdatum der Rechnung. Format JJJJMMTT oder JJJJ-MM-TT.
    BT-3invoiceTypeCodestringrequiredRechnungsart: 380 = Rechnung, 381 = Gutschrift, 384 = Korrekturrechnung.
    BT-5invoiceCurrencyCodestringrequiredISO-4217-Währungscode der Rechnung (z. B. EUR).
    BT-6vatAccountingCurrencyCodestringoptionalWährung für die USt-Buchhaltung, falls abweichend von der Rechnungswährung.
    BT-7valueAddedTaxPointDatedateoptionalUSt-Stichtag – Datum, an dem die USt fällig wird.
    BT-8valueAddedTaxPointDateCodestringoptionalCode, der angibt, welches Datum den USt-Stichtag bestimmt.
    BT-9paymentDueDatedateoptionalFälligkeitsdatum der Zahlung. Pflicht, sofern ein offener Betrag und kein Zahlungsbedingungstext vorhanden ist.
    BT-10buyerReferencestringrequiredKäuferreferenz (Leitweg-ID bei der öffentlichen Verwaltung, sonst eine mit dem Käufer vereinbarte Referenz).
    BT-11projectReferenceobjectoptionalOptionale Projektreferenz (Kennung + Name).
    BT-12contractReferencestringoptionalKennung des zugrunde liegenden Vertrags.
    BT-13purchaseOrderReferencestringoptionalBestellreferenz des Käufers.
    BT-14salesOrderReferencestringoptionalAuftragsreferenz des Verkäufers.
    BT-17tenderOrLotReferencestringoptionalAusschreibungs- oder Losreferenz.
    BT-19buyerAccountingReferencestringoptionalBuchhaltungsreferenz des Käufers.
    BT-20paymentTermsstringoptionalZahlungsbedingungen als Freitext. Pflicht, wenn BT-9 fehlt.
    BT-21/22invoiceNotearrayoptionalFreitext-Hinweise zur Rechnung, jeweils mit optionalem Themencode.
    BT-23/24processControlobjectoptionalGeschäftsprozess- und Spezifikations-Identifikatoren.
    BT-25/26precedingInvoiceReferencearrayoptionalReferenz auf eine vorhergehende Rechnung (für Korrekturen / Gutschriften).

    Verkäufer (BG-4, BT-27 bis BT-43)

    Identifikations- und Kontaktdaten des Rechnungsstellers.

    BTFieldTypePflichtBeschreibung
    BT-27sellerNamestringrequiredEingetragener Firmenname des Verkäufers.
    BT-28sellerTradingNamestringoptionalGeschäftsname, falls vom Firmennamen abweichend.
    BT-29sellerIdentifierstring[]optionalZusätzliche Verkäufer-Identifikatoren (z. B. GLN).
    BT-30sellerLegalRegistrationIdentifierstringoptionalHandelsregisternummer.
    BT-31sellerVatIdentifierstringrequiredUmsatzsteuer-Identifikationsnummer des Verkäufers.
    BT-32sellerTaxRegistrationIdentifierstringoptionalSteuernummer.
    BT-33sellerAdditionalLegalInformationstringoptionalWeitere Rechtsangaben (Geschäftsführer, Registergericht usw.).
    BT-34sellerElectronicAddressstringrequiredElektronische Adresse des Verkäufers (i. d. R. Postfach für E-Rechnungen oder E-Mail).
    BT-35sellerPostalAddress.sellerAddressLine1stringoptionalStraße und Hausnummer (Zeile 1).
    BT-37sellerPostalAddress.sellerCitystringrequiredOrt.
    BT-38sellerPostalAddress.sellerPostCodestringrequiredPostleitzahl.
    BT-40sellerPostalAddress.sellerCountryCodestringrequiredISO-3166-1 alpha-2 Ländercode (z. B. DE).
    BT-41/42/43sellerContactobjectoptionalAnsprechpartner: Name, Telefon, E-Mail.

    Käufer (BG-7, BT-44 bis BT-58)

    Identifikations- und Kontaktdaten des Rechnungsempfängers.

    BTFieldTypePflichtBeschreibung
    BT-44buyerNamestringrequiredEingetragener Firmenname des Käufers.
    BT-45buyerTradingNamestringoptionalGeschäftsname, falls vom Firmennamen abweichend.
    BT-46buyerIdentifierstringoptionalZusätzlicher Käufer-Identifikator.
    BT-47buyerLegalRegistrationIdentifierstringoptionalHandelsregisternummer des Käufers.
    BT-48buyerVatIdentifierstringoptionalUmsatzsteuer-Identifikationsnummer des Käufers.
    BT-49buyerElectronicAddressstringrequiredElektronische Adresse des Käufers.
    BT-50buyerPostalAddress.buyerAddressLine1stringoptionalStraße und Hausnummer (Zeile 1).
    BT-52buyerPostalAddress.buyerCitystringrequiredOrt.
    BT-53buyerPostalAddress.buyerPostCodestringrequiredPostleitzahl.
    BT-55buyerPostalAddress.buyerCountryCodestringrequiredISO-3166-1 alpha-2 Ländercode.
    BT-56/57/58buyerContactobjectoptionalAnsprechpartner: Name, Telefon, E-Mail.

    Zahlungsanweisungen (BG-16, BT-81 bis BT-91)

    Wie der Käufer zahlen soll. Verwenden Sie je nach Zahlungsart-Code entweder Überweisung, Karte oder Lastschrift.

    BTFieldTypePflichtBeschreibung
    BT-81paymentMeansTypeCodestringrequiredUNTDID 4461 Zahlungsmittelcode (z. B. 58 = SEPA-Überweisung, 30 = Überweisung, 48 = Kreditkarte).
    BT-82paymentMeansTextstringoptionalFreitext-Zahlungsanweisungen.
    BT-83remittanceInformationstringoptionalVerwendungszweck (vom Käufer bei Zahlung anzugeben).
    BT-84creditTransfer[].paymentAccountIdentifierstringoptionalIBAN oder Kontonummer für die Zahlung.
    BT-85creditTransfer[].paymentAccountNamestringoptionalKontoinhaber.
    BT-86creditTransfer[].paymentServiceProviderIdentifierstringoptionalBIC der Empfängerbank.
    BT-87/88paymentCardInformationobjectoptionalKartenzahlungsinformationen (PAN, Karteninhaber).
    BT-89/90/91directDebitobjectoptionalLastschriftmandat-Informationen.

    Rechnungsbeträge (BG-22, BT-106 bis BT-115)

    Beträge auf Dokumentenebene. Diese müssen mit der Summe der Positionen und der USt-Aufschlüsselung übereinstimmen.

    BTFieldTypePflichtBeschreibung
    BT-106sumOfInvoiceLineNetAmountdecimalrequiredSumme der Nettobeträge aller Rechnungspositionen.
    BT-107sumOfAllowancesOnDocumentLeveldecimaloptionalSumme der Nachlässe auf Dokumentenebene.
    BT-108sumOfChargesOnDocumentLeveldecimaloptionalSumme der Zuschläge auf Dokumentenebene.
    BT-109invoiceTotalAmountWithoutVatdecimalrequiredRechnungs-Gesamtbetrag ohne USt (Nettosumme).
    BT-110invoiceTotalVatAmountdecimalrequiredGesamter USt-Betrag.
    BT-111invoiceTotalVatAmountInAccountingCurrencydecimaloptionalGesamt-USt in der Buchhaltungswährung (BT-6), falls von BT-5 abweichend.
    BT-112invoiceTotalAmountWithVatdecimalrequiredRechnungs-Gesamtbetrag inkl. USt (Bruttosumme).
    BT-113paidAmountdecimaloptionalBereits bezahlter Betrag.
    BT-114roundingAmountdecimaloptionalRundungsbetrag.
    BT-115amountDueForPaymentdecimalrequiredZu zahlender Betrag (BT-112 − BT-113 + BT-114).

    USt-Aufschlüsselung (BG-23, BT-116 bis BT-121)

    Array · Min. 1 Pflicht

    Array mit USt-Zwischensummen. Mindestens ein Eintrag ist Pflicht, mit einer Zeile pro Kombination aus USt-Kategorie und -Satz.

    BTFieldTypePflichtBeschreibung
    BT-116vatCategoryTaxableAmountdecimalrequiredSteuerbarer Betrag für diese USt-Kategorie.
    BT-117vatCategoryTaxAmountdecimalrequiredUSt-Betrag für diese Kategorie (BT-116 × BT-119 / 100).
    BT-118vatCategoryCodestringrequiredUSt-Kategorie: S (Standard), Z (Nullsatz), E (Befreit), AE (Umkehr der Steuerschuld), K (Innergemeinschaftlich), G (Ausfuhr), O (Außerhalb), L (Kanarische Inseln), M (Ceuta/Melilla).
    BT-119vatCategoryRatedecimalrequiredUSt-Satz in Prozent (z. B. 19 für 19 %).
    BT-120vatExemptionReasonTextstringoptionalPflicht bei Steuerbefreiung oder Nullsatz. Freitext-Begründung.
    BT-121vatExemptionReasonCodestringoptionalKodierte Befreiungsgründe (z. B. VATEX-EU-AE, VATEX-EU-IC).

    Rechnungspositionen (BG-25, BT-126 bis BT-161)

    Array · Min. 1 Pflicht

    Array der Rechnungspositionen. Jede Position beschreibt ein Produkt oder eine Leistung und muss Identifikation, Menge, Nettopreis, Positions-Nettobetrag und USt-Zuordnung enthalten.

    BTFieldTypePflichtBeschreibung
    BT-126invoiceLineIdentifierstringrequiredEindeutige Positionsnummer innerhalb der Rechnung.
    BT-127invoiceLineNotestringoptionalFreitext-Hinweis zur Position.
    BT-128invoiceLineObjectIdentifierstringoptionalObjektkennung, auf die die Position verweist.
    BT-129invoicedQuantitydecimalrequiredIn Rechnung gestellte Menge.
    BT-130invoicedQuantityUnitOfMeasureCodestringrequiredUN/ECE Empfehlung 20 Maßeinheit (z. B. H87 = Stück, HUR = Stunde, KGM = Kilogramm).
    BT-131invoiceLineNetAmountdecimalrequiredPositions-Nettobetrag (Menge × Nettopreis − Positionsnachlässe + Positionszuschläge).
    BT-132referencedPurchaseOrderLineReferencestringoptionalReferenz auf eine Bestellposition des Käufers.
    BT-133invoiceLineBuyerAccountingReferencestringoptionalBuchungsreferenz für diese Position.
    BT-134/135invoiceLinePeriodobjectoptionalLeistungszeitraum dieser Position (Start/Ende).
    BT-136 to BT-140invoiceLineAllowancesarrayoptionalNachlässe/Rabatte auf Positionsebene.
    BT-141 to BT-145invoiceLineChargesarrayoptionalZuschläge auf Positionsebene.
    BT-146priceDetails.itemNetPricedecimalrequiredNetto-Stückpreis (nach Artikel-Preisrabatt).
    BT-147priceDetails.itemPriceDiscountdecimaloptionalRabatt auf den Brutto-Stückpreis zur Ermittlung des Nettopreises.
    BT-148priceDetails.itemGrossPricedecimaloptionalBrutto-Stückpreis vor Rabatt.
    BT-149/150priceDetails.itemPriceBaseQuantityobjectoptionalBezugsmenge des Stückpreises + Maßeinheit.
    BT-151lineVatInformation[].invoicedItemVatCategoryCodestringrequiredUSt-Kategorie der Position (passt zu einem Eintrag in vatBreakdown).
    BT-152lineVatInformation[].invoicedItemVatRatedecimalrequiredUSt-Satz der Position.
    BT-153itemInformation.itemNamestringrequiredArtikelbezeichnung auf der Rechnung.
    BT-154itemInformation.itemDescriptionstringoptionalAusführliche Artikelbeschreibung.
    BT-155itemInformation.itemSellersIdentifierstringoptionalArtikelnummer des Verkäufers.
    BT-156itemInformation.itemBuyersIdentifierstringoptionalArtikelnummer des Käufers.
    BT-157itemInformation.itemStandardIdentifierstringoptionalStandardartikelkennung (z. B. GTIN). Pflicht, wenn BT-157-1 gesetzt ist.
    BT-157-1itemInformation.itemStandardIdentifierSchemeIdentifierstringoptionalISO-6523-Schema für BT-157. Pflicht, wenn BT-157 gesetzt ist.
    BT-158itemInformation.itemClassificationIdentifierarrayoptionalArtikelklassifizierungen (z. B. UNSPSC, eCl@ss) mit Schema und Version.
    BT-159itemInformation.itemCountryOfOriginstringoptionalISO-3166-1 alpha-2 Herkunftsland.
    BT-160/161itemInformation.itemAttributesarrayoptionalArtikelmerkmale als Name/Wert-Paare (z. B. Farbe, Größe).

    Optionale Parteien, Zeiträume und Anpassungen auf Dokumentenebene

    Diese Gruppen sind komplett optional. Verwenden Sie sie nur wenn relevant – ansonsten weglassen. Die internen Felder folgen denselben EN-16931-Mapping-Konventionen.

    BTFieldTypePflichtBeschreibung
    BG-10 / BT-59 to BT-61payeeobjectoptionalZahlungsempfänger, falls vom Verkäufer abweichend.
    BG-11 / BT-62 to BT-69sellerTaxRepresentativePartyobjectoptionalSteuervertreter des Verkäufers (üblicherweise für Verkäufer außerhalb der EU).
    BG-13 / BT-70 to BT-80deliveryInformationobjectoptionalLieferpartei, Ort und tatsächliches Lieferdatum.
    BG-14 / BT-73, BT-74invoicingPeriodobjectoptionalLeistungszeitraum auf Rechnungsebene.
    BG-20 / BT-92 to BT-98documentLevelAllowancesarrayoptionalNachlässe/Rabatte auf Dokumentenebene.
    BG-21 / BT-99 to BT-105documentLevelChargesarrayoptionalZuschläge auf Dokumentenebene.
    BG-24 / BT-122 to BT-125additionalSupportingDocumentsarrayoptionalZusätzliche Belege (Stundennachweis, Lieferschein usw.). Entweder externe URL oder Base64-Anhang.

    E-Mail-Versand (transport)

    Erzeugen und versenden in einem Aufruf: Die Erzeugungs-Endpunkte createXinvoiceFromJson, createZugferdFromJson und createInvoicePdfFromJson akzeptieren ein optionales transport-Objekt. Ist es vorhanden, wird die erzeugte Rechnung im selben Vorgang per E-Mail zugestellt – DKIM-signiert, an Empfänger, CC und BCC gleichzeitig, ohne eigene Mailinfrastruktur. Ist es nicht vorhanden, verhalten sich die Endpunkte exakt wie bisher; die Funktion ist vollständig abwärtskompatibel. Für bereits erzeugte ZUGFeRD-Daten gibt es den dedizierten Endpunkt sendEmailWithZugferdData.

    Voraussetzungen

    Der E-Mail-Versand muss für Ihr Konto freigeschaltet und Ihre Absenderdomain einmalig authentifiziert sein. So richten Sie beides ein: E-Mail-Versand einrichten.

    Das transport-Objekt

    FeldTypPflichtBeschreibung
    typestringPflichtVersandkanal. Derzeit nur "email".
    useTransportbooleanPflichtAuf true setzen, um die erzeugte Rechnung im selben Aufruf zu versenden.
    senderstringPflichtAbsenderadresse auf Ihrer eigenen Domain. Die Domain muss einmalig authentifiziert sein (DKIM/SPF) – siehe die oben verlinkte Einrichtungsanleitung.
    senderNamestringoptionalAnzeigename des Absenders.
    receiverstringPflichtEmpfängeradresse(n), kommasepariert. Wird vor dem Versand bereinigt.
    ccstringoptionalCC-Adresse(n), kommasepariert.
    bccstringoptionalBCC-Adresse(n), kommasepariert – z. B. Ihr eigenes Archiv-Postfach für eine Kopie jeder versendeten Rechnung.
    subjectstringPflichtE-Mail-Betreff. Unterstützt die Platzhalter {invoicenumber} und {invoicedate} – nicht {lastname}, das nur im message-Feld funktioniert.
    messagestringPflichtE-Mail-Text als HTML. Unterstützt {invoicenumber} und {invoicedate} wie der Betreff, zusätzlich {lastname} (invoice.buyer.buyerName) – nur hier, nicht im Betreff.
    attachmentsarrayoptionalZusätzliche Anhänge als { fileName, fileBase64 }-Objekte. PDF, JPG und PNG werden akzeptiert.

    Beispiel-Request

    Ein beliebiger Erzeugungs-Request-Body, ergänzt um das transport-Objekt:

    json
    {
      "invoice": {
        "...": "..."
      },
      "transport": {
        "type": "email",
        "useTransport": true,
        "sender": "rechnung@ihre-domain.de",
        "senderName": "Ihre Firma GmbH",
        "receiver": "buchhaltung@kunde.de, rechnungen@kunde.de",
        "cc": "steuerberater@kanzlei.de",
        "bcc": "archiv@ihre-domain.de",
        "subject": "Rechnung {invoicenumber} vom {invoicedate}",
        "message": "<p>Guten Tag,</p><p>anbei erhalten Sie die Rechnung {invoicenumber} als ZUGFeRD-Datei.</p>",
        "attachments": [
          {
            "fileName": "Leistungsnachweis.pdf",
            "fileBase64": "<base64>"
          }
        ]
      }
    }

    Verwandte Endpunkte

    Zwei weitere Endpunkte drehen sich um den E-Mail-Versand, unabhängig vom obigen transport-Objekt:

    delivery — versendet eigenständig eine E-Mail, unabhängig von der Erzeugung eines Rechnungsdokuments, mit frei wählbaren Anhängen und Platzhalter-Werten.sendEmailWithZugferdData — versendet eine bereits über transport oder delivery verschickte E-Mail anhand ihres resendToken erneut, ohne das Dokument neu zu erzeugen.

    Fehler

    RechnungsAPI verwendet konventionelle HTTP-Status-Codes für Transport-Fehler. Fachliche Validierungsergebnisse (EN-16931- / XRechnung-Regelverstöße) werden mit HTTP 200 in einer strukturierten Fehlerliste zurückgegeben – siehe Schema unten.

    CodeBezeichnungBeschreibung
    200OKAnfrage verarbeitet. Bei Validierungs- und Erzeugungs-Endpunkten zusätzlich das Feld `valid` prüfen – HTTP 200 bedeutet nicht, dass die Rechnung valide ist.
    400Ungültige AnfrageUngültiges JSON oder ungültige Rechnungsdaten. Der Response-Body listet die betroffenen Felder.
    401Nicht autorisiertFehlender oder ungültiger Authorization-Header / Bearer-Token.
    402Zahlung erforderlichKein aktives Abo oder API-Kontingent aufgebraucht. Bitte Support kontaktieren oder Plan upgraden.
    412Vorbedingung fehlgeschlagenErforderliche Eingabe (PDF, XML oder Rechnungsdaten) fehlt im Request-Body.
    500ServerfehlerUnerwarteter serverseitiger Fehler. Mit exponentiellem Backoff erneut versuchen; bei dauerhaftem Fehler Support mit Request-ID kontaktieren.

    Schema eines Validierungsfehlers

    Jeder Eintrag in `xInvoiceErrors` / `zugferdErrors` folgt diesem Schema. Nutzen Sie `id` und `location`, um zur fehlerhaften Stelle zu springen.

    json
    {
      "id": "BR-CO-25",
      "line": null,
      "location": "/rsm:CrossIndustryInvoice",
      "message": "In case the Amount due for payment (BT-115) is positive, either the Payment due date (BT-9) or the Payment terms (BT-20) shall be present.",
      "schemaFile": "EN16931-CII-validation",
      "type": "fatal"
    }

    MCP-Server & SDK

    RechnungsAPI steht KI-Agenten über einen gehosteten MCP-Server zur Verfügung und Entwicklern als offizielles, typisiertes SDK. Verbinden Sie jeden MCP-Client, der Streamable HTTP mit eigenem Authorization-Header unterstützt (zum Beispiel Claude Code oder Open WebUI), starten Sie denselben Server lokal per npx oder installieren Sie das npm-SDK, um die API aus Ihrem eigenen Code heraus aufzurufen.

    KI-Agent verbinden (MCP)

    Ein gehosteter MCP-Server läuft unter mcp.rechnungsapi.de. Er spricht Streamable HTTP und authentifiziert jede Anfrage mit Ihrem eigenen Bearer-Token (kein OAuth, keine separate Registrierung). Sie möchten ihn lieber selbst ausführen? Derselbe Server ist als npm-Paket rechnungsapi-mcp für stdio-basierte Clients wie Claude Desktop und Claude Code verfügbar.

    {
      "mcpServers": {
        "rechnungsapi": {
          "type": "http",
          "url": "https://mcp.rechnungsapi.de/mcp",
          "headers": { "Authorization": "Bearer <your-api-token>" }
        }
      }
    }

    Open WebUI unterstützt entfernte MCP-Server nativ: Legen Sie unter Admin Settings → Integrations eine Verbindung vom Typ MCP (Streamable HTTP) an, wählen Sie als Auth „Bearer“ und fügen Sie Ihren Token ein. Clients, die für entfernte Server ausschließlich OAuth anbieten, können sich noch nicht mit dem gehosteten Endpunkt verbinden – nutzen Sie dann die lokale npx-Variante oder das SDK weiter unten.

    Offizielles SDK (npm)

    Möchten Sie die API direkt aus Ihrem eigenen Backend aufrufen statt über einen KI-Agenten? rechnungsapi-sdk ist ein typisierter TypeScript/JavaScript-Client für ZUGFeRD/X-Invoice-Erstellung, -Validierung und PDF-Analyse.

    npm install rechnungsapi-sdk

    Pakete und vollständige Dokumentation auf npm: rechnungsapi-mcp · rechnungsapi-sdk

    Sicherheitshinweis: Der Token, den Sie in der Konfiguration eines MCP-Clients hinterlegen, ist derselbe wie überall sonst – behandeln Sie ihn wie ein Passwort. Rotieren Sie ihn bei Verdacht auf Leaks sofort über das Dashboard.
    rechnungsapi.de

    Professionelle E-Rechnungs-APIs für KMUs. Transformieren Sie Ihr ERP-System mit ZUGFeRD-konformen Lösungen und DSGVO-konformer KI-Technologie.

    DSGVO-konform & sicher

    Produkt

    • Preise

    Lösungen

    • Steuerberater & Kanzleien
    • Unternehmen & Mittelstand
    • IT-Teams & Softwareanbieter
    • E-Invoicing-Berater & Partner
    • Startups & SaaS
    • International & Peppol

    Rechtliches

    • Über uns
    • Stefan Grimm
    • Impressum
    • AGB
    • Datenschutzerklärung
    • Nutzungsbedingungen
    • Kontakt
    • DSGVO-Konformität

    Server in Deutschland · DSGVO-konform · Auftragsverarbeiter ISO/IEC 27001-zertifiziert (Open Telekom Cloud)

    rechnungsapi.de ist ein Produkt der Finbc GmbH, Essenheim (gegründet 2018).

    © 2026 rechnungsapi.de

    support@rechnungsapi.de