API SMS
Une API REST, une clé, un appel. Envoyez vos SMS depuis votre application au nom de votre entreprise.
Authentification
Toutes les requêtes portent votre clé dans l'en-tête X-API-Key. Les clés se créent depuis votre tableau de bord, rubrique Clés API, et ne sont affichées qu'une seule fois.
curl https://api.scmchost.com/auth/me \ -H "X-API-Key: sk_votre_cle"
Envoyer un SMS
Tout envoi passe par un modèle approuvé. C'est ce qui protège votre Sender ID auprès de l'opérateur : le texte a été validé une fois, seules les variables changent.
Message identique pour tous
Un seul appel opérateur, jusqu'à 500 destinataires.
curl -X POST https://api.scmchost.com/messages/send \
-H "X-API-Key: sk_votre_cle" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: campagne-2026-08-02" \
-d '{
"template_id": "tpl_a1b2c3",
"recipients": ["+237671700941", "+237699887766"],
"variables": { "NOM_SALON": "PERFECT MEN" }
}'Message personnalisé par destinataire
Chaque destinataire a ses propres valeurs. Les variables communes restent au niveau racine, les individuelles l'emportent.
curl -X POST https://api.scmchost.com/messages/send \
-H "X-API-Key: sk_votre_cle" \
-H "Content-Type: application/json" \
-d '{
"template_id": "tpl_a1b2c3",
"variables": { "NOM_SALON": "PERFECT MEN" },
"recipients": [
{ "phone": "+237671700941",
"variables": { "NOM_CLIENT": "Mr SOKOUDJOU", "DATE_RDV": "01/08/2026", "HEURE_RDV": "13H" } },
{ "phone": "+237699887766",
"variables": { "NOM_CLIENT": "Mme NGONO", "DATE_RDV": "01/08/2026", "HEURE_RDV": "15H" } }
]
}'Réponse
{
"success": true,
"data": {
"batch_id": "b4f2...",
"sent": 2,
"failed": 0,
"operator_calls": 2,
"distinct_messages": 2,
"segments_billed": 2,
"balance_remaining": 498,
"results": [
{ "recipient": "+237671700941", "status": "accepted" },
{ "recipient": "+237699887766", "status": "accepted" }
]
}
}Ce qui est facturé
Un SMS fait 160 caractères. Au-delà, il est découpé en segments de 153, chacun facturé. Le décompte se fait sur le smscount renvoyé par l'opérateur, jamais sur une estimation.
Un message rejeté par l'opérateur ou jamais transmis pour cause d'incident technique n'est pas débité.
Caractères autorisés
Lettres non accentuées, chiffres, espace et . , : ; ! ? ' " ( ) / @ # % & * + = _ -. Les accents et caractères spéciaux d'une variablesont convertis automatiquement (« Adèle » devient « Adele »), mais le contenu d'un modèle est refusé à la création.
Pour connaître le coût exact avant d'envoyer :
curl -X POST https://api.scmchost.com/messages/preview \
-H "X-API-Key: sk_votre_cle" \
-H "Content-Type: application/json" \
-d '{ "template_id": "tpl_a1b2c3",
"recipients": ["+237671700941"],
"variables": { "NOM_CLIENT": "Alice" } }'Suivre la remise
L'envoi renvoie un batch_id, et chaque message reçoit un ticket opérateur. Les accusés de réception remontent en quelques secondes à quelques minutes.
curl https://api.scmchost.com/messages/batch/b4f2... \
-H "X-API-Key: sk_votre_cle"
curl https://api.scmchost.com/messages/{ticket} \
-H "X-API-Key: sk_votre_cle"Le champ final: trueindique qu'aucun changement n'est plus à attendre — inutile de continuer à interroger.
Erreurs
Toutes les réponses ont la même forme : { "success": false, "error": "..." }, avec un code HTTP parlant.
Les refus opérateur sont détaillés par destinataire dans results[].reason : numéro invalide, aucune route vers cette destination, crédit opérateur insuffisant.