Skip to content

URL

Sandbox : https://partners-api-sandbox.shopopop.com/v2
Production : https://partners-api.shopopop.com/v2

URL API v1 URL API v2
POST https://partners.shopopop.com/deliveries/eligibility POST https://partners-api.shopopop.com/v2/deliveries/eligibility
POST https://partners.shopopop.com/deliveries POST https://partners-api.shopopop.com/v2/deliveries
PUT https://partners.shopopop.com/deliveries/{deliveryId}/delivery-slot PUT https://partners-api.shopopop.com/v2/deliveries/{deliveryId}/delivery-slot
POST https://partners.shopopop.com/deliveries/{deliveryId}/cancel DELETE https://partners-api.shopopop.com/v2/deliveries/{deliveryId}
GET https://partners.shopopop.com/deliveries/{deliveryId}/status SUPPRIMÉ, remplacé par
GET https://partners-api.shopopop.com/v2/deliveries/{deliveryId}
GET https://partners.shopopop.com/deliveries/{deliveryId}/history

SUPPRIMÉ, remplacé par
GET https://partners-api.shopopop.com/v2/deliveries/{deliveryId}

 


Authentification

Désormais l’authentification pour chaque appel à l’API V2 de Shopopop doit se faire en utilisant le principe de ‘Basic Access Authentication’ et être uniquement envoyé en tant qu’en-tête.

Le format attendu pour l'en-tête de la requête est le suivant :
Authorization: Basic <base64-encoded-partner_id:api_key>


En V1 :
Vous aviez deux possibilités :

  • Chaque appel contient deux informations au niveau de l’en-tête de la requête.
  • Les informations pouvaient être présente au niveau du corps de la requête.

 

En V2 :

L’en-tête de la requête contient :
Authorization: Basic <base64-encoded-"ABCD:EFGH">

Vos identifiants actuels fonctionneront également en V2. Si vous souhaitez connaître vos identifiant (Sandbox et Production), veuillez contacter support.api@shopopop.com.

Vous trouverez plus d’informations sur notre documentation.

 

Exemple :

Authorization: Basic cGFydG5lcl9pZDpwYXJ0bmVyX2tleQ==cGFydG5lcl9pZDpwYXJ0bmVyX2tleQ== : Correspond à l’encodage en base 64 de la chaîne de caractères “partner_id:api_key”

 

ℹ️  Le partner_key demandé en v2 correspond à l’api_key demandé en v1  ⇒ partner_key = api_key

 


POST /deliveries/eligibily - POST /deliveries

ℹ️ Si vous n’utilisiez pas la route eligibility dans la v1, elle n’est également pas obligatoire dans la v2.
ℹ️ Une grande partie des champs existants dans la v1 ont été renommés dans la v2.
ℹ️ Les nouveaux champs ajouté à la requête sont optionnels et permettront d’ajouter plus de contexte à la livraison.

La requête est maintenant divisé en 3 entités :

  • pickup
  • dropoff
  • delivery

Mapping du contenu des requêtes v1 vs v2

exemple code v1 v2

Détails entités pickup / dropoff / delivery

Entité pickup 

Entité lié au point de retrait.

Détails :

Champs v1

Champs v2

Description

Required

data.drive.id pickup.id L’identifiant du point de retrait dans votre système.
data.drive.name pickup.name Nom du point de retrait.  
ℹ️ Les informations des champs supprimés entre la version 1 et 2, n’étaient pas utilisées car elles sont paramétrées dans notre interface Shopopop lors de la création des points de retrait.

Exemples :

exemple code v1 v2

Entité dropoff

Entité liée à la dépose de la livraison.

Détails :

Champs v1 Champs v2 Description Required

data.delivery.delivery_date
data.delivery.start_hour

dropoff.dropoff_start

Changement
Le début du créneau de livraison(date et heure) au format ISO UTC

data.delivery.delivery_date
data.delivery.end_hour

dropoff.dropoff_end

Changement
La fin du créneau de livraison(date et heure) au format ISO UTC

data.client.first_name dropoff.contact.first_name Prénom du destinataire  
data.client.last_name dropoff.contact.last_name Nom du destinataire
data.client.email dropoff.contact.email Email du destinataire. Il doit être unique pour chaque destinataire.
⚠️ Attention, si vous envoyez une adresse mail par defaut pour plusieurs destinataire, cela va écraser les données précédentes à chaque nouvelle livraison.
data.client.telephone dropoff.contact.phone Téléphone du destinataire
data.address.street dropoff.street La rue du destinataire
data.address.zip_code dropoff.zip_code Le code postal du destinataire
data.address.city dropoff.city La ville du destinataire
data.address.country dropoff.country Le pays du destinataire  
data.address.telephone_other dropoff.phone_other Téléphone alternatif du destinataire  
🆕 Nouveau champ

dropoff.location_name

ℹ️ Ce champ est accepté mais n'est pas encore affiché dans tous nos produits

Nom de la localisation (nom d’une église, nom d’entreprise…)  
data.address.type dropoff.type

ℹ️ Ce champ est accepté mais n'est pas encore affiché dans tous nos produits

🆕 Nouvelles données
Type de localisation dans la liste suivante :
COMPANY PLACE_OF_WORSHIP HEALTH_FACILITY CEMETERY FUNERAL_HOME PRIVATE_HOME
Par défaut : PRIVATE_HOME

 
data.address.digicode dropoff.entry_code Digicode de l’adresse du destinataire  
data.address.floor SUPPRIMÉ  Étage de l’adresse du destinataire.  
data.address.elevator dropoff.elevator Ascenseur de l’adresse du destinataire
Si  null sera traduit par “Ne sait pas” dans le back-office et l’application mobile
 
data.address.comment dropoff.comment Information supplémentaire de l’adresse du destinataire  
data.address.latitude dropoff.latitude Coordonnées GPS de l’adresse du destinataire  
data.address.longitude dropoff.longitude Coordonnées GPS de l’adresse du destinataire  

Exemples : 

exemple code v1 v2

Entité delivery

Information sur la livraison et son contenu.

Détails :

Champs v1 Champs v2 Description Required
data.delivery.trip_id
delivery.id
Identifiant unique de la livraison
data.delivery
delivery.order
Entité contenant des informations sur la commande
data.delivery.reference delivery.order.reference Référence de la commande
data.delivery.amount delivery.order.amount Montant total de la commande.
data.delivery.quantity delivery.order.number_of_items Nombre total d’articles  
data.delivery.has_fresh_food delivery.order.frozen_food Changement
Est-ce que la commande contient des produits surgelés ?
Par défaut : FALSE
Attention, ce champs ne concerne désormais que les articles surgelés.
 
🆕 Nouveau champ

delivery.order.alcohol

ℹ️ Ce champ est accepté mais n'est pas encore affiché dans tous nos produits

Est-ce que la commande contient de l’alcool ?
Par défaut : FALSE
 
data.delivery.other_detail delivery.order.order_detail Détails des articles de la commande  
data.delivery.other_detail.title delivery.order.order_detail.title Nom de l’article  
data.delivery.other_detail.quantity delivery.order.order_detail.quantity Quantité de l’article  
🆕 Nouvelle entité delivery.content_size

Entité contenant les informations de dimensions de la commande à livrer.
⚠️  1 élément est obligatoire. 

🆕 Nouveau champ delivery.content_size.category Taille de la commande avec des tailles de t-shirt : XS S M L XL XXL)  
data.delivery.weight delivery.content_size.weight Poids total de la commande en Kg
 
data.delivery.volume delivery.content_size.volume Volume total de la commande en Litres  
🆕 Nouvelle entité delivery.content_size.dimensions Entité contenant les dimensions en cm de la commande  
🆕 Nouveau champ delivery.content_size.dimensions.length Longueur totale des articles de la commande  
🆕 Nouveau champ delivery.content_size.dimensions.height Hauteur totale des articles de la commande  
🆕 Nouveau champ delivery.content_size.dimensions.depth Profondeur totale des articles de la commande  

🆕 Nouveau champ

delivery.content_size.heavy_item

ℹ️ Ce champ est accepté mais n'est pas encore affiché dans tous nos produits

Est-ce qu’il y a présence d’un article lourd ?
Par défaut : FALSE
 
🆕 Nouveau champ

delivery.content_size.bulky_item

ℹ️ Ce champ est accepté mais n'est pas encore affiché dans tous nos produits

Est-ce qu’il y a un article volumineux ou encombrant ?
Par défaut : FALSE
 
🆕 Nouvelle entité delivery.content_size.size_for_florists Entité contenant des détails sur la taille des commandes pour les fleuristes.  
🆕 Nouveau champ delivery.content_size.size_for_florists.type Type d’articles : SINGLE_BOUQUET  FLORAL_ARRANGEMENT  TREE_PLANT  
🆕 Nouveau champ delivery.content_size.size_for_florists.quantity Nombre d’articles  
🆕 Nouveau champ

delivery.special_event

ℹ️ Ce champ est accepté mais n'est pas encore affiché dans tous nos produits

Pour quel évènement la commande est a livrer ? GIFT  FUNERAL  NONE
Par défaut : NONE
 
🆕 Nouveau champ

delivery.minimal_transport_mode

ℹ️ Ce champ est accepté mais n'est pas encore affiché dans tous nos produits

Quel mode transport minimum souhaitez-vous pour cette livraison ? TRANSPORT_1  TRANSPORT_2  TRANSPORT_3  TRANSPORT_4  TRANSPORT_5  TRANSPORT_6
Pour plus d’information, vous pouvez aller voir la documentation
 
delivery.additional_infos delivery.additional_infos Information complémentaire concernant la commande à livrer.
⚠️ Attention ce champ s’affiche en amont de la réservation sur l’application, il ne doit pas contenir de donnée personnelle. (Ex : numéro de téléphone / digicode …)
 

Exemples : 

exemple code v1 v2

 

Détails : delivery.special_event et data.address.type

Exemple pour une livraison de type deuil, vous pouvez envoyer :

  • delivery.special_event : FUNERAL

  • data.address.type : CEMETERY ou FUNERAL_HOME ou NONE

Correspondance des types de lieux :

  • Domicile d’un particulier : PRIVATE_HOME
  • Entreprise : COMPANY
  • Lieu de culte : PLACE_OF_WORSHIP
  • Lieu de santé : HEALTH_FACILITY
  • Cimetière : CEMETERY
  • Funérarium : FUNERAL_HOME

Détails : delivery.content_size

ℹ️ Si actuellement sur la v1, vous nous envoyez le poids ou la volume de la livraison, ils nous permettront toujours de déterminer la taille de la livraison.

Nous demandons au minimum 1 élément permettant de déterminer la taille de la livraison.

Pour plus d’information, vous pouvez consulter la documentation API.

 

Éléments permettant de déterminer la taille :

  • delivery.content_size.category
  • delivery.content_size.weight
  • delivery.content_size.volume
  • delivery.content_size.dimensions
  • delivery.content_size.size_for_florists

 

Matrice pour évaluer la delivery.content_size.category :

volumesAPI-1

Exemples :

V2  - delivery.content_size.category

delivery.content_size categorie


v2 -
delivery.content_size.size_for_florists

delivery.content_size fleuriste

V2 - delivery.content_size.dimensions

delivery.content_size dimensions

DELETE /deliveries/{deliveryId}

Cette route permet d’annuler une livraison.
Le corps de la requête n’a pas changé.

Changement de l’url :
POST /deliveries/{deliveryId}/cancel DELETE /deliveries/{deliveryId}

 

Exemples :

Code v1 v2

PUT /deliveries/{deliveryId}/delivery-slot

Cette route permet de modifier le créneau de la livraison, date ou heure.

Détails :

Champs v1 Champs v2 Description Required
delivery_start dropoff_start Début du nouveau créneau de livraison.
delivery_end dropoff_end Fin du nouveau créneau de livraison

Exemples :

code v1 v2

GET /deliveries

La route GET /deliveries remplace les deux routes :

  • GET /deliveries/status
  • GET /deliveries/history

Il est cependant recommandé d’utiliser les webhooks pour recevoir les statuts des livraisons à chaque changement. Pour plus d’information, vous pouvez aller voir la documentation.


Réponses

Réponses 2XX

Réponses v1 Réponses v2 Description Routes concernées
Changement
Success - 200
Success - 204 La livraison est modifiée PUT/delivery-slot
Changement
Success - 200
Success - 204 La livraison est annulée DELETE/deliveries

Réponses 4XX et 5XX

Réponses v1 Réponses v2 Description Routes concernées
Changement
WRONG_AUTHENTICATION_PARAM - 403
not_authorized - 401   POST /deliveries
POST /eligibility
DELETE /deliveries
PUT /delivery-slot
Changement
fields request data - 400
invalid_format - 400 Format invalid transmis. POST /deliveries
POST /eligibility
DELETE /deliveries
PUT /delivery-slot
Changement
ACTIVE_PICKUP_POINT_NOT_FOUND - 400
pickup_not_valid - 400 Pickup point n’est pas connu POST /deliveries
POST /eligibility
Changement
INVALID_RETAILER_CODE - 409
retailer_not_valid - 400 Enseigne n’est pas connu connu POST /deliveries
POST /eligibility
Changement
CANNOT_GEOLOCATE - 500
geocoding_impossible - 400 Le géocodage de l’adresse n’est pas possible  POST /deliveries
POST /eligibility
Changement
INVALID_COUNTRY - 400
different_countries - 400 Le pickup point et l’adresse de livraison n’est pas le dans le même pays POST /deliveries
POST /eligibility
Changement
WRONG_INTERVAL_BETWEEN_DELIVERY_DATES - 400
delivery_slot_too_short - 400 Créneau de livraison trop court POST /deliveries
POST /eligibility
PUT /delivery-slot
Changement
INVALID_DELIVERY_HOURS - 400
delivery_slot_not_valid - 400 Créneau de livraison non valide car en dehors des horaires de livraison. POST /deliveries
POST /eligibility
PUT /delivery-slot
Changement
ERRAND_UPDATE_IMPOSSIBLE - 400
delivery_cannot_be_shifted - 400 La livraison ne peut être modifié dût à un statut avancé PUT /delivery-slot
Changement
NOT_FOUND - 404
delivery_not_found - 404 La livraison n’est pas connu PUT /delivery-slot
DELETE /deliveries
Changement
NOT_EXISTING - 404
status_does_not_permit_cancellation - 400 La livraison ne peut pas être annulé dût à un statut avancé  DELETE /deliveries

Exemples de réponses :

imageAPICode7
imageAPICode8