Documentation API

Endpoint unifié pour envoyer SMS, Email et WhatsApp depuis vos systèmes.

Mes clés API

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é

POST /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.
from String Conditionnel SMS uniquement. Nom expéditeur approuvé sur votre compte.
Optionnel si vous n’avez qu’un seul sender approuvé.
Requis si vous en possédez plusieurs.
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 : au moins un nom d’expéditeur doit être approuvé sur le compte. Utilisez from pour choisir le sender si vous en avez plusieurs.

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",
  "from": "MYBRAND",
  "content": "Votre code de validation est 883921."
}

OTP (SMS & Email)

Générez et vérifiez des codes à usage unique pour l’authentification de vos utilisateurs finaux. Distinct de l’OTP e-mail de création de compte Jiwe.

POST /api/v1/otp/send/

Envoie un code à 6 chiffres. Le code n’est jamais retourné dans la réponse JSON.

Corps — envoi SMS

{
  "channel": "SMS",
  "to": "+243812345678",
  "from": "MYBRAND",
  "message": "Code: "
}

Corps — envoi Email

{
  "channel": "EMAIL",
  "to": "user@example.com",
  "subject": "Votre code",
  "message": "Votre code Jiwe : "
}

message est optionnel ; s’il est fourni, il doit contenir le placeholder . Réponse 201 :

{
  "otp_id": "otp_01…",
  "channel": "SMS",
  "expires_at": "2026-09-01T12:10:00+01:00",
  "destination_masked": "+243***678"
}
POST /api/v1/otp/verify/
{
  "otp_id": "otp_01…",
  "code": "482916"
}

Réponse 200 : {"verified": true, "otp_id": "otp_01…"}

POST /api/v1/otp/send/ requiert l’en-tête Idempotency-Key (comme l’envoi de messages).

Exemple curl — envoi puis vérification

curl -X POST https://api.jiwe.cd/api/v1/otp/send/ \
  -H "X-API-Key: votre_cle" \
  -H "Idempotency-Key: otp-req-001" \
  -H "Content-Type: application/json" \
  -d '{"channel":"SMS","to":"+243812345678"}'

curl -X POST https://api.jiwe.cd/api/v1/otp/verify/ \
  -H "X-API-Key: votre_cle" \
  -H "Content-Type: application/json" \
  -d '{"otp_id":"otp_…","code":"482916"}'

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());