SCMCHOST
API SMS

API SMS

Une API REST, une clé, un appel. Envoyez vos SMS depuis votre application au nom de votre entreprise.

01
Ouvrez un compte
Vérification par SMS, quelques minutes.
02
Demandez votre Sender ID
Le nom qui s'affichera comme expéditeur.
03
Créez un modèle
Validé une fois, réutilisable ensuite.
04
Générez une clé
Rubrique Clés API du tableau de bord.

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"
Une clé sert à envoyer des SMS et à consulter vos modèles. Elle ne donne accès ni au paiement, ni aux Sender IDs, ni à la création d'autres clés — ces actions exigent une connexion.

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" }
    ]
  }
}
Idempotency-Key — si votre appel expire et que vous le rejouez avec la même clé, nous renvoyons le résultat du premier envoi sans rien débiter ni renvoyer. À utiliser systématiquement.

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.

Cette règle n'est pas cosmétique : un seul caractère hors alphabet GSM ferait passer le message en Unicode et tomber la limite de 160 à 70 caractères. Le coût doublerait.

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"
DLR_STATUSÉTAT
0 · 1En attente / en cours
2Remis à l'opérateur
3Délivré sur le téléphone
4Refusé par l'opérateur
6Non délivré

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.

CODESIGNIFICATION
400Requête invalide — le message dit quoi corriger
401Clé absente, invalide ou révoquée
402Solde insuffisant
403Action réservée à une session connectée
404Modèle ou message introuvable
429Trop de requêtes — 60 envois par minute

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.

Points d'entrée

MÉTHODE ET CHEMINRÔLE
POST /messages/sendEnvoyer
POST /messages/previewCoût exact avant envoi
GET /messages/logsHistorique et taux de remise
GET /messages/batch/{id}Récapitulatif d'un envoi
GET /messages/{ticket}Statut d'un message
GET /templatesVos modèles et leurs variables
GET /billing/balanceSolde restant
GET /auth/meVérifier la clé
Une question sur l'intégration ?

Nous répondons directement aux développeurs, sans passer par un formulaire.