Aller au contenu principal
100+
Pays
Plus de 1000 services. Paiement en crypto, sans KYC.
Acheter un numéro

API de Vérification SMS — SMSBurner

Automatisez la vérification OTP à grande échelle. Achetez des numéros de téléphone virtuels dans 190+ pays, recevez des codes SMS en quelques secondes, louez des numéros dédiés long terme, et gérez chaque commande via un unique endpoint REST — sans clé API, sans KYC, facturé en cryptomonnaie.

Temps de lecture : 5 min REST · JSON · OpenAPI 3.0 Spec OpenAPI →

Authentification requise. Toutes les requêtes API utilisent l'authentification par session basée sur les cookies. Vous devez être connecté à votre compte SMSBurner pour utiliser l'API. Connectez-vous via l'interface web ou utilisez le point d'accès d'authentification pour établir une session.

Pourquoi les développeurs choisissent l’API SMSBurner

SMSBurner est l’API de vérification SMS la plus flexible pour les développeurs qui ont besoin d’anonymat, d’une couverture mondiale et de tarifs prévisibles. Contrairement aux fournisseurs SMS-OTP classiques qui conditionnent l’accès à des contrats entreprise, des minimums mensuels et des questionnaires KYC, SMSBurner fonctionne avec n’importe quel client HTTPS, facture strictement par numéro, et accepte 8 cryptomonnaies dont Bitcoin, Monero, Ethereum, USDT, Solana, Litecoin et TRON.

Les cas d’usage typiques incluent l’automatisation d’inscriptions de comptes pour le QA à grande échelle, la récupération de mots de passe à usage unique pour les agents headless et les bots CI, la validation de parcours nécessitant un téléphone en intégration continue, la location de numéros dédiés long terme pour des comptes Telegram ou WhatsApp nécessitant une réception SMS ininterrompue, et la vérification géo-distribuée dans 190+ pays avec contrôle explicite du niveau d’opérateur — virtuel, physique ou premium.

Authentification

L'API utilise l'authentification par session basée sur les cookies. Pour vous authentifier par programmation :

  1. Envoyez une requête POST à /auth-api.php avec votre phrase seed
  2. Stockez le cookie de session de la réponse
  3. Incluez le cookie dans toutes les requêtes API suivantes
POST /auth-api.php

Authentifiez-vous avec votre phrase seed et établissez une session.

ParamètreTypeRequisDescription
actionstringrequisDoit être "login"
seedstringrequisVotre seed d'accès de 16 caractères (ex. AbC3-dEf4-gHj5-kLm6)
cURL
Python
JavaScript
# Login and save session cookie curl -X POST https://smsburner.com/auth-api.php \ -d "action=login&seed=AbC3-dEf4-gHj5-kLm6" \ -c cookies.txt
import requests session = requests.Session() resp = session.post("https://smsburner.com/auth-api.php", data={ "action": "login", "seed": "AbC3-dEf4-gHj5-kLm6" }) data = resp.json() print(data) # {"success": true, "user": {...}} # session object now holds the cookie for all future requests
const resp = await fetch("https://smsburner.com/auth-api.php", { method: "POST", credentials: "include", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: "action=login&seed=AbC3-dEf4-gHj5-kLm6" }); const data = await resp.json(); console.log(data); // {success: true, user: {...}}
Réponse de succès
{ "success": true, "user": { "id": 42, "prefix": "AbC3", "balance": "74.50" } }
Réponse d'erreur
{ "success": false, "error": "Invalid seed." }

URL de base

Tous les points d'accès de l'API sont relatifs à :

https://smsburner.com/api.php?action={action}

Toutes les réponses sont en JSON. Les points d'accès POST acceptent les corps de requête application/json et application/x-www-form-urlencoded.

Limites de requêtes

L'API applique les limites de débit suivantes :

Point d'accèsLimiteFenêtre
Authentification5 tentatives15 minutes
Tous les autres points de terminaisonPas de limite stricte

Limitation de débit : L'authentification est limitée à 5 tentatives par 15 minutes. Les autres points de terminaison ne sont pas actuellement limités, mais un usage excessif peut être ralenti. Utilisez des intervalles de requête raisonnables.

Gestion des erreurs

Toutes les erreurs renvoient un objet JSON avec un champ <code>error</code> :

{ "error": "Description of what went wrong" }
Code HTTPSignification
200Succès (vérifiez le corps de la réponse pour les erreurs au niveau applicatif)
403Jeton CSRF invalide
405Méthode HTTP incorrecte (ex. GET sur un point de terminaison POST uniquement)
429Limite de débit dépassée

Erreurs courantes au niveau de l'application :

ErreurCause
"Login required"Session expirée ou non authentifié
"Insufficient balance"Fonds insuffisants — inclut les champs need et have
"Service not available for this country"Pas de stock ou service inactif pour le pays sélectionné
"Missing country or service"Les paramètres requis n'ont pas été fournis

Lister les pays

GET /api.php?action=countries

Renvoie tous les pays actifs avec des numéros virtuels disponibles. Aucune authentification requise.

cURL
Python
JavaScript
curl https://smsburner.com/api.php?action=countries
resp = session.get("https://smsburner.com/api.php", params={"action": "countries"}) countries = resp.json() for c in countries: print(c["code"], c["name"])
const resp = await fetch("https://smsburner.com/api.php?action=countries"); const countries = await resp.json();
Réponse
[ { "id": 1, "code": "us", "name": "USA" }, { "id": 2, "code": "gb", "name": "UK" }, { "id": 3, "code": "de", "name": "Germany" } ]

Lister les services

GET /api.php?action=services&country={code}

Renvoie les services disponibles pour un pays spécifique, y compris les prix et le stock. Sans code pays, renvoie tous les services sans tarification.

ParamètreTypeRequisDescription
countrystringoptionnelCode pays ISO 3166-1 alpha-2 (ex. us, gb, de)
Réponse (avec pays)
[ { "id": 12, "name": "WhatsApp", "slug": "whatsapp", "icon_code": "WA", "icon_color": "#25d366", "category": "social", "price": "0.35", "stock": 847 } ]

Lister les opérateurs

GET /api.php?action=operators&country={code}

Renvoie les opérateurs (fournisseurs) disponibles pour un pays spécifique. Chaque opérateur a un type et un multiplicateur de prix appliqué au prix de base du service.

ParamètreTypeRequisDescription
countrystringrequisCode pays ISO 3166-1 alpha-2
Réponse
[ { "id": 5, "name": "T-Mobile", "type": "physical", "price_multiplier": "1.50", "icon_slug": "tmobile", "icon_domain": "t-mobile.com" } ]

Types d'opérateurs : virtual — numéros VoIP, les moins chers, peuvent être bloqués par certains services. physical — vraies cartes SIM, taux de réussite plus élevé. premium — livraison la plus rapide (~10s), meilleur taux de réussite.

Acheter un numéro (Activation SMS)

POST /api.php?action=buy

Achetez un numéro virtuel pour une vérification SMS unique. Le numéro est actif pendant 20 minutes. Si aucun SMS n'est reçu, votre solde est automatiquement remboursé.

ParamètreTypeRequisDescription
countrystringrequisCode pays (ex. us)
service_idintegerrequisID du service depuis Liste des services
operator_idintegeroptionnelID de l'opérateur depuis Liste des opérateurs. Omettre pour l'opérateur par défaut.
cURL
Python
JavaScript
curl -X POST https://smsburner.com/api.php?action=buy \ -b cookies.txt \ -H "Content-Type: application/json" \ -d '{"country":"us","service_id":12,"operator_id":5}'
resp = session.post("https://smsburner.com/api.php?action=buy", json={ "country": "us", "service_id": 12, "operator_id": 5 }) order = resp.json() print(f"Order #{order['order_id']} — ${order['price']}")
const resp = await fetch("https://smsburner.com/api.php?action=buy", { method: "POST", credentials: "include", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ country: "us", service_id: 12, operator_id: 5 }) }); const order = await resp.json();
Réponse de succès
{ "success": true, "order_id": 1847, "price": 0.53, "balance": "73.97" }
Erreur : Solde insuffisant
{ "error": "Insufficient balance", "need": 0.53, "have": "0.10" }

Lister les commandes

GET /api.php?action=orders

Renvoie vos 50 commandes les plus récentes, y compris les numéros de téléphone et les codes SMS. Interrogez ce point de terminaison pour vérifier les codes SMS entrants sur les commandes actives.

Réponse
[ { "id": 1847, "price": "0.53", "status": "completed", "phone_number": "+12025551234", "sms_code": "847293", "created_at": "2026-04-09 14:32:00", "country_code": "us", "country_name": "USA", "service_name": "WhatsApp", "operator_name": "T-Mobile" } ]

Statuts de commande : active — en attente de SMS. completed — SMS reçu. cancelled — annulée par l'utilisateur. refunded — remboursée automatiquement (aucun SMS reçu avant expiration). expired — expirée.

Obtenir le prix de location

GET /api.php?action=rental_price&country={code}&operator_id={id}&duration={days}

Obtenez le prix de location d'un numéro dédié auprès d'un opérateur spécifique pour une durée donnée.

ParamètreTypeRequisDescription
countrystringrequisCode pays
operator_idintegerrequisID de l'opérateur
durationintegerrequisDurée de location en jours : 7, 14, 30, ou 90
Réponse
{ "price": "12.50", "duration": 30, "operator": "T-Mobile", "type": "physical", "country": "USA" }

Louer un numéro

POST /api.php?action=rental_buy

Louez un ou plusieurs numéros de téléphone dédiés. Le numéro est exclusivement le vôtre pour toute la période de location et reçoit des SMS entrants illimités.

ParamètreTypeRequisDescription
countrystringrequisCode pays
operator_idintegerrequisID de l'opérateur
durationintegerrequis7, 14, 30, ou 90 jours
qtyintegeroptionnelNombre de numéros à louer (1–10, par défaut : 1)
Réponse de succès
{ "success": true, "order_ids": [1848, 1849], "total": 25.00, "qty": 2, "unit_price": 12.50, "duration": 30, "balance": "49.50" }

Obtenir les infos utilisateur

GET /api.php?action=user

Renvoie les informations du compte et le solde de l'utilisateur actuel. Utilisez ceci pour vérifier le statut d'authentification et les fonds disponibles.

Authentifié
{ "logged_in": true, "id": 42, "prefix": "AbC3", "balance": "74.50" }
Non authentifié
{ "logged_in": false }

Exemple de flux de travail complet

Voici un exemple complet en Python qui s'authentifie, trouve un service, achète un numéro et interroge le code SMS :

Python
import requests, time BASE = "https://smsburner.com" SEED = "AbC3-dEf4-gHj5-kLm6" s = requests.Session() # 1. Authenticate s.post(f"{BASE}/auth-api.php", data={"action": "login", "seed": SEED}) # 2. Check balance user = s.get(f"{BASE}/api.php?action=user").json() print(f"Balance: ${user['balance']}") # 3. Get services for USA services = s.get(f"{BASE}/api.php?action=services&country=us").json() whatsapp = next(svc for svc in services if svc["name"] == "WhatsApp") print(f"WhatsApp: ${whatsapp['price']} ({whatsapp['stock']} in stock)") # 4. Buy a number order = s.post(f"{BASE}/api.php?action=buy", json={ "country": "us", "service_id": whatsapp["id"] }).json() print(f"Order #{order['order_id']} created") # 5. Poll for SMS code for _ in range(60): orders = s.get(f"{BASE}/api.php?action=orders").json() my_order = next(o for o in orders if o["id"] == order["order_id"]) if my_order["sms_code"]: print(f"SMS code: {my_order['sms_code']}") print(f"Phone: {my_order['phone_number']}") break print("Waiting for SMS...") time.sleep(5) else: print("Timeout — balance will be refunded automatically")

Questions fréquemment posées

Que puis-je faire avec l’API de vérification SMS SMSBurner ?

L’API SMSBurner offre aux développeurs un accès programmatique à des numéros de téléphone virtuels dans 190+ pays pour la vérification SMS ponctuelle (codes OTP) et la location de numéros long terme (7, 14, 30 ou 90 jours). Vous pouvez lister les services, consulter les tarifs en temps réel, allouer des numéros, récupérer les codes SMS entrants et rembourser les activations échouées — le tout via une interface REST JSON, sans KYC et avec facturation crypto uniquement.

Ai-je besoin d’une clé API ou d’un token OAuth pour utiliser l’API ?

Non. L’API SMSBurner utilise une authentification par session cookie : envoyez une seule requête POST à /auth-api.php avec votre seed d’accès de 16 caractères, puis réutilisez le cookie de session retourné pour chaque appel suivant. Il n’y a aucune clé API à provisionner, à rotation ou à révoquer — vous vous authentifiez une seule fois par session et restez authentifié pendant toute la durée de vie du cookie.

Combien coûte l’utilisation de l’API SMSBurner ?

L’API elle-même est gratuite — pas de frais mensuels, pas d’abonnement, pas de volume de requêtes minimum. Vous ne payez que par numéro : les activations SMS ponctuelles démarrent à $0.05 et les locations dédiées long terme démarrent à $4.79 pour 7 jours. Chaque action est débitée de votre solde prépayé, et toute activation n’ayant reçu aucun SMS est remboursée automatiquement.

Quels langages de programmation et frameworks sont supportés ?

Tout langage ou plateforme capable d’émettre des requêtes HTTPS peut appeler l’API — Python (requests, httpx), Node.js (fetch, axios), Go, PHP, Ruby, Java, C#, Bash avec cURL, et bien d’autres. La documentation inclut des exemples prêts à l’emploi en cURL, Python et JavaScript, et une spécification complète OpenAPI 3.0 est publiée à /openapi.json pour générer automatiquement un client typé dans le langage de votre choix.

Que se passe-t-il si mon code de vérification SMS n’arrive jamais ?

Chaque activation dispose d’une fenêtre de livraison de 20 minutes. Si aucun SMS n’arrive avant l’expiration de cette fenêtre, la commande est automatiquement annulée et le montant total est recrédité sur votre solde — sans ticket de support, sans relance manuelle. Vous pouvez immédiatement utiliser le solde remboursé pour allouer un autre numéro, éventuellement sur un niveau d’opérateur différent (virtuel, physique ou premium) pour un meilleur taux de livraison.

Existe-t-il des limites de débit sur l’API SMSBurner ?

L’authentification est limitée à 5 tentatives par 15 minutes par IP, ce qui protège contre l’énumération par force brute des seeds. Tous les autres endpoints — catalogue, achat, orders, locations — n’ont actuellement aucune limite de débit stricte, mais nous vous demandons de maintenir des intervalles de requêtes raisonnables : interroger /api.php?action=orders toutes les 3 à 5 secondes est largement suffisant pour la récupération de SMS, et des rafales soutenues au-delà de ~10 req/s peuvent être limitées au niveau du WAF.