URL base https://snsverify.com/api/v1
Cada ruta en esta página es relativa a ella. Las cantidades están en dólares estadounidenses como cadenas con dos decimales, los tiempos son UTC (ISO 8601).
Dos formatos, una cuenta
Esta página describe la API REST con JSON. Si tu herramienta ya utiliza el formato común de activación por SMS (handler_api.php con parámetros action=), usa la API de activación por SMS. Ambas comparten tu clave API, precios, activaciones abiertas y reembolsos.
Resumen
Una API de verificación por SMS permite que tu software compre un número de teléfono para una aplicación, espere el SMS de verificación y lea el código, sin abrir el sitio web. Cada pedido es una activación: un servicio, un país, un número y una ventana de 20 minutos. Los pedidos sin código se reembolsan en su totalidad al finalizar la ventana.
Las solicitudes usan GET para lectura y POST para acciones. Los cuerpos POST pueden ser campos de formulario o JSON. Las respuestas exitosas son objetos JSON; los errores tienen la misma forma en todas partes: {"error":{"code":"...","message":"..."}}.
Autenticación
Crea una clave API en la consola bajo Clave API. Se muestra una vez; guardamos solo una copia cifrada. Envíala en el encabezado Authorization como un token bearer. También se acepta un parámetro key para herramientas que no pueden configurar encabezados.
Authorization: Bearer vfk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Crear una nueva clave reemplaza la anterior de inmediato. Los endpoints de servicios, países y precios funcionan sin clave.
Errores
| HTTP | Significado |
|---|---|
| 400 | Campo faltante o incorrecto (missing_filter, bad_json). |
| 401 | Sin clave o clave incorrecta (no_key, bad_key). |
| 402 | Saldo insuficiente (no_balance). |
| 404 | Servicio, país, pedido o endpoint desconocido. |
| 409 | El pedido no puede hacer eso ahora (has_code, not_ready, too_many_open, no_numbers). |
| 429 | Más de 300 solicitudes en un minuto (rate_limited). |
Inicio rápido
Ordena un número de WhatsApp del Reino Unido con curl, luego consulta el pedido cada pocos segundos hasta que llegue el código.
curl -X POST https://snsverify.com/api/v1/orders \ -H "Authorization: Bearer $SNSVERIFY_KEY" \ -d service=whatsapp -d country=gb
Python
import os, time, requests
API = "https://snsverify.com/api/v1"
H = {"Authorization": f"Bearer {os.environ['SNSVERIFY_KEY']}"}
order = requests.post(f"{API}/orders", headers=H,
data={"service": "whatsapp", "country": "gb"}).json()["order"]
print("Use this 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://snsverify.com/api/v1";
const H = { Authorization: `Bearer ${process.env.SNSVERIFY_KEY}` };
const { order } = await fetch(`${API}/orders`, {
method: "POST", headers: H,
body: new URLSearchParams({ service: "telegram", country: "nl" }),
}).then((r) => r.json());
console.log("Use this 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);Límites de tasa
300 solicitudes por minuto por clave, y hasta 20 pedidos abiertos por cuenta. Consultar un pedido cada 3 a 5 segundos es suficiente: la mayoría de los códigos llegan en un minuto.
Estados de pedido
waitingEl número está abierto y aún no ha llegado ningún código.receivedLlegó al menos un código; solicita otro con resend mientras la ventana esté abierta.finishedCerrado después de un código, por ti o al finalizar la ventana.refundedLa ventana terminó sin código; el precio total volvió a tu saldo.canceledCancelaste antes de que llegara un código; el precio total volvió a tu saldo.
Endpoints
GET/services
Cada código de servicio con su nombre, categoría y precio más bajo. No se necesita clave.
{"services":[{"code":"whatsapp","name":"WhatsApp","category":"social","from":"0.31"}]}GET/countries
Cada código de país (ISO, minúsculas) con nombre y código de marcación. No se necesita clave.
{"countries":[{"code":"gb","name":"United Kingdom","dial_code":"44"}]}GET/prices?service=whatsapp&country=gb
Precios en USD. Filtra por servicio, país o ambos. No se necesita clave.
{"prices":[{"service":"whatsapp","country":"gb","price":"0.94"}]}GET/balance
Tu saldo en USD.
{"balance":"25.00","currency":"USD"}POST/orders
Compra un número (HTTP 201). Devuelve el pedido con el número de teléfono y la hora en que finaliza la ventana.
Cuerpo: service=whatsapp&country=gb
{"order":{"id":"AC-7K2M9QX4PB","service":"whatsapp","country":"gb","phone":"+447700900123","price":"0.94","status":"waiting","code":null,"expires_at":"2026-11-04T12:20:00.000Z"},"window_minutes":20}GET/orders/AC-7K2M9QX4PB
Un pedido con su estado y cada código recibido. Estados: waiting, received, finished, refunded, canceled.
{"order":{"id":"AC-7K2M9QX4PB","status":"received","code":"482915","sms":"Your WhatsApp code: 482-915"}}GET/orders?status=open
Tus pedidos abiertos; status=all devuelve los últimos 100.
{"orders":[{"id":"AC-7K2M9QX4PB","status":"waiting"}]}POST/orders/AC-7K2M9QX4PB/resend
Solicita otro código en el mismo número después del primer código, mientras la ventana esté abierta. Sin costo adicional.
{"order":{"status":"received","waiting_for_resend":true}}POST/orders/AC-7K2M9QX4PB/finish
Cierra un pedido que recibió su código.
{"order":{"status":"finished"}}POST/orders/AC-7K2M9QX4PB/cancel
Cancela antes de que llegue un código. El precio total vuelve a tu saldo.
{"order":{"status":"canceled","refunded":"0.94"}}