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
| Feld | Typ | Länge | Pflichtfeld | Beschreibung |
|---|---|---|---|---|
invoicingNumber | String | 1–20 | Ja | Kundenrechnungsnummer |
numberOfParcels | Integer | — | Ja | Gesamtpakete (1–99) |
serviceCode | String | — | Ja | DPD-Servicecode (PSD, PSI, PL, PBOX, RET) |
mpsId | String | — | Nein | Master-Sendungs-ID zur Gruppierung |
customerReferenceNumber1 | String | 0–35 | Nein | Kundenreferenz 1 |
customerReferenceNumber2 | String | 0–35 | Nein | Kundenreferenz 2 |
customerReferenceNumber3 | String | 0–35 | Nein | Kundenreferenz 3 |
customerReferenceNumber4 | String | 0–35 | Nein | Kundenreferenz 4 |
shipmentNote | String | 0–255 | Nein | Sendungsnotiz |
parcelShopId | String | — | Bedingt | Erforderlich für Paketshop-Lieferdienste |
clientSoftware | String | — | Nein | Name der Client-Anwendung |
clientVersion | String | — | Nein | Version der Client-Anwendung |
Adressfelder (Absender / Empfänger / Rücksendung)
| Feld | Typ | Länge | Pflichtfeld | Hinweise |
|---|---|---|---|---|
name | String | 1–35 | Ja | Firmen- oder Personenname |
name2 | String | 0–35 | Nein | Zusätzliche Namenszeile |
contact | String | 0–35 | Nein | Kontaktperson |
countryCode | String | 2 | Ja | ISO 3166-1 Alpha-2 |
stateCode | String | 2 | Bedingt | Pflichtfeld für US/CA |
zipCode | String | 1–9 | Ja | Postleitzahl |
city | String | 1–35 | Ja | Stadt |
street | String | 1–35 | Ja | Strassenname und Hausnummer |
street2 | String | 0–35 | Nein | Zusätzliche Adresszeile |
houseNumber | String | 0–8 | Bedingt | Pflichtfeld für NL |
phone | String | 0–30 | Bedingt | Pflichtfeld für GB — internationales Format +CCNNNNNN |
email | String | 0–50 | Bedingt | Pflichtfeld für Nicht-CH/LI-Länder (ausser GB) |
eori | String | 0–22 | Bedingt | Pflichtfeld für GB/NO international |
vat | String | 0–20 | Bedingt | Pflichtfeld für GB/NO international (Nicht-CH) |
language | String | 2 | Nein | ISO 639-1 (DE, EN, FR, IT) |
reference | String | 0–35 | Nein | Adressreferenz |
note | String | 0–70 | Nein | Zustellanweisungen |
gln | String | 0–13 | Nein | Global Location Number |
Paketinformationen (parcelInfo[])
Array von Paketobjekten — ein Eintrag pro physischem Paket. Die Anzahl der Einträge sollte numberOfParcels entsprechen.
| Feld | Typ | Länge | Pflichtfeld | Beschreibung |
|---|---|---|---|---|
serviceCode | String | — | Ja | Service-Code auf Paketebene |
optionCodes | Array<String> | — | Nein | Zusätzliche Service-Optionscodes |
content | String | — | Nein | Paketinhaltsbeschreibung (PCONTENT) |
weight | Integer | — | Nein | Paketgewicht in Gramm |
reference1 | String | 0–35 | Nein | Paketreferenz 1 |
reference2 | String | 0–35 | Nein | Paketreferenz 2 |
reference3 | String | — | Nein | Paketreferenz 3 |
reference4 | String | — | Nein | Paketreferenz 4 |
higherInsurance | Object | — | Nein | Zusatzleistung Höherversicherung (siehe unten) |
limitedQuantities | Object | — | Nein | Daten zu begrenzten Mengen (Gefahrgut) (siehe unten) |
higherInsurance-Felder:
| Feld | Typ | Länge | Pflichtfeld | Beschreibung |
|---|---|---|---|---|
amount | Number | — | Ja | Versicherter Betrag |
currency | String | 3 | Ja | ISO-4217-Währungscode |
limitedQuantities-Felder:
| Feld | Typ | Länge | Pflichtfeld | Beschreibung |
|---|---|---|---|---|
unNumber | String | — | Nein | UN-Gefahrgutnummer |
code | String | — | Nein | Substanzcode |
packagingGroup | String | — | Nein | Verpackungsgruppe |
klass | String | — | Nein | Gefahrgutklasse |
subWeight | Integer | — | Nein | Substanzgewicht |
Zolldaten (customsData)
Erforderlich für internationale Sendungen (nicht-inländische Verzollung).
| Feld | Typ | Länge | Pflichtfeld | Beschreibung |
|---|---|---|---|---|
shipmentType | String | 1 | Ja | Pakettyp (PARCELTYPE) |
value | Number | — | Ja | Zollwert der Waren (CAMOUNT) |
currency | String | 3 | Nein | ISO-4217-Währung für value |
valueEx | Number | — | Nein | Zusätzlicher Zollwert (CAMOUNTEX) |
currencyEx | String | 3 | Nein | ISO-4217-Währung für valueEx |
reasonForExport | String | 2 | Ja | Ausfuhrgrund-Code |
termsOfDelivery | String | 2 | Ja | Incoterms / Lieferbedingungen (CTERMS) |
clearanceCleared | String | 1 | Ja | Verzollungs-Flag |
opCode | String | 3 | Nein | Operationscode |
preAlertStatus | String | 3 | Nein | Pre-Alert-Status |
content | String | 0–35 | Nein | Zollinhaltsbeschreibung (CCONTENT) |
paper | String | 1 | Nein | Dokumenten-Flag (CPAPER) |
highLowValue | String | 1 | Nein | High/Low-Value-Indikator |
invoiceNumber | String | 0–35 | Nein | Handelsrechnungsnummer (CINVOICE) |
date | Date (yyyy-MM-dd) | — | Ja | Rechnungsdatum (CINVOICEDATE) |
exportMRN | String | 0–209 | Nein | Export Movement Reference Number (SHIPMRN) |
documentTypes | Array<String> | ≤20 Einträge | Nein | Zolldokumenttypen |
comment | String | 0–70 | Nein | Zollkommentar (CCOMMENT) |
comment2 | String | 0–70 | Nein | Registrierung im Zielland (DESTCOUNTRYREG) |
senderHMRC | String | 0–15 | Nein | HMRC-Registrierung des Absenders |
senderInvoicingAddress | Object | — | Nein | Rechnungsadresse des Absenders (Adressobjekt) |
receiverInvoicingAddress | Object | — | Nein | Rechnungsadresse des Empfängers (Adressobjekt) |
numberOfInvoiceLines | Integer | — | Nein | Anzahl der Rechnungspositionen (NUMBEROFARTICLE) |
invoiceLines | Array<Object> | — | Bedingt | Rechnungspositionen (siehe unten). Anzahl zwischen Paketanzahl und Paketanzahl + 20 |
invoiceLines[]-Felder:
| Feld | Typ | Länge | Pflichtfeld | Beschreibung |
|---|---|---|---|---|
natureOfGoods | String | 0–200 | Nein | Art der Waren (CCONTENT) |
hsCode | String | 0–11 | Nein | HS-Zolltarifcode |
productCode | String | 0–255 | Nein | Produktcode (CPRODCODE) |
amount | Number | — | Nein | Positionsbetrag (CAMOUNTLINE) |
grossWeight | Integer | — | Nein | Bruttogewicht (CGROSSWEIGHT) |
qItems | Integer | — | Ja | Artikelmenge |
countryOfOrigin | String | 3 | Nein | ISO-Ursprungsland (CORIGIN) |
Druckoptionen
| Feld | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
paperSize | String | Nein | A4 oder A6 (Standard: A4) |
startPosition | String | Nein | Etikettenposition 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:
| Code | Beschreibung |
|---|---|
201 Created | Alle Sendungen erfolgreich erstellt |
207 Multi-Status | Teilerfolg |
400 Bad Request | Ungültige Anfrage |
401 Unauthorized | Token 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 parcelNumbers — mindestens 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"
}
}
| Feld | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
invoicingNumber | String | Ja | Rechnungsnummer, die das Manifest eingrenzt |
fromDate | Datum (yyyy-MM-dd) | Bedingt | Inklusive Untergrenze von importedAt. Erforderlich, wenn parcelNumbers nicht angegeben ist. Muss zusammen mit toDate angegeben werden |
toDate | Datum (yyyy-MM-dd) | Bedingt | Inklusive Obergrenze von importedAt. Erforderlich, wenn parcelNumbers nicht angegeben ist. Muss zusammen mit fromDate angegeben werden |
parcelNumbers | Array<String> | Bedingt | Beschränkt das Manifest auf bestimmte Paketnummern. Erforderlich, wenn kein Datumsbereich angegeben ist |
address | Objekt | Nein | Abholadresse 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 |
printSettings | Objekt | Ja | Auf das erzeugte Manifest angewendete Druckeinstellungen |
printSettings-Felder
| Feld | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
printRecipientReference | Boolean | Nein | Spalte mit Empfängerreferenz drucken |
printParcelReference1 | Boolean | Nein | Paketreferenz 1 drucken |
printParcelReference2 | Boolean | Nein | Paketreferenz 2 drucken |
printUserName | Boolean | Nein | Benutzername auf dem Manifest drucken |
printWeight | Boolean | Nein | Spalte mit Paketgewicht drucken |
sortOrderForManifest | Enum | Ja | Sortierreihenfolge der Sendungen auf dem Manifest |
Werte für sortOrderForManifest:
| Wert | Beschreibung |
|---|---|
CONSIGNEE_ZIP | Sortierung nach PLZ des Empfängers |
CONSIGNEE_COUNTRY | Sortierung nach Land des Empfängers |
CONSIGNEE_NAME | Sortierung nach Name des Empfängers |
REFERENCE_1 | Sortierung nach Paketreferenz 1 |
PARCEL_NUMBER | Sortierung 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/toDatewerden in UTC gegenimportedAtabgeglichen (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.
| Header | Wert |
|---|---|
Content-Type | application/pdf |
Content-Disposition | attachment; filename="manifest.pdf" |
Content-Length | PDF-Grösse in Bytes |
Statuscodes
| Code | Beschreibung |
|---|---|
200 OK | Manifest erzeugt |
400 Bad Request | Filter 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 Unauthorized | Token fehlt oder ungültig |
404 Not Found | Keine 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"
}
}'