Zum Hauptinhalt springen

Sendungen

Erstellen Sie eine oder mehrere Sendungen in einer einzigen Anfrage. Die API validiert alle Felder, generiert Paketnummern, reichert Routing-Daten an und gibt PDF-Etiketten zurück.

Endpunkt: POST /api/v1/shipments Authentifizierung: Bearer JWT-Token erforderlich


Sendung erstellen

Anfrage

Content-Type: application/json Body: Array von Sendungsobjekten

[
{
"invoicingNumber": "12345678",
"serviceCode": "PSD",
"sender": { },
"receiver": { },
"parcelInfo": [ ],
"customsData": { },
"printOptions": { }
}
]

Sendungs-Hauptfelder

FeldTypLängePflichtfeldBeschreibung
invoicingNumberString1–20JaKundenrechnungsnummer
numberOfParcelsIntegerJaGesamtpakete (1–99)
serviceCodeStringJaDPD-Servicecode (PSD, PSI, PL, PBOX, RET)
mpsIdStringNeinMaster-Sendungs-ID zur Gruppierung
customerReferenceNumber1String0–35NeinKundenreferenz 1
customerReferenceNumber2String0–35NeinKundenreferenz 2
customerReferenceNumber3String0–35NeinKundenreferenz 3
customerReferenceNumber4String0–35NeinKundenreferenz 4
shipmentNoteString0–255NeinSendungsnotiz
parcelShopIdStringBedingtErforderlich für Paketshop-Lieferdienste
clientSoftwareStringNeinName der Client-Anwendung
clientVersionStringNeinVersion der Client-Anwendung

Adressfelder (Absender / Empfänger / Rücksendung)

FeldTypLängePflichtfeldHinweise
nameString1–35JaFirmen- oder Personenname
name2String0–35NeinZusätzliche Namenszeile
contactString0–35NeinKontaktperson
countryCodeString2JaISO 3166-1 Alpha-2
stateCodeString2BedingtPflichtfeld für US/CA
zipCodeString1–9JaPostleitzahl
cityString1–35JaStadt
streetString1–35JaStrassenname und Hausnummer
street2String0–35NeinZusätzliche Adresszeile
houseNumberString0–8BedingtPflichtfeld für NL
phoneString0–30BedingtPflichtfeld für GB — internationales Format +CCNNNNNN
emailString0–50BedingtPflichtfeld für Nicht-CH/LI-Länder (ausser GB)
eoriString0–22BedingtPflichtfeld für GB/NO international
vatString0–20BedingtPflichtfeld für GB/NO international (Nicht-CH)
languageString2NeinISO 639-1 (DE, EN, FR, IT)
referenceString0–35NeinAdressreferenz
noteString0–70NeinZustellanweisungen
glnString0–13NeinGlobal Location Number

Paketinformationen (parcelInfo[])

Array von Paketobjekten — ein Eintrag pro physischem Paket. Die Anzahl der Einträge sollte numberOfParcels entsprechen.

FeldTypLängePflichtfeldBeschreibung
serviceCodeStringJaService-Code auf Paketebene
optionCodesArray<String>NeinZusätzliche Service-Optionscodes
contentStringNeinPaketinhaltsbeschreibung (PCONTENT)
weightIntegerNeinPaketgewicht in Gramm
reference1String0–35NeinPaketreferenz 1
reference2String0–35NeinPaketreferenz 2
reference3StringNeinPaketreferenz 3
reference4StringNeinPaketreferenz 4
higherInsuranceObjectNeinZusatzleistung Höherversicherung (siehe unten)
limitedQuantitiesObjectNeinDaten zu begrenzten Mengen (Gefahrgut) (siehe unten)

higherInsurance-Felder:

FeldTypLängePflichtfeldBeschreibung
amountNumberJaVersicherter Betrag
currencyString3JaISO-4217-Währungscode

limitedQuantities-Felder:

FeldTypLängePflichtfeldBeschreibung
unNumberStringNeinUN-Gefahrgutnummer
codeStringNeinSubstanzcode
packagingGroupStringNeinVerpackungsgruppe
klassStringNeinGefahrgutklasse
subWeightIntegerNeinSubstanzgewicht

Zolldaten (customsData)

Erforderlich für internationale Sendungen (nicht-inländische Verzollung).

FeldTypLängePflichtfeldBeschreibung
shipmentTypeString1JaPakettyp (PARCELTYPE)
valueNumberJaZollwert der Waren (CAMOUNT)
currencyString3NeinISO-4217-Währung für value
valueExNumberNeinZusätzlicher Zollwert (CAMOUNTEX)
currencyExString3NeinISO-4217-Währung für valueEx
reasonForExportString2JaAusfuhrgrund-Code
termsOfDeliveryString2JaIncoterms / Lieferbedingungen (CTERMS)
clearanceClearedString1JaVerzollungs-Flag
opCodeString3NeinOperationscode
preAlertStatusString3NeinPre-Alert-Status
contentString0–35NeinZollinhaltsbeschreibung (CCONTENT)
paperString1NeinDokumenten-Flag (CPAPER)
highLowValueString1NeinHigh/Low-Value-Indikator
invoiceNumberString0–35NeinHandelsrechnungsnummer (CINVOICE)
dateDate (yyyy-MM-dd)JaRechnungsdatum (CINVOICEDATE)
exportMRNString0–209NeinExport Movement Reference Number (SHIPMRN)
documentTypesArray<String>≤20 EinträgeNeinZolldokumenttypen
commentString0–70NeinZollkommentar (CCOMMENT)
comment2String0–70NeinRegistrierung im Zielland (DESTCOUNTRYREG)
senderHMRCString0–15NeinHMRC-Registrierung des Absenders
senderInvoicingAddressObjectNeinRechnungsadresse des Absenders (Adressobjekt)
receiverInvoicingAddressObjectNeinRechnungsadresse des Empfängers (Adressobjekt)
numberOfInvoiceLinesIntegerNeinAnzahl der Rechnungspositionen (NUMBEROFARTICLE)
invoiceLinesArray<Object>BedingtRechnungspositionen (siehe unten). Anzahl zwischen Paketanzahl und Paketanzahl + 20

invoiceLines[]-Felder:

FeldTypLängePflichtfeldBeschreibung
natureOfGoodsString0–200NeinArt der Waren (CCONTENT)
hsCodeString0–11NeinHS-Zolltarifcode
productCodeString0–255NeinProduktcode (CPRODCODE)
amountNumberNeinPositionsbetrag (CAMOUNTLINE)
grossWeightIntegerNeinBruttogewicht (CGROSSWEIGHT)
qItemsIntegerJaArtikelmenge
countryOfOriginString3NeinISO-Ursprungsland (CORIGIN)

Druckoptionen

FeldTypPflichtfeldBeschreibung
paperSizeStringNeinA4 oder A6 (Standard: A4)
startPositionStringNeinEtikettenposition auf A4-Blatt: UPPER_LEFT, UPPER_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT

Antwort

201 Created – alle Sendungen erfolgreich erstellt:

{
"tracingId": "TRACE-123",
"success": [
{
"id": 1,
"parcelNumber": "05305000123456",
"label": "base64-encoded-PDF..."
}
],
"failed": []
}

207 Multi-Status – Teilerfolg:

{
"tracingId": "TRACE-456",
"success": [ { "id": 1, "parcelNumber": "05305000123456", "label": "..." } ],
"failed": [
{
"id": 2,
"fieldErrors": {
"receiver.countryCode": ["NOT_SUPPORTED"],
"receiver.email": ["REQUIRED_FOR_INTERNATIONAL"]
}
}
]
}

Statuscodes:

CodeBeschreibung
201 CreatedAlle Sendungen erfolgreich erstellt
207 Multi-StatusTeilerfolg
400 Bad RequestUngültige Anfrage
401 UnauthorizedToken fehlt oder ungültig

Beispiel

curl -X POST "https://label-print-shipments.dpd.ch/api/v1/shipments" \
-H "Authorization: Bearer <jwt_token>" \
-H "Content-Type: application/json" \
-d '[
{
"invoicingNumber": "12345678",
"serviceCode": "PSD",
"numberOfParcels": 1,
"sender": {
"name": "Sender AG",
"countryCode": "CH",
"zipCode": "8000",
"city": "Zürich",
"street": "Industriestrasse 25"
},
"receiver": {
"name": "Receiver GmbH",
"countryCode": "DE",
"zipCode": "10115",
"city": "Berlin",
"street": "Alexanderplatz 1",
"email": "info@receiver.de"
},
"parcelInfo": [
{ "weight": 2500 }
],
"printOptions": {
"paperSize": "A6"
}
}
]'

Manifest drucken

Erzeugt eine Manifest-PDF mit allen an DPD übergebenen Sendungen für eine bestimmte Rechnungsnummer. Dient der Nachverfolgbarkeit der Tagesabholung — die Datei wird als PDF-Anhang zurückgegeben und ist dafür vorgesehen, ausgedruckt und mit den Paketen mitgegeben zu werden.

Endpunkt: POST /api/v1/shipments/print-manifest Liefert: application/pdf Authentifizierung: Bearer JWT-Token erforderlich

Der Endpunkt gibt nur Sendungen des authentifizierten Benutzers zurück. Filterung über einen Datumsbereich (fromDate/toDate, angewendet auf importedAt) und/oder eine explizite Liste von parcelNumbersmindestens einer der beiden Filter ist erforderlich.

Anfrage

Content-Type: application/json

{
"invoicingNumber": "12345678",
"fromDate": "2026-03-25",
"toDate": "2026-04-29",
"parcelNumbers": ["05305000123456", "05305000123457"],
"address": {
"reference": "PICKUP-001"
},
"printSettings": {
"printRecipientReference": true,
"printParcelReference1": true,
"printParcelReference2": true,
"printUserName": true,
"printWeight": true,
"sortOrderForManifest": "CONSIGNEE_ZIP"
}
}
FeldTypPflichtfeldBeschreibung
invoicingNumberStringJaRechnungsnummer, die das Manifest eingrenzt
fromDateDatum (yyyy-MM-dd)BedingtInklusive Untergrenze von importedAt. Erforderlich, wenn parcelNumbers nicht angegeben ist. Muss zusammen mit toDate angegeben werden
toDateDatum (yyyy-MM-dd)BedingtInklusive Obergrenze von importedAt. Erforderlich, wenn parcelNumbers nicht angegeben ist. Muss zusammen mit fromDate angegeben werden
parcelNumbersArray<String>BedingtBeschränkt das Manifest auf bestimmte Paketnummern. Erforderlich, wenn kein Datumsbereich angegeben ist
addressObjektNeinAbholadresse zur Eingrenzung des Manifests. Es wird ausschliesslich reference ausgewertet; alle übrigen Adressfelder werden ignoriert. Die Referenz wird gegen die Kundenkonfiguration aufgelöst. Wird sie weggelassen und umfasst das Ergebnis mehrere Abholungen, wird die erste angetroffene Abholung verwendet und übrige Sendungen werden stillschweigend entfernt
printSettingsObjektJaAuf das erzeugte Manifest angewendete Druckeinstellungen

printSettings-Felder

FeldTypPflichtfeldBeschreibung
printRecipientReferenceBooleanNeinSpalte mit Empfängerreferenz drucken
printParcelReference1BooleanNeinPaketreferenz 1 drucken
printParcelReference2BooleanNeinPaketreferenz 2 drucken
printUserNameBooleanNeinBenutzername auf dem Manifest drucken
printWeightBooleanNeinSpalte mit Paketgewicht drucken
sortOrderForManifestEnumJaSortierreihenfolge der Sendungen auf dem Manifest

Werte für sortOrderForManifest:

WertBeschreibung
CONSIGNEE_ZIPSortierung nach PLZ des Empfängers
CONSIGNEE_COUNTRYSortierung nach Land des Empfängers
CONSIGNEE_NAMESortierung nach Name des Empfängers
REFERENCE_1Sortierung nach Paketreferenz 1
PARCEL_NUMBERSortierung nach Paketnummer

Häufiger Anwendungsfall — heutiges Manifest

Der häufigste Integrationsfall ist die Erzeugung des Manifests für heute importierte Sendungen, unmittelbar vor der Fahrerabholung. Setzen Sie fromDate und toDate auf das heutige Datum (UTC-Tage) und lassen Sie parcelNumbers weg, um alle Sendungen dieser Rechnungsnummer an diesem Tag einzubeziehen:

{
"invoicingNumber": "12345678",
"fromDate": "2026-05-26",
"toDate": "2026-05-26",
"printSettings": {
"printRecipientReference": true,
"printParcelReference1": true,
"printUserName": true,
"printWeight": true,
"sortOrderForManifest": "CONSIGNEE_ZIP"
}
}
TODAY=$(date -u +%F)
curl -X POST "https://label-print-shipments.dpd.ch/api/v1/shipments/print-manifest" \
-H "Authorization: Bearer <jwt_token>" \
-H "Content-Type: application/json" \
-o manifest.pdf \
-d "{
\"invoicingNumber\": \"12345678\",
\"fromDate\": \"$TODAY\",
\"toDate\": \"$TODAY\",
\"printSettings\": {
\"printRecipientReference\": true,
\"printParcelReference1\": true,
\"printUserName\": true,
\"printWeight\": true,
\"sortOrderForManifest\": \"CONSIGNEE_ZIP\"
}
}"

Hinweise:

  • fromDate/toDate werden in UTC gegen importedAt abgeglichen (von Tagesbeginn bis Tagesende). Sendungen, die in Ihrer lokalen Zeitzone nach Mitternacht UTC des nächsten Kalendertags importiert wurden, erscheinen nicht.
  • Geben Sie address: {"reference": "PICKUP-001"} an, um bei mehreren Abholungen eine bestimmte auszuwählen.

Antwort

200 OK — Manifest erzeugt; der Body ist der PDF-Stream.

HeaderWert
Content-Typeapplication/pdf
Content-Dispositionattachment; filename="manifest.pdf"
Content-LengthPDF-Grösse in Bytes

Statuscodes

CodeBeschreibung
200 OKManifest erzeugt
400 Bad RequestFilter fehlt oder ungültig (z. B. nur fromDate oder toDate gesetzt, fromDate nach toDate, weder Datumsbereich noch parcelNumbers angegeben, printSettings fehlt, address.reference nicht auflösbar)
401 UnauthorizedToken fehlt oder ungültig
404 Not FoundKeine Sendungen entsprechen dem Filter oder der angeforderten Abholung

Beispiel

curl -X POST "https://label-print-shipments.dpd.ch/api/v1/shipments/print-manifest" \
-H "Authorization: Bearer <jwt_token>" \
-H "Content-Type: application/json" \
-o manifest.pdf \
-d '{
"invoicingNumber": "12345678",
"fromDate": "2026-03-25",
"toDate": "2026-04-29",
"parcelNumbers": ["05305000123456", "05305000123457"],
"address": {
"reference": "PICKUP-001"
},
"printSettings": {
"printRecipientReference": true,
"printParcelReference1": true,
"printParcelReference2": true,
"printUserName": true,
"printWeight": true,
"sortOrderForManifest": "CONSIGNEE_ZIP"
}
}'