API d'activation SMS
Deux options : un point d'accès compatible avec le protocole sms-activate, pour que vos logiciels basculent en changeant l'URL et la clé, et une API REST JSON pour les nouvelles intégrations. Les deux utilisent la même clé API de votre panneau.
Obtenir votre clé API
Créez un compte, ouvrez le panneau et générez une clé dans Accès API. Gardez-la secrète : toute personne qui la possède peut dépenser votre solde.
InscriptionDéroulement type
- Appelez getNumber avec un service et un pays.
- Utilisez le numéro dans l'appli cible.
- Interrogez getStatus toutes les quelques secondes jusqu'à STATUS_OK.
- Appelez setStatus avec 6 pour terminer, ou 8 pour annuler si aucun code n'est venu.
Point d'accès compatible sms-activate
Envoyez des requêtes GET ou POST avec les paramètres api_key et action. Les réponses sont en texte brut, exactement comme sms-activate.
https://smsrota.com/stubs/handler_api.php?api_key=KEY&action=getNumber&service=wa&country=187
Actions
| Action | Paramètres | Réponse |
|---|---|---|
| getBalance | — | ACCESS_BALANCE:12.5000 |
| getPrices | service?, country? | {"187":{"wa":{"cost":0.4,"count":1563}}} |
| getNumber | service, country, maxPrice? | ACCESS_NUMBER:48151623:15550123456 |
| getStatus | id | STATUS_WAIT_CODE · STATUS_WAIT_RETRY:code · STATUS_OK:code · STATUS_CANCEL |
| setStatus | id, status | ACCESS_RETRY_GET · ACCESS_ACTIVATION · ACCESS_CANCEL |
| getRentNumber | service, country, rent_time (4/24/72/168/720) | {"status":"success","phone":{"id":31,"endDate":"…","number":"447700900001"}} |
| getRentStatus | id | {"status":"success","quantity":"1","values":{"0":{"phoneFrom":"WhatsApp","text":"…"}}} |
| setRentStatus | id, status (1 = finish, 2 = cancel) | {"status":"success"} |
| continueRentNumber | id, rent_time | {"status":"success","phone":{…}} |
Valeurs de setStatus
- 3
- Demander un autre code sur le même numéro
- 6
- Terminer l'activation
- 8
- Annuler et rembourser (possible deux minutes après l'achat)
API REST JSON
Envoyez la clé dans l'en-tête Authorization sous la forme "Bearer KEY". Les montants sont des chaînes en dollars US à quatre décimales.
GET https://smsrota.com/v1/balance
GET https://smsrota.com/v1/prices?service=wa
POST https://smsrota.com/v1/activations {"service":"wa","country":"187"}
GET https://smsrota.com/v1/activations/:id
POST https://smsrota.com/v1/activations/:id/retry
POST https://smsrota.com/v1/activations/:id/complete
POST https://smsrota.com/v1/activations/:id/cancel
GET https://smsrota.com/v1/rent/prices?service=wa&hours=24
POST https://smsrota.com/v1/rentals {"service":"full","country":"16","hours":24}
GET https://smsrota.com/v1/rentals/:id
POST https://smsrota.com/v1/rentals/:id/extend {"hours":24}
POST https://smsrota.com/v1/rentals/:id/finish
POST https://smsrota.com/v1/rentals/:id/cancel
POST https://smsrota.com/v1/rentals/:id/dispute {"reason":"no_sms"}
PUT https://smsrota.com/v1/webhook {"url":"https://example.com/sms-webhook"}
POST https://smsrota.com/v1/webhook/test
GET https://smsrota.com/v1/webhook/eventsWebhooks
Indiquez une URL dans Accès API de votre panneau. Nous envoyons un POST avec un corps JSON pour chaque événement. Répondez avec un statut 2xx sous 10 secondes ; sinon nous réessayons après 1, 5, 30, 120, 360 et 720 minutes.
- activation.sms_received
- Un code est arrivé pour un numéro que vous avez acheté.
- activation.cancelled
- Un numéro a été annulé ou a expiré, et l'argent est revenu sur votre solde.
- rental.sms_received
- Un SMS est arrivé sur un numéro loué.
- rental.ended
- Une location s'est terminée ou a été annulée.
Exemple de corps
{
"id": "evt_1042",
"type": "activation.sms_received",
"createdAt": "2026-11-01T10:00:00.000Z",
"data": {
"activationId": 48151623,
"service": "wa",
"country": "187",
"phone": "15550123456",
"code": "123456"
}
}Vérifier la signature
Chaque requête contient un en-tête X-Webhook-Signature de la forme t=1730000000,v1=…, où v1 est le HMAC-SHA256 hexadécimal de "t.body" calculé avec votre secret de signature. Rejetez la requête si la signature ne correspond pas ou si t date de plus de 5 minutes.
import { createHmac, timingSafeEqual } from "node:crypto";
// rawBody: the request body exactly as received, before JSON parsing.
function verify(rawBody, header, secret) {
const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
return fresh && v1.length === expected.length && timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}Erreurs
- BAD_KEY
- La clé API est incorrecte ou a été remplacée.
- NO_NUMBERS
- Pas de stock pour ce service et ce pays pour le moment.
- NO_BALANCE
- Votre solde est insuffisant pour ce numéro.
- EARLY_CANCEL_DENIED
- L'annulation est possible deux minutes après l'achat.
- NO_ACTIVATION
- L'identifiant d'activation n'existe pas ou ne vous appartient pas.