Documentation API
Endpoint unifié pour envoyer SMS, Email et WhatsApp depuis vos systèmes.
Passerelle transactionnelle
Documentation API
Authentifiez-vous avec X-API-Key, puis envoyez via POST /api/v1/messaging/send/.
Passerelle transactionnelle
Un point d’entrée unique pour envoyer des messages transactionnels (SMS, Email, WhatsApp) depuis un CRM, un e-commerce ou toute application tierce.
Toutes les requêtes passent en HTTPS, corps en JSON.
Authentification
Transmettez votre clé API active dans l’en-tête HTTP X-API-Key à chaque requête. Créez une clé dans Développeurs → Clés API.
X-API-Key: votre_cle_api_secrete_ici
Attention : ne placez jamais une clé API dans du code navigateur ou une app mobile publique — risque de consommation frauduleuse de vos stocks.
Envoi de messages unifié
/api/v1/messaging/send/
Paramètres (JSON body)
| Champ | Type | Requis | Description |
|---|---|---|---|
channel |
String | Oui | Canal d’envoi : SMS, EMAIL ou WHATSAPP. |
to |
String | Oui |
Destinataire. SMS / WhatsApp : numéro E.164 (ex. +243812345678).Email : adresse valide (ex. client@domaine.com).
|
content |
String | Oui | Contenu du message (texte ou HTML pour l’email). |
subject |
String | Conditionnel | Requis si channel = EMAIL. Sujet de l’e-mail. |
cc |
Array | Non | Email uniquement. Liste d’adresses en copie. |
smtp_config_id |
String | Non | Email uniquement. Identifiant public (public_id) d’une config SMTP active de votre compte. Sinon, SMTP Jiwe par défaut. |
SMS : un nom d’expéditeur doit être configuré sur le profil du compte avant tout envoi SMS (console ou API).
Exemple — EMAIL
{
"channel": "EMAIL",
"to": "client@exemple.com",
"subject": "Confirmation de commande",
"content": "<p>Bonjour, votre commande a bien été reçue.</p>",
"cc": ["factures@monentreprise.com"]
}
Exemple — SMS
{
"channel": "SMS",
"to": "+243812345678",
"content": "Votre code de validation est 883921."
}
Stocks prépayés et demandes d’achat
Ces endpoints utilisent le jeton JWT de la console (Authorization: Bearer …), et non une clé d’envoi.
/api/v1/billing/inventories/Retourne les stocks disponible et réservé de chaque canal, avec le prix unitaire actif.
/api/v1/billing/purchases/{
"channel": "sms",
"quantity": 500
}
Le prix est figé lors de la demande. L’admin crédite le stock uniquement après validation du paiement.
/api/v1/billing/purchases//api/v1/billing/unit-transactions/Réponses & codes de statut
Message accepté et mis en file d’attente.
{
"message_id": "msg_01KSMFHDKK16D1TZFCT7Z3JCSZ",
"status": "PENDING"
}
Validation ou contrainte métier (stock, plafond, format).
{
"error": "InsufficientChannelUnits",
"message": "Stock SMS insuffisant : 1 unité disponible, 2 requises.",
"code": "insufficient_channel_units",
"channel": "sms",
"available_units": 1,
"required_units": 2
}
Exemples d’intégration
curl -X POST https://api.jiwe.cd/api/v1/messaging/send/ \
-H "Content-Type: application/json" \
-H "X-API-Key: votre_cle_api" \
-d '{
"channel": "SMS",
"to": "+243812345678",
"content": "Test de message transactionnel"
}'
import requests
url = "https://api.jiwe.cd/api/v1/messaging/send/"
headers = {
"Content-Type": "application/json",
"X-API-Key": "votre_cle_api"
}
payload = {
"channel": "EMAIL",
"to": "client@exemple.com",
"subject": "Sujet de test",
"content": "Bonjour depuis l'API Python",
"cc": ["copie@exemple.com"]
}
response = requests.post(url, json=payload, headers=headers)
print(response.status_code, response.json())
const url = 'https://api.jiwe.cd/api/v1/messaging/send/';
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'votre_cle_api'
},
body: JSON.stringify({
channel: 'WHATSAPP',
to: '+243812345678',
content: 'Votre colis est en route !'
})
});
console.log(await response.json());