Aller au contenu principal

Points de collecte

Recherchez des points relais DPD (points de collecte, consignes, points de service) par adresse ou coordonnées GPS.

Chemin de baseAuthentification
/api/v1/parcel-shopJeton JWT Bearer requis

Récapitulatif des points de terminaison

MéthodePoint de terminaisonDescription
GET/api/v1/parcel-shop/{parcelShopId}Obtenir un point relais spécifique par son identifiant
POST/api/v1/parcel-shop/addressRechercher des points relais par adresse
POST/api/v1/parcel-shop/coordinatesRechercher des points relais par coordonnées GPS

GET /api/v1/parcel-shop/{parcelShopId}

Consulter les détails d'un point relais spécifique.

Paramètre de chemin : parcelShopId — p. ex. FR64548. La forme numérique renvoyée comme parcelShopId dans les réponses (p. ex. 70825452535256) est également acceptée.

Paramètre de requête : lang (facultatif) — en, de, fr ou it. Détermine weekDay et services[].description. À défaut, Accept-Language est utilisé, puis la langue par défaut de l'unité commerciale.

curl -X GET "https://label-print-shipments.dpd.ch/api/v1/parcel-shop/FR64548?lang=fr" \
-H "Authorization: Bearer <jwt_token>"

Réponse 200 OK (horaires d'ouverture réduits à deux jours) :

{
"id": "FR64548",
"parcelShopId": 70825452535256,
"name": "Chris’music",
"order": 1,
"distance": 0,
"type": 100,
"countryNum": "250",
"address": {
"countryCode": "FR",
"zipCode": "71500",
"city": "LOUHANS",
"street": "RUE DES BORDES",
"street2": "",
"street3": "",
"houseNumber": "57",
"language": "FR"
},
"locationHint": "",
"mapUrl": "",
"available": "partial",
"latitude": 46.624802,
"longitude": 5.224876,
"openingHours": [
{
"weekDay": "Lundi",
"openMorning": "09:30",
"closeMorning": "12:00",
"openAfternoon": "14:00",
"closeAfternoon": "19:00"
},
{
"weekDay": "Vendredi",
"openMorning": "09:30",
"closeMorning": "12:00"
}
],
"holidays": [
{ "start": "15/08/2026", "end": "29/08/2026" }
],
"services": [
{ "code": "100", "available": true, "description": "Collecte chez le destinataire" },
{ "code": "200", "available": true, "description": "Paiement en ligne des colis accepté" },
{ "code": "991", "available": true, "description": "Retours acceptés" }
]
}

Remarques sur la structure de la réponse :

  • Les champs sans valeur sont omis, jamais renvoyés à null. Dans l'exemple, l'entrée du vendredi n'a ni openAfternoon ni closeAfternoon, car ce jour ne comporte qu'une seule plage d'ouverture. Ne partez pas du principe qu'une clé est présente.
  • Les dates de holidays utilisent le format dd/MM/yyyy, et non ISO 8601. Le reste de l'API utilise des dates ISO.
  • parcelShopId est l'encodage numérique de id ; les deux désignent le même point relais.
  • weekDay et services[].description sont localisés selon lang.

Codes de statut : 200 OK | 401 Unauthorized | 404 Not Found


POST /api/v1/parcel-shop/address

Recherche de points relais près d'une adresse. Résultats triés par distance (le plus proche en premier).

Corps de la requête :

ChampTypeObligatoireDescriptionDéfaut
countryString (2)OuiCode pays ISO
zipCodeStringOuiCode postal
cityStringNonNom de la ville
streetStringNonNom de la rue
destCountryCodeStringNonPays de destination pour le filtrage des services
weightStringNonPoids du colis en kg
servicesStringNonCodes de service séparés par des virgules
typeStringNonFiltre par type de point relais
limitIntegerNonNombre maximum de résultats25
availabilityDateStringNonVérifier la disponibilité à une date (yyyy-MM-dd)
hideClosedBooleanNonExclure les points actuellement fermésfalse
curl -X POST "https://label-print-shipments.dpd.ch/api/v1/parcel-shop/address?lang=fr_CH" \
-H "Authorization: Bearer <jwt_token>" \
-H "Content-Type: application/json" \
-d '{
"country": "CH",
"zipCode": "1000",
"city": "Lausanne",
"limit": 10
}'

Codes de statut : 200 OK (peut retourner une liste vide) | 400 Bad Request | 401 Unauthorized


POST /api/v1/parcel-shop/coordinates

Recherche de points relais près de coordonnées GPS. Mêmes filtres et même format de réponse que la recherche par adresse.

Corps de la requête :

ChampTypeObligatoireDescription
latitudeDoubleOuiLatitude GPS (−90 à 90)
longitudeDoubleOuiLongitude GPS (−180 à 180)
destCountryCodeStringNonPays de destination
limitIntegerNonNombre maximum de résultats (défaut : 25)
hideClosedBooleanNonExclure les points fermés (défaut : false)
availabilityDateStringNonVérifier la disponibilité à une date
curl -X POST "https://label-print-shipments.dpd.ch/api/v1/parcel-shop/coordinates" \
-H "Authorization: Bearer <jwt_token>" \
-H "Content-Type: application/json" \
-d '{
"latitude": 47.3769,
"longitude": 8.5417,
"limit": 10,
"hideClosed": true
}'

Codes de statut : 200 OK | 400 Bad Request | 401 Unauthorized


Types de points relais

type n'est pas défini par cette API. La valeur est transmise telle quelle depuis le service DPD PUDO en amont, à la fois dans la réponse et dans le filtre de requête optionnel type, qui utilisent donc le même espace de valeurs.

TypeDescription
100DPD Pickup Point
200DPD Locker
300Commerce partenaire (p. ex. La Poste)
400Service Point

Considérez la liste comme incomplète et non comme fermée : ces valeurs appartiennent au service en amont, ne rejetez donc pas une valeur que vous ne reconnaissez pas.

type est un champ distinct de services[].code, même si les deux utilisent des nombres à trois chiffres. Un point relais avec "type": 100 peut porter n'importe quelle combinaison de codes service.

Pour filtrer par type de point relais, utilisez une valeur que vous avez observée dans une réponse pour la même région plutôt qu'une valeur devinée.


Exemples de code

Sélecteur de point relais dans un formulaire d'expédition :

async function searchParcelShops(zipCode, city) {
const response = await fetch(
'https://label-print-shipments.dpd.ch/api/v1/parcel-shop/address',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ country: 'CH', zipCode, city, limit: 10 })
}
);
return response.json();
}

Localisateur basé sur une carte :

function findNearby(lat, lng) {
return fetch('https://label-print-shipments.dpd.ch/api/v1/parcel-shop/coordinates', {
method: 'POST',
headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ latitude: lat, longitude: lng, limit: 20, hideClosed: true })
}).then(r => r.json());
}