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
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.
| Champ | Description |
|---|---|
client_lat, client_lng | Position du client (obligatoire pour un prix exact). |
retrait_lat, retrait_lng | Facultatif : 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.
| Champ | Description |
|---|---|
ref | Votre numéro de commande. |
client.nom, client.tel | Le client (téléphone obligatoire). |
client.adresse, client.lat, client.lng | Adresse lisible et position. Au moins l’adresse, idéalement les deux. |
colis | Taille ou emballage (« carton 30 × 20 × 10 cm »). N’y mettez pas le contenu : le livreur le lit. |
gabarit | Facultatif : 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_kg | Facultatif : poids approximatif du colis, en kilos. Affiché au livreur. |
payeur | Qui 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_adresse | Facultatif : un autre point de retrait que celui de votre compte (marketplace à plusieurs vendeurs). |
retrait.nom, retrait.tel, retrait.details | Facultatif : qui remet le colis au livreur, et comment le trouver. |
a_encaisser | Facultatif : 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_retrait | Facultatif : 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é. |
code | Facultatif : le code à 4 chiffres déjà donné à votre client. Sinon Zeyini en crée un. |
priorite | Facultatif : express (ou "express": true). La course est proposée aux livreurs avant les autres. Le prix du livreur ne change pas. |
prix | Facultatif : 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"}
$corps = json_encode([
"ref" => "CMD-1042",
"client" => ["nom" => "Awa", "tel" => "0169483448", "adresse" => "Akpakpa", "lat" => 6.3654, "lng" => 2.4183],
"colis" => "sachet 1 kg", "payeur" => "client",
]);
$ch = curl_init("https://zeyini.com/api/v1/courses");
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => $corps,
CURLOPT_HTTPHEADER => ["X-Cle: lv_votre_cle", "Content-Type: application/json"]]);
$rep = json_decode(curl_exec($ch), true);
$code = $rep["code"]; // à envoyer au client (SMS, e-mail, page de commande)
const rep = await fetch("https://zeyini.com/api/v1/courses", {
method: "POST",
headers: { "X-Cle": process.env.ZEYINI_CLE, "Content-Type": "application/json" },
body: JSON.stringify({ ref: "CMD-1042", payeur: "client", colis: "sachet 1 kg",
client: { nom: "Awa", tel: "0169483448", adresse: "Akpakpa", lat: 6.3654, lng: 2.4183 } })
}).then(r => r.json());
console.log(rep.code); // à donner au client
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.