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

Documentation API

Automatisez les flux de vérification SMS avec l'API SimNoKYC. Achetez des numéros de téléphone virtuels, recevez des codes SMS, louez des numéros dédiés et gérez les commandes — le tout par programmation.

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

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