API DPD Label Print Expédition
Le webservice DPD Label Print (API REST) permet l'intégration côté serveur des services d'expédition DPD dans votre ERP, CRM ou plateforme e-commerce — sans nécessiter l'application de bureau. Générez des étiquettes, suivez des colis et planifiez des enlèvements de manière programmatique.
L'API d'expédition vous permet d'intégrer les services d'envoi DPD dans vos applications — création d'envois, suivi, recherche de points de collecte et planification des enlèvements.
URL de base: https://label-print-shipments.dpd.ch
Version de l'API: v1
Authentification: Jeton JWT Bearer (voir Authentification)
Référence API
| API | Points de terminaison | Description |
|---|---|---|
| Authentification | 2 | Connexion utilisateur et génération de jetons JWT |
| Expéditions | 1 | Créer des envois avec génération automatique d'étiquettes |
| Suivi | 1 | Données de suivi des colis en temps réel |
| Points de collecte | 3 | Rechercher et consulter les détails des points de collecte |
| Demandes de collecte | 1 | Planifier des collectes ponctuelles de colis |
| Ordres d'enlèvement | 1 | Créer des plannings d'enlèvement récurrents |
Démarrage rapide
1. Obtenir un jeton d'accès
curl -X POST "https://label-print-shipments.dpd.ch/api/v1/login" \
-H "Content-Type: application/json" \
-d '{
"username": "votre_utilisateur",
"password": "votre_mot_de_passe"
}'
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "..."
}
2. Appeler n'importe quel point de terminaison API
Incluez le jeton dans chaque requête :
curl -X GET "https://label-print-shipments.dpd.ch/api/v1/tracking/05305000123456" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
Concepts communs
Validation des adresses
Tous les champs d'adresse suivent des règles cohérentes :
{
"name": "Nom de la société", // obligatoire, max 35 caractères
"countryCode": "CH", // obligatoire, code ISO à 2 lettres
"zipCode": "8000", // obligatoire, max 9 caractères
"city": "Zürich", // obligatoire, max 35 caractères
"street": "Bahnhofstrasse 1", // obligatoire, max 35 caractères
"phone": "+41441234567", // obligatoire pour GB
"email": "info@societe.ch" // obligatoire pour non-CH/LI
}
Exigences spécifiques aux pays :
- NL :
houseNumberest obligatoire - GB :
phoneest obligatoire (format international) - US/CA :
stateCodeest obligatoire - Non-CH/LI :
emailest obligatoire (sauf GB)
Codes de service
| Code | Service | Description |
|---|---|---|
B2B | DPD CLASSIC | Livraison nationale et internationale standard |
B2BI | DPD CLASSIC International | Envoi B2B international |
B2BP | DPD CLASSIC Predict | Avec notification au destinataire |
PM2 | DPD CLASSIC Guarantee | Livraison garantie avant 18:00 |
B2C | DPD COMFORT | Avec notification au destinataire |
HOME | DPD HOME | Avec notification au destinataire |
AM1 | DPD EXPRESS 10:00 | Livraison garantie avant 10:00 |
AM2 | DPD EXPRESS 12:00 | Livraison garantie avant 12:00 |
PSD | DPD SHOP | Livraison en point relais |
PL | DPD PARCEL LETTER | Petits articles, max 2 kg |
PBOX | DPD PARCELBOX | GPS + photo, max 5 kg |
RET | Retour | Retour de marchandises |
CR | Demande de collecte | Enlèvement du client vers le client final |
LQ | Limited Quantities | Marchandises dangereuses (quantités limitées) |
SWAP | SWAP | Remplacement rapide de marchandises refusées |
TYRE | Pneus | Expédition de pneus en vrac |
Réponses d'erreur
Tous les points de terminaison retournent des objets d'erreur cohérents :
{
"timestamp": "2025-10-30T10:30:00Z",
"status": 400,
"error": "Bad Request",
"message": "Échec de la validation",
"path": "/api/v1/shipments"
}
207 Multi-Status — succès partiel (certains éléments ont réussi, d'autres ont échoué) :
{
"tracingId": "TRACE-123",
"success": [],
"failed": [
{
"id": 2,
"fieldErrors": {
"field.name": ["error_code"]
}
}
]
}
Langues prises en charge
Transmettez l'en-tête ou le paramètre de requête locale pour obtenir des messages et des descriptions de suivi localisés :
| Langue | Valeurs locale |
|---|---|
| Allemand | de_CH, de_DE |
| Anglais | en_US, en_GB |
| Français | fr_CH, fr_FR |
| Italien | it_CH, it_IT |
Environnements
| Environnement | URL de base |
|---|---|
| Production | https://label-print-shipments.dpd.ch |
| Staging | https://label-print-shipments-st.dpd.ch |
Limitation de débit
Tous les points de terminaison sont soumis à une limitation de débit. Le dépassement des limites retourne 429 Too Many Requests.
| En-tête | Description |
|---|---|
X-RateLimit-Limit | Nombre maximum de requêtes autorisées dans la fenêtre |
X-RateLimit-Remaining | Requêtes restantes dans la fenêtre courante |
X-RateLimit-Reset | Horodatage Unix de réinitialisation de la fenêtre |
Recommandations :
- Mettez en cache les données des points de collecte (elles changent rarement) pour réduire les appels API
- Implémentez un back-off exponentiel lorsque vous recevez une réponse
429 - Utilisez des requêtes d'expédition par lots plutôt que des appels individuels lorsque c'est possible
OpenAPI / Swagger
La documentation API interactive et les spécifications lisibles par machine sont disponibles directement sur chaque service :
| Ressource | URL |
|---|---|
| Swagger UI | https://label-print-shipments.dpd.ch/swagger-ui/index.html |
| OpenAPI JSON | https://label-print-shipments.dpd.ch/v3/api-docs |
| OpenAPI YAML | https://label-print-shipments.dpd.ch/v3/api-docs.yaml |
Bonnes pratiques
- Jetons : stocker de manière sécurisée, renouveler avant expiration, ne jamais exposer dans les URLs ou les journaux
- Limitation de débit : gérer
429 Too Many Requestsavec un back-off exponentiel ; mettre en cache les données des points de collecte - Gestion des erreurs : vérifier les codes de statut HTTP ; implémenter une logique de nouvelle tentative pour les erreurs 5xx
- Validation : valider les données côté client avant l'envoi ; respecter les règles spécifiques aux pays
- Traitement par lots : utiliser la création d'expéditions par lots pour minimiser les allers-retours et la consommation de la limite de débit