Aller au contenu principal

Demandes de collecte

Planifiez une collecte ponctuelle de colis depuis votre adresse. DPD viendra collecter les colis à la date demandée, dans un créneau horaire spécifié.

Point de terminaisonAuthentification
POST /api/v1/collection-requestsJeton JWT Bearer requis

Requête

Paramètre de requête : lang (facultatif) — localise les messages d'erreur (p. ex. de_CH, en_US, fr_CH, it_CH)

Corps : List<CollectionRequestDTO>

Champs

ChampTypeLongueurObligatoireDescription
idLongNonIdentifiant de la demande pour le suivi dans la réponse
invoicingNumberString1–20OuiVotre numéro de facturation client DPD
pickupDateString10OuiDate de collecte souhaitée (yyyy-MM-dd), doit être une date future
referenceNumberString0–50NonVotre numéro de référence interne
noteString0–255NonInstructions spéciales de collecte
senderAddressDTOOuiAdresse où les colis seront collectés
receiverAddressDTOOuiAdresse de destination finale
requesterAddressDTONonPersonne demandant la collecte (par défaut, le destinataire)
numberOfParcelsIntegerOuiNombre de colis prévu. L'API n'impose aucune plage de valeurs
weightIntegerNonPoids total de tous les colis en grammes
serviceCodeStringOuiDoit être présent, mais la valeur est ignorée — les demandes d'enlèvement sont toujours créées en B2B
clientSoftwareString1–30OuiNom de votre application. La requête est rejetée si la valeur est absente ou vide
clientVersionString1–10OuiVersion de votre application. La requête est rejetée si la valeur est absente ou vide

Exemple

curl -X POST "https://label-print-shipments.dpd.ch/api/v1/collection-requests?lang=fr_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": "Société Expéditrice SA",
"countryCode": "CH",
"zipCode": "1000",
"city": "Lausanne",
"street": "Route de Berne 25",
"phone": "+41441234567"
},
"receiver": {
"name": "Société Destinataire SARL",
"countryCode": "FR",
"zipCode": "75001",
"city": "Paris",
"street": "Rue de Rivoli 1"
}
}
]'

Réponse

201 Created — toutes les demandes créées :

{
"tracingId": "TRACE-789",
"success": [
{ "tracingId": "BPsEYzTIZ" }
],
"failed": []
}

Chaque élément de success[] porte le tracingId attribué à la demande créée, ainsi que identificationNumber renvoyé lorsque l'élément de la requête en fournissait un. Un élément de succès ne comporte ni id ni referenceNumberid 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. 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-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."
}
]
}
]
}

Un échec transitoire (sans fieldErrors — une panne n'est pas un problème de champ) se présente ainsi :

{
"identificationNumber": "client-supplied-id-6",
"errorCode": "SHP-ROUTING-ENGINE-UNAVAILABLE",
"reason": "SHP-ROUTING-ENGINE-UNAVAILABLE: Routing engine is temporarily unavailable. Please try again."
}

Codes de statut :

CodeDescription
201 CreatedToutes les demandes de collecte créées
207 Multi-StatusCertaines ont réussi, d'autres ont échoué
400 Bad RequestErreur 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 UnauthorizedJeton manquant ou invalide

Remarques

  • pickupDate doit être une date future ; les dates passées sont rejetées
  • weight est exprimé en grammes (p. ex. 25000 = 25 kg)
  • La validation des adresses suit les mêmes règles spécifiques aux pays que les Expéditions (numéro de maison NL, téléphone GB, e-mail non-CH/LI, etc.)