Référence de l'API v1

Base : https://api.ajo.africa · Authentification : Authorization: Bearer ajo_live_… (Développeurs → Clés d'API ; la clé n'est affichée qu'une fois). Corps et réponses en JSON.

Événements

POST /v1/events

Signale ce qui se passe chez vous ; Ajo prévient le client (texte libre si la fenêtre de 24 h est ouverte, modèle validé sinon) et informe l'agent.

{
  "type": "order.out_for_delivery",
  "idempotencyKey": "evt_0192_ofd",
  "contact": { "phone": "+2290197000000", "name": "Awa" },
  "data": { "orderId": "0192", "deliveryCode": "4821", "trackingUrl": "https://…" }
}

Réponse 202 { "accepted": true }. Un même idempotencyKey n'est traité qu'une fois. Voir Événements.

Messages

POST /v1/messages

{ "phone": "+2290197000000", "text": "Votre commande est prête." }

ou, hors fenêtre de 24 h :

{ "phone": "+2290197000000", "template": { "name": "commande_payee", "language": "fr", "bodyParams": ["Awa", "1042", "16 000 F CFA", "4821"] } }

409 WINDOW_CLOSED : le client n'a pas écrit depuis 24 h — utilisez un modèle.

Conversations et contacts

MéthodeRouteRôle
GET`/v1/conversations?status=agent\human\closed&limit=30&cursor=`Conversations, plus récentes d'abord
GET/v1/conversations/:id/messagesFil complet (texte, vocaux transcrits)
GET/v1/contacts?phone=Contacts (numéro normalisé +229…)

Boutique

MéthodeRouteRôle
GET/v1/productsCatalogue
POST/v1/productsCréer un produit (name, price, stock, floorPrice, images…)
PATCH/v1/products/:idModifier (stock, prix, activation)
GET/v1/orders?status=Commandes, avec livraison et suivi

Erreurs

{ "error": "VALIDATION_ERROR", "issues": [{ "path": "phone", "message": "Required" }] }
Code HTTPSignification
400Requête invalide (VALIDATION_ERROR)
401Clé absente, révoquée ou erronée
409État incompatible (WINDOW_CLOSED, NO_ACTIVE_CHANNEL)
429Trop de requêtes (300/min par défaut)