v1REST · JSON

SNSOTP OTP API

Un'API REST per la verifica via SMS. Ordina un numero per uno dei 182 servizi in uno dei 154 paesi, leggi il codice monouso dall'ordine e ottieni il rimborso completo se nessun codice arriva entro 20 minuti.

Ogni endpoint accetta parametri come parametri di query (GET) o come campi di form o JSON (POST). Le risposte sono in JSON; i soldi sono una stringa USD con due decimali e gli orari sono ISO 8601 in UTC.

Server

https://snsotp.com/api/v1

AutenticazioneBearer token

La tua chiave API dalla console, inviata come Authorization: Bearer sok_...

Autenticazione

Crea una chiave nella pagina API della console. Inizia con sok_ e viene mostrata una sola volta, quindi conservala in una variabile d'ambiente. Sostituire la chiave interrompe immediatamente quella vecchia. Le chiamate a /services, /countries e /prices funzionano senza chiave.

Header
Authorization: Bearer sok_your_key_here

La chiave può anche essere inviata come parametro di query o campo di form key, utile per strumenti che non possono impostare gli header.

Guida rapida

Ordina un numero, dagli all'app, quindi controlla l'ordine fino a quando il codice è presente. Lo stesso flusso in quattro linguaggi:

# 1. Order a number for whatsapp in US
curl -X POST https://snsotp.com/api/v1/orders \
  -H "Authorization: Bearer $SNSOTP_KEY" \
  -d service=whatsapp -d country=us

# 2. Read the code (poll every 3 to 5 seconds)
curl https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB \
  -H "Authorization: Bearer $SNSOTP_KEY"

GET/services

Ogni servizio con il suo codice e il prezzo più basso · senza chiave

Ogni servizio che puoi ordinare, con il suo codice (usalo come service in altre chiamate), la sua categoria e il prezzo più basso tra i paesi. Non è necessaria la chiave.

RichiestacURL
curl https://snsotp.com/api/v1/services
Risposta200
{
  "services": [
    { "code": "whatsapp", "name": "WhatsApp", "category": "social", "from": "0.09" },
    { "code": "telegram", "name": "Telegram", "category": "social", "from": "0.03" }
  ]
}

GET/countries

Ogni paese con il suo codice e prefisso telefonico · senza chiave

Ogni paese con il suo codice (ISO 3166 alpha-2 in minuscolo, usalo come country) e il suo prefisso telefonico. Non è necessaria la chiave.

RichiestacURL
curl https://snsotp.com/api/v1/countries
Risposta200
{
  "countries": [
    { "code": "us", "name": "United States", "dial_code": "1" },
    { "code": "gb", "name": "United Kingdom", "dial_code": "44" }
  ]
}

GET/prices

Prezzi per un servizio, un paese o entrambi · senza chiave

Il prezzo per ordine per un servizio in ogni paese, un paese per ogni servizio o una coppia. Invia almeno un filtro. Non è necessaria la chiave.

Parametri

  • servicestring

    Codice del servizio, ad esempio whatsapp

  • countrystring

    Codice del paese, ad esempio us

RichiestacURL
curl "https://snsotp.com/api/v1/prices?service=whatsapp&country=us"
Risposta200
{
  "prices": [
    { "service": "whatsapp", "country": "us", "price": "0.93" }
  ]
}

GET/balance

Il tuo credito in USD · chiave richiesta

Il tuo credito in USD.

RichiestacURL
curl https://snsotp.com/api/v1/balance \
  -H "Authorization: Bearer $SNSOTP_KEY"
Risposta200
{
  "balance": "42.50",
  "currency": "USD"
}

POST/orders

Ordina un numero per un servizio e un paese · chiave richiesta

Ordina un numero e addebita il suo prezzo. La risposta contiene il numero completo (phone) e senza il prefisso (number). L'ordine rimane aperto per 20 minuti; se nessun codice arriva in quel tempo, il prezzo viene restituito automaticamente al tuo credito. Risposta stato 201.

Parametri

  • servicestringrequired

    Codice del servizio da GET /services

  • countrystringrequired

    Codice del paese da GET /countries

RichiestacURL
curl -X POST https://snsotp.com/api/v1/orders \
  -H "Authorization: Bearer $SNSOTP_KEY" \
  -d service=whatsapp -d country=us
Risposta201
{
  "order": {
    "id": "OT-7K2M9QX4PB",
    "service": "whatsapp",
    "country": "us",
    "phone": "+13475550182",
    "number": "3475550182",
    "dial_code": "1",
    "price": "0.93",
    "status": "waiting",
    "code": null,
    "sms": null,
    "codes": [],
    "expires_at": "2026-11-03T12:20:00.000Z"
  },
  "window_minutes": 20
}

GET/orders/{id}

Stato, codice e testo SMS di un ordine · chiave richiesta

Un ordine con il suo stato, l'ultimo codice, l'ultimo SMS e ogni codice ricevuto finora. Controlla ogni 3-5 secondi mentre lo stato è waiting.

Parametri

  • idpathrequired

    ID ordine da POST /orders

RichiestacURL
curl https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB \
  -H "Authorization: Bearer $SNSOTP_KEY"
Risposta200
{
  "order": {
    "id": "OT-7K2M9QX4PB",
    "service": "whatsapp",
    "country": "us",
    "phone": "+13475550182",
    "number": "3475550182",
    "price": "0.93",
    "status": "received",
    "code": "284913",
    "sms": "Your WhatsApp code is 284913",
    "expires_at": "2026-11-03T12:20:00.000Z"
  }
}

GET/orders

I tuoi ordini aperti (o tutti con status=all) · chiave richiesta

I tuoi ordini aperti, dal più recente. Aggiungi status=all per gli ordini recenti in ogni stato.

Parametri

  • statusstring

    open (default) o all

  • limitnumber

    Da 1 a 100, default 50

RichiestacURL
curl "https://snsotp.com/api/v1/orders?status=open" \
  -H "Authorization: Bearer $SNSOTP_KEY"
Risposta200
{
  "orders": [
    { "id": "OT-7K2M9QX4PB", "service": "whatsapp", "status": "received", "code": "284913" }
  ]
}

POST/orders/{id}/resend

Un altro codice sullo stesso numero · chiave richiesta

Richiede un altro codice sullo stesso numero dopo il primo codice, all'interno della finestra, senza costi aggiuntivi. Quindi attiva un nuovo SMS nell'app; waiting_for_resend è vero fino al suo arrivo.

Parametri

  • idpathrequired

    ID ordine

RichiestacURL
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/resend \
  -H "Authorization: Bearer $SNSOTP_KEY"
Risposta200
{
  "order": { "id": "OT-7K2M9QX4PB", "status": "received", "waiting_for_resend": true }
}

POST/orders/{id}/finish

Chiudi un ordine dopo aver utilizzato il codice · chiave richiesta

Chiude un ordine che ha ricevuto un codice una volta che lo hai usato. Il completamento è opzionale: gli ordini aperti si chiudono da soli quando la finestra termina.

Parametri

  • idpathrequired

    ID ordine

RichiestacURL
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/finish \
  -H "Authorization: Bearer $SNSOTP_KEY"
Risposta200
{
  "order": { "id": "OT-7K2M9QX4PB", "status": "finished" }
}

POST/orders/{id}/cancel

Annulla prima di ricevere un codice, rimborso completo · chiave richiesta

Annulla un ordine prima che arrivi un codice e restituisce immediatamente l'intero prezzo al tuo credito. Dopo un codice, l'annullamento risponde has_code.

Parametri

  • idpathrequired

    ID ordine

RichiestacURL
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/cancel \
  -H "Authorization: Bearer $SNSOTP_KEY"
Risposta200
{
  "order": { "id": "OT-7K2M9QX4PB", "status": "canceled", "refunded": "0.93" }
}

Stato dell'ordine

valori di stato
  • waitingIl numero è pronto e nessun SMS è ancora arrivato. L'annullamento è possibile.
  • receivedÈ arrivato almeno un codice. code e sms contengono l'ultimo.
  • finishedChiuso dopo un codice, per completamento o quando la finestra è terminata.
  • refundedNessun codice è arrivato in 20 minuti. L'intero prezzo è tornato nel tuo credito.
  • canceledAnnullato prima di un codice. L'intero prezzo è tornato nel tuo credito.

Errori

Gli errori utilizzano lo stato HTTP e un corpo con un codice stabile e un messaggio leggibile.

Stato HTTP e codici
  • 400missing_filter, bad_jsonManca un valore richiesto o il corpo non può essere letto.
  • 401no_key, bad_keyLa chiave manca, è errata o è stata eliminata.
  • 402no_balanceCredito insufficiente per questo ordine. Aggiungi credito nella console.
  • 404unknown_service, unknown_country, not_sold, not_foundIl codice o l'ordine non esiste, o la coppia non è venduta.
  • 409too_many_open, has_code, not_ready, no_numbersL'azione non corrisponde allo stato dell'ordine, o nessun numero è disponibile al momento (nessun addebito).
  • 429rate_limitedPiù di 300 richieste in un minuto con una chiave.
Corpo dell'errore402
{
  "error": {
    "code": "no_balance",
    "message": "Not enough credit. Add credit in the console."
  }
}

Limiti di velocità

  • 300 richieste al minuto per chiave. Oltre questo limite, l'API risponde 429 rate_limited per il resto del minuto.
  • Fino a 20 ordini aperti per account. Completa o annulla uno per aprirne un altro.
  • Interroga un ordine ogni 3-5 secondi; i codici di solito arrivano entro un minuto.

Formato di attivazione SMS

Gli script scritti per il formato comune handler_api.php funzionano con la stessa chiave API: cambia l'indirizzo di base in https://snsotp.com/stubs/handler_api.php e mantieni le azioni. I codici di servizio e paese sono gli stessi dell'API REST.

Azioni
  • getBalance

    ACCESS_BALANCE:42.50

  • getServicesList

    Lista JSON dei servizi

  • getCountries

    Mappa JSON dei paesi

  • getPricesservice, country (opzionale)

    JSON {country: {service: {cost, count}}}

  • getNumberservice, country

    ACCESS_NUMBER:<id>:<phone>

  • getStatusid

    STATUS_WAIT_CODE, STATUS_OK:<code>, STATUS_WAIT_RETRY:<code>, STATUS_CANCEL

  • setStatusid, status 1 / 3 / 6 / 8

    ACCESS_READY, ACCESS_RETRY_GET, ACCESS_ACTIVATION, ACCESS_CANCEL

RichiestacURL
curl "https://snsotp.com/stubs/handler_api.php\
?api_key=$SNSOTP_KEY&action=getNumber\
&service=telegram&country=gb"

ACCESS_NUMBER:OT-3QF8ZK2W7M:447700900182

Valori di setStatus: 1 pronto, 3 altro codice, 6 termina, 8 annulla con rimborso completo.

Documentazione API OTP: API REST di verifica SMS | SNSOTP