Aller au contenu principal

Expéditions

Créez une ou plusieurs expéditions en une seule requête. L'API valide tous les champs, génère les numéros de colis, enrichit les données de routage et retourne des étiquettes PDF.

Point de terminaison: POST /api/v1/shipments Authentification: Jeton JWT Bearer requis


Créer une expédition

Requête

Content-Type: application/json Corps: tableau d'objets expédition

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

Champs principaux de l'expédition

ChampTypeLongueurObligatoireDescription
invoicingNumberString1–20OuiNuméro de facturation client
numberOfParcelsIntegerOuiNombre total de colis (1–99)
serviceCodeStringOuiCode service DPD (PSD, PSI, PL, PBOX, RET)
mpsIdStringNonIdentifiant Master Parcel Shipment pour regroupement
customerReferenceNumber1String0–35NonRéférence client 1
customerReferenceNumber2String0–35NonRéférence client 2
customerReferenceNumber3String0–35NonRéférence client 3
customerReferenceNumber4String0–35NonRéférence client 4
shipmentNoteString0–255NonNote sur l'expédition
parcelShopIdStringConditionnelRequis pour les services de livraison en point relais
clientSoftwareStringNonNom de l'application cliente
clientVersionStringNonVersion de l'application cliente

Champs d'adresse (expéditeur / destinataire / retour)

ChampTypeLongueurObligatoireRemarques
nameString1–35OuiNom de la société ou de la personne
name2String0–35NonLigne de nom supplémentaire
contactString0–35NonPersonne de contact
countryCodeString2OuiISO 3166-1 alpha-2
stateCodeString2ConditionnelRequis pour US/CA
zipCodeString1–9OuiCode postal
cityString1–35OuiVille
streetString1–35OuiNom et numéro de rue
street2String0–35NonLigne d'adresse supplémentaire
houseNumberString0–8ConditionnelRequis pour NL
phoneString0–30ConditionnelRequis pour GB — format international +CCNNNNNN
emailString0–50ConditionnelRequis pour les pays non-CH/LI (sauf GB)
eoriString0–22ConditionnelRequis pour GB/NO à l'international
vatString0–20ConditionnelRequis pour GB/NO à l'international (non-CH)
languageString2NonISO 639-1 (DE, EN, FR, IT)
referenceString0–35NonRéférence d'adresse
noteString0–70NonInstructions de livraison
glnString0–13NonGlobal Location Number

Informations sur les colis (parcelInfo[])

Tableau d'objets colis — une entrée par colis physique. Le nombre d'entrées doit correspondre à numberOfParcels.

ChampTypeLongueurObligatoireDescription
serviceCodeStringOuiCode de service au niveau du colis
optionCodesArray<String>NonCodes d'options de service supplémentaires
contentStringNonDescription du contenu du colis (PCONTENT)
weightIntegerNonPoids du colis en grammes
reference1String0–35NonRéférence colis 1
reference2String0–35NonRéférence colis 2
reference3StringNonRéférence colis 3
reference4StringNonRéférence colis 4
higherInsuranceObjectNonService supplémentaire d'assurance complémentaire (voir ci-dessous)
limitedQuantitiesObjectNonDonnées de quantités limitées (marchandises dangereuses) (voir ci-dessous)

Champs higherInsurance :

ChampTypeLongueurObligatoireDescription
amountNumberOuiMontant assuré
currencyString3OuiCode devise ISO 4217

Champs limitedQuantities :

ChampTypeLongueurObligatoireDescription
unNumberStringNonNuméro ONU de marchandises dangereuses
codeStringNonCode de substance
packagingGroupStringNonGroupe d'emballage
klassStringNonClasse de marchandises dangereuses
subWeightIntegerNonPoids de la substance

Données douanières (customsData)

Requis pour les envois internationaux (dédouanement non national).

ChampTypeLongueurObligatoireDescription
shipmentTypeString1OuiType de colis (PARCELTYPE)
valueNumberOuiValeur en douane des marchandises (CAMOUNT)
currencyString3NonDevise ISO 4217 pour value
valueExNumberNonValeur en douane supplémentaire (CAMOUNTEX)
currencyExString3NonDevise ISO 4217 pour valueEx
reasonForExportString2OuiCode de motif d'exportation
termsOfDeliveryString2OuiIncoterms / conditions de livraison (CTERMS)
clearanceClearedString1OuiIndicateur de dédouanement
opCodeString3NonCode d'opération
preAlertStatusString3NonStatut de pré-alerte
contentString0–35NonDescription du contenu douanier (CCONTENT)
paperString1NonIndicateur de document (CPAPER)
highLowValueString1NonIndicateur de valeur haute/basse
invoiceNumberString0–35NonNuméro de facture commerciale (CINVOICE)
dateDate (yyyy-MM-dd)OuiDate de facture (CINVOICEDATE)
exportMRNString0–209NonExport Movement Reference Number (SHIPMRN)
documentTypesArray<String>≤20 entréesNonTypes de documents douaniers
commentString0–70NonCommentaire douanier (CCOMMENT)
comment2String0–70NonEnregistrement dans le pays de destination (DESTCOUNTRYREG)
senderHMRCString0–15NonEnregistrement HMRC de l'expéditeur
senderInvoicingAddressObjectNonAdresse de facturation de l'expéditeur (objet adresse)
receiverInvoicingAddressObjectNonAdresse de facturation du destinataire (objet adresse)
numberOfInvoiceLinesIntegerNonNombre de lignes de facture (NUMBEROFARTICLE)
invoiceLinesArray<Object>ConditionnelLignes de facture (voir ci-dessous). Nombre compris entre le nombre de colis et le nombre de colis + 20

Champs invoiceLines[] :

ChampTypeLongueurObligatoireDescription
natureOfGoodsString0–200NonNature des marchandises (CCONTENT)
hsCodeString0–11NonCode tarifaire SH
productCodeString0–255NonCode produit (CPRODCODE)
amountNumberNonMontant de la ligne (CAMOUNTLINE)
grossWeightIntegerNonPoids brut (CGROSSWEIGHT)
qItemsIntegerOuiQuantité d'articles
countryOfOriginString3NonPays d'origine ISO (CORIGIN)

Options d'impression

ChampTypeObligatoireDescription
paperSizeStringNonA4 ou A6 (défaut : A4)
startPositionStringNonPosition de l'étiquette sur la feuille A4 : UPPER_LEFT, UPPER_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT

Réponse

201 Created — toutes les expéditions créées :

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

207 Multi-Status — succès partiel :

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

Codes de statut :

CodeDescription
201 CreatedToutes les expéditions créées avec succès
207 Multi-StatusCertaines ont réussi, d'autres ont échoué
400 Bad RequestCharge utile de requête invalide
401 UnauthorizedJeton manquant ou invalide

Exemple

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"
}
}
]'

Imprimer le manifeste

Génère un PDF de manifeste listant les expéditions remises à DPD pour un numéro de facturation donné. Assure la traçabilité de l'enlèvement du jour — le fichier est retourné sous forme de pièce jointe PDF et est destiné à être imprimé et joint aux colis.

Point de terminaison: POST /api/v1/shipments/print-manifest Produit: application/pdf Authentification: Jeton JWT Bearer requis

Le point de terminaison renvoie uniquement les expéditions appartenant à l'utilisateur authentifié. Filtrez le résultat avec une plage de dates (fromDate/toDate, appliquée à importedAt) et/ou une liste explicite de parcelNumbersau moins l'un des deux filtres est requis.

Requête

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"
}
}
ChampTypeObligatoireDescription
invoicingNumberStringOuiNuméro de facturation délimitant le manifeste
fromDateDate (yyyy-MM-dd)ConditionnelBorne inférieure inclusive de importedAt. Requis si parcelNumbers n'est pas fourni. Doit être fourni avec toDate
toDateDate (yyyy-MM-dd)ConditionnelBorne supérieure inclusive de importedAt. Requis si parcelNumbers n'est pas fourni. Doit être fourni avec fromDate
parcelNumbersArray<String>ConditionnelRestreint le manifeste à des numéros de colis spécifiques. Requis si aucune plage de dates n'est fournie
addressObjetNonAdresse d'enlèvement délimitant le manifeste. Seul reference est lu ; tous les autres champs d'adresse sont ignorés. La référence est résolue via la configuration client. Si omise et que le résultat couvre plusieurs enlèvements, le premier enlèvement rencontré est utilisé et les autres expéditions sont silencieusement écartées
printSettingsObjetOuiParamètres d'impression appliqués au manifeste généré

Champs printSettings

ChampTypeObligatoireDescription
printRecipientReferenceBooleanNonImprimer la colonne référence du destinataire
printParcelReference1BooleanNonImprimer la référence colis 1
printParcelReference2BooleanNonImprimer la référence colis 2
printUserNameBooleanNonImprimer le nom de l'utilisateur sur le manifeste
printWeightBooleanNonImprimer la colonne poids du colis
sortOrderForManifestEnumOuiOrdre de tri des expéditions sur le manifeste

Valeurs de sortOrderForManifest :

ValeurDescription
CONSIGNEE_ZIPTri par code postal du destinataire
CONSIGNEE_COUNTRYTri par pays du destinataire
CONSIGNEE_NAMETri par nom du destinataire
REFERENCE_1Tri par référence colis 1
PARCEL_NUMBERTri par numéro de colis

Cas d'usage courant — manifeste du jour

Le cas d'intégration le plus fréquent est la génération du manifeste pour les expéditions importées aujourd'hui, juste avant l'enlèvement par le chauffeur. Définissez fromDate et toDate sur la date du jour (jours UTC) et omettez parcelNumbers pour inclure toutes les expéditions de ce numéro de facturation pour ce jour :

{
"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\"
}
}"

Remarques :

  • fromDate/toDate sont comparés à importedAt en UTC (du début à la fin de la journée). Les expéditions importées après minuit UTC du jour calendaire suivant dans votre fuseau local n'apparaîtront pas.
  • Fournissez address: {"reference": "PICKUP-001"} pour cibler un enlèvement spécifique lorsque l'utilisateur en a plusieurs.

Réponse

200 OK — manifeste généré ; le corps de la réponse est le flux PDF.

En-têteValeur
Content-Typeapplication/pdf
Content-Dispositionattachment; filename="manifest.pdf"
Content-LengthTaille du PDF en octets

Codes de statut

CodeDescription
200 OKManifeste généré
400 Bad RequestFiltre manquant ou invalide (p. ex. seul fromDate ou toDate défini, fromDate après toDate, ni plage de dates ni parcelNumbers fourni, printSettings manquant, address.reference non résoluble)
401 UnauthorizedJeton manquant ou invalide
404 Not FoundAucune expédition ne correspond au filtre ou à l'enlèvement demandé

Exemple

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"
}
}'