SMS

v1.0.0

Envoyez des SMS en France et à l'international via une API REST simple. Sender personnalisable, suivi de délivrance, envoi unitaire ou en masse.

Base URL : https://sms-api.s33d.fr

Tarifs SMS

Le service SMS fonctionne par crédits prépayés. Chaque SMS consomme des crédits selon le nombre de segments.

10 €
100 SMS
soit 0,10 € / SMS
90 €
1 000 SMS
soit 0,09 € / SMS — économisez 10%

Un SMS standard = 1 segment (160 caractères GSM-7 ou 70 caractères Unicode). Les messages longs sont automatiquement découpés en plusieurs segments.

Authentification

Utilisez votre clé API SMS dans le header X-Api-Key :

# Avec curl
curl -H "X-Api-Key: s33d_votre_clé" \
https://sms-api.s33d.fr/api/v1/account/me

Vous pouvez aussi utiliser un Bearer token JWT obtenu via /api/v1/auth/login.

POST /api/v1/sms/send

Envoie un SMS à un destinataire.

Paramètres (JSON body)

Paramètre Type Requis Description
to string oui Numéro au format E.164 (ex: +33612345678)
body string oui Contenu du message (max 1600 caractères)
from string non Sender personnalisé (si activé sur votre compte)

Exemple

# Envoi simple
curl -X POST https://sms-api.s33d.fr/api/v1/sms/send \
-H "Content-Type: application/json" \
-H "X-Api-Key: s33d_votre_clé" \
-d '{
"to": "+33612345678",
"body": "Votre code de vérification : 482951"
}'

Réponse (200 OK)

{
  "message_id": "a1b2c3d4-...",
  "provider_id": "12345678",
  "to": "+33612345678",
  "from": "S33D.FR",
  "status": "sent",
  "segments": 1,
  "cost": 10,
  "credits_remaining": 490
}

POST /api/v1/sms/send-bulk

Envoie jusqu'à 500 SMS en un seul appel.

Paramètres (JSON body)

Paramètre Type Requis Description
messages array oui Tableau d'objets {to, body, from?} (max 500)

Exemple

curl -X POST https://sms-api.s33d.fr/api/v1/sms/send-bulk \
-H "Content-Type: application/json" \
-H "X-Api-Key: s33d_votre_clé" \
-d '{
"messages": [
{"to": "+33612345678", "body": "Promo -20% aujourd\u0027hui !"},
{"to": "+33698765432", "body": "Votre RDV est confirmé demain 14h"}
]
}'

GET /api/v1/account/me

Récupère les informations de votre compte : crédits restants, sender, statistiques d'envoi.

Réponse

{
  "id": "uuid",
  "email": "vous@example.com",
  "company_name": "Mon Entreprise",
  "sender": "S33DFR",
  "sender_status": "enable",
  "price_per_sms": 10,
  "credits": 490,
  "stats": {
    "total_messages": 12,
    "delivered": 11,
    "failed": 1,
    "total_spent_cents": 120,
    "delivery_rate": 91.67
  }
}

GET /api/v1/account/usage

Historique d'utilisation journalier.

Query params

Paramètre Défaut Description
days 30 Nombre de jours d'historique (1-90)

POST /api/v1/auth/register

Crée un nouveau compte client.

Paramètre Type Description
email string Adresse email valide
password string Mot de passe (8-128 caractères)
company_name string Nom de l'entreprise

POST /api/v1/auth/login

Obtient un token JWT pour l'authentification Bearer.

curl -X POST https://sms-api.s33d.fr/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "vous@example.com", "password": "votre_mdp"}'

POST /api/v1/account/sender

Demande un sender personnalisé (nom qui apparaît à la place du numéro). Soumis à validation par l'opérateur (24-48h).

Paramètre Type Description
sender string 3-11 caractères alphanumériques (pas uniquement des chiffres)

Codes d'erreur

Code HTTP Signification
401 Clé API manquante ou invalide
402 Crédits insuffisants
403 Compte désactivé
422 Paramètres invalides (numéro mal formaté, message vide...)
429 Trop de requêtes (rate limit : 100/min)
502 Erreur opérateur (l'envoi a échoué côté fournisseur)

Calcul des segments

Encodage 1 segment Multi-segments
GSM-7 (latin) ≤ 160 caractères 153 caractères / segment
Unicode (emojis, arabe, chinois...) ≤ 70 caractères 67 caractères / segment

Chaque segment est facturé indépendamment. Un SMS de 200 caractères en GSM-7 = 2 segments = 2 × prix unitaire.

Exemples d'intégration

Node.js

const res = await fetch('https://sms-api.s33d.fr/api/v1/sms/send', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Api-Key': process.env.S33D_SMS_KEY,
  },
  body: JSON.stringify({
    to: '+33612345678',
    body: 'Votre code : 123456',
  }),
});
const data = await res.json();
console.log(data.message_id);

Python

import requests

r = requests.post(
    'https://sms-api.s33d.fr/api/v1/sms/send',
    headers={'X-Api-Key': 's33d_votre_clé'},
    json={'to': '+33612345678', 'body': 'Hello depuis Python'}
)
print(r.json()['message_id'])

PHP

$ch = curl_init('https://sms-api.s33d.fr/api/v1/sms/send');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'X-Api-Key: s33d_votre_clé',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'to' => '+33612345678',
        'body' => 'SMS depuis PHP',
    ]),
]);
$result = json_decode(curl_exec($ch), true);
echo $result['message_id'];