Individueller Shop · Entwickler
PunchOut-Integrationsspezifikation für individuelle Shops
Was Ihr individueller oder Headless-Shop implementieren muss, um mit dem PunchOut Rocket Gateway dieselben Funktionen wie unsere Plugins zu bieten: PunchOut-Sitzungen mit automatischer Anmeldung, Warenkorbrückgabe, Kategoriezuordnung sowie mit dem Premium-Tarif Bestellungen, Auftragsbestätigungen und Versandmeldungen. Das Gateway übernimmt cXML und OCI gegenüber dem Kunden.
- Dieselben Funktionen wie die Plugins
- JSON über HTTPS
- cXML und OCI übernimmt das Gateway
Was Ihr Shop implementiert
Jede Funktion ist ein kleiner JSON-Endpunkt oder ein Browserformular in Ihrem Shop. Implementieren Sie zuerst die erforderlichen Funktionen; Bestellungen und deren Aktualisierungen können folgen.
| Abschnitt | Funktion | Was Ihr Shop implementiert | Erforderlich | Tarif |
|---|---|---|---|---|
| 2–3 | PunchOut-Sitzung (create, edit, inspect) mit automatischer Anmeldung | Klon-Endpunkt und SSO-Anmeldung | Ja | Alle Lizenzen |
| 4 | Warenkorbübertragung zurück an das Einkaufssystem | Automatisch gesendetes Formular an PunchOut Rocket | Ja | Alle Lizenzen |
| 5 | Kategoriezuordnung, zum Beispiel UNSPSC | Kategorien-Endpunkt | Empfohlen | Alle Lizenzen |
| 6 | Bestellungen (cXML OrderRequest) | Endpunkt zur Auftragserstellung | Optional | Premium-Tarif |
| 7 | Auftragsbestätigungen und Versandmeldungen (cXML ConfirmationRequest, ShipNoticeRequest) | Auftragsstatus-Endpunkt | Optional, benötigt 6 | Premium-Tarif + Option OC & ASN |
| 8 | Sofortige Auftragsaktualisierungen | Benachrichtigung an PunchOut Rocket | Optional, benötigt 7 | Premium-Tarif + Option OC & ASN |
| – | Vordefinierte Warenkörbe | Nichts: PunchOut Rocket zeigt sie dem Kunden und sendet den gewählten Warenkorb selbst an das Einkaufssystem | – | Premium-Tarif |
Die kostenlose Testphase umfasst die Funktionen des Premium-Tarifs. Auftragsbestätigungen und Versandmeldungen sind eine Option des Premium-Tarifs (OC & ASN): Kontaktieren Sie uns zur Aktivierung.
1. Einrichtung in PunchOut Rocket
E-Commerce-Website
| Feld | Wert |
|---|---|
| E-commerce Platform | Custom |
| Site URL | Basis-URL Ihres Shops, zum Beispiel https://your-store.example.com. Sie kann einen Pfad enthalten (https://example.com/shop); ein abschließender / wird entfernt |
| API Key | Ein Geheimnis mit mindestens 10 Zeichen. PunchOut Rocket sendet es bei jedem Aufruf Ihres Shops: Der Shop muss denselben Wert kennen |
| Custom Clone Endpoint | Pfad des Klon-Endpunkts. Wenn leer: /api/punchout/clone |
| Custom Categories Endpoint | Pfad des Kategorien-Endpunkts. Wenn leer: /api/punchout/categories |
| Custom Create Order Endpoint | Pfad des Endpunkts zur Auftragserstellung. Wenn leer: /api/punchout/create-order |
| Custom Order Status Endpoint | Pfad des Auftragsstatus-Endpunkts. Wenn leer: /api/punchout/order-status |
| Use Reverse Proxy, Reverse Proxy URL | Standardmäßig aktiviert. Reverse Proxy URL ist schreibgeschützt und wird aus Site Name erzeugt, zum Beispiel https://your-store.punchoutrocket.com: Kunden öffnen darüber Ihren Shop, wodurch SameSite- und CORS-Probleme in Einkaufssystemen vermieden werden. Schema und Host der zurückgegebenen sso_url werden durch die dieser URL ersetzt; Pfad und Abfrage bleiben erhalten |
Endpunktpfade werden unverändert an Site URL angehängt und müssen deshalb mit / beginnen. Beispiel: Site URL https://your-store.example.com + /api/punchout/clone → https://your-store.example.com/api/punchout/clone.

Bestellungen (Abschnitt 6) und vordefinierte Warenkörbe sind im Premium-Tarif enthalten, auch während der kostenlosen Testphase: Ihr Tarif aktiviert sie für die Website, und die Endkundenseite zeigt dann die Abschnitte Orders und Predefined Carts. Auftragsbestätigungen und Versandmeldungen (Abschnitte 7–8) benötigen zusätzlich die Option OC & ASN.
Endkunde
Jedes Kundenunternehmen ist ein Endkunde Ihrer Website. Neben seinen Protokoll-Zugangsdaten (cXML-Identitäten und Shared Secret oder OCI-Benutzername und Passwort) betreffen diese Felder Ihren Shop:
| Feld | Verwendet für |
|---|---|
| E-commerce User to Clone | Benutzername (oder E-Mail-Adresse) eines Shop-Benutzers. Wird als username an den Klon-Endpunkt und als customer_email zur Auftragserstellung gesendet: Die PunchOut-Benutzer des Kunden werden daraus geklont und seine Aufträge diesem Benutzer zugeordnet. Weisen Sie ihm die für diesen Kunden vorgesehenen Preise, Rabatte und Adressen zu |
| Default UNSPSC | Kategoriecode für Produkte, deren Kategorien keinen zugeordneten Code haben (Abschnitt 5) |
| Default Lead Time | Lieferzeit in Tagen, die mit jedem OCI-Artikel gesendet wird (Standard 3) |
| EA Override, BX Override | Ersetzen die von Ihrem Shop gesendete Maßeinheit EA oder BX (Abschnitt 4) durch den vom Kunden erwarteten Code. Gilt nur, wenn Ihr Shop diesen Code sendet: Eine leere Einheit wird ohne Überschreibung zu EA |
| Category Mapping | Ihre mit „Update from e-commerce“ geladenen Kategorien, jeweils einem Code zugeordnet (Abschnitt 5) |
| Shipping Method, Payment Method | Werden zur Auftragserstellung gesendet (Abschnitt 6). Leer lassen, damit Ihr Shop seine Standardwerte verwendet |
| Send order status updates, Order status URL, Supplier shared secret | Aktivieren die Abschnitte 7–8 für diesen Kunden: URL und Geheimnis stammen aus seinem Einkaufssystem |

Die übrigen Website- und Endkundenseiten funktionieren wie bei den anderen Plattformen: siehe Dokumentation.
Allgemeine Regeln
Sie gelten für jeden Aufruf Ihrer Endpunkte durch PunchOut Rocket (Abschnitte 2, 5, 6 und 7):
- Methode und Format: immer
POSTmit JSON-Body (Content-Type: application/json). Antworten Sie mit JSON. - Authentifizierung: Der Body enthält immer
api_key. Vergleichen Sie ihn mit dem im Shop konfigurierten Schlüssel und lehnen Sie den Aufruf bei Abweichung mit HTTP 401 ab. - Nur HTTPS.
- Fehler: Antworten Sie mit einem HTTP-Status außerhalb von 2xx und
{"status": "error", "message": "<reason>"}(error_codeist optional). Formulieren Sie die Meldung eindeutig, zum BeispielProduct X-100 not found: Sie erscheint in den Protokollen und Fehler-E-Mails an den Website-Inhaber. - Zeitlimits: Aufrufe zur Auftragserstellung und zum Auftragsstatus werden nach 30 Sekunden abgebrochen. Antworten Sie schnell und erledigen Sie langsame Arbeiten danach.
2. Klon-Endpunkt
Standardpfad: /api/punchout/clone. Wird aufgerufen, wenn ein Kunde Ihren Shop aus dem Einkaufssystem öffnet. Ihr Shop erstellt einen aus username geklonten Benutzer (oder verwendet ihn erneut), bindet ihn an diese PunchOut-Sitzung und gibt eine SSO-URL zurück, die ihn anmeldet (Abschnitt 3).
Anfrage-Body
| Feld | Typ | Bedeutung |
|---|---|---|
username | string | „E-commerce User to Clone“ des Endkunden |
api_key | string | API-Schlüssel der Website |
session_token | string | PunchOut-Sitzungs-ID (cXML BuyerCookie oder UUID für OCI). Aufbewahren: Sie wird im Warenkorbformular zurückgesendet (Abschnitt 4) |
end_customer_id | integer | Endkunden-ID in PunchOut Rocket. Aufbewahren: Sie wird im Warenkorbformular zurückgesendet (Abschnitt 4) |
operation | string | create, edit oder inspect bei cXML; bei OCI immer create |
gateway_base_url | string | PunchOut Rocket Basis-URL: Das Warenkorbformular (Abschnitt 4) sendet an {gateway_base_url}/start-sso-checkout |
selected_item | object, optional | Nur cXML: das vom Kunden im Katalog des Einkaufssystems gewählte Produkt. Enthält supplier_part_id (SKU) und/oder supplier_part_auxiliary_id (Produkt-ID), nur die vom Kunden gesendeten Werte |
cart_items | array, optional | Nur cXML edit und inspect: der wiederherzustellende Warenkorb. Fehlt, wenn das Kundensystem keine Artikel gesendet hat |
| Feld | Typ | Bedeutung |
|---|---|---|
sku | string | SKU (kann leer sein) |
product_id | string | Produkt-ID in Ihrem Shop (kann leer sein) |
quantity | string | Menge, zum Beispiel "2" |
price | string | Stückpreis, Punkt als Dezimaltrennzeichen, zum Beispiel "15.95". Nur zur Information: Der Warenkorb verwendet Ihre aktuellen Preise |
description | string | Produktbeschreibung |
currency | string | ISO-4217-Code |
quantity und price sind Zeichenketten: Vor der Verwendung umwandeln.
Anfrage: create, mit gewähltem Artikel
{
"username": "buyer123",
"api_key": "site-api-key-abc",
"session_token": "sess-012345",
"operation": "create",
"end_customer_id": 2,
"gateway_base_url": "https://middleware.example.com",
"selected_item": {
"supplier_part_id": "X-100",
"supplier_part_auxiliary_id": "19853"
}
}Anfrage: edit, mit dem wiederherzustellenden Warenkorb
{
"username": "buyer123",
"api_key": "site-api-key-abc",
"session_token": "sess-67890",
"operation": "edit",
"end_customer_id": 2,
"gateway_base_url": "https://middleware.example.com",
"cart_items": [
{"sku": "ABC-001", "product_id": "19852", "quantity": "2", "price": "15.95",
"description": "Example description", "currency": "EUR"},
{"sku": "XYZ-002", "product_id": "19854", "quantity": "1", "price": "249.00",
"description": "Another example description", "currency": "EUR"}
]
}Erfolgsantwort
HTTP 2xx
HTTP 200
{
"status": "success",
"sso_url": "https://your-store.example.com/punchout/sso?token=eyJ..."
}sso_url ist das einzige gelesene Feld: Es ist erforderlich und muss eine absolute http://- oder https://-URL sein. PunchOut Rocket leitet den Browser des Kunden dorthin (bei cXML über das Einkaufssystem, bei OCI direkt).
Fehlerantworten
Jeder Status außerhalb von 2xx oder eine Antwort ohne gültige sso_url lässt den PunchOut scheitern: Der Kunde erhält einen Fehler im Einkaufssystem. Ihre Antwort (Status und Body) wird im PunchOut-Sitzungsprotokoll gespeichert; erläutern Sie deshalb den Grund in der Meldung.
| HTTP | Wann | Body |
|---|---|---|
| 400 | Fehlende oder ungültige Felder | {"status": "error", "error_code": "invalid_request", "message": "Missing field: operation"} |
| 401 | Falscher api_key | {"status": "error", "error_code": "unauthorized", "message": "Invalid api_key"} |
| 422 | SSO nicht möglich, zum Beispiel username nicht gefunden | {"status": "error", "error_code": "sso_unavailable", "message": "User buyer123 not found"} |
| 500 | Interner Fehler | {"status": "error", "error_code": "internal_error", "message": "..."} |
3. SSO-Anmeldung
Wenn der Kunde sso_url öffnet, führt Ihr Shop Folgendes aus:
- verbraucht das Token (einmalige Verwendung) und meldet den geklonten Benutzer an;
- bei
editundinspect: füllt den Warenkorb exakt mit den Produkten und Mengen auscart_itemsund zeigt ihn an (aktuelle Preise gelten); - bei
create: zeigt das Produktselected_item, falls es gesendet wurde und noch existiert, sonst die Shop-Startseite.
Geben Sie dem Token einige Minuten statt Sekunden Gültigkeit: Bei Endkunden mit vordefinierten Warenkörben sieht der Kunde zuerst deren Auswahlseite und öffnet sso_url erst, wenn er zum Shop weitergeht.
4. Warenkorbübertragung (automatisch gesendetes Formular)
Bei PunchOut-Benutzern darf die Checkout-Schaltfläche nicht Ihren Checkout starten: Sie sendet stattdessen den Warenkorb an PunchOut Rocket. Ihr Shop gibt eine HTML-Seite zurück, die ein verborgenes Formular automatisch absendet, idealerweise mit einer Ladeanzeige.
- URL:
{gateway_base_url}/start-sso-checkout(gateway_base_urlaus der Klonanfrage) - Methode:
POST,application/x-www-form-urlencoded(normales Absenden eines Browserformulars) - Kein
api_key: Die Sitzung wird durchsession_tokenundend_customer_ididentifiziert.
| Feld | Erforderlich | Bedeutung |
|---|---|---|
session_token | Ja | Aus der Klonanfrage |
end_customer_id | Ja | Aus der Klonanfrage |
products[i][sku] | Ja | SKU. Wird zur cXML SupplierPartID oder zur OCI-Lieferantenmaterialnummer |
products[i][product_id] | Ja | Produkt-ID in Ihrem Shop. Wird zur cXML SupplierPartAuxiliaryID: Der Kunde sendet sie bei edit und in Bestellungen zurück |
products[i][description] | Ja | Produktname oder -beschreibung. HTML-Tags werden entfernt |
products[i][quantity] | Ja | Menge, Punkt als Dezimaltrennzeichen |
products[i][price] | Ja | Stückpreis, Punkt als Dezimaltrennzeichen, kein Tausendertrennzeichen |
products[i][currency] | Ja | ISO-4217-Code |
products[i][unit_of_measure] | Nein | UN/CEFACT-Einheitencode. Standard EA |
products[i][manufacturer_name] | Nein | Hersteller |
products[i][category_ids] | Nein | Kommagetrennte IDs der Kategorien, denen das Produkt direkt angehört (Blätter des Baums), wie vom Kategorien-Endpunkt zurückgegeben (Abschnitt 5). Dienen zur Ermittlung des UNSPSC des Produkts |
i beginnt bei 0 und ist lückenlos: PunchOut Rocket beendet das Lesen beim ersten fehlenden Index. Denken Sie daran, die Werte für HTML zu maskieren.
Beispielseite, die beim Checkout zurückgegeben wird
<!doctype html>
<html>
<body>
<p>Sending your cart to your procurement system…</p>
<form id="punchout_repost" method="post" action="https://middleware.example.com/start-sso-checkout">
<input type="hidden" name="session_token" value="sess-012345"/>
<input type="hidden" name="end_customer_id" value="2"/>
<input type="hidden" name="products[0][sku]" value="ABC-001"/>
<input type="hidden" name="products[0][product_id]" value="19852"/>
<input type="hidden" name="products[0][description]" value="Example description"/>
<input type="hidden" name="products[0][quantity]" value="2"/>
<input type="hidden" name="products[0][price]" value="15.95"/>
<input type="hidden" name="products[0][currency]" value="EUR"/>
<input type="hidden" name="products[0][unit_of_measure]" value="EA"/>
<input type="hidden" name="products[0][manufacturer_name]" value="3M"/>
<input type="hidden" name="products[0][category_ids]" value="1145,3398"/>
<input type="hidden" name="products[1][sku]" value="XYZ-002"/>
<input type="hidden" name="products[1][product_id]" value="19854"/>
<input type="hidden" name="products[1][description]" value="Another example description"/>
<input type="hidden" name="products[1][quantity]" value="4"/>
<input type="hidden" name="products[1][price]" value="10.90"/>
<input type="hidden" name="products[1][currency]" value="EUR"/>
<input type="hidden" name="products[1][manufacturer_name]" value="DEWALT"/>
<input type="hidden" name="products[1][category_ids]" value="2146"/>
</form>
<script>document.getElementById('punchout_repost').submit();</script>
</body>
</html>PunchOut Rocket sendet den Warenkorb dann an das Einkaufssystem und beendet die Sitzung. Eine Sitzung akzeptiert nur einen Warenkorb:
| HTTP | Wann |
|---|---|
| 400 | session_token oder end_customer_id fehlt oder ist ungültig, oder keine Sitzung stimmt überein |
| 409 | Für diese Sitzung wurde bereits ein Warenkorb gesendet |
5. Kategorien-Endpunkt
Standardpfad: /api/punchout/categories. Wird aufgerufen, wenn der Website-Inhaber im Category Mapping eines Endkunden auf „Update from e-commerce“ klickt. Die Kategorien werden dann manuell den Codes des Kunden zugeordnet, zum Beispiel UNSPSC.
Anfrage
{"api_key": "site-api-key-abc"}Erfolg: HTTP 200, status success oder ok
HTTP 200
{
"status": "success",
"categories": [
{"id": 1345, "name": "Office Supplies", "parent_id": 0},
{"id": 1847, "name": "Pens", "parent_id": 1345},
{"id": 2345, "name": "Electronics", "parent_id": 0}
]
}| Feld | Bedeutung |
|---|---|
id | Kategorie-ID in Ihrem Shop, Ganzzahl ungleich 0: dieselben IDs, die Sie in category_ids senden (Abschnitt 4) |
name | Anzeigename. Kategorien ohne Namen werden übersprungen |
parent_id | ID der übergeordneten Kategorie, 0 für oberste Kategorien |
Geben Sie den gesamten Baum in einer Antwort zurück. Jede Aktualisierung gleicht die Endkundenliste an Ihre Antwort an: Nicht mehr zurückgegebene Kategorien werden samt zugeordnetem Code entfernt. Halten Sie die IDs daher stabil.

So erhält ein Warenkorbprodukt seinen Code:
- der einer seiner
category_idszugeordnete Code; - sonst der Code der nächsten übergeordneten Kategorie, die einen besitzt;
- sonst der Default UNSPSC des Endkunden.
6. Endpunkt zur Auftragserstellung
Standardpfad: /api/punchout/create-order. Wird aufgerufen, wenn das Einkaufssystem des Kunden eine Bestellung sendet (cXML OrderRequest). Ihr Shop erstellt den Auftrag und gibt dessen ID sowie die ID der für jede PO-Zeile erstellten Auftragsposition zurück. PunchOut Rocket antwortet dem Einkaufssystem mit dem Ergebnis. Erfordert das Premium-Tarif.
Der Kunde sendet Bestellungen an die „Order request URL“ im Bereich Orders des Endkunden. Dort werden auch Shipping Method, Payment Method und die Auftragsstatus-Aktualisierungen (Abschnitt 7) eingestellt:

Anfrage-Body
| Feld | Typ | Bedeutung |
|---|---|---|
api_key | string | API-Schlüssel der Website |
gateway_url | string | PunchOut Rocket Basis-URL für die Statusbenachrichtigung (Abschnitt 8) |
customer_email | string | „E-commerce User to Clone“ des Endkunden (derselbe Wert wie username in der Klonanfrage, daher nicht unbedingt eine E-Mail-Adresse): Ordnen Sie den Auftrag diesem Benutzer zu |
order_id | string | PO-Nummer des Kunden. Im Auftrag speichern: Das ist die dem Kunden bekannte Referenz |
order_date | string | PO-Datum, wie vom Kunden gesendet (ISO 8601) |
currency | string | ISO 4217 |
total | string | PO-Gesamtbetrag, Punkt als Dezimaltrennzeichen |
shipping_method | string | Shipping Method des Endkunden. Kann leer sein: Verwenden Sie Ihren Standardwert |
payment_method | string | Payment Method des Endkunden, zum Beispiel Überweisung. Kann leer sein: Verwenden Sie Ihren Standardwert |
billing_address, shipping_address | object | name, street (mehrere durch \n getrennte Zeilen, zum Beispiel eine „Attn:“-Zeile vor der Straße), city, state, postal_code, country_code (ISO 3166-1 alpha-2), email. In der PO fehlende Felder sind leere Zeichenketten |
items | array | PO-Zeilen, siehe unten |
| Feld | Typ | Bedeutung |
|---|---|---|
line_number | string | PO-Zeilennummer: In der Antwort zurückgeben |
sku | string | SKU (cXML SupplierPartID) |
product_id | string | Produkt-ID (cXML SupplierPartAuxiliaryID). Kann leer sein: Dann das Produkt anhand von sku suchen |
quantity | integer | Bestellte Menge |
unit_price | string | Stückpreis in der PO (vom Kunden freigegebener Preis), Punkt als Dezimaltrennzeichen |
currency | string | ISO 4217 |
description | string | Zeilenbeschreibung |
Anfrage
{
"api_key": "site-api-key-abc",
"gateway_url": "https://middleware.example.com",
"customer_email": "buyer123",
"order_id": "PO-4500123",
"order_date": "2026-11-10T10:00:00+01:00",
"currency": "EUR",
"total": "280.90",
"shipping_method": "Standard",
"payment_method": "Bank transfer",
"billing_address": {"name": "ACME Spa", "street": "Via Roma 1", "city": "Milano",
"state": "MI", "postal_code": "20100", "country_code": "IT", "email": "ap@acme.example"},
"shipping_address": {"name": "ACME Spa - Warehouse", "street": "Attn: Mario Rossi\nVia Milano 5",
"city": "Torino", "state": "TO", "postal_code": "10100", "country_code": "IT", "email": ""},
"items": [
{"line_number": "1", "sku": "ABC-001", "product_id": "19852", "quantity": 2,
"unit_price": "15.95", "currency": "EUR", "description": "Example description"},
{"line_number": "2", "sku": "XYZ-002", "product_id": "19854", "quantity": 1,
"unit_price": "249.00", "currency": "EUR", "description": "Another example description"}
]
}Erfolgsantwort
HTTP 2xx
HTTP 200
{
"status": "success",
"order_id": "100045",
"items": [
{"line_number": "1", "order_item_id": "5501"},
{"line_number": "2", "order_item_id": "5502"}
]
}| Feld | Erforderlich | Bedeutung |
|---|---|---|
status | Ja | Exakt success |
order_id | Ja | Auftrags-ID in Ihrem Shop: PunchOut Rocket übergibt sie an den Auftragsstatus-Endpunkt (Abschnitt 7). Sie darf sich während der Lebensdauer des Auftrags nicht ändern |
items | Empfohlen | Für jede erstellte PO-Zeile die ID ihrer Auftragsposition (dieselben IDs wie in der Antwort des Status-Endpunkts). Werden zwei Zeilen zu derselben Auftragsposition (gleiches Produkt), führen Sie beide line_number-Werte mit dieser order_item_id auf |
items ermöglicht PunchOut Rocket, die PO zeilenweise zu bestätigen und Versandmeldungen zu senden. Ohne dieses Feld können Teilbestätigungen und Teilsendungen nicht gemeldet werden: Der Auftrag wird vollständig bestätigt und nur die erste Sendung als vollständige Lieferung gemeldet.
Fehler
Jeder Status außerhalb von 2xx oder ein status ungleich success bedeutet, dass der Auftrag nicht erstellt wurde: Das Einkaufssystem erhält einen Fehler und der Website-Inhaber eine E-Mail mit Ihrer Meldung. Typische Fälle: customer_email nicht gefunden, Produkt nicht gefunden, Auftrag kann nicht erstellt werden.
Wird ein Produkt nicht gefunden, können Sie den Auftrag ohne dieses Produkt erstellen und dessen line_number in items weglassen: Diese Zeile wird dann in der Auftragsbestätigung abgelehnt.
PunchOut Rocket erkennt keine doppelt gesendete PO: Wenn Ihr Shop bereits einen Auftrag für diese order_id und diesen Benutzer hat, geben Sie ihn zurück, statt einen zweiten zu erstellen.
7. Auftragsstatus-Endpunkt
Standardpfad: /api/punchout/order-status. Wird nur für Endkunden mit aktiviertem „Send order status updates“ und für Aufträge aus Abschnitt 6 aufgerufen: stündlich für 60 Tage ab Auftrag und sofort nach einer Benachrichtigung (Abschnitt 8). Erfordert die Option OC & ASN. Aus der Antwort sendet PunchOut Rocket an das Einkaufssystem des Kunden:
- eine Auftragsbestätigung (cXML ConfirmationRequest), einmalig, wenn der Auftrag angenommen oder storniert wird;
- eine Versandmeldung (cXML ShipNoticeRequest) für jede neue Sendung eines bestätigten Auftrags.
PunchOut Rocket merkt sich seine Sendungen: Antworten Sie immer mit dem aktuellen Auftragszustand, und PunchOut Rocket ermittelt die Änderungen.
Anfrage: order_id ist die von Ihrem Endpunkt zur Auftragserstellung zurückgegebene ID
{"api_key": "site-api-key-abc", "order_id": "100045"}Erfolgsantwort
HTTP 200
HTTP 200
{
"status": "success",
"order_status": "shipped",
"items": ["5501", "5502"],
"quantities": [
{"order_item_id": "5501", "quantity": 2},
{"order_item_id": "5502", "quantity": 1}
],
"shipments": [
{
"id": "SH-1",
"shipped_at": "2026-11-12T09:30:00+01:00",
"carrier": "UPS",
"tracking": "1Z999AA10123456784",
"items": [{"order_item_id": "5501", "quantity": 2}]
}
]
}| Feld | Erforderlich | Bedeutung |
|---|---|---|
status | Ja | Exakt success |
order_status | Ja | Ihr Auftragszustand, einem der folgenden Werte zugeordnet |
items | Ja | IDs der noch im Auftrag enthaltenen Positionen. Eine entfernte Position fehlt hier |
quantities | Empfohlen | Aktuelle Menge jeder Auftragsposition. Ohne dieses Feld gilt eine noch vorhandene Position als vollständig mit ihren PO-Zeilen enthalten: Eine reduzierte Menge kann nicht gemeldet werden |
shipments | Empfohlen | Ein Eintrag je versendeter Sendung. Leer ([]), wenn Ihr Shop Sendungen nicht erfasst: Dann werden nur Bestätigungen und keine Versandmeldungen gesendet |
| Wert | Bedeutung | An den Kunden gesendet |
|---|---|---|
pending | Eingegangen, noch nicht angenommen | Nichts |
processing | Angenommen | Bestätigung |
shipped | Teilweise oder vollständig versendet | Bestätigung, falls noch nicht gesendet, danach Versandmeldungen |
delivered | Zugestellt | Wie shipped |
cancelled | Storniert | Ablehnung des gesamten Auftrags, auch nach einer Bestätigung. Endgültig: Der Auftrag wird nicht mehr geprüft |
Die Bestätigung wird einmalig gesendet, wenn der Auftrag erstmals processing, shipped oder delivered ist:
- Sie akzeptiert den gesamten Auftrag, wenn jede PO-Zeile vollständig enthalten ist;
- sonst akzeptiert sie jede Zeile mit der im Auftrag enthaltenen Menge und lehnt den Rest ab (entfernte Artikel, reduzierte Mengen). Eine über die PO hinaus erhöhte Menge wird mit der PO-Menge bestätigt;
- wenn keine Zeile mehr vorhanden ist, wird nichts gesendet: Verwenden Sie
cancelled, um den Auftrag abzulehnen.
Spätere Artikeländerungen werden nicht erneut bestätigt: Bearbeiten Sie den Auftrag vor der Annahme.
| Feld | Erforderlich | Bedeutung |
|---|---|---|
id | Ja | Sendungs-ID, innerhalb des Auftrags eindeutig und nie wiederverwendet: Jede ID wird einmal gemeldet |
shipped_at | Empfohlen | Versanddatum, ISO 8601 mit Zeitzonenversatz |
carrier | Nein | Name des Frachtführers |
tracking | Nein | Sendungsverfolgungsnummer. Der Frachtführer wird nur zusammen mit ihr gemeldet |
items | Ja | Auftragspositionen dieser Sendung und versendete Menge (order_item_id aus der Auftragserstellung). Eine Sendung ohne Artikel der PO wird nicht gemeldet |
Melden Sie eine Sendung erst nach dem Versand. Änderungen nach ihrer Meldung werden nicht erneut gesendet. Lehnt das Einkaufssystem eine Bestätigung oder Versandmeldung ab, sendet PunchOut Rocket sie bei der nächsten Prüfung erneut; bis zur Annahme werden keine nachfolgenden Meldungen gesendet.
| HTTP | Wann | Auswirkung |
|---|---|---|
404 mit {"status": "error", ...} | Der Auftrag existiert nicht, zum Beispiel wurde er gelöscht | Protokolliert, bei der nächsten Runde erneut geprüft |
| Andere Status außerhalb von 2xx | Jeder andere Fehler | Protokolliert, bei der nächsten Runde erneut geprüft |
8. Auftragsstatus-Benachrichtigung (optional)
Ohne sie liest PunchOut Rocket den Auftragsstatus stündlich. Damit Bestätigungen und Versandmeldungen innerhalb von Sekunden gesendet werden, benachrichtigen Sie PunchOut Rocket bei jeder Änderung eines Auftrags aus Abschnitt 6 (Zustand, Artikel, neue Sendung):
- URL:
{gateway_url}/order-status-changed(gateway_urlaus der Anfrage zur Auftragserstellung) - Methode:
POST,Content-Type: application/json - Keine Authentifizierung: Die Benachrichtigung enthält keine Daten und veranlasst PunchOut Rocket lediglich, Ihren Auftragsstatus-Endpunkt (Abschnitt 7) für diesen Auftrag aufzurufen.
Benachrichtigung und Antwort
POST {gateway_url}/order-status-changed
Content-Type: application/json
{"order_id": "100045"}
HTTP 202
{"status": "queued"}Nach dem Speichern der Änderung senden, ohne den Benutzer warten zu lassen (Fire-and-forget, kurzes Zeitlimit). Fehler können ignoriert werden: Die stündliche Prüfung holt Änderungen nach.
9. Checkliste für den Produktivstart
- Konfigurieren Sie die Website (Abschnitt 1) und tragen Sie denselben API-Schlüssel in Ihrem Shop ein.
- Erstellen Sie einen Endkunden und setzen Sie dessen „E-commerce User to Clone“.
- Klicken Sie in seinem Category Mapping auf „Update from e-commerce“ und ordnen Sie die Kategorien zu; setzen Sie einen Default UNSPSC.
- Testen Sie einen PunchOut mit dem cXML-Testformular im Adminbereich: create, dann edit mit einem Warenkorb und anschließend den Warenkorb zurücksenden.
- Für Bestellungen (Premium-Tarif): Senden Sie einen Test-OrderRequest und prüfen Sie den Auftrag in Ihrem Shop.
- Für Statusaktualisierungen (Option OC & ASN): Aktivieren Sie „Send order status updates“ beim Endkunden, lassen Sie den Testauftrag Ihre Zustände durchlaufen und prüfen Sie, ob das Kundensystem Bestätigung und Versandmeldungen erhält.
Beachten Sie:
- PunchOut-Benutzer dürfen keinen Checkout in Ihrem Shop abschließen: Ihr Warenkorb geht zurück an das Einkaufssystem (Abschnitt 4), und der Auftrag kommt später über Abschnitt 6.
- Über Abschnitt 6 empfangene Aufträge sind bereits vom Einkaufssystem des Kunden freigegeben: Sie benötigen keine Onlinezahlung.
Sie brauchen einen Testkunden oder eine Prüfung Ihrer Implementierung? Sprechen Sie mit unseren Entwicklern, oder lassen Sie uns die Integration mit Go-Live Assist umsetzen.
FAQ
Fragen zur Integration
Welche Felder trage ich in PunchOut Rocket ein?
Mit E-commerce Platform auf Custom: Site URL und API Key. Die vier Endpunktpfade (Klonen, Kategorien, Auftragserstellung, Auftragsstatus) werden nur benötigt, wenn Sie nicht die Standardpfade verwenden.
Brauche ich den Kategorien-Endpunkt?
Er wird empfohlen. Damit ordnen Sie Ihre Kategorien den vom Kunden verlangten Codes wie UNSPSC zu; ohne ihn erhält jedes Produkt den Default UNSPSC des Endkunden.
Kann der SSO-Link wiederverwendet werden?
Nein. Das Token darf nur einmal über HTTPS funktionieren. Geben Sie ihm einige Minuten statt Sekunden Gültigkeit: Bei vordefinierten Warenkörben öffnet der Kunde den Link erst, nachdem er zum Shop weitergehen möchte.
Wie erreichen Bestellungen einen individuellen Shop?
Über Ihren Endpunkt zur Auftragserstellung: Das Gateway empfängt den cXML OrderRequest des Kunden und sendet ihn als JSON an Ihren Shop. Dies ist im Premium-Tarif enthalten, auch während der kostenlosen Testphase.
Kann mein Shop Auftragsbestätigungen und Versandmeldungen senden?
Ja, mit der Option OC & ASN des Premium-Tarifs (zur Aktivierung kontaktieren Sie uns). Implementieren Sie den Auftragsstatus-Endpunkt: Das Gateway liest den Zustand jedes Auftrags und sendet cXML ConfirmationRequest und ShipNoticeRequest an das Kundensystem.
30 Tage kostenlos testen · keine Kreditkarte
Ihr Kunde wartet. Legen wir los.
Installieren Sie das Plugin noch heute und führen Sie am Nachmittag Ihre erste Test-Session durch. Wenn Ihre Frist knapp ist, sagen Sie es uns: Wir bearbeiten Ihre Anfrage mit Priorität.