PHP Service

eInvoice Service fuer XRechnung und ZUGFeRD

Der Dienst ist fuer mehrere Mandanten und Nutzer ausgelegt. API-Zugriffe erfolgen ueber eine MySQL-gestuetzte Anmeldung mit Bearer-Token, werden mandantenbezogen autorisiert und revisionsnah protokolliert.

Der aktuelle Stand ist als validated markiert: XML-Erzeugung, serverseitige PDF-Normalisierung, Hybrid-PDF-Zusammenbau, Authentifizierung, Nutzungslogging und automatische Aufraeumung laufen zusammen.

Login

{
  "tenant_key": "demo-tenant",
  "username": "api-user",
  "password": "..."
}

POST ?route=login liefert ein Bearer-Token. Dieses Token muss anschliessend im Header Authorization: Bearer ... fuer geschuetzte Routen mitgegeben werden. Als Fallback fuer Webserver, die diesen Header nicht an PHP durchreichen, wird auch X-Authorization: Bearer ... akzeptiert.

Geschuetzte Routen sind insbesondere generate, download, logout, whoami, preflight und cleanup.

Generate

{
  "format": "zugferd",
  "invoice": {
  "document": {
    "invoice_number": "RE-2026-0001",
    "invoice_date": "2026-06-11",
    "currency": "EUR",
    "type_code": "380",
    "buyer_reference": "04011000-12345-01",
    "order_reference": "PO-7781",
    "delivery_date": "2026-06-10",
    "notes": [
      {
        "subject_code": "REG",
        "content": "Danke fuer Ihren Auftrag."
      }
    ]
  },
  "seller": {
    "name": "Beispiel Lieferant GmbH",
    "endpoint_id": "seller@example.de",
    "endpoint_scheme": "EM",
    "vat_id": "DE123456789",
    "tax_number": "12/345/67890",
    "legal_registration_id": "HRB 12345",
    "postal_address": {
      "street": "Musterstrasse 1",
      "postal_code": "50667",
      "city": "Koeln",
      "country_code": "DE"
    },
    "contact": {
      "person_name": "Erika Einkauf",
      "email": "billing@example.de",
      "phone": "+49 221 1234567"
    }
  },
  "buyer": {
    "name": "Beispiel Kunde AG",
    "endpoint_id": "buyer@example.de",
    "endpoint_scheme": "EM",
    "vat_id": "DE987654321",
    "legal_registration_id": "HRB 99887",
    "postal_address": {
      "street": "Hauptweg 5",
      "postal_code": "10115",
      "city": "Berlin",
      "country_code": "DE"
    },
    "contact": {
      "person_name": "Max Muster",
      "email": "ap@example.de",
      "phone": "+49 30 9876543"
    }
  },
  "payment": {
    "means_code": "58",
    "due_date": "2026-06-25",
    "terms": "14 Tage netto",
    "iban": "DE12500105170648489890",
    "bic": "INGDDEFFXXX",
    "account_name": "Beispiel Lieferant GmbH"
  },
  "line_items": [
    {
      "position_id": "1",
      "name": "Beratungsleistung",
      "description": "Implementierung und Anpassung des Systems",
      "quantity": 8,
      "unit_code": "HUR",
      "net_unit_price": 125.00,
      "tax_rate": 19,
      "tax_category_code": "S"
    },
    {
      "position_id": "2",
      "name": "Wartungspauschale",
      "quantity": 1,
      "unit_code": "C62",
      "net_unit_price": 250.00,
      "tax_rate": 19,
      "tax_category_code": "S"
    }
  ]
}
,
  "validation": {
    "xrechnung_version": "3.0.2",
    "zugferd_version": "2.3.3",
    "zugferd_profile": "EN16931"
  }
}

POST ?route=generate akzeptiert application/json oder multipart/form-data. Die Antwort enthaelt immer den authentifizierten Mandanten- und Nutzerbezug sowie die Validator-Ergebnisse.