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éthode | Route | Rôle | ||
|---|---|---|---|---|
| GET | `/v1/conversations?status=agent\ | human\ | closed&limit=30&cursor=` | Conversations, plus récentes d'abord |
| GET | /v1/conversations/:id/messages | Fil complet (texte, vocaux transcrits) | ||
| GET | /v1/contacts?phone= | Contacts (numéro normalisé +229…) |
Boutique
| Méthode | Route | Rôle |
|---|---|---|
| GET | /v1/products | Catalogue |
| POST | /v1/products | Créer un produit (name, price, stock, floorPrice, images…) |
| PATCH | /v1/products/:id | Modifier (stock, prix, activation) |
| GET | /v1/orders?status= | Commandes, avec livraison et suivi |
Erreurs
{ "error": "VALIDATION_ERROR", "issues": [{ "path": "phone", "message": "Required" }] }| Code HTTP | Signification |
|---|---|
| 400 | Requête invalide (VALIDATION_ERROR) |
| 401 | Clé absente, révoquée ou erronée |
| 409 | État incompatible (WINDOW_CLOSED, NO_ACTIVE_CHANNEL) |
| 429 | Trop de requêtes (300/min par défaut) |