Spedizioni
Creare una o più spedizioni in una singola richiesta. L'API valida tutti i campi, genera i numeri di pacco, arricchisce i dati di instradamento e restituisce etichette PDF.
Endpoint: POST /api/v1/shipments
Autenticazione: Token JWT Bearer obbligatorio
Crea spedizione
Richiesta
Content-Type: application/json
Corpo: array di oggetti spedizione
[
{
"invoicingNumber": "12345678",
"serviceCode": "PSD",
"sender": { },
"receiver": { },
"parcelInfo": [ ],
"customsData": { },
"printOptions": { }
}
]
Campi principali della spedizione
| Campo | Tipo | Lunghezza | Obbligatorio | Descrizione |
|---|---|---|---|---|
invoicingNumber | String | 1–20 | Obbligatorio | Numero di fatturazione cliente |
numberOfParcels | Integer | — | Obbligatorio | Numero totale di pacchi (1–99) |
serviceCode | String | — | Obbligatorio | Codice servizio DPD (PSD, PSI, PL, PBOX, RET) |
mpsId | String | — | Facoltativo | ID Master Parcel Shipment per il raggruppamento |
customerReferenceNumber1 | String | 0–35 | Facoltativo | Riferimento cliente 1 |
customerReferenceNumber2 | String | 0–35 | Facoltativo | Riferimento cliente 2 |
customerReferenceNumber3 | String | 0–35 | Facoltativo | Riferimento cliente 3 |
customerReferenceNumber4 | String | 0–35 | Facoltativo | Riferimento cliente 4 |
shipmentNote | String | 0–255 | Facoltativo | Nota sulla spedizione |
parcelShopId | String | — | Condizionale | Richiesto per i servizi di consegna in punto di ritiro |
clientSoftware | String | — | Facoltativo | Nome dell'applicazione client |
clientVersion | String | — | Facoltativo | Versione dell'applicazione client |
Campi indirizzo (mittente / destinatario / reso)
| Campo | Tipo | Lunghezza | Obbligatorio | Note |
|---|---|---|---|---|
name | String | 1–35 | Obbligatorio | Nome azienda o persona |
name2 | String | 0–35 | Facoltativo | Riga nome aggiuntiva |
contact | String | 0–35 | Facoltativo | Persona di contatto |
countryCode | String | 2 | Obbligatorio | ISO 3166-1 alpha-2 |
stateCode | String | 2 | Condizionale | Obbligatorio per US/CA |
zipCode | String | 1–9 | Obbligatorio | Codice postale |
city | String | 1–35 | Obbligatorio | Città |
street | String | 1–35 | Obbligatorio | Nome e numero civico |
street2 | String | 0–35 | Facoltativo | Riga indirizzo aggiuntiva |
houseNumber | String | 0–8 | Condizionale | Obbligatorio per NL |
phone | String | 0–30 | Condizionale | Obbligatorio per GB — formato internazionale +CCNNNNNN |
email | String | 0–50 | Condizionale | Obbligatorio per i paesi non-CH/LI (eccetto GB) |
eori | String | 0–22 | Condizionale | Obbligatorio per spedizioni internazionali GB/NO |
vat | String | 0–20 | Condizionale | Obbligatorio per spedizioni internazionali GB/NO (non-CH) |
language | String | 2 | Facoltativo | ISO 639-1 (DE, EN, FR, IT) |
reference | String | 0–35 | Facoltativo | Riferimento indirizzo |
note | String | 0–70 | Facoltativo | Istruzioni di consegna |
gln | String | 0–13 | Facoltativo | Global Location Number |
Informazioni sui colli (parcelInfo[])
Array di oggetti collo — una voce per ogni collo fisico. Il numero di voci deve corrispondere a numberOfParcels.
| Campo | Tipo | Lunghezza | Obbligatorio | Descrizione |
|---|---|---|---|---|
serviceCode | String | — | Obbligatorio | Codice servizio a livello di collo |
optionCodes | Array<String> | — | Facoltativo | Codici opzione di servizio aggiuntivi |
content | String | — | Facoltativo | Descrizione del contenuto del collo (PCONTENT) |
weight | Integer | — | Facoltativo | Peso del collo in grammi |
reference1 | String | 0–35 | Facoltativo | Riferimento collo 1 |
reference2 | String | 0–35 | Facoltativo | Riferimento collo 2 |
reference3 | String | — | Facoltativo | Riferimento collo 3 |
reference4 | String | — | Facoltativo | Riferimento collo 4 |
higherInsurance | Object | — | Facoltativo | Servizio aggiuntivo di assicurazione integrativa (vedi sotto) |
limitedQuantities | Object | — | Facoltativo | Dati quantità limitate (merci pericolose) (vedi sotto) |
Campi higherInsurance:
| Campo | Tipo | Lunghezza | Obbligatorio | Descrizione |
|---|---|---|---|---|
amount | Number | — | Obbligatorio | Importo assicurato |
currency | String | 3 | Obbligatorio | Codice valuta ISO 4217 |
Campi limitedQuantities:
| Campo | Tipo | Lunghezza | Obbligatorio | Descrizione |
|---|---|---|---|---|
unNumber | String | — | Facoltativo | Numero ONU merci pericolose |
code | String | — | Facoltativo | Codice sostanza |
packagingGroup | String | — | Facoltativo | Gruppo di imballaggio |
klass | String | — | Facoltativo | Classe di merci pericolose |
subWeight | Integer | — | Facoltativo | Peso della sostanza |
Dati doganali (customsData)
Obbligatorio per le spedizioni internazionali (sdoganamento non nazionale).
| Campo | Tipo | Lunghezza | Obbligatorio | Descrizione |
|---|---|---|---|---|
shipmentType | String | 1 | Obbligatorio | Tipo di collo (PARCELTYPE) |
value | Number | — | Obbligatorio | Valore doganale della merce (CAMOUNT) |
currency | String | 3 | Facoltativo | Valuta ISO 4217 per value |
valueEx | Number | — | Facoltativo | Valore doganale aggiuntivo (CAMOUNTEX) |
currencyEx | String | 3 | Facoltativo | Valuta ISO 4217 per valueEx |
reasonForExport | String | 2 | Obbligatorio | Codice motivo di esportazione |
termsOfDelivery | String | 2 | Obbligatorio | Incoterms / condizioni di consegna (CTERMS) |
clearanceCleared | String | 1 | Obbligatorio | Flag di sdoganamento |
opCode | String | 3 | Facoltativo | Codice operazione |
preAlertStatus | String | 3 | Facoltativo | Stato pre-alert |
content | String | 0–35 | Facoltativo | Descrizione del contenuto doganale (CCONTENT) |
paper | String | 1 | Facoltativo | Flag documento (CPAPER) |
highLowValue | String | 1 | Facoltativo | Indicatore valore alto/basso |
invoiceNumber | String | 0–35 | Facoltativo | Numero di fattura commerciale (CINVOICE) |
date | Date (yyyy-MM-dd) | — | Obbligatorio | Data fattura (CINVOICEDATE) |
exportMRN | String | 0–209 | Facoltativo | Export Movement Reference Number (SHIPMRN) |
documentTypes | Array<String> | ≤20 voci | Facoltativo | Tipi di documenti doganali |
comment | String | 0–70 | Facoltativo | Commento doganale (CCOMMENT) |
comment2 | String | 0–70 | Facoltativo | Registrazione nel paese di destinazione (DESTCOUNTRYREG) |
senderHMRC | String | 0–15 | Facoltativo | Registrazione HMRC del mittente |
senderInvoicingAddress | Object | — | Facoltativo | Indirizzo di fatturazione del mittente (oggetto indirizzo) |
receiverInvoicingAddress | Object | — | Facoltativo | Indirizzo di fatturazione del destinatario (oggetto indirizzo) |
numberOfInvoiceLines | Integer | — | Facoltativo | Numero di righe fattura (NUMBEROFARTICLE) |
invoiceLines | Array<Object> | — | Condizionale | Righe fattura (vedi sotto). Numero compreso tra il numero di colli e il numero di colli + 20 |
Campi invoiceLines[]:
| Campo | Tipo | Lunghezza | Obbligatorio | Descrizione |
|---|---|---|---|---|
natureOfGoods | String | 0–200 | Facoltativo | Natura delle merci (CCONTENT) |
hsCode | String | 0–11 | Facoltativo | Codice tariffario SA |
productCode | String | 0–255 | Facoltativo | Codice prodotto (CPRODCODE) |
amount | Number | — | Facoltativo | Importo riga (CAMOUNTLINE) |
grossWeight | Integer | — | Facoltativo | Peso lordo (CGROSSWEIGHT) |
qItems | Integer | — | Obbligatorio | Quantità di articoli |
countryOfOrigin | String | 3 | Facoltativo | Paese di origine ISO (CORIGIN) |
Opzioni di stampa
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
paperSize | String | Facoltativo | A4 o A6 (predefinito: A4) |
startPosition | String | Facoltativo | Posizione etichetta sul foglio A4: UPPER_LEFT, UPPER_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT |
Risposta
201 Created — tutte le spedizioni create:
{
"tracingId": "TRACE-123",
"success": [
{
"id": 1,
"parcelNumber": "05305000123456",
"label": "base64-encoded-PDF..."
}
],
"failed": []
}
207 Multi-Status — successo parziale:
{
"tracingId": "TRACE-456",
"success": [ { "id": 1, "parcelNumber": "05305000123456", "label": "..." } ],
"failed": [
{
"id": 2,
"fieldErrors": {
"receiver.countryCode": ["NOT_SUPPORTED"],
"receiver.email": ["REQUIRED_FOR_INTERNATIONAL"]
}
}
]
}
Codici di stato:
| Codice | Descrizione |
|---|---|
201 Created | Tutte le spedizioni create con successo |
207 Multi-Status | Alcune riuscite, altre fallite |
400 Bad Request | Payload della richiesta non valido |
401 Unauthorized | Token mancante o non valido |
Esempio
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"
}
}
]'
Stampa manifesto
Genera un PDF di manifesto che elenca le spedizioni consegnate a DPD per un determinato numero di fatturazione. Supporta la tracciabilità del ritiro giornaliero — il file viene restituito come allegato PDF ed è destinato a essere stampato e conservato con i pacchi.
Endpoint: POST /api/v1/shipments/print-manifest
Produce: application/pdf
Autenticazione: Token JWT Bearer obbligatorio
L'endpoint restituisce solo le spedizioni di proprietà dell'utente autenticato. Filtrare il risultato con un intervallo di date (fromDate/toDate, applicato a importedAt) e/o un elenco esplicito di parcelNumbers — almeno uno dei due filtri è obbligatorio.
Richiesta
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"
}
}
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
invoicingNumber | String | Obbligatorio | Numero di fatturazione che delimita il manifesto |
fromDate | Data (yyyy-MM-dd) | Condizionale | Limite inferiore inclusivo di importedAt. Obbligatorio se parcelNumbers non è fornito. Deve essere fornito insieme a toDate |
toDate | Data (yyyy-MM-dd) | Condizionale | Limite superiore inclusivo di importedAt. Obbligatorio se parcelNumbers non è fornito. Deve essere fornito insieme a fromDate |
parcelNumbers | Array<String> | Condizionale | Restringe il manifesto a specifici numeri di pacco. Obbligatorio se non viene fornito alcun intervallo di date |
address | Oggetto | Facoltativo | Indirizzo di ritiro che delimita il manifesto. Viene letto solo reference; tutti gli altri campi dell'indirizzo sono ignorati. Il riferimento viene risolto in base alla configurazione cliente. Se omesso e il risultato copre più ritiri, viene utilizzato il primo ritiro trovato e le altre spedizioni vengono silenziosamente scartate |
printSettings | Oggetto | Obbligatorio | Impostazioni di stampa applicate al manifesto generato |
Campi printSettings
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
printRecipientReference | Boolean | Facoltativo | Stampa la colonna riferimento destinatario |
printParcelReference1 | Boolean | Facoltativo | Stampa il riferimento pacco 1 |
printParcelReference2 | Boolean | Facoltativo | Stampa il riferimento pacco 2 |
printUserName | Boolean | Facoltativo | Stampa il nome utente sul manifesto |
printWeight | Boolean | Facoltativo | Stampa la colonna peso del pacco |
sortOrderForManifest | Enum | Obbligatorio | Ordinamento delle spedizioni sul manifesto |
Valori di sortOrderForManifest:
| Valore | Descrizione |
|---|---|
CONSIGNEE_ZIP | Ordinamento per CAP del destinatario |
CONSIGNEE_COUNTRY | Ordinamento per paese del destinatario |
CONSIGNEE_NAME | Ordinamento per nome del destinatario |
REFERENCE_1 | Ordinamento per riferimento pacco 1 |
PARCEL_NUMBER | Ordinamento per numero di pacco |
Caso d'uso comune — manifesto di oggi
Il caso di integrazione più frequente è la generazione del manifesto per le spedizioni importate oggi, appena prima del ritiro da parte del corriere. Impostare fromDate e toDate sulla data odierna (giorni UTC) e omettere parcelNumbers per includere tutte le spedizioni di quel numero di fatturazione in quella giornata:
{
"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\"
}
}"
Note:
fromDate/toDatevengono confrontati conimportedAtin UTC (dall'inizio alla fine della giornata). Le spedizioni importate dopo la mezzanotte UTC del giorno di calendario successivo nel fuso orario locale non appariranno.- Fornire
address: {"reference": "PICKUP-001"}per limitare a un ritiro specifico quando l'utente ne ha più di uno.
Risposta
200 OK — manifesto generato; il corpo è il flusso PDF.
| Header | Valore |
|---|---|
Content-Type | application/pdf |
Content-Disposition | attachment; filename="manifest.pdf" |
Content-Length | Dimensione del PDF in byte |
Codici di stato
| Codice | Descrizione |
|---|---|
200 OK | Manifesto generato |
400 Bad Request | Filtro mancante o non valido (ad es. solo fromDate o toDate impostato, fromDate successivo a toDate, né intervallo di date né parcelNumbers forniti, printSettings mancante, address.reference non risolvibile) |
401 Unauthorized | Token mancante o non valido |
404 Not Found | Nessuna spedizione corrisponde al filtro, o nessuna corrisponde al ritiro richiesto |
Esempio
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"
}
}'