Developer API

Automate verifications at scale

The SNSPhone API lets your own tools order US non-VoIP numbers, read SMS codes and manage rentals. Two formats: a REST API with JSON, and the common SMS activation format for existing scripts.

Quick start

Base URL https://snsphone.com/api/v1. Create a key on the API page of the console and send it as Authorization: Bearer spk_... (or a key field). All numbers are United States non-VoIP. Money is a USD string with 2 decimals, times are ISO 8601 UTC, 300 requests per minute per key. Prices as of 2026-11-03.

Python

import os, time, requests

API = "https://snsphone.com/api/v1"
H = {"Authorization": f"Bearer {os.environ['SNSPHONE_KEY']}"}

order = requests.post(f"{API}/orders", headers=H, data={"service": "google"}).json()["order"]
print("Use this US number:", order["phone"])

while True:
    o = requests.get(f"{API}/orders/{order['id']}", headers=H).json()["order"]
    if o["code"] or o["status"] in ("refunded", "canceled"):
        break
    time.sleep(4)
print("Code:", o["code"])

Node.js

const API = "https://snsphone.com/api/v1";
const H = { Authorization: `Bearer ${process.env.SNSPHONE_KEY}` };

const { order } = await fetch(`${API}/orders`, {
  method: "POST", headers: H, body: new URLSearchParams({ service: "discord" }),
}).then((r) => r.json());
console.log("Use this US number:", order.phone);

let o = order;
while (!o.code && !["refunded", "canceled"].includes(o.status)) {
  await new Promise((r) => setTimeout(r, 4000));
  ({ order: o } = await fetch(`${API}/orders/${order.id}`, { headers: H }).then((r) => r.json()));
}
console.log("Code:", o.code);

Catalog

GET/services

Every service code with its name, category, verification price and rental periods. No key needed.

Public, no key.

curl "https://snsphone.com/api/v1/services"
{"country":"us","services":[{"code":"whatsapp","name":"WhatsApp","category":"Messaging","verification":"0.90","rentals":[]},{"code":"telegram","name":"Telegram","verification":"0.45","rentals":[{"days":365,"period":"1 year","price":"37.44"}]}]}

GET/prices?service=telegram

Prices in USD, optionally for one service. No key needed.

Public, no key.

curl "https://snsphone.com/api/v1/prices?service=telegram"
{"country":"us","prices":[{"service":"telegram","type":"verification","days":null,"price":"0.45"},{"service":"telegram","type":"rental","days":365,"price":"37.44"}]}

GET/balance

Your credit in USD.

Needs your API key.

curl "https://snsphone.com/api/v1/balance" \
  -H "Authorization: Bearer $KEY"
{"balance":"25.00","currency":"USD"}

Verifications

POST/orders

Buys a verification (201). Returns the US number and the time the 20 minute window ends.

Needs your API key.

curl -X POST "https://snsphone.com/api/v1/orders" \
  -H "Authorization: Bearer $KEY" \
  -d "service=whatsapp"
{"order":{"id":"VR-7K2M9QX4PB","service":"whatsapp","country":"us","phone":"+14155550142","number":"4155550142","status":"waiting","code":null,"expires_at":"2026-11-03T12:20:00.000Z"},"window_minutes":20}

GET/orders/VR-7K2M9QX4PB

One verification with its status and every code received. Statuses: waiting, received, finished, refunded, canceled.

Needs your API key.

curl "https://snsphone.com/api/v1/orders/VR-7K2M9QX4PB" \
  -H "Authorization: Bearer $KEY"
{"order":{"id":"VR-7K2M9QX4PB","status":"received","code":"482913","sms":"Your WhatsApp code is 482913"}}

GET/orders?status=open

Your open verifications (status=all for the last 100).

Needs your API key.

curl "https://snsphone.com/api/v1/orders?status=open" \
  -H "Authorization: Bearer $KEY"
{"orders":[...]}

POST/orders/VR-7K2M9QX4PB/resend

Asks for another code on the same number, after the first code and while the window is open. No extra charge.

Needs your API key.

curl -X POST "https://snsphone.com/api/v1/orders/VR-7K2M9QX4PB/resend" \
  -H "Authorization: Bearer $KEY"
{"order":{"status":"received","waiting_for_resend":true}}

POST/orders/VR-7K2M9QX4PB/finish

Closes a verification that received its code.

Needs your API key.

curl -X POST "https://snsphone.com/api/v1/orders/VR-7K2M9QX4PB/finish" \
  -H "Authorization: Bearer $KEY"
{"order":{"status":"finished"}}

POST/orders/VR-7K2M9QX4PB/cancel

Cancels before a code arrives. The full price goes back to your credit.

Needs your API key.

curl -X POST "https://snsphone.com/api/v1/orders/VR-7K2M9QX4PB/cancel" \
  -H "Authorization: Bearer $KEY"
{"order":{"status":"canceled","refunded":"0.90"}}

Rentals

POST/rentals

Rents a US number for one service and period (201). days is optional when the service has one period.

Needs your API key.

curl -X POST "https://snsphone.com/api/v1/rentals" \
  -H "Authorization: Bearer $KEY" \
  -d "service=telegram&days=365"
{"rental":{"id":"RN-4J8T2W6QHM","service":"telegram","phone":"+13125550198","days":365,"period":"1 year","price":"37.44","status":"active","ends_at":"2027-11-03T12:00:00.000Z","messages":[]}}

GET/rentals?status=active

Your active rentals with their latest messages (status=all for the last 100).

Needs your API key.

curl "https://snsphone.com/api/v1/rentals?status=active" \
  -H "Authorization: Bearer $KEY"
{"rentals":[...]}

GET/rentals/RN-4J8T2W6QHM

One rental with every SMS received on it.

Needs your API key.

curl "https://snsphone.com/api/v1/rentals/RN-4J8T2W6QHM" \
  -H "Authorization: Bearer $KEY"
{"rental":{"id":"RN-4J8T2W6QHM","status":"active","messages":[{"from":"Telegram","sms":"Telegram code: 57291","code":"57291","received_at":"2026-11-03T12:01:12.000Z"}]}}

POST/rentals/RN-4J8T2W6QHM/renew

Adds one more period at the same price.

Needs your API key.

curl -X POST "https://snsphone.com/api/v1/rentals/RN-4J8T2W6QHM/renew" \
  -H "Authorization: Bearer $KEY"
{"rental":{"renewed":1,"ends_at":"2028-11-02T12:00:00.000Z"}}

POST/rentals/RN-4J8T2W6QHM/cancel

Cancels in the first 20 minutes while no SMS has arrived. Everything paid goes back to your credit.

Needs your API key.

curl -X POST "https://snsphone.com/api/v1/rentals/RN-4J8T2W6QHM/cancel" \
  -H "Authorization: Bearer $KEY"
{"rental":{"status":"canceled","refunded":"37.44"}}

SMS activation format

For tools that already speak the common activation format. One URL, an action field, plain text answers. Verifications only.

https://snsphone.com/stubs/handler_api.php?api_key=KEY&action=ACTION
ActionExtra fieldsAnswerMeaning
getBalancenoneACCESS_BALANCE:12.50Your credit in USD.
getServicesListnone{"status":"success","services":[{"code":"whatsapp","name":"WhatsApp"}]}Service codes with a verification price (JSON).
getCountriesnone{"us":{"name":"United States","dial":"1"}}Only the United States. country may be us, 187 or left out.
getPrices&service=whatsapp{"us":{"whatsapp":{"cost":0.9,"count":100}}}Prices in USD. The service filter is optional.
getNumber&service=whatsapp&country=usACCESS_NUMBER:VR-7K2M9QX4PB:14155550142Buys a verification. Returns the id and the number with the 1 in front.
getStatus&id=VR-7K2M9QX4PBSTATUS_OK:482913STATUS_WAIT_CODE, STATUS_OK:<code>, STATUS_WAIT_RETRY:<last code> (another code asked), STATUS_CANCEL (canceled or refunded).
setStatus&id=VR-7K2M9QX4PB&status=3ACCESS_RETRY_GETstatus=1 ready (ACCESS_READY), 3 another code (ACCESS_RETRY_GET), 6 finish (ACCESS_ACTIVATION), 8 cancel with a full refund while no code arrived (ACCESS_CANCEL).

Errors

REST errors come as {"error":{"code","message"}} with these status codes. The activation format answers with a plain word.

400Missing or bad field (bad_json, bad_period).
401No key or a wrong key (no_key, bad_key).
402Not enough credit (no_balance).
404Unknown service, order, rental or endpoint, or a product the service does not have (not_sold).
409Not possible now (has_code, has_sms, too_late, not_ready, too_many_open, too_many_active, no_numbers).
429More than 300 requests in a minute (rate_limited).
BAD_KEYMissing or wrong API key.
BAD_ACTIONUnknown action.
BAD_SERVICEUnknown service code.
BAD_COUNTRYNot the United States, or the service is sold as a rental only.
NO_BALANCENot enough credit.
NO_NUMBERSNo number free right now. Try again in a moment.
NO_ACTIVATIONUnknown id, or not yours.
EARLY_CANCEL_DENIEDA code has already arrived, so it cannot be canceled.
NO_ACTIVATIONS20 verifications are already open.
TOO_MANY_REQUESTSMore than 300 requests in a minute.

API questions

Keys, limits and polling, answered.

Does SNSPhone have an SMS verification API?

Yes. A REST API with JSON at /api/v1 for services, prices, verifications and rentals, and the common SMS activation format at /stubs/handler_api.php.

How do I authenticate API requests?

Create a key on the API page of the console and send it as Authorization: Bearer spk_..., or as a key field. Keys are stored only as a hash and shown once.

What are the API rate limits?

300 requests per minute per key, up to 20 open verifications and 20 active rentals per account.

Do API orders cost more than website orders?

No. The API uses the same prices and the same refund rules as the console.

How do I know when the code has arrived?

Poll GET /orders/{id} every few seconds. The status changes from waiting to received and the code field holds the digits.

Non-VoIP SMS Verification API: US Numbers by REST | SNSPhone