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

API de Vérification SMS — SMSNoKYC

Automatisez la vérification OTP de bout en bout. Réservez des numéros virtuels dans plus de 190 pays, lisez les codes SMS en quelques secondes, louez des lignes dédiées de longue durée et pilotez chaque commande via une seule surface REST — pas de clé d'API, pas de KYC, payé en cryptomonnaie.

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

Authentification requise. Chaque requête s'appuie sur un cookie de session : vous devez donc être connecté à votre compte SMSNoKYC. Établissez une session via l'interface web ou le point d'authentification avant d'appeler.

Pourquoi les développeurs choisissent l’API SMSNoKYC

SMSNoKYC 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, SMSNoKYC fonctionne avec n’importe quel client HTTPS, facture strictement par numéro, et accepte 20+ cryptomonnaies dont Bitcoin, Monero, Ethereum, USDT, USDC, Solana, Litecoin, XRP, TRON et Toncoin.

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://smsnokyc.com/auth-api.php \ -d "action=login&seed=AbC3-dEf4-gHj5-kLm6" \ -c cookies.txt
import requests session = requests.Session() resp = session.post("https://smsnokyc.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://smsnokyc.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://smsnokyc.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://smsnokyc.com/api.php?action=countries
resp = session.get("https://smsnokyc.com/api.php", params={"action": "countries"}) countries = resp.json() for c in countries: print(c["code"], c["name"])
const resp = await fetch("https://smsnokyc.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://smsnokyc.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://smsnokyc.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://smsnokyc.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://smsnokyc.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

À quoi sert l'API de vérification SMSNoKYC ?

Elle ouvre à votre propre code le même catalogue que le site : des numéros virtuels dans plus de 190 pays pour la vérification OTP ponctuelle et pour des locations de 7 à 90 jours. Via une simple interface REST JSON, vous pouvez parcourir les applications, lire les prix en direct, réserver des numéros, récupérer les codes entrants et rembourser les activations ratées — sans KYC, facturation en crypto uniquement.

Faut-il une clé d'API ou un jeton OAuth ?

Non. L'authentification est un cookie de session : envoyez une fois votre phrase d'accès de 16 caractères en POST à /auth-api.php, puis reportez le cookie renvoyé sur chaque appel suivant. Rien à provisionner, faire tourner ou révoquer — vous vous connectez une fois par session et le restez pendant toute la durée de vie du cookie.

Combien coûte l'API ?

L'API est gratuite à appeler — pas de frais mensuel, pas d'abonnement, pas de volume minimum. Vous ne payez qu'au numéro : activations ponctuelles dès 0,05 $, locations dédiées dès quelques dollars pour 7 jours. Tout est prélevé sur votre solde prépayé, et toute activation qui ne reçoit jamais de SMS est remboursée d'elle-même.

Quels langages et frameworks peuvent l'appeler ?

Tout ce qui peut émettre une requête HTTPS fonctionne — Python (requests, httpx), Node.js (fetch, axios), Go, PHP, Ruby, Java, C#, cURL depuis Bash et le reste. La doc inclut des exemples prêts à copier en cURL, Python et JavaScript, et un fichier OpenAPI 3.0 complet sur /openapi.json permet de générer un client typé dans le langage de votre choix.

Que se passe-t-il si un code de vérification n'arrive jamais ?

Chaque activation dispose d'une fenêtre de 20 minutes. Si rien n'arrive avant sa fermeture, la commande s'annule d'elle-même et le prix intégral revient sur votre solde — sans ticket, sans nouvelle tentative manuelle. Vous pouvez dépenser ce solde remboursé aussitôt sur un autre numéro, éventuellement sur une autre catégorie d'opérateur (virtuel, physique ou premium) pour un meilleur taux de réussite.

L'API a-t-elle des limites de débit ?

La connexion est plafonnée à 5 tentatives par 15 minutes et par IP pour bloquer la devinette de phrase. Le reste — catalogue, achat, commandes, locations — n'a pas de plafond strict pour l'instant, mais gardez des intervalles raisonnables : interroger /api.php?action=orders toutes les 3-5 secondes suffit largement pour lire les SMS, et des rafales soutenues au-delà d'environ 10 req/s peuvent être limitées au niveau du WAF.