Documentation API
Dernière mise à jour : Juillet 2026
L'API Kora OS permet de connecter un site externe (WooCommerce, PrestaShop, site sur-mesure) à votre compte : récupérer le catalogue produits, créer des commandes, et encaisser des paiements mobile money via DigitalPaye. Une seule clé API couvre toutes vos boutiques — chaque requête précise ensuite la boutique visée.
1. Créer une clé API
Depuis le menu principal : Développeur → Accès API → Nouvelle clé. Choisissez les permissions nécessaires (lecture produits, écriture produits, création de commandes, encaissement). La clé complète n'est affichée qu'une seule fois — conservez-la en lieu sûr. Elle donne accès à toutes les boutiques de votre compte, pas besoin d'en créer une par boutique.
2. Authentification et boutique visée
Toutes les requêtes utilisent un header Bearer avec votre clé API :
Authorization: Bearer kaoqa_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxComme une clé couvre plusieurs boutiques, chaque requête (sauf GET /shops ci-dessous) doit préciser la boutique concernée via l'en-tête X-Shop-Id :
X-Shop-Id: 64f1a2b3c4d5e6f7a8b9c0d1Vous pouvez aussi passer ?shopId=... en paramètre de requête, ou shopId dans le corps JSON pour les requêtes POST/PUT — l'en-tête reste la méthode recommandée. Récupérez vos ID de boutique facilement (bouton copier) depuis Développeur → Mes boutiques, ou via l'endpoint ci-dessous.
3. Lister mes boutiques
Ne nécessite pas d'en-tête X-Shop-Id — c'est justement là qu'on récupère les ID à utiliser ensuite.
GET https://api.perfaith.tech/api/v1/external/shops
Authorization: Bearer <votre_clé>
→ 200 OK
{
"success": true,
"data": {
"shops": [
{ "id": "64f1a2b3c4d5e6f7a8b9c0d1", "name": "Boutique Cocody", "businessType": "retail",
"city": "Abidjan", "country": "CI", "isActive": true, "currency": "FCFA" }
],
"total": 1
}
}4. Récupérer le catalogue produits (d'une boutique)
GET https://api.perfaith.tech/api/v1/external/products?page=1&limit=50
Authorization: Bearer <votre_clé>
X-Shop-Id: <id_boutique>
→ 200 OK
{
"success": true,
"data": {
"products": [
{ "id": "...", "sku": "REF001", "name": "Chemise blanche",
"price": 15000, "currency": "XOF", "quantity": 12, "unit": "pièce" }
],
"meta": { "total": 128, "page": 1, "limit": 50, "pages": 3 }
}
}Un seul produit : GET /api/v1/external/products/:id
5. Créer / mettre à jour un produit
POST https://api.perfaith.tech/api/v1/external/products
Authorization: Bearer <votre_clé>
X-Shop-Id: <id_boutique>
Content-Type: application/json
{
"name": "Chemise blanche",
"price": 15000,
"quantity": 20,
"sku": "REF001",
"category": "Chemises"
}PUT /api/v1/external/products/:id pour une mise à jour (prix, stock...).
6. Créer une commande
Une fois le paiement confirmé côté site externe (ou via l'étape 7 ci-dessous), enregistrez la vente dans Kora OS :
POST https://api.perfaith.tech/api/v1/external/orders
Authorization: Bearer <votre_clé>
X-Shop-Id: <id_boutique>
Content-Type: application/json
{
"items": [{ "productId": "...", "quantity": 2 }],
"paymentMethod": "card",
"externalRef": "WOO-00187",
"customerName": "Awa Koné",
"customerPhone": "+18037555352"
}7. Encaisser un paiement mobile money (DigitalPaye)
Nécessite que la boutique visée ait configuré ses clés DigitalPaye (Paramètres de la boutique → Intégrations) et que votre clé API ait la permission payments:collect.
POST https://api.perfaith.tech/api/v1/external/payments/collect
Authorization: Bearer <votre_clé>
X-Shop-Id: <id_boutique>
Content-Type: application/json
{
"amount": 15000,
"operatorCode": "ORANGE_MONEY_CI",
"externalRef": "WOO-00187",
"payerPhone": "0700000000",
"payerFirstName": "Awa"
}Opérateurs disponibles : ORANGE_MONEY_CI, WAVE_CI, MTN_MONEY_CI, FLOOZ_MONEY_CI. Pour Wave, la réponse contient une wave_launch_url vers laquelle rediriger le client.
Vérifier le statut : GET /api/v1/external/payments/:reference/status
8. Autres ressources disponibles
Toutes les ressources suivent le même schéma REST (GET liste, GET /:id détail, POST création, PUT /:id modification, DELETE /:id suppression), avec la permission correspondante sur votre clé API, et nécessitent toutes l'en-tête X-Shop-Id :
/api/v1/external/categories (categories:read / categories:write)
/api/v1/external/services (services:read / services:write)
/api/v1/external/service-categories (services:read / services:write)
/api/v1/external/stock/adjust (stock:write) — POST uniquement
/api/v1/external/suppliers (suppliers:read / suppliers:write)
/api/v1/external/expenses (expenses:read / expenses:write)
/api/v1/external/customers (customers:read / customers:write)
/api/v1/external/credits (credits:read / credits:write)Exemple — ajuster un stock :
POST https://api.perfaith.tech/api/v1/external/stock/adjust
Authorization: Bearer <votre_clé>
X-Shop-Id: <id_boutique>
{ "productId": "...", "quantity": 5, "mode": "increment", "reason": "Réassort" }mode : set (valeur exacte), increment ou decrement.
9. Recevoir des notifications (webhook Kora OS)
Configurez une URL de webhook depuis Développeur → Webhook Kora OS pour recevoir un événement HTTP dès qu'une vente est créée sur n'importe laquelle de vos boutiques, sans avoir à interroger l'API en boucle. Chaque envoi précise shop_id pour identifier la boutique concernée, et est signé :
POST https://votre-site.com/webhooks/kaoqa
X-Kora OS-Signature: sha256=<hmac_hex>
Content-Type: application/json
{
"event": "sale.created",
"shop_id": "64f1a2b3c4d5e6f7a8b9c0d1",
"timestamp": "2026-07-13T10:00:00.000Z",
"data": { "id": "...", "saleNumber": "V20260713-0001", "total": 15000 }
}Vérifiez la signature en recalculant un HMAC-SHA256 du corps brut avec votre secret webhook, et en la comparant à l'en-tête X-Kora OS-Signature.
Limites
- 120 requêtes/minute par clé API.
- Une clé donne accès à toutes les boutiques de votre compte — jamais à celles d'un autre compte.
- Vous pouvez révoquer une clé à tout moment depuis Développeur.
Plugins WooCommerce / PrestaShop clé-en-main : en préparation. En attendant, cette API REST peut être utilisée directement par un développeur pour connecter n'importe quel site.