Collection Requests
Schedule a one-time parcel collection from your location. DPD will pick up the parcels on the requested date within a specified time window.
| Endpoint | Auth |
|---|---|
POST /api/v1/collection-requests | Bearer JWT token required |
Request
Query parameter: lang (optional) — localise error messages (e.g., de_CH, en_US, fr_CH, it_CH)
Body: List<CollectionRequestDTO>
Fields
| Field | Type | Length | Required | Description |
|---|---|---|---|---|
id | Long | — | Optional | Request identifier for tracking in response |
invoicingNumber | String | 1–20 | Mandatory | Your DPD customer billing number |
pickupDate | String | 10 | Mandatory | Requested pickup date (yyyy-MM-dd), must be a future date |
referenceNumber | String | 0–50 | Optional | Your internal reference number |
note | String | 0–255 | Optional | Special collection instructions |
sender | AddressDTO | — | Mandatory | Address where parcels will be collected |
receiver | AddressDTO | — | Mandatory | Final destination address |
requester | AddressDTO | — | Optional | Person requesting the collection (defaults to receiver) |
numberOfParcels | Integer | — | Mandatory | Expected number of parcels. No range is enforced by the API |
weight | Integer | — | Optional | Total weight of all parcels in grams |
serviceCode | String | — | Mandatory | Must be present, but the value is ignored — collection requests are always created as B2B |
clientSoftware | String | 1–30 | Mandatory | Your application name. The request is rejected if this is missing or blank |
clientVersion | String | 1–10 | Mandatory | Your application version. The request is rejected if this is missing or blank |
Example
curl -X POST "https://label-print-shipments.dpd.ch/api/v1/collection-requests?lang=de_CH" \
-H "Authorization: Bearer <jwt_token>" \
-H "Content-Type: application/json" \
-d '[
{
"invoicingNumber": "12345678",
"pickupDate": "<next working day, yyyy-MM-dd>",
"serviceCode": "B2B",
"numberOfParcels": 5,
"weight": 25000,
"clientSoftware": "My Integration",
"clientVersion": "1.0.0",
"sender": {
"name": "Sender Company AG",
"countryCode": "CH",
"zipCode": "8000",
"city": "Zürich",
"street": "Industriestrasse 25",
"phone": "+41441234567"
},
"receiver": {
"name": "Receiver GmbH",
"countryCode": "DE",
"zipCode": "10115",
"city": "Berlin",
"street": "Alexanderplatz 1"
}
}
]'
Response
201 Created — all requests created:
{
"tracingId": "TRACE-789",
"success": [
{ "tracingId": "BPsEYzTIZ" }
],
"failed": []
}
Each success[] item carries the tracingId assigned to the created request, plus
identificationNumber echoed back when the request item supplied one. There is no id and no
referenceNumber on a success item — id appears only on failed[] items.
Null fields are omitted from responses, so a success item commonly contains nothing but
tracingId.
207 Multi-Status — partial success. Each failed[] item carries an identificationNumber (echoes the client-supplied value, when the request item had one), an errorCode; field violations are a flat fieldErrors[] array, each entry with its own path:
{
"tracingId": "TRACE-790",
"success": [],
"failed": [
{
"identificationNumber": "client-supplied-id-4",
"errorCode": "SYS-VALIDATION-FAILURE",
"fieldErrors": [
{
"path": "pickup.date",
"code": "SHP-VAL-PICKUP-DATE-INVALID",
"message": "Pickup date is invalid."
}
]
}
]
}
A transient failure (no fieldErrors — an outage is not a field problem) looks like this instead:
{
"identificationNumber": "client-supplied-id-6",
"errorCode": "SHP-ROUTING-ENGINE-UNAVAILABLE",
"reason": "SHP-ROUTING-ENGINE-UNAVAILABLE: Routing engine is temporarily unavailable. Please try again."
}
Status codes:
| Code | Description |
|---|---|
201 Created | All collection requests created |
207 Multi-Status | Some succeeded, some failed |
400 Bad Request | Validation error, or every item in the batch failed (whatever the cause, including a routing-engine outage) |
401 Unauthorized | Missing or invalid token |
Notes
pickupDatemust be a future date; past dates are rejectedweightis in grams (e.g., 25000 = 25 kg)- Address validation follows the same country-specific rules as Shipments (NL house number, GB phone, non-CH/LI email, etc.)