SNSOTP OTP API
Una API REST para verificación por SMS. Solicita un número para uno de los 182 servicios en uno de los 154 países, lee el código de un solo uso del pedido y recupera el precio completo si no llega ningún código en 20 minutos.
Cada endpoint acepta parámetros como parámetros de consulta (GET) o como campos de formulario o JSON (POST). Las respuestas son JSON; el dinero es una cadena en USD con dos decimales y los tiempos están en ISO 8601 en UTC.
https://snsotp.com/api/v1
Tu clave API desde la consola, enviada como Authorization: Bearer sok_...
Autenticación
Crea una clave en la página de API de la consola. Comienza con sok_ y se muestra una vez, así que guárdala en una variable de entorno. Reemplazar la clave detiene la anterior de inmediato. Las llamadas a /services, /countries y /prices funcionan sin clave.
Authorization: Bearer sok_your_key_here
La clave también se puede enviar como un parámetro de consulta o campo de formulario key, lo que ayuda a herramientas que no pueden establecer encabezados.
Inicio rápido
Solicita un número, entrégalo a la aplicación y luego consulta el pedido hasta que llegue el código. El mismo flujo en cuatro lenguajes:
# 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
Cada servicio con su código y precio más bajo · sin clave
Cada servicio que puedes solicitar, con su código (úsalo como servicio en otras llamadas), su categoría y el precio más bajo entre países. No se necesita clave.
curl https://snsotp.com/api/v1/services
{
"services": [
{ "code": "whatsapp", "name": "WhatsApp", "category": "social", "from": "0.09" },
{ "code": "telegram", "name": "Telegram", "category": "social", "from": "0.03" }
]
}GET/countries
Cada país con su código y prefijo telefónico · sin clave
Cada país con su código (ISO 3166 alpha-2 en minúsculas, úsalo como país) y su código de marcación. No se necesita clave.
curl https://snsotp.com/api/v1/countries
{
"countries": [
{ "code": "us", "name": "United States", "dial_code": "1" },
{ "code": "gb", "name": "United Kingdom", "dial_code": "44" }
]
}GET/prices
Precios para un servicio, un país o ambos · sin clave
El precio por pedido para un servicio en cada país, un país para cada servicio o un par. Envía al menos un filtro. No se necesita clave.
Parámetros
servicestring
Código del servicio, por ejemplo whatsapp
countrystring
Código del país, por ejemplo us
curl "https://snsotp.com/api/v1/prices?service=whatsapp&country=us"
{
"prices": [
{ "service": "whatsapp", "country": "us", "price": "0.93" }
]
}GET/balance
Tu saldo en USD · clave requerida
Tu saldo en USD.
curl https://snsotp.com/api/v1/balance \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"balance": "42.50",
"currency": "USD"
}POST/orders
Solicita un número para un servicio y un país · clave requerida
Solicita un número y cobra su precio. La respuesta tiene el número completo (phone) y sin el código de marcación (number). El pedido permanece abierto durante 20 minutos; si no llega ningún código en ese tiempo, el precio vuelve a tu saldo automáticamente. Estado de respuesta 201.
Parámetros
servicestringrequerido
Código del servicio de GET /services
countrystringrequerido
Código del país de GET /countries
curl -X POST https://snsotp.com/api/v1/orders \ -H "Authorization: Bearer $SNSOTP_KEY" \ -d service=whatsapp -d country=us
{
"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}
Estado, código y texto SMS de un pedido · clave requerida
Un pedido con su estado, el último código, el último texto SMS y todos los códigos recibidos hasta ahora. Consulta cada 3 a 5 segundos mientras el estado sea waiting.
Parámetros
idpathrequerido
ID del pedido de POST /orders
curl https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"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
Tus pedidos abiertos (o todos con status=all) · clave requerida
Tus pedidos abiertos, los más nuevos primero. Añade status=all para pedidos recientes en todos los estados.
Parámetros
statusstring
open (por defecto) o all
limitnumber
1 a 100, por defecto 50
curl "https://snsotp.com/api/v1/orders?status=open" \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"orders": [
{ "id": "OT-7K2M9QX4PB", "service": "whatsapp", "status": "received", "code": "284913" }
]
}POST/orders/{id}/resend
Otro código en el mismo número · clave requerida
Solicita otro código en el mismo número después del primer código, dentro de la ventana, sin costo adicional. Luego activa un nuevo SMS en la aplicación; waiting_for_resend es verdadero hasta que llegue.
Parámetros
idpathrequerido
ID del pedido
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/resend \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"order": { "id": "OT-7K2M9QX4PB", "status": "received", "waiting_for_resend": true }
}POST/orders/{id}/finish
Cierra un pedido después de usar el código · clave requerida
Cierra un pedido que recibió un código una vez que lo has usado. Finalizar es opcional: los pedidos abiertos se cierran solos cuando termina la ventana.
Parámetros
idpathrequerido
ID del pedido
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/finish \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"order": { "id": "OT-7K2M9QX4PB", "status": "finished" }
}POST/orders/{id}/cancel
Cancela antes de recibir un código, reembolso total · clave requerida
Cancela un pedido antes de que llegue un código y devuelve el precio completo a tu saldo de inmediato. Después de un código, cancelar responde con has_code.
Parámetros
idpathrequerido
ID del pedido
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/cancel \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"order": { "id": "OT-7K2M9QX4PB", "status": "canceled", "refunded": "0.93" }
}Estado del pedido
waitingEl número está listo y no ha llegado ningún SMS aún. La cancelación es posible.receivedHa llegado al menos un código. code y sms contienen el último.finishedCerrado después de un código, por finish o cuando terminó la ventana.refundedNo llegó ningún código en 20 minutos. El precio completo está de vuelta en tu saldo.canceledCancelado antes de un código. El precio completo está de vuelta en tu saldo.
Errores
Los errores usan el estado HTTP y un cuerpo con un código estable y un mensaje legible.
- 400
missing_filter, bad_jsonFalta un valor requerido o no se puede leer el cuerpo. - 401
no_key, bad_keyLa clave falta, es incorrecta o ha sido eliminada. - 402
no_balanceNo hay suficiente saldo para este pedido. Añade saldo en la consola. - 404
unknown_service, unknown_country, not_sold, not_foundEl código o el pedido no existe, o el par no se vende. - 409
too_many_open, has_code, not_ready, no_numbersLa acción no coincide con el estado del pedido, o no hay números disponibles en este momento (no se cobra nada). - 429
rate_limitedMás de 300 solicitudes en un minuto con una clave.
{
"error": {
"code": "no_balance",
"message": "Not enough credit. Add credit in the console."
}
}Límites de tasa
- 300 solicitudes por minuto por clave. Por encima de eso, la API responde con 429 rate_limited durante el resto del minuto.
- Hasta 20 pedidos abiertos por cuenta. Finaliza o cancela uno para abrir otro.
- Consulta una orden cada 3 a 5 segundos; los códigos suelen llegar en un minuto.
Formato de activación por SMS
Los scripts escritos para el formato común handler_api.php funcionan con la misma clave API: cambia la dirección base a https://snsotp.com/stubs/handler_api.php y mantén las acciones. Los códigos de servicio y país son los mismos que en la API REST.
getBalanceACCESS_BALANCE:42.50
getServicesListLista JSON de servicios
getCountriesMapa JSON de países
getPricesservice, country (opcional)JSON {country: {service: {cost, count}}}
getNumberservice, countryACCESS_NUMBER:<id>:<phone>
getStatusidSTATUS_WAIT_CODE, STATUS_OK:<code>, STATUS_WAIT_RETRY:<code>, STATUS_CANCEL
setStatusid, status 1 / 3 / 6 / 8ACCESS_READY, ACCESS_RETRY_GET, ACCESS_ACTIVATION, ACCESS_CANCEL
curl "https://snsotp.com/stubs/handler_api.php\ ?api_key=$SNSOTP_KEY&action=getNumber\ &service=telegram&country=gb" ACCESS_NUMBER:OT-3QF8ZK2W7M:447700900182
Valores de setStatus: 1 listo, 3 otro código, 6 finalizar, 8 cancelar con reembolso completo.