Skip to main content

Shipments

Create one or multiple shipments in a single request. The API validates all fields, generates parcel numbers, enriches routing data, and returns PDF labels.

Endpoint: POST /api/v1/shipments Auth: Bearer JWT token required


Request

Content-Type: application/json Body: array of shipment objects

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

Shipment root fields

FieldTypeLengthRequiredDescription
invoicingNumberString1–20MandatoryCustomer billing number
numberOfParcelsIntegerMandatoryTotal parcels (1–99)
serviceCodeStringMandatoryDPD service code (PSD, PSI, PL, PBOX, RET)
mpsIdStringOptionalMaster Parcel Shipment ID for grouping
customerReferenceNumber1String0–35OptionalCustomer reference 1
customerReferenceNumber2String0–35OptionalCustomer reference 2
customerReferenceNumber3String0–35OptionalCustomer reference 3
customerReferenceNumber4String0–35OptionalCustomer reference 4
shipmentNoteString0–255OptionalShipment note
parcelShopIdStringConditionalRequired for ParcelShop delivery services
clientSoftwareStringOptionalClient application name
clientVersionStringOptionalClient application version

Address fields (sender / receiver / return)

FieldTypeLengthRequiredNotes
nameString1–35MandatoryCompany or person name
name2String0–35OptionalAdditional name line
contactString0–35OptionalContact person
countryCodeString2MandatoryISO 3166-1 alpha-2
stateCodeString2ConditionalRequired for US/CA
zipCodeString1–9MandatoryPostal code
cityString1–35MandatoryCity
streetString1–35MandatoryStreet name and number
street2String0–35OptionalAdditional address line
houseNumberString0–8ConditionalRequired for NL
phoneString0–30ConditionalRequired for GB — international format +CCNNNNNN
emailString0–50ConditionalRequired for non-CH/LI countries (except GB)
eoriString0–22ConditionalRequired for GB/NO international
vatString0–20ConditionalRequired for GB/NO international (non-CH)
languageString2OptionalISO 639-1 (DE, EN, FR, IT)
referenceString0–35OptionalAddress reference
noteString0–70OptionalDelivery instructions
glnString0–13OptionalGlobal Location Number
FieldTypeRequiredDescription
labelFormatStringOptionalA4 or A6 (default: A4)
labelStartPositionIntegerOptionalLabel position on A4 sheet (1–4)

Response

201 Created — all shipments created:

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

207 Multi-Status — partial success:

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

Status codes:

CodeDescription
201 CreatedAll shipments created successfully
207 Multi-StatusSome succeeded, some failed
400 Bad RequestInvalid request payload
401 UnauthorizedMissing or invalid token

Example

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": {
"labelFormat": "A6"
}
}
]'