Zeyini

Branchez votre site sur le réseau de livreurs Zeyini

Chaque commande de votre boutique en ligne appelle automatiquement le livreur disponible le plus proche. Votre site suit la livraison en direct, du retrait jusqu’à la remise au client.

Comment ça marche

1Dans l’application Zeyini, ouvrez Compte puis Connecter mon site. Indiquez votre boutique, votre site et le point où le livreur récupère les colis.
2Nous vérifions votre demande, en général sous 48 heures.
3Générez votre clé d’accès et donnez-la à votre développeur avec cette page. Il branche votre site en une heure environ.
4À chaque commande, votre site demande un livreur. Le client reçoit un code à 4 chiffres qu’il donne au livreur à la remise : la livraison est alors confirmée.

Pour le développeur

Adresse de l’API : https://zeyini.com. Chaque appel porte la clé dans l’en-tête X-Cle. Les échanges sont en JSON.

POST/api/v1/devis

Le prix de la livraison avant de la commander, par exemple pour l’afficher au panier.

ChampDescription
client_lat, client_lngPosition du client (obligatoire pour un prix exact).
retrait_lat, retrait_lngFacultatif : un autre point de retrait que celui de votre fiche.
curl -X POST https://zeyini.com/api/v1/devis \
  -H "X-Cle: lv_votre_cle" -H "Content-Type: application/json" \
  -d '{"client_lat": 6.3654, "client_lng": 2.4183}'

{"prix": 1400, "distance_km": 5.7, "commission": 280}

prix revient au livreur, commission à Zeyini (0 avec un abonnement mensuel).

POST/api/v1/courses

Demande un livreur pour une commande. Envoyer deux fois la même ref ne crée qu’une seule course.

ChampDescription
refVotre numéro de commande.
client.nom, client.telLe client (téléphone obligatoire).
client.adresse, client.lat, client.lngAdresse lisible et position. Au moins l’adresse, idéalement les deux.
colisTaille ou emballage (« carton 30 × 20 × 10 cm »). N’y mettez pas le contenu : le livreur le lit.
gabaritFacultatif : sac, moto (par défaut), kloboto (tricycle) ou camionnette. Seuls les livreurs dont le véhicule convient reçoivent la course. Valeur inconnue : moto.
poids_kgFacultatif : poids approximatif du colis, en kilos. Affiché au livreur.
payeurQui paie la livraison : client (le destinataire la règle au livreur, avec le montant à encaisser) ou entreprise (elle va sur votre facture de quinzaine, le livreur n’encaisse que les marchandises). Sans ce champ, une course sans encaissement reste client, et une course avec a_encaisser prend le choix inscrit sur votre fiche, réglé dans l’onglet Factures de votre espace. Par défaut : entreprise.
retrait_lat, retrait_lng, retrait_adresseFacultatif : un autre point de retrait que celui de votre compte (marketplace à plusieurs vendeurs).
retrait.nom, retrait.tel, retrait.detailsFacultatif : qui remet le colis au livreur, et comment le trouver.
a_encaisserFacultatif : montant en espèces que le livreur encaisse à la remise (paiement à la livraison). Zeyini vous le reverse. Le champ payeur dit si le livreur encaisse aussi la livraison.
frais_retraitFacultatif : la part de a_encaisser qui correspond aux frais de retrait Mobile Money que vous avez déjà facturés à votre client. Zeyini retire ce montant avant de calculer la commission d’encaissement, qui porte ainsi sur le seul prix des marchandises, comme chez vous. Sans ce champ, la commission se lit sur tout a_encaisser : si vos frais y sont compris, elle peut monter d’un palier et vous coûter plus que ce que vous avez encaissé.
codeFacultatif : le code à 4 chiffres déjà donné à votre client. Sinon Zeyini en crée un.
prioriteFacultatif : express (ou "express": true). La course est proposée aux livreurs avant les autres. Le prix du livreur ne change pas.
prixFacultatif : le prix de livraison que vous facturez à votre client. Il sert à votre facture ; le livreur ne le voit jamais et reste payé au prix calculé par Zeyini.
curl -X POST https://zeyini.com/api/v1/courses \
  -H "X-Cle: lv_votre_cle" -H "Content-Type: application/json" \
  -d '{"ref": "CMD-1042",
       "client": {"nom": "Awa", "tel": "0169483448", "adresse": "Akpakpa, près du marché",
                  "lat": 6.3654, "lng": 2.4183},
       "colis": "sachet 1 kg", "payeur": "client"}'

{"course": {"id": "a1b2…", "ref_externe": "CMD-1042", "statut": "en_attente", "prix": 1400, …},
 "code": "4821"}

Le code est à transmettre à votre client : il le donne au livreur quand il reçoit sa commande.

GET/api/v1/courses/{ref}

L’état d’une course : en_attente, proposee, acceptee, recuperee, livree ou annulee. Une fois acceptée, elle contient aussi le livreur (prénom, téléphone, véhicule, photo, position).

POST/api/v1/courses/{ref}/annuler

Annule la course tant que le colis n’a pas été récupéré.

Être prévenu en direct

Indiquez une adresse de retour dans votre fiche (par exemple https://maboutique.bj/zeyini). À chaque étape, Zeyini y envoie :

POST https://maboutique.bj/zeyini
X-Signature: 5f2c…  (HMAC-SHA256 du corps avec votre secret)

{"evenement": "course.livree", "course": {"ref_externe": "CMD-1042", "statut": "livree", …}}

Vérifiez la signature avec le secret affiché en même temps que votre clé :

// PHP
$ok = hash_equals(hash_hmac("sha256", file_get_contents("php://input"), $secret), $_SERVER["HTTP_X_SIGNATURE"]);

// Node.js
const ok = crypto.createHmac("sha256", secret).update(corpsBrut).digest("hex") === req.headers["x-signature"];

Questions fréquentes

Mon site est sous WordPress, Shopify ou un autre outil ? Votre développeur appelle /api/v1/courses quand une commande passe au statut « payée » ou « à expédier ». Sans développeur, vous pouvez aussi demander vos livreurs à la main depuis l’application, rubrique Colis.

Combien ça coûte ? Le prix de chaque livraison dépend de la distance. Selon votre formule, Zeyini prend une commission sur chaque course ou un forfait mensuel, revu après le premier mois.

Une clé a fuité ? Générez-en une nouvelle dans l’application : l’ancienne cesse aussitôt de marcher.