API Messages
Vos SMS transactionnels, livrés en 1,4 s
Confirmations de commande, alertes de compte, rappels de rendez-vous : un appel API, et votre message part en direct vers Maroc Telecom, Orange et inwi, avec un accusé de réception sur votre webhook.
De l’appel API au téléphone du client.
Tarif transactionnel, sans abonnement.
Maroc Telecom, Orange et inwi, en direct.
Chaque accusé de réception est signé.
Fonctionnalités
Tout ce qu’il faut pour des SMS qui doivent arriver
Une API REST simple, pensée pour les messages attendus : codes, reçus, alertes et rappels.
Routes directes
Aucun intermédiaire entre notre plateforme et les trois opérateurs marocains : moins de latence, moins de messages perdus.
Accusés de réception en temps réel
Chaque message passe par « en file », « envoyé » puis « livré ». Chaque changement arrive sur votre webhook signé.
Arabe, français, emoji
Encodage GSM-7 ou Unicode détecté automatiquement, découpage en segments et nombre de segments renvoyé à l’envoi.
Idempotence
Passez un en-tête Idempotency-Key : une requête rejouée après une coupure réseau n’envoie jamais deux fois le même SMS.
Clés de test gratuites
Mêmes réponses et mêmes webhooks qu’en production, sans SMS envoyé ni facturé. Idéal pour vos tests automatisés.
Coût connu à l’envoi
Le prix en dirhams est renvoyé dans la réponse, puis détaillé par opérateur et par jour dans le tableau de bord.
Comment ça marche
De votre code au téléphone du client
Quatre étapes, dont trois que nous faisons pour vous.
-
Créez une clé API
Depuis le tableau de bord, en mode test ou production, avec des droits limités si besoin.
sk_test_•••• -
Envoyez le message
Destinataire, expéditeur et texte, en JSON. La réponse donne l’identifiant, les segments et le prix.
POST /v1/messages -
Nous routons
Numéro validé, opérateur détecté, message transmis en direct par la route prioritaire.
status: sent -
Recevez l’accusé
L’opérateur confirme la livraison et nous vous prévenons aussitôt sur votre webhook.
message.delivered
Accusés de réception
Un statut fiable pour chaque SMS
Vous savez à chaque instant où en est chaque message, sans interroger l’API en boucle.
Cycle de vie
Cinq statuts, un webhook par changement
L’opérateur renvoie un accusé de réception (DLR) quand le téléphone a reçu le message. Nous le traduisons en un statut simple et vous le transmettons en temps réel.
- Signature HMAC-SHA256 dans l’en-tête
MySms-Signature - Nouvelles tentatives automatiques si votre serveur ne répond pas
- Historique de chaque message consultable dans le tableau de bord
// POST https://myshop.ma/hooks/sms// MySms-Signature: t=1792569663,v1=9b1e…{ "type": "message.delivered", "data": { "id": "msg_9fK2", "to": "+212612345678", "status": "delivered", "operator": "maroc_telecom", "segments": 1, "price": 0.50, "sent_at": "2026-10-21T09:41:02+01:00", "delivered_at": "2026-10-21T09:41:03+01:00" }}
Encodage & segments
Combien de SMS pour votre message ?
Un SMS fait 160 caractères en alphabet latin simple, 70 dès qu’il contient de l’arabe ou certains accents. Testez votre message.
Bon à savoir
GSM-7 ou Unicode : l’encodage fixe la longueur
L’alphabet GSM-7 couvre les lettres latines, les chiffres et quelques accents (é, è, à, ù). Un seul caractère hors de cet alphabet — une lettre arabe, un ê, un ç minuscule ou un emoji — fait passer tout le message en Unicode.
- Au-delà d’un SMS, chaque segment perd 7 caractères (en-tête de concaténation) : 153 en GSM-7, 67 en Unicode
- Le téléphone réassemble les segments en un seul message
- La réponse de l’API indique l’encodage et le nombre de segments facturés
GSM-7 : 160 caractères par SMS (153 par segment au-delà).
| Encodage | 1 SMS | Par segment ensuite |
|---|---|---|
| GSM-7 | 160 car. | 153 car. |
| Unicode (arabe, emoji) | 70 car. | 67 car. |
Pour les développeurs
Votre premier SMS en quelques lignes
Une requête HTTPS, une réponse JSON. Les SDK officiels gèrent l’authentification, les erreurs et les nouvelles tentatives.
curl https://api.mysms.ma/v1/messages \ -H "Authorization: Bearer $MYSMS_KEY" \ -H "Idempotency-Key: order-20481" \ -H "Content-Type: application/json" \ -d '{ "to": "+212612345678", "from": "MyShop", "body": "Commande #20481 confirmée. Livraison demain entre 10h et 13h.", "webhook": "https://myshop.ma/hooks/sms" }'# → {"id":"msg_9fK2","status":"queued","segments":1,"encoding":"gsm7","price":0.50}
use MySms\Client;$sms = new Client(env('MYSMS_KEY'));$message = $sms->messages->send([ 'to' => '+212612345678', 'from' => 'MyShop', 'body' => 'Commande #20481 confirmée. Livraison demain entre 10h et 13h.', 'webhook' => 'https://myshop.ma/hooks/sms',]);// $message->status === 'queued', $message->segments === 1
import MySms from '@mysms/node';const sms = new MySms(process.env.MYSMS_KEY);const message = await sms.messages.send({ to: '+212612345678', from: 'MyShop', body: 'Commande #20481 confirmée. Livraison demain entre 10h et 13h.', webhook: 'https://myshop.ma/hooks/sms',});// → { id: 'msg_9fK2', status: 'queued', segments: 1, price: 0.50 }
import osfrom mysms import Clientclient = Client(os.environ["MYSMS_KEY"])message = client.messages.send( to="+212612345678", sender="MyShop", body="Commande #20481 confirmée. Livraison demain entre 10h et 13h.", webhook="https://myshop.ma/hooks/sms",)# message.status == "queued", message.segments == 1
- Idempotency-KeyRejouez une requête sans risque de doublon.
- Webhook par messageOu une URL par défaut pour tout le compte.
- Clés à droits limitésEnvoi seul, lecture seule, test ou production.
- Référence APISDK
Cas d’usage
Ce que nos clients envoient
Des messages attendus, qui doivent arriver tout de suite, dans la langue du destinataire.
E-commerce
Moins de commandes refusées à la livraison
En paiement à la livraison, un SMS de confirmation dès la commande et un autre avant le passage du livreur font la différence.
- Confirmation de commande et montant à préparer
- Expédition et créneau de livraison
- Relance de panier abandonné
Banque & fintech
Des alertes qui rassurent, en temps réel
Opérations, connexions et changements de sécurité : vos clients sont prévenus dans la seconde, par la route prioritaire.
- Alerte de paiement ou de retrait
- Nouvelle connexion ou nouvel appareil
- Changement de mot de passe ou de RIB
Santé
Moins de rendez-vous manqués
Un rappel la veille et le jour même, envoyé automatiquement depuis votre logiciel de rendez-vous.
- Rappel J-1 et H-2
- Résultats d’analyses disponibles
- Changement d’horaire ou de praticien
Logistique
Le client sait quand son colis arrive
Chaque étape de la livraison déclenche un SMS depuis votre système de suivi, avec un lien vers le suivi détaillé.
- Colis pris en charge et en transit
- Livreur en route avec créneau
- Échec de livraison et nouveau passage
Éducation
Les parents informés, sans application à installer
Absences, retards, réunions et résultats : le SMS reste le canal que tous les parents lisent.
- Absence ou retard signalé dans la matinée
- Convocation et réunion parents-professeurs
- Bulletins et frais de scolarité
Tableau de bord
Tout suivre, en dirhams
Chaque message, son statut, son opérateur et son coût. Filtrez, exportez en CSV, ou interrogez l’API.
Derniers messages en direct
Répartition par opérateur
Volume par heure
FAQ
Questions fréquentes
Combien de caractères contient un SMS ?
160 caractères en GSM-7 (alphabet latin et accents courants), 70 en Unicode (arabe, emoji, ê, ç…). Au-delà, le message est découpé en segments de 153 ou 67 caractères, réassemblés sur le téléphone. Chaque segment est facturé comme un SMS.
Que se passe-t-il si un message n’est pas livré ?
Le statut passe à failed ou expired et votre webhook reçoit l’événement avec le motif. Vous payez par message livré : un échec définitif ne vous est pas facturé.
Puis-je envoyer avec le nom de ma marque ?
Oui, avec un Sender ID enregistré (1 à 3 jours ouvrés, inclus dès le palier Croissance). En attendant, vos messages partent avec notre expéditeur partagé.
Comment éviter les envois en double ?
Ajoutez un en-tête Idempotency-Key unique, par exemple l’identifiant de la commande. Si la même requête est rejouée, l’API renvoie le message déjà créé au lieu d’en envoyer un second.
Y a-t-il une limite de débit ?
Le débit par défaut convient à la grande majorité des usages transactionnels. Pour des pics importants (soldes, alertes de masse), le palier Scale offre une route dédiée : parlez-en à notre équipe.
Comment tester sans envoyer de vrais SMS ?
Utilisez une clé de test : l’API répond exactement comme en production et vos webhooks reçoivent les statuts simulés, mais aucun SMS n’est envoyé ni facturé.
Plateforme
Les autres produits mysms
Un seul compte, un seul solde et une seule facture pour tous vos SMS.
Tarifs
Dès 0,40 MAD / SMS
Transactionnel : de 0,66 à 0,40 MAD HT par SMS selon votre volume mensuel. Crédit prépayé sans expiration, rechargé par virement bancaire (carte bancaire bientôt disponible).
Commencez à envoyer en 5 minutes
Créez un compte gratuit, recevez 100 messages de test et constatez la rapidité de la livraison locale. Sans carte bancaire.