API REST pour l'envoi de SMS depuis vos applications
L'API SMS BOOST vous permet d'intégrer l'envoi de SMS directement dans vos applications, sites web ou logiciels. Tous les endpoints utilisent la méthode HTTP POST et sont accessibles à l'URL de base :
Toutes les requêtes nécessitent une authentification par token API
Chaque appel API doit inclure votre token API. Vous pouvez le générer depuis votre espace client dans Mon compte > Token API.
En cas de token invalide, l'API retourne :
POST /ApiSmsPro.php
Envoie un SMS Pro avec en-tête personnalisé. Le SMS est mis en file d'attente puis expédié immédiatement (ou à la date programmée). Débite 1 crédit SMS Pro.
| Paramètre | Type | Description | |
|---|---|---|---|
api_key |
string | requis | Votre token API (ou utilisez le header Authorization: Bearer). Voir Authentification |
texte |
string | requis | Contenu du SMS en UTF-8. Pas de longueur maximale : 160 caractères par segment, chaque segment décompté comme un SMS. Avec lien_court=1, les URL sont raccourcies avant ce décompte. Le symbole € est accepté mais compte pour 2 caractères, comme ~ [ ] { } | et le saut de ligne. Le caractère & est supprimé, les balises HTML retirées. |
numero |
string | requis | Numéro de téléphone mobile du destinataire (format français) |
signature |
string | optionnel | Nom de l'expéditeur. Si absent, utilise l'en-tête par défaut de votre compte. |
date |
string | optionnel | Date d'envoi programmé au format YYYY-MM-DD HH:MM:SS |
route |
string | optionnel | Type de route : m = Marketing, sinon Transactionnel (par défaut). En mode Marketing, STOP #SMS# est ajouté automatiquement. |
pression_marketing |
integer | optionnel | Mettre à 1 pour activer le contrôle de pression marketing. Si le numéro a déjà reçu un SMS de votre compte récemment, l'envoi est refusé (aucun crédit débité). |
pression_jours |
integer | optionnel | Nombre de jours de recul pour la pression marketing (défaut : 30, min 1, max 365). Utilisé uniquement si pression_marketing=1. |
lien_court |
integer | optionnel | Mettre à 1 pour remplacer les URL du message par des liens courts go6.fr, avec un code unique par destinataire et suivi des clics. Voir le détail plus bas. |
| Réponse | Signification |
|---|---|
| Envoi OK ID:12345 | SMS envoyé avec succès. L'identifiant du message (ID) est retourné pour suivre ensuite son statut de livraison. |
| Mauvais Paramètres | Identifiants invalides |
| Message vide | Le paramètre texte est vide |
| Credit insuffisant | Pas assez de crédits SMS Pro |
| Format de date invalide | Le format de date ne correspond pas à YYYY-MM-DD HH:MM:SS |
| Erreur sur le numéro | Le numéro de téléphone est invalide |
| EXCLUDED | Numéro exclu par pression marketing (déjà contacté récemment). Réponse JSON. Aucun crédit débité. |
| FORBIDDEN_WORDS | Le message contient des mots interdits (vulgarité, contenu adulte, haine, drogue), listés dans le champ words. Réponse JSON. Aucun crédit débité. |
Avec lien_court=1, chaque URL http:// ou https:// présente dans le texte est remplacée par un lien court go6.fr. Chaque destinataire reçoit un code différent : les clics sont donc attribuables au numéro, et pas seulement comptés globalement.
Le SMS effectivement envoyé devient : Promo -20% : go6.fr/aB3xY9
POST /ApiSmsProStatut.php
Retourne le statut de livraison d'un SMS à partir de son identifiant (ID). Cet ID est retourné par l'endpoint d'envoi (réponse « Envoi OK ID:12345 »). Vous ne pouvez consulter que les messages envoyés depuis votre propre compte.
| Paramètre | Type | Description | |
|---|---|---|---|
api_key |
string | requis | Votre token API (ou utilisez le header Authorization: Bearer). Voir Authentification |
id_message |
integer | requis | Identifiant du message (ID) retourné lors de l'envoi |
statutstatut |
Signification |
|---|---|
| delivre | Le SMS a été délivré au destinataire |
| non_delivre | Le SMS n'a pas pu être délivré (échec opérateur) |
| envoye | SMS envoyé, en attente de l'accusé de réception de l'opérateur |
| en_attente | SMS en file d'attente, pas encore envoyé |
| programme | Envoi programmé à une date ultérieure |
| en_attente_validation | SMS bloqué en attente de validation par notre équipe |
Recevez les statuts en temps reel, sans polling
Plutot que d'interroger /ApiSmsProStatut.php,
configurez une URL de callback dans Mon compte > Webhooks.
Des qu'un accuse de reception (DLR) arrive, SMSBoost envoie une requete POST signee a votre URL (HTTPS obligatoire). En cas d'echec, la livraison est re-essayee automatiquement (backoff : 1 min, 5 min, 30 min, 2 h, 6 h).
Le champ statut
prend les memes valeurs que l'endpoint Statut de livraison (delivre, non_delivre, …).
Votre endpoint doit repondre avec un code HTTP 2xx ; tout autre code declenche un re-essai.
| En-tete | Description |
|---|---|
X-SMSBoost-Event |
Type d'evenement (ex: sms.status) |
X-SMSBoost-Timestamp |
Horodatage Unix de l'envoi (anti-rejeu) |
X-SMSBoost-Signature |
sha256=<hex> — HMAC-SHA256 de timestamp + "." + corps avec votre secret |
Un compte peut avoir jusqu'a 20 webhooks (par exemple un par magasin). Chaque statut est envoye a tous les webhooks actifs, chacun signe avec son propre secret. Un webhook qui recoit le statut d'un SMS qu'il ne connait pas doit simplement repondre 200.
/ApiSmsProWebhook.php
Votre application installe son webhook elle-meme quand le client saisit son token API : plus besoin de copier l'URL et le secret a la main. Parametres : api_key (ou en-tete Authorization: Bearer),
action (installer par defaut, supprimer, lister),
url (HTTPS), nom (optionnel, ex. le nom du magasin).
installer est idempotent : la meme URL renvoie le meme webhook et le meme secret. lister ne renvoie jamais les secrets.
Erreurs : AUTH_FAILED, RATE_LIMITED,
INVALID_PARAMS (URL refusee ou action inconnue),
LIMIT_REACHED (20 webhooks deja configures),
NOT_FOUND (supprimer : aucun webhook sur cette URL).
POST /ApiSmsProMailing.php
Soumet une campagne complète en un seul appel, au lieu de boucler sur /ApiSmsPro.php. La campagne est créée dans votre espace client et reste consultable dans Statistiques > Campagnes. Route marketing : la mention STOP est ajoutée automatiquement. Maximum 20 000 destinataires par appel.
| Paramètre | Type | Description | |
|---|---|---|---|
api_key |
string | requis | Votre token API (ou utilisez le header Authorization: Bearer). Voir Authentification |
texte |
string | requis | Contenu du SMS. Supporte le tag NomContact (remplacé par le nom du destinataire), {LIEN} (lien court unique par destinataire, nécessite lien_court_id) et vos balises de champs personnalisés {CLE} / {CLE|secours} (insensibles à la casse). Une balise sans champ correspondant sur votre compte refuse l'appel entier avec INVALID_PARAMS. |
contacts |
JSON | requis | Tableau [{"numero":"0612345678","nom":"Dupont","champs":{"VILLE":"Lyon"}}, ...], 20 000 entrées maximum. champs est facultatif par contact : ses clés sont vos clés de balises, une valeur numérique accepte un nombre JSON ou une chaîne avec virgule ou point, une valeur de champ date ou date-heure accepte JJ/MM/AAAA, JJ-MM-AAAA ou AAAA-MM-JJ (avec une heure HH:MM ou HHhMM pour un champ Date et heure). Fournissez exactement un des deux paramètres contacts ou id_liste : les deux ensemble sont refusés. |
id_liste |
integer | requis | Identifiant d'une liste existante de votre espace client, en alternative à contacts. |
filtre |
JSON | optionnel | Ne s'utilise qu'avec id_liste. Sélectionne les contacts de la liste selon leurs champs personnalisés : {"mode":"et|ou","conditions":[{"champ":"VILLE","op":"egal","valeur":"Lyon"}]}, 10 conditions maximum. Opérateurs texte : egal, contient, commence_par, vide, non_vide. Opérateurs nombre : egal, different, inf, inf_egal, sup, sup_egal, entre, vide, non_vide. Opérateurs date et date-heure : egal, avant, apres, entre, prochains_jours, plus_de_jours, moins_de_jours, anniversaire, anniversaire_dans, anniversaire_prochains_jours, vide, non_vide ; valeur est une date AAAA-MM-JJ ou JJ/MM/AAAA (sans heure) pour egal/avant/apres/entre, un nombre de jours de 0 à 3650 pour prochains_jours/plus_de_jours/moins_de_jours/anniversaire_dans (un seul jour, exactement N jours après lx27envoi), de 0 à 365 pour anniversaire_prochains_jours (toute la période du jour dx27envoi au jour dx27envoi + N), absente pour anniversaire. Les opérateurs relatifs (prochains_jours, plus_de_jours, moins_de_jours, anniversaire, anniversaire_dans, anniversaire_prochains_jours) se calculent par rapport au jour où le mailing part réellement : le jour du paramètre date, sinon aujourd'hui. Les SMS différés ne partent que de 8h à 20h, du lundi au samedi hors jours fériés : une date à 20h ou plus compte pour le lendemain, puis un dimanche ou un jour férié pour le jour d'envoi suivant (un appel sans date un dimanche est reporté au lendemain à la même heure : il compte pour le lundi, ou pour le mardi si l'appel est fait à 20h ou plus ou si le lundi est férié). Exemple, cibler les anniversaires du jour d'envoi : {"conditions":[{"champ":"NAISSANCE","op":"anniversaire"}]}. Doit être une chaîne JSON valide avec la clé conditions ({"conditions":[]} = aucun filtre) ; fourni avec contacts, illisible ou sans clé conditions, l'appel est refusé (INVALID_PARAMS). |
nom_campagne |
string | optionnel | Nom de la campagne (par défaut : Mailing du JJ/MM/AAAA HH:MM). |
signature |
string | optionnel | Nom de l'expéditeur. Si absent, utilise l'en-tête par défaut de votre compte. |
date |
string | optionnel | Date d'envoi programmé au format YYYY-MM-DD HH:MM:SS |
pression_jours |
integer | optionnel | Exclut les numéros déjà contactés depuis moins de N jours. 0, absent ou négatif désactivent ce filtre ; au-delà de 365, la valeur est ramenée à 365. |
lien_court_id |
integer | optionnel | Identifiant d'un de vos liens courts, substitué au tag {LIEN} (un code go6.fr par destinataire). |
lien_court |
integer | optionnel | Mettre à 1 pour remplacer les URL du message par des liens courts go6.fr. |
creer_liste |
integer | optionnel | Ne s'applique qu'au mode contacts. 1 par défaut. Mettre à 0 pour ne pas enregistrer les contacts dans vos listes. Sans effet en mode id_liste : aucune liste n'est créée, la valeur fournie est renvoyée telle quelle. |
simulation |
integer | optionnel | Mettre à 1 pour calculer le résultat sans rien envoyer ni débiter. |
Toutes les réponses sont en JSON avec un champ status.
Conservez id_campagne : c'est la clé à passer à ApiSmsProCampagne.php pour suivre la délivrabilité. En mode simulation (simulation=1), la même structure est renvoyée avec "status": "simulation", id_campagne et id_liste à null, et credits_necessaires à la place de credits_debites : rien n'est envoyé, rien n'est débité. La réponse ajoute alors sans_valeur : un objet JSON {"CLE": nombre_de_contacts_sans_valeur, ...}, une entrée par balise de champ utilisée dans texte (toujours un objet, {} si aucune balise n'est utilisée).
status |
Signification |
|---|---|
| RATE_LIMITED | Trop de tentatives depuis votre IP |
| AUTH_FAILED | Token absent, inconnu ou révoqué |
| INVALID_PARAMS | contacts et id_liste ensemble ou absents, JSON illisible, liste inconnue, date invalide, filtre fourni sans id_liste ou JSON illisible/invalide, balise de champ inconnue dans texte, clé de champ inconnue ou valeur invalide dans contacts[].champs |
| EMPTY_MESSAGE | Le paramètre texte est vide |
| FORBIDDEN_WORDS | Mot interdit détecté, y compris dans une valeur de champ insérée. La liste est renvoyée dans le champ words |
| TOO_MANY_RECIPIENTS | Plus de 20 000 destinataires |
| NO_RECIPIENTS | Plus aucun destinataire après exclusions, ou aucun contact ne correspond au filtre |
| INSUFFICIENT_CREDITS | Crédits insuffisants. Renvoie credits_necessaires et credits_restants |
| DUPLICATE_CAMPAIGN | Campagne identique soumise il y a moins de 10 minutes. Renvoie l'id_campagne existante |
| PENDING_VALIDATION | Compte en attente de validation. Campagne créée mais bloquée. Renvoie l'id_campagne |
| SUBMISSION_FAILED | Échec technique. La soumission est entièrement annulée : rien n'est envoyé, rien n'est débité |
POST /ApiSmsProCampagne.php
Renvoie les compteurs agrégés d'une campagne soumise via ApiSmsProMailing.php, sans avoir à interroger chaque message un par un.
| Paramètre | Type | Description | |
|---|---|---|---|
api_key |
string | requis | Votre token API (ou utilisez le header Authorization: Bearer). Voir Authentification |
id_campagne |
integer | requis | Identifiant renvoyé par ApiSmsProMailing.php |
| Champ | Description |
|---|---|
bloque |
1 si la campagne est en attente de validation par notre équipe |
nb_destinataires |
Nombre de SMS de la campagne |
nb_delivres |
SMS reçus par le destinataire |
nb_echecs |
SMS non délivrés (numéro inexistant, hors service...) |
nb_en_attente |
SMS pas encore partis ou dont l'accusé de réception n'est pas revenu |
nb_stop |
Destinataires ayant répondu STOP (ajoutés automatiquement à votre blacklist) |
nb_clics |
Clics sur les liens courts go6.fr de la campagne |
Tant que tous les accusés de réception ne sont pas revenus, nb_delivres + nb_echecs + nb_en_attente = nb_destinataires. Seule exception connue : une campagne rejetée par la modération (premier mailing refusé) voit ses SMS supprimés sans que nb_destinataires soit recalculé — les trois compteurs renvoient alors 0 alors que nb_destinataires garde son volume d'origine.
Une campagne appartenant à un autre compte renvoie la même réponse qu'un identifiant inexistant.
POST /ApiSmsProSolde.php
Retourne le nombre de crédits SMS Pro restants sur votre compte. C'est le seul endpoint qui retourne du JSON.
| Paramètre | Type | Description | |
|---|---|---|---|
api_key |
string | requis | Votre token API (ou utilisez le header Authorization: Bearer). Voir Authentification |
POST /ApiSmsProContacts.php
Ajoute ou met à jour des contacts (et leurs champs personnalisés) dans une liste existante de votre compte, au fil de l'eau (après chaque passage en caisse, chaque commande...). Cet appel n'envoie aucun SMS, ne débite aucun crédit et ne passe pas par la modération : c'est uniquement de la donnée.
Mode « ajouter ou mettre à jour » uniquement : un contact absent de l'appel n'est pas touché. Un contact est identifié par son numéro mobile dans la liste, quelle que soit la forme sous laquelle il y a été enregistré (0612345678, 33612345678 ou 612345678) : il est alors mis à jour, pas créé en double. Un nouveau contact est enregistré au format 0612345678, comme depuis l'espace client. Un contact désabonné reste désabonné : ses champs et son nom sont mis à jour, mais il n'est jamais réabonné par cette API. Un numéro blacklisté est accepté et enregistré normalement, seulement signalé dans la réponse.
| Paramètre | Type | Description | |
|---|---|---|---|
api_key |
string | requis | Votre token API (ou utilisez le header Authorization: Bearer). Voir Authentification |
id_liste |
integer | requis | Identifiant de la liste à alimenter (existante, appartenant à votre compte) |
contacts |
string (JSON) | requis | Tableau JSON de 1 à 5000 contacts : {numero, nom?, champs?}. La clé champs est un objet {"CLE": valeur} (voir ApiSmsProChamps.php) |
numero : mobile français, 06/07, 6/7, 336/337, +33 ou 0033, espaces, points et tirets acceptés (06.12.34.56.78). nom : texte, 60 caractères maximum après nettoyage (balises HTML retirées, sauts de ligne remplacés par une espace) ; absent ou null, il reste inchangé pour un contact existant (vide pour un nouveau) ; "" l'efface.
Une clé de champ inconnue, ou une valeur invalide pour le type du champ, refuse l'appel entier (tout ou rien) : rien n'est écrit. null ou "" efface la valeur existante, une clé absente la laisse inchangée. Formats : texte 255 caractères maximum ; nombre JSON ou chaîne avec virgule ou point ; date JJ/MM/AAAA, JJ-MM-AAAA ou AAAA-MM-JJ ; date et heure, les mêmes suivis de HH:MM, ou AAAA-MM-JJTHH:MM. Une même clé écrite deux fois à la casse près ("prenom" et "PRENOM") est acceptée si les deux valeurs sont identiques, refusée sinon.
status |
Signification |
|---|---|
| RATE_LIMITED | Trop de tentatives depuis votre IP |
| AUTH_FAILED | Token absent, inconnu ou révoqué |
| LIST_NOT_FOUND | id_liste absent, invalide, ou appartenant à un autre compte |
| INVALID_PARAMS | contacts absent, illisible, vide, de plus de 16 Mo ou de plus de 5000 éléments, ou au moins une erreur par contact (détail dans la clé erreurs, jusqu'à 50 messages) |
| SERVER_ERROR | Écriture impossible, ou liste occupée plus de 10 s par un autre appel sur la même liste ; rien n'est enregistré, réessayez |
--data-urlencode encode le JSON : un & ou un + dans un nom ou une valeur arrive intact (avec -d, il couperait ou modifierait le paramètre).
POST /ApiSmsProChamps.php
Renvoie la liste des champs personnalisés définis sur votre compte (clé de balise, nom, type). Utile pour construire dynamiquement un mapping dans une intégration tierce (Zapier, Make, CRM...) sans coder vos clés en dur.
| Paramètre | Type | Description | |
|---|---|---|---|
api_key |
string | requis | Votre token API (ou utilisez le header Authorization: Bearer). Voir Authentification |
status |
Signification |
|---|---|
| RATE_LIMITED | Trop de tentatives depuis votre IP |
| AUTH_FAILED | Token absent, inconnu ou révoqué |
Seuls les numéros mobiles français sont acceptés
Les numéros sont automatiquement normalisés au format international. Les caractères non numériques sont supprimés avant validation.
| Format accepté | Exemple | Normalisé en |
|---|---|---|
06XXXXXXXX |
0612345678 | 33612345678 |
07XXXXXXXX |
0712345678 | 33712345678 |
6XXXXXXXX |
612345678 | 33612345678 |
336XXXXXXXX |
33612345678 | 33612345678 |
Intégrez l'API dans votre langage préféré