Ordres d'enlèvement
Créez des ordres d'enlèvement planifiés et récurrents. DPD collectera les colis à votre adresse les jours et créneaux horaires spécifiés.
| Point de terminaison | Authentification |
|---|---|
POST /api/v1/pickup-orders | Jeton JWT Bearer requis |
Requête
Paramètre de requête : lang (facultatif) — p. ex. de_CH, en_US, fr_CH, it_CH
Corps : List<PickupOrderDTO>
Champs
| Champ | Type | Longueur | Obligatoire | Description |
|---|---|---|---|---|
invoicingNumber | String | 1–20 | Oui | Numéro de facturation client |
pickupDate | String | 10 | Oui | Date d'enlèvement planifiée (yyyy-MM-dd), doit être future |
weekDay | Integer | — | Non | Jour de la semaine (1=Lun … 7=Dim). Calculé automatiquement à partir de pickupDate si omis |
fromTime1 | String | 5 | Non | Début du créneau matin (HH:mm) |
toTime1 | String | 5 | Non | Fin du créneau matin (HH:mm) |
fromTime2 | String | 5 | Non | Début du créneau après-midi (HH:mm) |
toTime2 | String | 5 | Non | Fin du créneau après-midi (HH:mm) |
address | AddressDTO | — | Oui | Adresse du lieu d'enlèvement |
numberOfParcels | Integer | — | Oui | Nombre de colis prévu (1–99) |
tour | String | 0–50 | Non | Identifiant de tournée/route |
clientSoftware | String | 1–30 | Oui | Nom de l'application cliente. La requête est rejetée si la valeur est absente ou vide |
clientVersion | String | 1–10 | Oui | Version de l'application cliente. La requête est rejetée si la valeur est absente ou vide |
Créneaux horaires
Vous pouvez spécifier jusqu'à deux créneaux horaires (matin et après-midi). Laissez les champs de l'après-midi vides pour un créneau continu unique.
| Créneau | Champs | Exemple |
|---|---|---|
| Matin | fromTime1 / toTime1 | 08:00 / 12:00 |
| Après-midi | fromTime2 / toTime2 | 13:00 / 17:00 |
Exemple
curl -X POST "https://label-print-shipments.dpd.ch/api/v1/pickup-orders?lang=fr_CH" \
-H "Authorization: Bearer <jwt_token>" \
-H "Content-Type: application/json" \
-d '[
{
"invoicingNumber": "12345678",
"pickupDate": "<next working day, yyyy-MM-dd>",
"weekDay": 5,
"fromTime1": "08:00",
"toTime1": "12:00",
"fromTime2": "13:00",
"toTime2": "17:00",
"numberOfParcels": 15,
"address": {
"name": "Warehouse Location A",
"countryCode": "CH",
"zipCode": "8000",
"city": "Zürich",
"street": "Industriestrasse 45",
"phone": "+41441234567",
"email": "warehouse@company.ch",
"reference": "WAREHOUSE-A"
},
"tour": "TOUR-ZH-WEST",
"clientSoftware": "Customer App",
"clientVersion": "4.0.0"
}
]'
Réponse
201 Created — tous les ordres créés :
{
"tracingId": "TRACE-321",
"success": [
{ "tracingId": "123456789" }
],
"failed": []
}
Chaque élément de success[] porte le tracingId attribué à l'ordre créé, ainsi que
identificationNumber renvoyé lorsque l'élément de la requête en fournissait un. Un élément de
succès ne comporte pas de champ id — id n'apparaît que dans les éléments failed[].
Les champs nuls sont omis des réponses : un élément de succès ne contient donc souvent que
tracingId.
207 Multi-Status — succès partiel avec erreurs au niveau des champs. Chaque entrée de failed[] porte une identificationNumber (reprend la valeur fournie par le client, lorsque l'élément d'entrée en avait une) et un errorCode ; les violations de champ apparaissent comme un tableau fieldErrors[] plat, chaque entrée portant son propre path :
{
"tracingId": "TRACE-322",
"success": [],
"failed": [
{
"identificationNumber": "client-supplied-id-5",
"errorCode": "SYS-VALIDATION-FAILURE",
"fieldErrors": [
{
"path": "numberOfParcels",
"code": "SHP-VAL-NUMBEROFPARCELS-MAX-CHARACTERS",
"message": "Number of parcels exceeds the maximum allowed length."
},
{
"path": "address.countryCode",
"code": "SHP-VAL-COUNTRYCODE-REQUIRED",
"message": "Country code is required."
}
]
}
]
}
Un échec transitoire (sans fieldErrors — une panne n'est pas un problème de champ) se présente ainsi :
{
"identificationNumber": "client-supplied-id-7",
"errorCode": "SHP-ROUTING-ENGINE-UNAVAILABLE",
"reason": "SHP-ROUTING-ENGINE-UNAVAILABLE: Routing engine is temporarily unavailable. Please try again."
}
Codes de statut :
| Code | Description |
|---|---|
201 Created | Tous les ordres d'enlèvement créés |
207 Multi-Status | Certains ont réussi, d'autres ont échoué |
400 Bad Request | Erreur de validation, ou tous les éléments du lot ont échoué — quelle que soit la cause, y compris une panne du moteur de routage |
401 Unauthorized | Jeton manquant ou invalide |
Différence avec les demandes de collecte
| Ordres d'enlèvement | Demandes de collecte | |
|---|---|---|
| Fréquence | Récurrent (planning hebdomadaire) | Ponctuel |
| Créneaux horaires | Jusqu'à 2 (matin + après-midi) | Défini par DPD |
| Limite de colis | 99 | 999 |
| Champ poids | Non requis | Facultatif (grammes) |