Generisches JSON#
Generisches JSON – Eingang für beliebige JSON-Payloads mit einem reichen Schema für deutsche B2B-Bestellungen. Kein Zusatz-Addon erforderlich.
Überblick#
Nicht jedes System passt in eine der dedizierten Integrationen. Für individuelle Shop-Systeme, ERP-Exports, EDI-Konverter oder selbst entwickelte Webhooks bietet Orderport einen offenen JSON-Eingang. Orderport flacht die eingehende JSON-Struktur ab und stellt jedes Feld im Mapping-Editor zur Verfügung.
Das vordefinierte Schema ist speziell auf deutsche/DACH-B2B-Bestellungen ausgelegt: USt-ID, GLN, getrennte Liefer- und Rechnungsadressen, EANCOM-Mengeneinheiten, Steuersätze pro Position, Zahlungsbedingungen und Incoterms. Auto-Mapping für openTrans, JSON und JTL-Wawi ist vorhanden.
Die Integration unterstützt nur den Eingang.
Kompatibilität#
Unterstützte Versionen#
| Bereich |
Version |
| Content-Type |
application/json |
| JSON-Tiefe |
unbegrenzt (praktisch: ≤ 10 Ebenen getestet) |
| Zeichenkodierung |
UTF-8 |
| Zielformate mit Auto-Mapping |
openTrans, JSON, JTL-Wawi |
Bekannte Einschränkungen#
- Festes Beispiel-Dokument. Der Mapping-Editor zeigt ein vordefiniertes DACH-B2B-Beispiel – Sie können kein eigenes Payload hochladen. Liefert Ihre Quelle Felder außerhalb des Schemas, tragen Sie diese Pfade im Editor manuell ein. Der Normalizer flacht trotzdem alles ab.
- Kein Schema-Validator. Orderport prüft nicht auf Pflichtfelder – stimmt ein Feld nicht mit der Erwartung, erkennt man das erst am Ergebnis.
- Array-Handling funktioniert via
[]-Notation (items[].sku). Geschachtelte Arrays in Arrays werden unterstützt, können aber unübersichtlich werden.
- Binäre oder base64-codierte Inhalte innerhalb von Feldern werden unverändert durchgereicht – keine Dekodierung.
Authentifizierung#
Frei wählbar:
- Bearer Token – einfach, empfohlen für viele Partner
- HMAC-SHA256 – wenn der Absender die Payload signieren soll
- Shared-Secret-Header – wenn ein individueller Custom-Header gebraucht wird
Einrichten in Orderport#
Pipeline anlegen#
- Pipelines → Neue Pipeline
- Eingabeformat: Generisches JSON, Ausgabeformat: openTrans, JSON oder JTL-Wawi
- Auto-Mapping wird ausgeführt – ~22 Regeln werden vorgeschlagen (bei openTrans) bzw. ~20 (bei JSON)
- Mapping bei Bedarf manuell anpassen
- Für Felder, die Ihre Quelle liefert, aber nicht im vordefinierten Schema vorkommen: Zielfeld anklicken und den Quell-Pfad als Freitext eingeben (z. B.
metadata.partner_reference)
Credential#
Credentials → Hinzufügen. Typ nach Anforderung des Absenders.
Einrichten im Quellsystem#
Sie senden die JSON-Payload per HTTP POST an die Webhook-URL. Das konkrete Setup hängt von Ihrem System ab:
- WordPress Plugin: cURL mit vorbereitetem Secret-Header
- Custom ERP-Export: Cron-Job, der nach jeder Bestellung einen POST absetzt
- Zapier/Make/n8n: HTTP-Action mit Auth-Header
Auto-Mapping#
Für drei Zielformate generiert Orderport Standard-Mappings, wenn Sie keine eigenen Regeln hinterlegen. Damit können Sie mit einer neuen Pipeline sofort loslegen.
| Ziel |
Anzahl Standard-Regeln |
Beispiele |
| openTrans (XML) |
~22 |
order.id → ORDER_INFO.ORDER_ID, buyer.company → PARTIES.BUYER.NAME, items[].sku → ORDER_ITEM.PRODUCT_ID |
| JSON |
~20 |
order.id → order.id, buyer.company → customer.company, items[].unit_price_net → items[].price |
| JTL-Wawi (XML) |
~30 |
order.id → order.cBestellNr, buyer.vat_id → customer.cUSTID, items[].ean → items[].cBarcode |
Technische Details#
Quellschema#
Das Schema ist in acht Gruppen organisiert. Alle Pfade nutzen Punkt-Notation; Arrays werden mit [] gekennzeichnet.
Bestellkopf#
| Pfad |
Bedeutung |
order.id |
Bestellnummer |
order.number |
Bestellnummer (alternativ, z. B. bei SAP-Exporten) |
order.date |
Bestelldatum (ISO 8601) |
order.delivery_date |
Wunsch-Lieferdatum |
order.reference |
Käufer-Referenz / Projekt / Kostenstelle |
order.type |
new, update, cancel |
order.language |
de, en, fr |
order.comment |
Freitext-Notiz vom Käufer |
Beträge & Steuern#
| Pfad |
Bedeutung |
totals.currency |
ISO 4217 (EUR, USD, CHF) |
totals.net_amount |
Netto-Gesamtbetrag |
totals.gross_amount |
Brutto-Gesamtbetrag |
totals.tax_amount |
Steuer gesamt |
totals.shipping_amount |
Versandkosten |
totals.discount_amount |
Rabatt gesamt |
Käufer#
| Pfad |
Bedeutung |
buyer.gln |
GS1 GLN (13-stellig) |
buyer.company |
Firmenname |
buyer.contact_name |
Ansprechpartner |
buyer.email |
E-Mail |
buyer.phone |
Telefon |
buyer.vat_id |
USt-ID (DE123456789) |
buyer.street |
Straße + Hausnummer |
buyer.zip / buyer.city / buyer.country |
Anschrift |
Lieferadresse#
| Pfad |
Bedeutung |
delivery.gln |
GLN der Lieferstelle |
delivery.company / delivery.contact_name |
Empfänger |
delivery.street / delivery.additional |
Straße + Adresszusatz (z. B. „Tor 4") |
delivery.zip / delivery.city / delivery.state / delivery.country |
Anschrift |
Rechnungsadresse#
| Pfad |
Bedeutung |
invoice.company |
Firma |
invoice.street / invoice.zip / invoice.city / invoice.country |
Anschrift |
invoice.vat_id |
USt-ID (falls abweichend von buyer.vat_id) |
Positionen#
| Pfad |
Bedeutung |
items[].line_number |
Positionsnummer (1-basiert) |
items[].sku / items[].buyer_sku |
Artikelnummer (Lieferant + Käufer) |
items[].ean |
EAN / GTIN (13-stellig) |
items[].name / items[].description |
Kurzbezeichnung + ausführliche Beschreibung |
items[].quantity / items[].unit |
Menge + Mengeneinheit (PCE, KGM, LTR, MTR, TNE nach EANCOM) |
items[].unit_price_net / items[].unit_price_gross |
Einzelpreise |
items[].line_total_net / items[].line_total_gross |
Positions-Gesamtpreise |
items[].tax_rate |
Steuersatz (%) – z. B. 19 oder 7 |
items[].discount_percent / items[].discount_amount |
Positions-Rabatt |
items[].delivery_date |
Positions-spezifisches Lieferdatum |
Zahlung & Versand#
| Pfad |
Bedeutung |
payment.method |
invoice, direct_debit, credit_card, advance |
payment.terms |
z. B. „14 Tage netto, 2% Skonto bei 7 Tagen" |
payment.iban / payment.bic |
Bankdaten (optional) |
shipping.method |
DHL, DPD, UPS, Spedition |
shipping.incoterms |
EXW, FOB, CIF, DAP, DDP |
Metafelder (automatisch berechnet)#
| Pfad |
Bedeutung |
meta.item_count |
Anzahl Positionen (aus items[] abgeleitet) |
meta.total_line_amount |
Σ (Menge × Einzelpreis netto) |
meta.received_at |
Empfangs-Zeitstempel (ISO 8601) |
meta.received_date / meta.received_time |
Empfang als Datum und Uhrzeit |
meta.pipeline_name |
Name der empfangenden Pipeline |
Beispiel-Payload#
{
"order": {
"id": "PO-2026-04-00123",
"date": "2026-04-19T09:15:00+02:00",
"delivery_date": "2026-04-26",
"reference": "Projekt Alpha / Kostenstelle 4200",
"type": "new",
"language": "de",
"comment": "Bitte Lieferung vor 12:00 Uhr an Tor 4."
},
"totals": {
"currency": "EUR",
"net_amount": 1500.00,
"gross_amount": 1785.00,
"tax_amount": 285.00
},
"buyer": {
"gln": "4012345000009",
"company": "Muster GmbH",
"contact_name": "Max Mustermann",
"email": "einkauf@muster.de",
"vat_id": "DE123456789",
"street": "Hauptstr. 1",
"zip": "80331",
"city": "München",
"country": "DE"
},
"delivery": {
"gln": "4012345000016",
"company": "Muster GmbH – Zentrallager",
"street": "Industriestr. 42",
"additional": "Tor 4",
"zip": "80331",
"city": "München",
"country": "DE"
},
"invoice": {
"company": "Muster GmbH",
"street": "Hauptstr. 1",
"zip": "80331",
"city": "München",
"country": "DE",
"vat_id": "DE123456789"
},
"items": [
{
"line_number": 1,
"sku": "WIDGET-001",
"ean": "4003969945418",
"name": "Premium Widget Blau",
"quantity": 10,
"unit": "PCE",
"unit_price_net": 150.00,
"tax_rate": 19
},
{
"line_number": 2,
"sku": "KABEL-025",
"name": "Anschlusskabel 2,5 m",
"quantity": 5,
"unit": "MTR",
"unit_price_net": 12.80,
"tax_rate": 19
}
],
"payment": {
"method": "invoice",
"terms": "14 Tage netto, 2% Skonto bei 7 Tagen"
},
"shipping": {
"method": "DHL",
"incoterms": "DAP"
}
}
Endpoint#
Webhook-URL je Pipeline: https://orderport.app/api/v1/webhook/{token}.
Fehlerbehebung#
| Symptom |
Ursache |
Lösung |
| Ihr reales Feld fehlt in der linken Spalte |
Die Quelle liefert ein Feld außerhalb des vordefinierten Schemas |
Zielfeld anklicken, Quell-Pfad als Freitext eingeben – der Normalizer akzeptiert jeden Pfad |
| Zielfelder bleiben leer |
Quellpfad tippfehlerhaft oder Feldname groß-/kleinschreibungs-sensitiv |
Pfad exakt so schreiben wie im Payload, inklusive Punkt-Notation |
| Array-Felder werden nicht expandiert |
[]-Notation fehlt |
items[].sku statt items.sku nutzen |
| Bestellnummer wird nicht erkannt (Duplikats-Check greift nicht) |
Weder order.id noch order.number im Payload vorhanden |
Bestellnummer unter einem der beiden Pfade liefern, oder per Transform-Mapping aus einem anderen Feld ableiten |
Nächste Schritte#