Darstellung
Versand / Pick & Pack – Vollständige API-Referenz
Fach-API für den Packtisch, Versandstücke, Carrier, Picklisten und Fulfillment. Basis ist https://core-backend.reybex.com/api (Staging: https://io-staging-partner.reybex.com/api). Authentifizierung wie im API: --header "authorization: Basic $TOKEN".
Der Auftrag steht unter Auftragsverwaltung. Artikel unter Artikelstamm-Verwaltung. Die Rückmeldung an den Kanal unter Online Marktplätze. EDI-Versand unter EDI.
Der schreibende Weg eines Versandstücks ist POST /api/sendPacks/. Scannen und Versenden laufen über POST /api/shippment/scan und POST /api/shippment/ship.
1. Grundlagen
| Objekt | Rolle |
|---|---|
SendPacks | Versandstück mit Gewicht, Maßen und Tracking |
Shippment | Packtisch: Scan, Label, Versand |
Carrier | Transportdienst |
PickListHead | Pickliste |
Fulfillment | Externes Lager |
Die Zahlen in den Beispielen sind Beispiel-Ids eines Mandanten. 510100 ist der Auftrag. 61010 ist eine Auftragsposition. 9901 ist das Versandstück.
1.1 Suchschlüssel
| Ziel | Suchschlüssel |
|---|---|
| Auftrag am Versandstück | id des Belegs |
| Artikel | matCode, sonst sku |
| Verpackung, Carrier | code, sonst name |
salesItems am Versandstück lösen keine bestehende Position über einen Suchschlüssel auf. Dort steht id.
1.2 Antwort- und Fehlerformat
Ein Versand mit Fehler antwortet HTTP 500 und { "data": { "error": "…" } }. Ein erfolgreicher Versand liefert die Antwort des Packtisches.
| Situation | Körper |
|---|---|
| Auftrag zum Import nicht gefunden | salesHead.not.found |
| Carrier unbekannt | message.carrier.not.found.by.id.error |
| Menge am Versandstück passt nicht | shippmentItem.quantity.error |
| CSV-Trennzeichen | import.check.your.delimiter |
| Datei fehlt | file.not.found |
| Importmodus passt nicht zur Kopfzeile | sendPack.import.mode.not.match.with.header |
| Versandstück nicht gefunden | sendPacks not found |
| Fehlende Anmeldung | HTTP 401 |
2. Packtisch
Offene Positionen: GET /api/shippment/orders.
Scannen: POST /api/shippment/scan
json
{
"salesHeadId": 510100,
"scanCode": "ART-1000",
"isShippment": true
}scanCode ist Artikelnummer, GTIN oder Picknummer. Ein Pipe-Zeichen wird vor dem ersten | abgeschnitten. shippingConfigId wählt die Versandkonfiguration. Sonst gilt die des Auftrags, dann die des Benutzers.
Label scannen: POST /api/shippment/labelScan. Drucken: POST /api/shippment/print mit der id des Stücks.
Versenden: POST /api/shippment/ship
json
{
"salesHeadId": 510100,
"id": 9901
}Konfiguration des Tisches: GET /api/shippment/config. Belegdrucke: GET /api/shippment/getOrderPrints.
3. Versandstück
POST /api/sendPacks/ legt das Stück an. Mit salesItems entsteht je Position ein Stück. salesItem.id ist die Auftragsposition, quantity die Menge im Stück.
3.1 Felder
| Feld | Bedeutung |
|---|---|
salesHead | Auftrag, per id |
trackingCode | Sendungsnummer |
carrierName, productName | Dienst und Produkt |
weightGross, weightNett | Brutto und Netto |
dimLength, dimWidth, dimHeight | Maße |
quantity | Stückzahl |
packaging | Verpackung |
licenseplate | NVE |
externalNumber | Nummer des Partners |
isDelete | Logisch gelöscht |
3.2 Pflichtfelder
Auflösung, wenn ein Pflichtfeld fehlt
Die API setzt Pflicht-Referenzen nicht von selbst. Fehlt ein Feld, in dieser Reihenfolge füllen. Der erste Treffer gilt.
- Angabe – Wert aus dem Auftrag für dieses Feld.
- Vorlage – dasselbe Feld aus
GET /api/sendPacks/{id}.idundtrackingCodenicht übernehmen. Ist eine Vorlage genannt, diese lesen. Ist keine genannt, keine raten, mit Schritt 3 weiter. - Standard – Wert aus der Tabelle.
- Domäne – Auftrag über die Auftragsverwaltung lesen. Die Id setzen.
- Stopp – kein Auftrag. Stück nicht anlegen.
| Feld | Pflicht | Vorlage | Standard | Domäne |
|---|---|---|---|---|
salesHead | ja | salesHead | — | Auftrag |
salesItems | nein | — | eine Position mit id und quantity | — |
weightGross | nein | weightGross | — | — |
3.3 Stück zur Position
510100 ist der Auftrag, 61010 die Position.
json
{
"salesHead": { "id": 510100 },
"carrierName": "DHL",
"weightGross": 1.25,
"salesItems": [
{ "id": 61010, "quantity": 1 }
]
}Response mit salesItems: { "data": [ … ], "total": 1 }. Ohne salesItems die Antwort von saveCustomPack.
Lesen: GET /api/sendPacks/9901. Löschen: DELETE /api/sendPacks/9901. Unbekannt: sendPacks not found.
CSV: POST /api/sendPackImport/importSendPacksWithCsvFile. FTP prüfen: POST /api/sendPackImport/testConnection. Protokoll: GET /api/sendPackImport/importLog.
4. Carrier, Pick, Abschluss
Carrier: GET /api/carrier/{id}. Produkte: GET /api/carrier/products. Unterstützte Dienste: GET /api/carrier/supportedShippingCarriers. Verbindung speichern: POST /api/carrier/saveConnection.
Versandprodukt ändern: POST /api/shipping/product. EDI an den Dienst: POST /api/shipping/sendEdi.
Pickliste: POST /api/pickListHead/. Label: POST /api/pickListHead/newLabel. Reservieren: POST /api/pickingItemReservation/reserveOrders. Status: GET /api/pickingItemReservation/{picklistNumber}/status.
Behälter: POST /api/pickBox/. Nummer ändern: POST /api/pickBox/updateContainerNumber. Behälter des Benutzers: GET /api/pickBox/userContainer. Leeren: GET /api/pickBox/clean.
Barcode-Vorlage: POST /api/barcodeConfiguration/.
Tagesabschluss: POST /api/delivery/ schließt ab. Zurück: DELETE /api/delivery/{id}. Bericht: GET /api/delivery/report/{id}.
Gewicht prüfen: POST /api/weightCheck/preview, bestätigen POST /api/weightCheck/confirm.
Packliste: POST /api/packlist/. Zurücknehmen: POST /api/packlist/revert.
5. Fulfillment
POST /api/fulfillment/ speichert den Anschluss. Verbindung: GET /api/fulfillment/checkConnection/{id}.
Aufträge: GET /api/fulfillment/listOrders und POST /api/fulfillment/updateOrders. Bestand: GET /api/fulfillment/listStocks. Bestandsbuchung: POST /api/fulfillment/stockMovement. Wareneingang: GET /api/fulfillment/listIncomingGoods und POST /api/fulfillment/setIncomingGoods.
Lager des Fulfillment: GET /api/fulfillment/getFulfillmentWarehouses/{fulfillmentId} und POST /api/fulfillment/saveFulfillmentWarehouse.
Auftrag stornieren: POST /api/fulfillment/cancelSalesOrder.
Rückmeldung des Dienstes: POST /api/fulfillment/shipmentUpdate/{provider} und POST /api/fulfillment/returnUpdate/{provider}. Der Körper ist die Meldung des Dienstes. Für FOLIFE liegen Versand, Wareneingang und Bestand unter POST /api/fulfillment/FOLIFE/shipmentresponse, POST /api/fulfillment/FOLIFE/receiptresponse und POST /api/fulfillment/FOLIFE/inventory/sync. Retoure anlegen: POST /api/fulfillment/saveReturn.
6. Weitere Beispiele
6.1 Auftrag packen und versenden
- Positionen mit
GET /api/shippment/orderslesen. - Artikel scannen, Abschnitt Packtisch.
- Versandstück mit Tracking anlegen, Abschnitt Stück.
POST /api/shippment/ship.- Status an den Marktplatz melden, wenn der Auftrag von dort kommt.
7. Konfiguration und Versandclient
POST /api/shippingConfig/{id} speichert die Versandkonfiguration. Die Id steht im Pfad. Löschen: DELETE /api/shippingConfig/. Pickprofil: POST /api/pickingProfile/. Pickplatz: POST /api/pickLocation/. Verpackung und Gefahrgut werden nur gelesen: GET /api/packaging/{id}, GET /api/danger/{id}.
Versenden über den Carrier-Client: POST /api/shippingClient/ mit salesHeadIds. Optional userId und isSmartpack. Leere Liste: message.salesHeadIds.empty.error.
json
{ "salesHeadIds": [510100] }Retoure: POST /api/shippingClient/returnDelivery mit salesHeadId oder salesHeadIds, optional carrierId, shipping, shippingProductId und returnHeadId. Verbindung prüfen: GET /api/shippingClient/connection verlangt carrierId. Ohne Carrier: message.carrier.not.found.by.id.error. Aras-Auftrag und Barcode: POST /api/shippingClient/setOrder und POST /api/shippingClient/checkBarcode, jeweils mit salesHeadIds. checkBarcode liest zusätzlich carrierId.
8. Endpoint-Katalog
| Methode | Pfad | Bedeutung |
|---|---|---|
GET | /api/shippment/orders | Offene Positionen |
POST | /api/shippment/scan | Scannen |
POST | /api/shippment/ship | Versenden |
POST | /api/shippment/print | Label drucken |
GET | /api/sendPacks/{id} | Ein Versandstück |
POST | /api/sendPacks/ | Stück speichern |
DELETE | /api/sendPacks/{id} | Stück löschen |
POST | /api/sendPackImport/importSendPacksWithCsvFile | CSV-Import |
GET | /api/carrier/{id} | Carrier |
POST | /api/carrier/saveConnection | Verbindung |
POST | /api/pickListHead/ | Pickliste |
POST | /api/pickingItemReservation/reserveOrders | Reservieren |
POST | /api/delivery/ | Tagesabschluss |
POST | /api/fulfillment/ | Fulfillment speichern |
GET | /api/fulfillment/listOrders | Aufträge des Lagers |
GET | /api/fulfillment/listMaterials | Materialliste des Fulfillment-Lagers |
POST | /api/fulfillment/stockMovement | Bestandsbuchung |
POST | /api/fulfillment/invCorrection | Inventurkorrektur aus dem Fulfillment |
POST | /api/pickBox/ | Behälter |
POST | /api/barcodeConfiguration/ | Barcode-Vorlage |
POST | /api/weightCheck/preview | Gewicht prüfen |
POST | /api/weightCheck/confirm | Gewicht bestätigen |
POST | /api/packlist/ | Packliste |
POST | /api/fulfillment/shipmentUpdate/{provider} | Versandrückmeldung |
POST | /api/fulfillment/FOLIFE/shipmentresponse | FOLIFE-Versand |
POST | /api/fulfillment/saveReturn | Retoure |
GET | /api/shippingConfig/{id} | Eine Versandkonfiguration |
POST | /api/shippingConfig/{id} | Konfiguration speichern, Id im Pfad |
DELETE | /api/shippingConfig/ | Konfiguration löschen |
GET | /api/pickingProfile/{id} | Ein Pickprofil |
POST | /api/pickingProfile/ | Profil speichern |
DELETE | /api/pickingProfile/{id} | Profil löschen |
GET | /api/pickLocation/{id} | Ein Pickplatz |
POST | /api/pickLocation/ | Platz speichern |
DELETE | /api/pickLocation/ | Platz löschen |
GET | /api/packaging/{id} | Verpackung |
GET | /api/danger/{id} | Gefahrgut |
POST | /api/shippingClient/ | Versenden, salesHeadIds |
POST | /api/shippingClient/returnDelivery | Retourenlabel |
GET | /api/shippingClient/connection | Verbindung, Query carrierId |
POST | /api/shippingClient/setOrder | Auftrag an Aras |
POST | /api/shippingClient/checkBarcode | Barcode bei Aras |
9. Häufige Fehler
| Situation | Ursache |
|---|---|
salesHead.not.found | Die Belegnummer des Imports gibt es nicht |
message.carrier.not.found.by.id.error | carrier ohne gültige Id |
shippmentItem.quantity.error | Menge größer als die offene Position |
sendPacks not found | DELETE mit unbekannter Id |
| HTTP 500 beim Versand | Die Meldung steht in data.error |
| Scan findet nichts | scanCode trifft weder Artikel noch Auftrag |
message.salesHeadIds.empty.error | shippingClient ohne salesHeadIds |
message.salesHead.not.found.by.id.error | returnDelivery mit unbekannter Beleg-Id |