Ir al contenido principal
100+
Países
Más de 1000 servicios. Paga con cripto, sin KYC.
Comprar Número

API de Verificación SMS — SMSNoKYC

Automatiza la verificación OTP de principio a fin. Reserva números virtuales en más de 190 países, lee los códigos SMS en segundos, alquila líneas dedicadas de larga duración y controla cada pedido desde una única superficie REST: sin clave de API, sin KYC, pagado en criptomoneda.

Tiempo de lectura: 5 min REST · JSON · OpenAPI 3.0 Especificación OpenAPI →

Autenticación requerida. Cada petición se apoya en una cookie de sesión, por lo que debes estar conectado a tu cuenta de SMSNoKYC. Establece una sesión mediante la interfaz web o el punto de autenticación antes de llamar.

Por qué los desarrolladores eligen la API de SMSNoKYC

SMSNoKYC es la API de verificación SMS más flexible para desarrolladores que necesitan anonimato, cobertura global y precios predecibles. A diferencia de los proveedores SMS-OTP tradicionales que restringen el acceso mediante contratos empresariales, mínimos mensuales y cuestionarios KYC, SMSNoKYC funciona con cualquier cliente HTTPS, cobra estrictamente por número y acepta más de 20 criptomonedas, incluyendo Bitcoin, Monero, Ethereum, USDT, USDC, Solana, Litecoin, XRP, TRON y Toncoin.

Los casos de uso típicos incluyen la automatización de registros de cuentas para QA a escala, la obtención de contraseñas de un solo uso para agentes headless y bots de CI, la validación de flujos que requieren teléfono en integración continua, el alquiler de números dedicados a largo plazo para cuentas de Telegram o WhatsApp que necesitan recepción SMS ininterrumpida, y la verificación geodistribuida en 190+ países con control explícito por nivel de operador — virtual, físico o premium.

Autenticacion

La API utiliza autenticación de sesión basada en cookies. Para autenticarse programáticamente:

  1. Envía una solicitud POST a /auth-api.php con tu frase seed
  2. Almacena la cookie de sesión de la respuesta
  3. Incluye la cookie en todas las solicitudes API posteriores
POST /auth-api.php

Autentícate con tu frase seed y establece una sesión.

ParametroTipoRequeridoDescripción
actionstringrequeridoDebe ser "login"
seedstringrequeridoTu seed de acceso de 16 caracteres (ej. 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: {...}}
Respuesta exitosa
{ "success": true, "user": { "id": 42, "prefix": "AbC3", "balance": "74.50" } }
Respuesta de error
{ "success": false, "error": "Invalid seed." }

URL Base

Todos los endpoints de la API son relativos a:

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

Todas las respuestas son JSON. Los endpoints POST aceptan cuerpos de solicitud application/json y application/x-www-form-urlencoded.

Límites de solicitudes

La API aplica los siguientes límites de velocidad:

EndpointLímiteVentana
Autenticacion5 intentos15 minutos
Todos los demás endpointsSin límite estricto

Límite de tasa: La autenticación está limitada a 5 intentos por 15 minutos. Los demás endpoints no están actualmente limitados, pero el uso excesivo puede ser restringido. Usa intervalos de solicitud razonables.

Manejo de errores

Todos los errores devuelven un objeto JSON con un campo <code>error</code>:

{ "error": "Description of what went wrong" }
Código HTTPSignificado
200Éxito (verifica el cuerpo de la respuesta para errores a nivel de aplicación)
403Token CSRF inválido
405Método HTTP incorrecto (ej. GET en un endpoint solo POST)
429Límite de tasa excedido

Errores comunes a nivel de aplicación:

ErrorCausa
"Login required"Sesión expirada o no autenticado
"Insufficient balance"Fondos insuficientes — incluye los campos need y have
"Service not available for this country"Sin stock o servicio inactivo para el país seleccionado
"Missing country or service"No se proporcionaron los parámetros requeridos

Listar Países

GET /api.php?action=countries

Devuelve todos los países activos con números virtuales disponibles. No se requiere autenticación.

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

Listar Servicios

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

Devuelve los servicios disponibles para un país específico, incluyendo precios y stock. Sin código de país, devuelve todos los servicios sin precios.

ParametroTipoRequeridoDescripción
countrystringopcionalCódigo de país ISO 3166-1 alpha-2 (ej. us, gb, de)
Respuesta (con país)
[ { "id": 12, "name": "WhatsApp", "slug": "whatsapp", "icon_code": "WA", "icon_color": "#25d366", "category": "social", "price": "0.35", "stock": 847 } ]

Listar Operadores

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

Devuelve los operadores (proveedores) disponibles para un país específico. Cada operador tiene un tipo y un multiplicador de precio aplicado al precio base del servicio.

ParametroTipoRequeridoDescripción
countrystringrequeridoCódigo de país ISO 3166-1 alpha-2
Respuesta
[ { "id": 5, "name": "T-Mobile", "type": "physical", "price_multiplier": "1.50", "icon_slug": "tmobile", "icon_domain": "t-mobile.com" } ]

Tipos de operadores: virtual — números VoIP, los más baratos, pueden ser bloqueados por algunos servicios. physical — tarjetas SIM reales, mayor tasa de éxito. premium — entrega más rápida (~10s), mayor tasa de éxito.

Comprar número (Activación SMS)

POST /api.php?action=buy

Compra un número virtual para verificación SMS de un solo uso. El número está activo durante 20 minutos. Si no se recibe ningún SMS, tu saldo se reembolsa automáticamente.

ParametroTipoRequeridoDescripción
countrystringrequeridoCódigo de país (ej. us)
service_idintegerrequeridoID del servicio de Lista de servicios
operator_idintegeropcionalID del operador de Lista de operadores. Omitir para el operador predeterminado.
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();
Respuesta exitosa
{ "success": true, "order_id": 1847, "price": 0.53, "balance": "73.97" }
Error: Saldo insuficiente
{ "error": "Insufficient balance", "need": 0.53, "have": "0.10" }

Listar pedidos

GET /api.php?action=orders

Devuelve tus 50 pedidos más recientes, incluyendo números de teléfono y códigos SMS. Consulta este endpoint para verificar los códigos SMS entrantes en pedidos activos.

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

Estados de pedido: active — esperando SMS. completed — SMS recibido. cancelled — cancelado por el usuario. refunded — reembolsado automáticamente (sin SMS recibido antes del tiempo límite). expired — expirado.

Obtener precio de alquiler

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

Obtén el precio de alquiler de un número dedicado de un operador específico por una duración determinada.

ParametroTipoRequeridoDescripción
countrystringrequeridoCódigo de país
operator_idintegerrequeridoID del operador
durationintegerrequeridoDuración del alquiler en días: 7, 14, 30, o 90
Respuesta
{ "price": "12.50", "duration": 30, "operator": "T-Mobile", "type": "physical", "country": "USA" }

Alquilar Número

POST /api.php?action=rental_buy

Alquila uno o más números de teléfono dedicados. El número es exclusivamente tuyo durante todo el período de alquiler y recibe SMS entrantes ilimitados.

ParametroTipoRequeridoDescripción
countrystringrequeridoCódigo de país
operator_idintegerrequeridoID del operador
durationintegerrequerido7, 14, 30, o 90 días
qtyintegeropcionalCantidad de números a alquilar (1–10, por defecto: 1)
Respuesta exitosa
{ "success": true, "order_ids": [1848, 1849], "total": 25.00, "qty": 2, "unit_price": 12.50, "duration": 30, "balance": "49.50" }

Obtener información del usuario

GET /api.php?action=user

Devuelve la información de cuenta y el saldo del usuario actual. Úsalo para verificar el estado de autenticación y los fondos disponibles.

Autenticado
{ "logged_in": true, "id": 42, "prefix": "AbC3", "balance": "74.50" }
No autenticado
{ "logged_in": false }

Ejemplo de flujo de trabajo completo

Aquí hay un ejemplo completo en Python que se autentica, encuentra un servicio, compra un número y consulta el código 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")

Preguntas frecuentes

¿Para qué sirve la API de verificación de SMSNoKYC?

Abre a tu propio código el mismo catálogo que el sitio: números virtuales en más de 190 países para verificación OTP puntual y para alquileres de 7 a 90 días. A través de una sencilla interfaz REST en JSON puedes explorar aplicaciones, leer precios en vivo, reservar números, recuperar los códigos entrantes y reembolsar activaciones fallidas, sin KYC y facturando solo en cripto.

¿Hace falta una clave de API o un token OAuth?

No. La autenticación es una cookie de sesión: envía una vez tu frase de acceso de 16 caracteres por POST a /auth-api.php y luego reenvía la cookie devuelta en cada llamada siguiente. Nada que aprovisionar, rotar o revocar: te conectas una vez por sesión y sigues conectado durante toda la vida de la cookie.

¿Cuánto cuesta la API?

Llamar a la API es gratis: sin cuota mensual, sin suscripción, sin volumen mínimo. Solo pagas por número: activaciones puntuales desde 0,05 USD, alquileres dedicados desde unos pocos dólares por 7 días. Todo se descuenta de tu saldo prepago, y cualquier activación que nunca reciba un SMS se reembolsa sola.

¿Qué lenguajes y frameworks pueden llamarla?

Todo lo que pueda emitir una petición HTTPS funciona: Python (requests, httpx), Node.js (fetch, axios), Go, PHP, Ruby, Java, C#, cURL desde Bash y el resto. La documentación incluye ejemplos listos para copiar en cURL, Python y JavaScript, y un archivo OpenAPI 3.0 completo en /openapi.json permite generar un cliente tipado en el lenguaje que prefieras.

¿Qué ocurre si un código de verificación nunca llega?

Cada activación tiene una ventana de 20 minutos. Si no llega nada antes de que se cierre, el pedido se cancela solo y el precio íntegro vuelve a tu saldo, sin ticket ni reintento manual. Puedes gastar ese saldo reembolsado de inmediato en otro número, quizá de otra categoría de operador (virtual, físico o premium) para una mejor tasa de éxito.

¿Tiene la API límites de frecuencia?

El inicio de sesión está limitado a 5 intentos por 15 minutos e IP para bloquear el adivinado de frases. El resto (catálogo, compra, pedidos, alquileres) no tiene un tope estricto por ahora, pero mantén intervalos razonables: consultar /api.php?action=orders cada 3-5 segundos basta de sobra para leer SMS, y ráfagas sostenidas por encima de unas 10 req/s pueden limitarse a nivel de WAF.