Messages
Envoyer un SMS
Un appel, un message. GetSMS choisit un numéro marocain du parc, envoie le SMS et vous renvoie les statuts par webhook.
POST
/v1/messages/sendx-api-key · débité par segmenttostringrequisNuméro du destinataire au format international, par exemple
+212612345678.contentstringrequisTexte du message, 2 048 caractères au plus. Un SMS fait 160 caractères (70 avec des accents spéciaux ou de l’arabe) ; au-delà, il est découpé et chaque partie est débitée.
fromstringNuméro d’envoi parmi vos numéros. Sans lui, GetSMS choisit un numéro du parc, toujours le même pour un destinataire donné.
request_idstringVotre identifiant (255 caractères au plus), renvoyé dans le message et les événements. Pratique pour relier un SMS à une commande ou un dossier. Il protège aussi des doubles envois : le même
request_id vers le même destinataire, dans les 24 h, renvoie le premier message sans le renvoyer ni le facturer (409 si le texte diffère).send_atdate ISO 8601Envoi programmé, 20 jours au plus dans le futur.
sender_idstringbientôtNom d’expéditeur validé, 11 caractères au plus. Voir Nom d’expéditeur.
curl -X POST https://api.getsms.tech/v1/messages/send \ -H "x-api-key: $GETSMS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"to": "+212612345678", "content": "Votre code est 482913"}'const res = await fetch("https://api.getsms.tech/v1/messages/send", { method: "POST", headers: { "x-api-key": process.env.GETSMS_API_KEY, "Content-Type": "application/json" }, body: JSON.stringify({ to: "+212612345678", content: "Votre code est 482913" }),});const { data } = await res.json();import os, requests
res = requests.post( "https://api.getsms.tech/v1/messages/send", headers={"x-api-key": os.environ["GETSMS_API_KEY"]}, json={"to": "+212612345678", "content": "Votre code est 482913"},)data = res.json()["data"]<?php$ch = curl_init("https://api.getsms.tech/v1/messages/send");curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["x-api-key: " . getenv("GETSMS_API_KEY"), "Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode(["to" => "+212612345678", "content" => "Votre code est 482913"]),]);$data = json_decode(curl_exec($ch), true)["data"];iduuidIdentifiant du message, à garder pour le consulter.
statusstringpending à la création : le message est en file. Voir les statuts.ownerstringLe numéro du parc qui envoie.
contactstringLe destinataire.
request_idstringVotre identifiant, s’il a été fourni.
{ "status": "success", "message": "message added to queue", "data": { "id": "32343a19-da5e-4b1b-a767-3298a73703cb", "request_id": "commande-8841", "owner": "+212661234501", "contact": "+212612345678", "status": "pending", "send_attempt_count": 0, "max_send_attempts": 2, "request_received_at": "2026-11-10T09:12:03Z" }}{ "status": "error", "code": "insufficient_credit", "message": "crédit insuffisant : cet envoi coûte 0,36 DH HT et votre solde est de 0,12 DH ; achetez un pack dans Facturation", "data": { "balance": 120, "required": 360, "unit_price": 180 }}{ "status": "error", "message": "validation errors while sending message", "data": { "to": ["The to field must contain only digits and must be less than 14 characters"] }}La réponse complète contient aussi les autres horodatages (scheduled_at, sent_at, delivered_at, failed_at, expired_at). Les montants de la réponse 402 sont en millimes de dirham, voir Crédits et facturation.