Webhooks — être prévenu chez toi
S’abonner
POST /seller/webhooks (authentifié en tant que vendeur) avec l’URL de ton
endpoint et les évènements voulus :
{ "url": "https://ma-boutique.ci/webhooks/generale-ci", "events": ["ORDER_CREATED"] }La réponse contient le secret de signature — affiché une seule fois.
Évènements disponibles : ORDER_CREATED, ORDER_STATUS_CHANGED,
ORDER_CANCELLED, STOCK_CHANGED.
Ce que tu reçois
{
"event": "ORDER_CREATED",
"deliveryId": "cly…",
"data": {
"orderId": "CMD-4821",
"status": "confirmed",
"createdAt": "2026-07-21T15:04:11.000Z",
"currency": "XOF",
"lines": [
{ "itemId": "cl…", "sourceRef": "998877", "name": "Sac cuir", "qty": 1, "unitPrice": 25000, "discount": 0 }
]
}
}sourceRef est l’identifiant du produit chez toi — c’est lui qui te permet
de retrouver ta propre fiche produit.
Tu ne reçois que tes lignes : si la commande contient les articles de plusieurs boutiques, chacun ne voit que les siennes.
Vérifier la signature (obligatoire)
Chaque appel porte deux en-têtes :
x-gci-signature: t=1800000000,v1=<hmac_sha256_hex>
x-gci-timestamp: 1800000000La signature est le HMAC-SHA256 de "<timestamp>.<corps brut>" avec ton secret.
Vérifie-la avant de traiter quoi que ce soit — sinon n’importe qui peut
t’envoyer de fausses commandes.
const crypto = require('crypto');
function verifierSignature(secret, corpsBrut, entete) {
const parts = Object.fromEntries(entete.split(',').map((p) => p.split('=')));
const age = Math.abs(Math.floor(Date.now() / 1000) - Number(parts.t));
if (!Number.isFinite(age) || age > 300) return false; // anti-rejeu
const attendu = crypto
.createHmac('sha256', secret)
.update(`${parts.t}.${corpsBrut}`)
.digest('hex');
return crypto.timingSafeEqual(Buffer.from(parts.v1), Buffer.from(attendu));
}Réponse attendue et réessais
Réponds 2xx rapidement (moins de 8 secondes). Tout le reste est considéré comme un échec et rejoué avec un espacement croissant : 1 min, 5 min, 15 min, 1 h, 4 h, jusqu’à 6 tentatives.
Après 10 échecs consécutifs, l’abonnement est suspendu — tu le réactives depuis l’app.
Outils
| Méthode | Chemin | Rôle |
|---|---|---|
GET | /seller/webhooks/deliveries | Journal de tes livraisons |
POST | /seller/webhooks/:id/test | Envoyer un évènement de test à ton URL |
Pour voir ton endpoint appelé par une vraie commande de test signée, utilise une clé sandbox : Tester sans risque.
Simuler une commande maintenant
/partner/v1/sandbox/ordersEssayerCommande cURL équivalente
curl -X POST 'https://backend.generale-ci.com/partner/v1/sandbox/orders' \
-H 'X-Api-Key: VOTRE_CLE' \
-H 'Content-Type: application/json' \
-d '{
"itemIds": []
}'