Manifests
Generate a manifest PDF that lists the shipments handed over to DPD for a given invoicing number. Supports traceability for the day's pickup — the file is returned as a PDF attachment and is intended to be printed and kept with the parcels.
| Endpoint | Produces | Auth |
|---|---|---|
POST /api/v1/shipments/print-manifest | application/pdf | Bearer JWT token required |
The endpoint returns shipments owned by the authenticated user only. Filter the result with a date range (fromDate/toDate, applied to importedAt) and/or an explicit list of parcelNumbers — at least one of the two filters is required.
Request
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"
}
}
| Field | Type | Required | Description |
|---|---|---|---|
invoicingNumber | String | Mandatory | Invoicing number scoping the manifest |
fromDate | Date (yyyy-MM-dd) | Conditional | Inclusive lower bound of importedAt. Required when parcelNumbers is not provided. Must be provided together with toDate |
toDate | Date (yyyy-MM-dd) | Conditional | Inclusive upper bound of importedAt. Required when parcelNumbers is not provided. Must be provided together with fromDate |
parcelNumbers | Array<String> | Conditional | Restrict the manifest to specific parcel numbers. Required when no date range is provided |
address | Object | Optional | Pickup address used to scope the manifest. Only reference is read; all other address fields are ignored. The reference is resolved against the customer configuration. When omitted and the result set spans multiple pickups, the first encountered pickup is used and other shipments are silently dropped |
printSettings | Object | Mandatory | Print settings applied to the generated manifest |
printSettings fields
| Field | Type | Required | Description |
|---|---|---|---|
printRecipientReference | Boolean | Optional | Print the recipient reference column |
printParcelReference1 | Boolean | Optional | Print parcel reference 1 |
printParcelReference2 | Boolean | Optional | Print parcel reference 2 |
printUserName | Boolean | Optional | Print the user name on the manifest |
printWeight | Boolean | Optional | Print the parcel weight column |
sortOrderForManifest | Enum | Mandatory | Sort order for shipments on the manifest |
sortOrderForManifest values:
| Value | Description |
|---|---|
CONSIGNEE_ZIP | Sort by consignee zip code |
CONSIGNEE_COUNTRY | Sort by consignee country |
CONSIGNEE_NAME | Sort by consignee name |
REFERENCE_1 | Sort by parcel reference 1 |
PARCEL_NUMBER | Sort by parcel number |
Common use case — today's manifest
The most frequent integration pattern is generating the manifest for shipments imported today, right before the driver pickup. Set fromDate and toDate to today's date (UTC days) and omit parcelNumbers to include everything for that invoicing number on that day:
{
"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\"
}
}"
Notes:
fromDate/toDateare matched againstimportedAtin UTC (start-of-day to end-of-day). Shipments imported after midnight UTC the next calendar day in your local zone will not appear.- Provide
address: {"reference": "PICKUP-001"}to scope to a specific pickup when the user has multiple.
Response
200 OK — manifest generated; body is the PDF stream.
| Header | Value |
|---|---|
Content-Type | application/pdf |
Content-Disposition | attachment; filename="manifest.pdf" |
Content-Length | PDF size in bytes |
Status codes
| Code | Description |
|---|---|
200 OK | Manifest generated |
400 Bad Request | Missing/invalid filter (e.g. only one of fromDate/toDate set, fromDate after toDate, both date range and parcelNumbers empty, missing printSettings, unresolvable address.reference) |
401 Unauthorized | Missing or invalid token |
404 Not Found | No shipments match the filter, or none match the requested pickup |
Example
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"
}
}'