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.

HTTPS Votre appli POST /v1/messages mysms · Casablanca Numéro valide · +212 6GSM-7 · 61 car. · 1 segmentRoute directe · prioritaire Maroc TelecomOrangeinwi MyShop Commande #20481confirmée. Livraisondemain entre 10het 13h. ✓ Livré · 1,2 s
Livraison1,4 smédiane

De l’appel API au téléphone du client.

À partir de0,40MAD / SMS

Tarif transactionnel, sans abonnement.

Couverture3opérateurs

Maroc Telecom, Orange et inwi, en direct.

WebhooksHMACSHA-256

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.

  1. Créez une clé API

    Depuis le tableau de bord, en mode test ou production, avec des droits limités si besoin.

    sk_test_••••
  2. Envoyez le message

    Destinataire, expéditeur et texte, en JSON. La réponse donne l’identifiant, les segments et le prix.

    POST /v1/messages
  3. Nous routons

    Numéro validé, opérateur détecté, message transmis en direct par la route prioritaire.

    status: sent
  4. 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.

queued→sent→delivered
sent→failednuméro inexistant, téléphone hors service…
sent→expiredtéléphone éteint pendant toute la durée de validité
  • 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
message.delivered.json
// 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
EncodageGSM-7
Caractères61 / 160
Segments1
Coût max.0,66 MAD

GSM-7 : 160 caractères par SMS (153 par segment au-delà).

Encodage1 SMSPar segment ensuite
GSM-7160 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.

send.sh
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.

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é
MyShopmaintenant
Commande #20481 confirmée : 349 MAD à régler à la livraison. Livraison demain entre 10h et 13h.
Livré · 1,2 s
MyShopil y a 2 h
طلبك رقم 20481 في الطريق. سيتصل بك الموصل قبل الوصول.

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
WalletMA09:41
Paiement de 1 250,00 MAD par carte ••4821 le 21/10 à 09:41. Si ce n’est pas vous, bloquez la carte depuis l’appli.
Livré · 0,9 s
WalletMAhier
Nouvelle connexion à votre compte depuis un iPhone à Rabat. Pas vous ? Changez votre mot de passe.

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
CabinetAnfalun. 18:00
Rappel : RDV demain mardi 22/10 à 10h00 au cabinet. Merci d’arriver 10 min en avance avec votre carte de mutuelle.
Livré · 1,4 s
LaboCentralil y a 3 j
Vos résultats d’analyses sont disponibles. Consultez-les sur votre espace patient.

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
ExpressMA13:05
Colis MA2049381 : votre livreur arrive entre 14h et 15h. Montant à régler : 349 MAD.
Livré · 1,1 s
ExpressMAhier
شحنتك MA2049381 وصلت إلى مركز الدار البيضاء وستُسلَّم غدا.

É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é
AlAmal08:20
Groupe scolaire Al Amal : Yassine est absent ce matin (8h–10h). Merci de contacter la vie scolaire.
Livré · 1,3 s
AlAmallun.
اجتماع أولياء الأمور يوم السبت 26 أكتوبر على الساعة 10 صباحا.

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.

app.mysms.ma / messages Données d’exemple
Envoyés aujourd’hui8 412▲ 12 % vs hier
Délai médian1,4sstable
Livrés8 25198 % des envoyés
Coût du jour4 206MAD0,50 MAD / SMS

Derniers messages en direct

IDDestinataireOpérateurStatut
msg_9fK2+212 6•• ••• 678Maroc Telecomlivré
msg_9fK1+212 7•• ••• 104inwienvoyé
msg_9fK0+212 6•• ••• 552Orangelivré
msg_9fJz+212 6•• ••• 019Maroc Telecomlivré
msg_9fJy+212 6•• ••• 300Orangefailed

Répartition par opérateur

Maroc Telecom44 %
Orange31 %
inwi25 %

Volume par heure

00h09h18h

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.