Vai al contenuto principale
100+
Paesi
Oltre 1.000 servizi. Paga in crypto, senza KYC.
Acquista numero

API di Verifica SMS — SMSNoKYC

Automatizza la verifica OTP dall'inizio alla fine. Prenota numeri virtuali in oltre 190 paesi, leggi i codici SMS in secondi, noleggia linee dedicate a lungo termine e comanda ogni ordine da un'unica superficie REST: senza chiave API, senza KYC, pagato in criptovaluta.

Tempo di lettura: 5 min REST · JSON · OpenAPI 3.0 Spec OpenAPI →

Autenticazione richiesta. Ogni richiesta si appoggia a un cookie di sessione, quindi devi aver effettuato l'accesso al tuo account SMSNoKYC. Stabilisci una sessione tramite l'interfaccia web o l'endpoint di autenticazione prima di chiamare.

Perché gli sviluppatori scelgono l’API SMSNoKYC

SMSNoKYC è l’API di verifica SMS più flessibile per gli sviluppatori che richiedono anonimato, copertura globale e prezzi prevedibili. A differenza dei provider SMS-OTP tradizionali che subordinano l’accesso a contratti enterprise, volumi minimi mensili e questionari KYC, SMSNoKYC funziona con qualsiasi client HTTPS, addebita esclusivamente per numero e accetta 20+ criptovalute tra cui Bitcoin, Monero, Ethereum, USDT, USDC, Solana, Litecoin, XRP, TRON e Toncoin.

I casi d’uso tipici includono: automatizzare la registrazione di account per QA su larga scala, recuperare password monouso per agenti headless e bot CI, validare flussi con verifica telefonica nell’integrazione continua, affittare numeri dedicati a lungo termine per account Telegram o WhatsApp che richiedono ricezione SMS ininterrotta, e gestire la verifica geo-distribuita in 190+ paesi con controllo esplicito del livello operatore — virtuale, fisico o premium.

Autenticazione

L'API utilizza l'autenticazione di sessione basata su cookie. Per autenticarsi in modo programmatico:

  1. Invia una richiesta POST a /auth-api.php con la tua seed phrase
  2. Memorizza il cookie di sessione dalla risposta
  3. Includi il cookie in tutte le successive richieste API
POST /auth-api.php

Autenticati con la tua seed phrase e stabilisci una sessione.

ParametroTipoObbligatorioDescrizione
actionstringobbligatorioDeve essere "login"
seedstringobbligatorioLa tua seed di accesso a 16 caratteri (es. 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: {...}}
Risposta di successo
{ "success": true, "user": { "id": 42, "prefix": "AbC3", "balance": "74.50" } }
Risposta di errore
{ "success": false, "error": "Invalid seed." }

URL base

Tutti gli endpoint API sono relativi a:

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

Tutte le risposte sono in formato JSON. Gli endpoint POST accettano sia application/json che application/x-www-form-urlencoded come corpo della richiesta.

Limiti di chiamate

L'API applica i seguenti rate limit:

EndpointLimiteFinestra
Autenticazione5 tentativi15 minuti
Tutti gli altri endpointNessun limite fisso

Rate limiting: L'autenticazione è limitata a 5 tentativi ogni 15 minuti. Gli altri endpoint non sono attualmente soggetti a rate limit, ma un utilizzo eccessivo potrebbe essere rallentato. Usa intervalli di richiesta ragionevoli.

Gestione degli errori

Tutti gli errori restituiscono un oggetto JSON con un campo <code>error</code>:

{ "error": "Description of what went wrong" }
Codice HTTPSignificato
200Operazione riuscita (controlla il corpo della risposta per errori a livello applicativo)
403Token CSRF non valido
405Metodo HTTP errato (es. GET su un endpoint solo POST)
429Limite di chiamate superato

Errori comuni a livello applicativo:

ErroreCausa
"Login required"Sessione scaduta o non autenticata
"Insufficient balance"Fondi insufficienti — include i campi need e have
"Service not available for this country"Nessuna disponibilità o servizio inattivo per il paese selezionato
"Missing country or service"I parametri obbligatori non sono stati forniti

Elenca paesi

GET /api.php?action=countries

Restituisce tutti i paesi attivi con numeri virtuali disponibili. Nessuna autenticazione richiesta.

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();
Risposta
[ { "id": 1, "code": "us", "name": "USA" }, { "id": 2, "code": "gb", "name": "UK" }, { "id": 3, "code": "de", "name": "Germany" } ]

Elenca servizi

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

Restituisce i servizi disponibili per un paese specifico, inclusi prezzi e disponibilità. Senza un codice paese, restituisce tutti i servizi senza prezzi.

ParametroTipoObbligatorioDescrizione
countrystringopzionaleCodice paese ISO 3166-1 alpha-2 (es. us, gb, de)
Risposta (con paese)
[ { "id": 12, "name": "WhatsApp", "slug": "whatsapp", "icon_code": "WA", "icon_color": "#25d366", "category": "social", "price": "0.35", "stock": 847 } ]

Elenca operatori

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

Restituisce gli operatori (carrier) disponibili per un paese specifico. Ogni operatore ha un tipo e un moltiplicatore di prezzo applicato al prezzo base del servizio.

ParametroTipoObbligatorioDescrizione
countrystringobbligatorioCodice paese ISO 3166-1 alpha-2
Risposta
[ { "id": 5, "name": "T-Mobile", "type": "physical", "price_multiplier": "1.50", "icon_slug": "tmobile", "icon_domain": "t-mobile.com" } ]

Tipi di operatore: virtual — numeri VoIP, i più economici, potrebbero essere bloccati da alcuni servizi. physical — SIM fisiche, tasso di successo più elevato. premium — consegna più rapida (~10s), massimo tasso di successo.

Acquista numero (attivazione SMS)

POST /api.php?action=buy

Acquista un numero virtuale per la verifica SMS singola. Il numero è attivo per 20 minuti. Se non viene ricevuto alcun SMS, il saldo viene rimborsato automaticamente.

ParametroTipoObbligatorioDescrizione
countrystringobbligatorioCodice paese (es. us)
service_idintegerobbligatorioID servizio da Lista servizi
operator_idintegeropzionaleID operatore da List Operators. Ometti per l'operatore predefinito.
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();
Risposta di successo
{ "success": true, "order_id": 1847, "price": 0.53, "balance": "73.97" }
Errore: saldo insufficiente
{ "error": "Insufficient balance", "need": 0.53, "have": "0.10" }

Elenca ordini

GET /api.php?action=orders

Restituisce i tuoi 50 ordini più recenti, inclusi i numeri di telefono e i codici SMS. Interroga questo endpoint per verificare i codici SMS in arrivo sugli ordini attivi.

Risposta
[ { "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" } ]

Stati dell'ordine: active — in attesa di SMS. completed — SMS ricevuto. cancelled — annullato dall'utente. refunded — rimborsato automaticamente (nessun SMS ricevuto prima del timeout). expired — scaduto.

Consulta prezzo di noleggio

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

Consulta il prezzo per noleggiare un numero dedicato da un operatore specifico per una durata prestabilita.

ParametroTipoObbligatorioDescrizione
countrystringobbligatorioCodice paese
operator_idintegerobbligatorioID operatore
durationintegerobbligatorioDurata del noleggio in giorni: 7, 14, 30 o 90
Risposta
{ "price": "12.50", "duration": 30, "operator": "T-Mobile", "type": "physical", "country": "USA" }

Noleggia numero

POST /api.php?action=rental_buy

Noleggia uno o più numeri di telefono dedicati. Il numero è esclusivamente tuo per l'intero periodo di noleggio e riceve SMS in entrata illimitati.

ParametroTipoObbligatorioDescrizione
countrystringobbligatorioCodice paese
operator_idintegerobbligatorioID operatore
durationintegerobbligatorio7, 14, 30 o 90 giorni
qtyintegeropzionaleNumero di numeri da noleggiare (1–10, predefinito: 1)
Risposta di successo
{ "success": true, "order_ids": [1848, 1849], "total": 25.00, "qty": 2, "unit_price": 12.50, "duration": 30, "balance": "49.50" }

Ottieni info utente

GET /api.php?action=user

Restituisce le informazioni sull'account e il saldo dell'utente corrente. Usalo per verificare lo stato di autenticazione e i fondi disponibili.

Autenticato
{ "logged_in": true, "id": 42, "prefix": "AbC3", "balance": "74.50" }
Non autenticato
{ "logged_in": false }

Esempio di workflow completo

Ecco un esempio Python completo che esegue l'autenticazione, trova un servizio, acquista un numero e verifica l'arrivo del codice 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")

Domande frequenti

A cosa serve l'API di verifica di SMSNoKYC?

Apre al tuo stesso codice lo stesso catalogo del sito: numeri virtuali in oltre 190 paesi per la verifica OTP una tantum e per noleggi da 7 a 90 giorni. Tramite una semplice interfaccia REST in JSON puoi sfogliare le app, leggere i prezzi in tempo reale, prenotare numeri, recuperare i codici in arrivo e rimborsare le attivazioni fallite: senza KYC, fatturando solo in cripto.

Serve una chiave API o un token OAuth?

No. L'autenticazione è un cookie di sessione: invia una volta la tua frase di accesso da 16 caratteri in POST a /auth-api.php, poi rimanda il cookie restituito a ogni chiamata successiva. Nulla da fornire, ruotare o revocare: accedi una volta per sessione e resti tale per tutta la vita del cookie.

Quanto costa l'API?

Chiamare l'API è gratis: niente canone mensile, niente abbonamento, nessun volume minimo. Paghi solo per numero: attivazioni una tantum da 0,05 $, noleggi dedicati da pochi dollari per 7 giorni. Tutto viene scalato dal tuo saldo prepagato, e ogni attivazione che non riceve mai un SMS viene rimborsata da sola.

Quali linguaggi e framework possono chiamarla?

Tutto ciò che può inviare una richiesta HTTPS funziona: Python (requests, httpx), Node.js (fetch, axios), Go, PHP, Ruby, Java, C#, cURL da Bash e il resto. La documentazione include esempi pronti da copiare in cURL, Python e JavaScript, e un file OpenAPI 3.0 completo su /openapi.json ti permette di generare un client tipizzato nel linguaggio che preferisci.

Cosa succede se un codice di verifica non arriva mai?

Ogni attivazione ha una finestra di 20 minuti. Se non arriva nulla prima che si chiuda, l'ordine si annulla da solo e l'intero prezzo torna sul saldo: senza ticket, senza ritentativo manuale. Puoi spendere quel saldo rimborsato subito su un altro numero, magari in un'altra categoria di operatore (virtuale, fisico o premium) per un tasso di successo migliore.

L'API ha limiti di frequenza?

L'accesso è limitato a 5 tentativi ogni 15 minuti per IP per bloccare l'indovinello della frase. Il resto — catalogo, acquisto, ordini, noleggi — per ora non ha un tetto rigido, ma mantieni intervalli ragionevoli: interrogare /api.php?action=orders ogni 3-5 secondi basta e avanza per leggere gli SMS, e picchi sostenuti oltre circa 10 req/s possono essere limitati a livello di WAF.