Guide complet pour intégrer l'API SMS Callisto
Intégrez l'envoi de SMS en quelques minutes avec notre API REST simple et puissante.
Inscrivez-vous gratuitement sur Callisto
Générez votre clé dans le tableau de bord
Faites votre premier appel API
Toutes les requêtes API utilisent l'authentification Basic Auth avec vos identifiants API.
| Paramètre | Description |
|---|---|
access_key |
Votre clé d'accès (utilisateur Basic Auth) |
access_secret |
Votre clé secrète (mot de passe Basic Auth) |
Authorization: Basic base64(access_key:access_secret)
curl https://api.callistosms.com/v1/sms/balance -u "YOUR_ACCESS_KEY:YOUR_ACCESS_SECRET"
Important : Ne partagez jamais vos identifiants API et ne les exposez pas côté client.
https://api.callistosms.com/v1
/sms/send
| Paramètre | Type | Requis | Description |
|---|---|---|---|
to |
string | array | Oui | Numéro(s) de téléphone du/des destinataire(s) (format international) |
message |
string | Oui | Contenu du message (max 1600 caractères) |
sender_id |
string | Non | Identifiant de l'expéditeur (doit être approuvé) |
scheduled_at |
datetime | Non | Date et heure d'envoi programmé (ISO 8601) |
curl -X POST https://api.callistosms.com/v1/sms/send \
-u "YOUR_ACCESS_KEY:YOUR_ACCESS_SECRET" \
-H "Content-Type: application/json" \
-d '{
"to": ["+22507XXXXXXXX"],
"message": "Bonjour ! Votre code de vérification est 123456",
"sender_id": "CALLISTO"
}'
{
"success": true,
"data": {
"id": "msg_abc123xyz",
"to": ["+22507XXXXXXXX"],
"status": "queued",
"credits_used": 1,
"created_at": "2026-02-01T10:30:00Z"
}
}
/sms/bulk
Envoyez le même message à plusieurs destinataires en une seule requête.
curl -X POST https://api.callistosms.com/v1/sms/bulk \
-u "YOUR_ACCESS_KEY:YOUR_ACCESS_SECRET" \
-H "Content-Type: application/json" \
-d '{
"recipients": [
"+22507XXXXXXXX",
"+22508XXXXXXXX",
"+22509XXXXXXXX"
],
"message": "Promotion : -20% sur tous nos produits !",
"sender_id": "CALLISTO"
}'
/otp/send
Envoyez un code de vérification unique (OTP) à un destinataire. Le code est généré automatiquement et inséré dans votre message via la variable {'{code}'}.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
to |
string | Oui | Numéro de téléphone du destinataire (format international) |
message |
string | Oui | Message contenant {'{code}'} (5-500 caractères) |
sender |
string | Oui | Identifiant de l'expéditeur (doit être approuvé) |
expired_in |
integer | Oui | Durée de validité en secondes (60 - 86400) |
digit_size |
integer | Non | Nombre de caractères du code (4-10, défaut: 6) |
type |
string | Non | Type de code: digit, alpha, alphanumeric (défaut: digit) |
curl -X POST https://api.callistosms.com/v1/otp/send \
-u "YOUR_ACCESS_KEY:YOUR_ACCESS_SECRET" \
-H "Content-Type: application/json" \
-d '{
"to": "+22507XXXXXXXX",
"message": "Votre code de vérification Callisto est: {code}. Valide pendant 5 minutes.",
"sender": "CALLISTO",
"expired_in": 300,
"digit_size": 6,
"type": "digit"
}'
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"recipient": "+22507XXXXXXXX",
"expires_at": "2026-04-07T10:35:00Z",
"expires_in": 300
}
Note : Conservez l'id retourné pour vérifier le code ultérieurement.
/otp/verify
Vérifiez le code OTP saisi par l'utilisateur.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
otp_id |
string | Oui | ID de l'OTP retourné lors de l'envoi (UUID) |
code |
string | Oui | Code saisi par l'utilisateur (4-10 caractères) |
curl -X POST https://api.callistosms.com/v1/otp/verify \
-u "YOUR_ACCESS_KEY:YOUR_ACCESS_SECRET" \
-H "Content-Type: application/json" \
-d '{
"otp_id": "550e8400-e29b-41d4-a716-446655440000",
"code": "123456"
}'
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "verified",
"verified": true,
"verified_at": "2026-04-07T10:32:15Z"
}
{
"message": "Invalid OTP code"
}
| Code | Description |
|---|---|
400 |
Code OTP invalide |
404 |
OTP non trouvé |
410 |
OTP expiré |
429 |
Trop de tentatives de vérification |
/otps/{{otp_id}}
Récupérez le statut actuel d'un OTP.
curl https://api.callistosms.com/v1/otps/{{otp_id}} \
-u "YOUR_ACCESS_KEY:YOUR_ACCESS_SECRET"
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"recipient": "+22507XXXXXXXX",
"status": "pending",
"created_at": "2026-04-07T10:30:00Z",
"expires_at": "2026-04-07T10:35:00Z",
"verified_at": null
}
| Statut | Description |
|---|---|
| pending | En attente de vérification |
| verified | Code vérifié avec succès |
| expired | Code expiré |
/otps
Récupérez la liste des OTP avec pagination.
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
page |
integer | 1 | Numéro de page |
limit |
integer | 20 | Nombre d'éléments par page |
started_at |
date | -30 jours | Date de début (YYYY-MM-DD) |
ended_at |
date | aujourd'hui | Date de fin (YYYY-MM-DD) |
curl "https://api.callistosms.com/v1/otps?page=1&limit=10&started_at=2026-04-01&ended_at=2026-04-07" \
-u "YOUR_ACCESS_KEY:YOUR_ACCESS_SECRET"
{
"items": [
{
"id": "3b5d654b-d603-44b6-8f9e-0f24b38eafd0",
"client_id": "9d8e0eab-6c65-4794-ae22-637445a421bf",
"api_client_id": "c11e9a92-27eb-430f-949f-40dea00d521d",
"message_id": "ea01e0ba-02d2-471a-8e23-340b7d570b3e",
"recipient": "+22507XXXXXXXX",
"status": "expired",
"expires_at": "2026-04-07 19:05:12",
"verified_at": null,
"attempts": 0,
"created_at": "2026-04-07 18:06:52",
"updated_at": "2026-04-07 18:06:52"
},
{
"id": "d5f29dfc-03b5-41da-b371-2d7998896c72",
"client_id": "9d8e0eab-6c65-4794-ae22-637445a421bf",
"api_client_id": "c11e9a92-27eb-430f-949f-40dea00d521d",
"message_id": "ac118655-fe08-4eba-afb1-e4a7a5399a95",
"recipient": "+22508XXXXXXXX",
"status": "verified",
"expires_at": "2026-04-07 18:55:37",
"verified_at": "2026-04-07 18:52:15",
"attempts": 1,
"created_at": "2026-04-07 17:57:17",
"updated_at": "2026-04-07 18:52:15"
}
],
"total": 25,
"per_page": 20,
"current_page": 1,
"next": 2,
"previous": 0,
"total_pages": 2
}
/sms/balance
curl https://api.callistosms.com/v1/sms/balance -u "YOUR_ACCESS_KEY:YOUR_ACCESS_SECRET"
{
"success": true,
"data": {
"credits": 5000,
"currency": "FCFA"
}
}
/sms/{{message_id}}
| Statut | Description |
|---|---|
| queued | Le message est en file d'attente |
| sent | Le message a été envoyé à l'opérateur |
| delivered | Le message a été livré au destinataire |
| failed | L'envoi du message a échoué |
| Code | Description |
|---|---|
400 |
Requête invalide - vérifiez les paramètres |
401 |
Non autorisé - clé API invalide ou manquante |
402 |
Crédits insuffisants |
404 |
Ressource non trouvée |
429 |
Limite de requêtes dépassée |
500 |
Erreur serveur interne |
Pour garantir la stabilité du service, les limites suivantes s'appliquent :
Les en-têtes de réponse incluent des informations sur vos limites actuelles :
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1706789400
Recevez des notifications en temps réel sur le statut de vos messages. Configurez votre URL de webhook dans le tableau de bord.
{
"event": "message.delivered",
"data": {
"id": "msg_abc123xyz",
"to": "+22507XXXXXXXX",
"status": "delivered",
"delivered_at": "2026-02-01T10:30:15Z"
},
"timestamp": "2026-02-01T10:30:16Z"
}
Notre équipe technique est disponible pour vous aider à intégrer l'API Callisto.