API di verifica SMS
L'API SNSSIM gestisce l'acquisto di numeri, la verifica dei codici, l'annullamento, la consultazione del credito e dei prezzi con una singola richiesta HTTP. Utilizza lo standard handler_api, quindi basta cambiare l'indirizzo e la chiave API nei programmi esistenti per connettersi immediatamente.
GET /stubs/handler_api.php
?api_key=API_KEY&action=getNumber
&service=telegram&country=gb
ACCESS_NUMBER:SS8Q2K7:447700900123
GET ...&action=getStatus&id=SS8Q2K7
STATUS_OK:48215- Standard del settore
- handler_api
- Per ogni chiave API
- 300 volte al minuto
- Paese / Servizio
- 145 / 1,255
- Rimborso automatico se non c'è codice
- 20 minuti
Standard del settore
Per ogni chiave API
Paese / Servizio
Rimborso automatico se non c'è codice
Come si ottiene la chiave API?
Genera la chiave nel menu API della schermata dell'account dopo l'accesso. La chiave viene mostrata solo una volta alla generazione, salvala immediatamente. L'API utilizza lo stesso credito e prezzi della schermata web.
Qual è l'indirizzo di base?
Tutte le richieste vengono inviate tramite GET allo stesso indirizzo aggiungendo api_key e action.
https://snssim.com/stubs/handler_api.php?api_key=API_KEY&action=...
Quali richieste posso inviare?
Sono disponibili 7 tipi di richieste, dall'acquisto del numero alla verifica del codice, cancellazione e controllo del credito.
| action | Cosa fa | Esempio di risposta |
|---|---|---|
| getBalance | Controlla il saldo | ACCESS_BALANCE:12.50 |
| getPrices&service=telegram&country=gb | Prezzi e numeri disponibili per servizio e paese | {"gb":{"telegram":{"cost":0.207,"count":8877728}}} |
| getNumber&service=telegram&country=gb | Acquisto numero | ACCESS_NUMBER:ID:PHONE |
| getStatus&id=ID | Controlla il codice | STATUS_WAIT_CODE / STATUS_OK:CODE |
| setStatus&id=ID&status=8 | Annulla numero (rimborso completo se il codice non viene ricevuto) | ACCESS_CANCEL |
| setStatus&id=ID&status=3 | Ricevi un altro codice di autenticazione dallo stesso numero | ACCESS_RETRY_GET |
| setStatus&id=ID&status=6 | Termina l'uso | ACCESS_ACTIVATION |
Parametri della richiesta
| Nome | Obbligatorio | Descrizione |
|---|---|---|
| api_key | Tutti | Chiave API creata nella schermata Account |
| action | Tutti | getBalance, getPrices, getNumber, getStatus, setStatus |
| service | getNumber | Codice del nome del servizio (esempio: telegram, whatsapp, google). È lo stesso valore della pagina dell'elenco dei servizi |
| country | getNumber | Codice paese a 2 lettere (es. gb, us, id) |
| id | getStatus, setStatus | ID numero ottenuto da getNumber (inizia con N) |
| status | setStatus | 8 annulla, 3 richiedi di nuovo il codice, 6 termina, 1 prepara |
Codici di risposta e significato
Le risposte vengono fornite in forma di messaggi brevi. Viene anche indicato se il credito è stato dedotto.
| Risposta | Significato | Denaro |
|---|---|---|
| ACCESS_NUMBER:ID:PHONE | Numero ricevuto | Il prezzo del numero viene addebitato |
| STATUS_WAIT_CODE | In attesa del codice | Invariato |
| STATUS_OK:CODE | Il codice è arrivato | Pagamento completato |
| STATUS_WAIT_RETRY:CODE | In attesa di un codice di verifica aggiuntivo (incluso il precedente) | Senza costi aggiuntivi |
| STATUS_CANCEL | Annullato o tempo scaduto | Rimborsato se non è arrivato il codice |
| ACCESS_CANCEL | Annullato | Rimborso totale |
| ACCESS_RETRY_GET | In attesa di ricevere nuovamente il codice dallo stesso numero | Senza costi aggiuntivi |
| ACCESS_ACTIVATION | Uso del numero terminato | Invariato |
| NO_BALANCE | Disponibile subito dopo la ricarica | Nessun addebito |
| NO_NUMBERS | Attualmente non è possibile fornire numeri per questo paese | Nessun addebito |
| NO_ACTIVATIONS | Hai 20 numeri aperti | Nessun addebito |
| EARLY_CANCEL_DENIED | Per i numeri che hanno ricevuto il codice di verifica, seleziona 'Termina' (6) anziché 'Annulla' | Invariato |
| BAD_KEY | La chiave API non è valida | Nessun addebito |
| BAD_SERVICE / BAD_COUNTRY | Il codice del servizio o del paese non è corretto | Nessun addebito |
| NO_ACTIVATION | ID del numero non trovato | Invariato |
| TOO_MANY_REQUESTS | Superato il limite di 300 richieste al minuto | Nessun addebito |
Flusso per ricevere codici via API
Ci sono 4 fasi: ricezione del numero, inserimento, verifica del codice e completamento.
- 1 passaggi
Ottieni un numero
Usa getNumber per selezionare servizio e paese e ottenere un numero.
action=getNumber&service=telegram&country=gb > ACCESS_NUMBER:SS8Q2K7:447700900123
- 2 passaggi
Inserisci numero
Inserisci il numero acquistato nella pagina di registrazione o nel programma.
+44 7700 900123
- 3 passaggi
Controlla il codice
Chiama getStatus ogni 5 secondi per verificare l'arrivo del codice.
action=getStatus&id=SS8Q2K7 > STATUS_OK:48215
- 4 passaggi
Fine
Dopo aver inserito il codice, completa con setStatus 6. Se il codice non arriva entro 20 minuti, rimborso automatico.
action=setStatus&id=SS8Q2K7&status=6 > ACCESS_ACTIVATION
Esempi per linguaggio
Questo è l'intero processo di ricezione del numero, attesa del codice e completamento. Premi la scheda per cambiare lingua.
# Balance
curl "https://snssim.com/stubs/handler_api.php?api_key=API_KEY&action=getBalance"
# Get a number (Telegram, United Kingdom)
curl "https://snssim.com/stubs/handler_api.php?api_key=API_KEY&action=getNumber&service=telegram&country=gb"
# ACCESS_NUMBER:N-8Q2K7XLM:447700900123
# Check the code (every 5 seconds)
curl "https://snssim.com/stubs/handler_api.php?api_key=API_KEY&action=getStatus&id=N-8Q2K7XLM"
# STATUS_WAIT_CODE or STATUS_OK:48215
# Finish (6) / Cancel (8, full refund before a code)
curl "https://snssim.com/stubs/handler_api.php?api_key=API_KEY&action=setStatus&id=N-8Q2K7XLM&status=6"import time, requests
BASE = "https://snssim.com/stubs/handler_api.php"
KEY = "API_KEY"
def call(**p):
return requests.get(BASE, params={"api_key": KEY, **p}, timeout=30).text
r = call(action="getNumber", service="telegram", country="gb")
if not r.startswith("ACCESS_NUMBER"):
raise SystemExit(r)
_, num_id, phone = r.split(":")
print("Number:", phone)
for _ in range(240): # 20 minutes
s = call(action="getStatus", id=num_id)
if s.startswith("STATUS_OK"):
print("Code:", s.split(":")[1])
call(action="setStatus", id=num_id, status=6)
break
time.sleep(5)// Node.js 18+
const BASE = "https://snssim.com/stubs/handler_api.php";
const KEY = "API_KEY";
const call = (p) => fetch(BASE + "?" + new URLSearchParams({ api_key: KEY, ...p })).then((r) => r.text());
const r = await call({ action: "getNumber", service: "telegram", country: "gb" });
if (!r.startsWith("ACCESS_NUMBER")) throw new Error(r);
const [, id, phone] = r.split(":");
console.log("Number:", phone);
for (let i = 0; i < 240; i++) {
const s = await call({ action: "getStatus", id });
if (s.startsWith("STATUS_OK")) {
console.log("Code:", s.split(":")[1]);
await call({ action: "setStatus", id, status: "6" });
break;
}
await new Promise((ok) => setTimeout(ok, 5000));
}<?php
$base = "https://snssim.com/stubs/handler_api.php";
$key = "API_KEY";
function call($p) { global $base, $key;
return file_get_contents($base . "?" . http_build_query(["api_key" => $key] + $p)); }
$r = call(["action" => "getNumber", "service" => "telegram", "country" => "gb"]);
if (strpos($r, "ACCESS_NUMBER") !== 0) exit($r);
[, $id, $phone] = explode(":", $r);
echo "Number: $phone\n";
for ($i = 0; $i < 240; $i++) {
$s = call(["action" => "getStatus", "id" => $id]);
if (strpos($s, "STATUS_OK") === 0) {
echo "Code: " . explode(":", $s)[1] . "\n";
call(["action" => "setStatus", "id" => $id, "status" => 6]);
break;
}
sleep(5);
}package main
import ("fmt"; "io"; "net/http"; "net/url"; "strings"; "time")
const base = "https://snssim.com/stubs/handler_api.php"
const key = "API_KEY"
func call(p url.Values) string {
p.Set("api_key", key)
r, _ := http.Get(base + "?" + p.Encode())
defer r.Body.Close()
b, _ := io.ReadAll(r.Body)
return string(b)
}
func main() {
r := call(url.Values{"action": {"getNumber"}, "service": {"telegram"}, "country": {"gb"}})
if !strings.HasPrefix(r, "ACCESS_NUMBER") { fmt.Println(r); return }
f := strings.Split(r, ":")
fmt.Println("Number:", f[2])
for i := 0; i < 240; i++ {
s := call(url.Values{"action": {"getStatus"}, "id": {f[1]}})
if strings.HasPrefix(s, "STATUS_OK") {
fmt.Println("Code:", strings.Split(s, ":")[1])
call(url.Values{"action": {"setStatus"}, "id": {f[1]}, "status": {"6"}})
return
}
time.Sleep(5 * time.Second)
}
}import java.net.URI; import java.net.URLEncoder; import java.net.http.*;
import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.stream.Collectors;
public class SNSSIM {
static final String BASE = "https://snssim.com/stubs/handler_api.php", KEY = "API_KEY";
static final HttpClient http = HttpClient.newHttpClient();
static String call(Map<String, String> p) throws Exception {
String q = p.entrySet().stream().map(e -> e.getKey() + "=" + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8)).collect(Collectors.joining("&"));
return http.send(HttpRequest.newBuilder(URI.create(BASE + "?api_key=" + KEY + "&" + q)).build(), HttpResponse.BodyHandlers.ofString()).body();
}
public static void main(String[] a) throws Exception {
String r = call(Map.of("action", "getNumber", "service", "telegram", "country", "gb"));
if (!r.startsWith("ACCESS_NUMBER")) { System.out.println(r); return; }
String[] f = r.split(":");
System.out.println("Number: " + f[2]);
for (int i = 0; i < 240; i++) {
String s = call(Map.of("action", "getStatus", "id", f[1]));
if (s.startsWith("STATUS_OK")) { System.out.println("Code: " + s.split(":")[1]); call(Map.of("action", "setStatus", "id", f[1], "status", "6")); return; }
Thread.sleep(5000);
}
}
}using System.Net.Http;
const string Base = "https://snssim.com/stubs/handler_api.php";
const string Key = "API_KEY";
var http = new HttpClient();
async Task<string> Call(string q) => await http.GetStringAsync($"{Base}?api_key={Key}&{q}");
var r = await Call("action=getNumber&service=telegram&country=gb");
if (!r.StartsWith("ACCESS_NUMBER")) { Console.WriteLine(r); return; }
var f = r.Split(':');
Console.WriteLine($"Number: {f[2]}");
for (var i = 0; i < 240; i++)
{
var s = await Call($"action=getStatus&id={f[1]}");
if (s.StartsWith("STATUS_OK"))
{
Console.WriteLine($"Code: {s.Split(':')[1]}");
await Call($"action=setStatus&id={f[1]}&status=6");
break;
}
await Task.Delay(5000);
}FAQ API
L'API offre numeri per 1,255 servizi in 145 paesi agli stessi prezzi del web.
- Cos'è l'API di verifica SMS?
- Funzionalità per acquistare numeri virtuali, verificare codici e annullare via richieste HTTP. L'API SNSSIM usa lo standard handler_api.
- Posso continuare a usare il programma che utilizzavo su altri siti di autenticazione SMS?
- Se usi programmi con handler_api, basta cambiare l'URL base e la chiave API per connetterti subito.
- L'API ha costi aggiuntivi?
- Nessuna differenza. API e interfaccia web utilizzano lo stesso credito e prezzi.
- Quante richieste sono possibili?
- Fino a 300 richieste al minuto per chiave API. In caso di superamento, si verifica l'errore TOO_MANY_REQUESTS e il credito non viene dedotto.
- I numeri acquistati via API sono rimborsabili?
- Sì. Se il codice non arriva entro 20 minuti, anche i numeri acquistati tramite API vengono rimborsati automaticamente come credito.
- Dove si crea la chiave API?
- Generalo nel menu API della schermata dell'account dopo l'accesso. La chiave viene mostrata solo una volta alla generazione, salvala immediatamente.
Collegati subito dopo aver creato la chiave API
Dopo la registrazione, ricaricando il credito, puoi generare immediatamente la chiave API nella schermata dell'account.