OfertaBono de depósito: recibe hasta +20% de saldo gratis en depósitos desde $50.Crear una cuenta →
Invita y ganaInvita a tus amigos y gana el 5% de cada recarga que hagan, directo a tu saldo.Regístrate y obtén tu enlace →

API de Verificación SMS para Desarrolladores

Tres llamadas cubren el flujo entero: pedir un número, consultar hasta que llega el código y liberarlo si no llega. Token de portador, JSON de entrada y salida, y todo lo que se puede hacer en el panel está disponible por la misma API.

Desde
$0.01por código
Servicios
744

Pagas por verificación. Si cancelas un pedido que no recibió ningún mensaje, el importe vuelve a tu saldo.

El flujo, en llamadas

  1. GET /api/v2/tn101/get-services — el catálogo, con el identificador por el que vas a pedir y su precio actual.
  2. POST /api/v2/tn101/request-number — pide uno. Acepta service_key, y opcionalmente state y prefijos. Responde con el identificador del pedido, el número y cuándo caduca.
  3. GET /api/v2/tn101/get-number-details — consúltalo con order_id. pin es nulo hasta que llega el código y lo contiene después. Es la lectura más barata de la API y la que está pensada para llamarse en bucle.
  4. POST /api/v2/tn101/reject-number — libera un número que no recibió nada. Es también lo que devuelve el importe.

En este camino no se te envía nada de forma proactiva, así que el paso 3 es una consulta repetida. Si prefieres que te avisen en lugar de preguntar, la cuenta también envía webhooks en los eventos de pedido, configurables desde el panel.

Autenticación

Cada petición lleva Authorization: Bearer <token>. Los tokens se generan en el panel, en el apartado de acceso a la API, y se pueden rotar allí en cualquier momento: rotar invalida el token anterior de inmediato, así que cámbialo primero en tu configuración.

Una petición sin token válido recibe 401. Una cuenta suspendida, o con el acceso a la API desactivado, recibe 403. Cuando la API está desactivada para todo el sitio, todos los endpoints responden 503 en lugar de fingir.

El envoltorio de la respuesta

Todos los endpoints responden con los mismos tres campos:

data lleva el contenido, success es el booleano sobre el que ramificar y summery es el mensaje legible. Esa grafía no es una errata de esta página: es el nombre de campo que la API lleva enviando desde siempre, está en todas las integraciones escritas contra ella, y renombrarlo las rompería todas por corregir una letra. Lee summery.

Los fallos de validación responden 422 con data como un objeto de nombres de campo a mensajes de error, de modo que quien llama puede informar de qué argumento estaba mal y no solo de que algo lo estaba.

Probar flujos de verificación

La API es una forma práctica de ejercitar un registro o una recuperación de contraseña contra una ruta real de operador en lugar de contra un simulador: pides un número, rellenas tu propio formulario con él, consultas hasta que llega el código y compruebas qué hace después tu aplicación. Es una prueba más lenta que un doble de prueba y detecta lo que un doble no puede: la normalización, el filtrado por tipo de línea y los retrasos de entrega que tus usuarios van a sufrir de verdad.

Límites

No hay un límite de peticiones por segundo en la API, pero sí dos cuotas sobre los pedidos, y son las mismas que aplica el panel:

  • Pedidos abiertos. Una cuenta solo puede tener un número limitado de números reservados a la vez. Consulta y libera, en lugar de abrir muchos en paralelo.
  • Pedidos cancelados y caducados al día. Si superas la cantidad diaria permitida, los pedidos se pausan durante un tiempo, que se alarga si se repite. Cada reserva consume suministro real llegue o no un código, y eso es lo que protege la cuota.

Las dos se describen con más detalle en los números temporales, que es donde se explica cómo transcurre un pedido.

Un ejemplo completo

Pedir, consultar y liberar. Sustituye YOUR_API_TOKEN por un token del panel y cada uno de estos ejemplos funciona tal cual está pegado.

# 1. Pide un número.
curl -X POST https://smsportal.io/api/v2/tn101/request-number \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"service_key": "Google"}'

# 2. Consulta hasta que "pin" deje de ser nulo.
curl "https://smsportal.io/api/v2/tn101/get-number-details?order_id=12345" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

# 3. ¿No llegó nada? Libéralo y recupera el importe.
curl -X POST https://smsportal.io/api/v2/tn101/reject-number \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"order_id": 12345}'

Qué devuelve el paso 2 cuando llega el código

Antes de que llegue, la misma llamada devuelve la misma estructura con pin y message a nulo.

{
  "data": {
    "order_id": 12345,
    "number": "12085551234",
    "service": "Google",
    "status": "Reserved",
    "state": "CA",
    "pin": "418902",
    "message": "418902 is your Google verification code.",
    "price": 0.35,
    "till_expiration": "2026-09-03T12:20:00.000Z"
  },
  "success": true,
  "summery": "Success"
}

Endpoints

Agrupados por servidor. Todos aceptan el mismo token de portador y responden con el mismo envoltorio.

Cuenta

  • GET/api/v2/profile
    Perfil de la cuenta
  • GET/api/v2/account-details
    Saldo del monedero

SIM real de EE. UU. — /api/v2/real-sim

  • GET/api/v2/real-sim/get-services
    Productos, periodos de validez, precios y stock
  • POST/api/v2/real-sim/request-number
    Comprar números (en cola, responde al instante)
  • GET/api/v2/real-sim/get-order-status
    Pendiente, listo con el número, o fallido y reembolsado
  • GET/api/v2/real-sim/get-numbers
    Tus números
  • GET/api/v2/real-sim/get-messages
    Todos los SMS de un número
  • POST/api/v2/real-sim/renew-number
    Renovar números otro periodo

Temp (s1) — /api/v2/tn101

  • GET/api/v2/tn101/get-services
    Lista de servicios
  • GET/api/v2/tn101/us-states
    Estados de EE. UU.
  • POST/api/v2/tn101/request-number
    Pedir un número
  • POST/api/v2/tn101/reuse-number
    Reutilizar un número
  • GET/api/v2/tn101/get-number-details
    Detalle del pedido
  • GET/api/v2/tn101/get-reserved-list
    Números reservados
  • GET/api/v2/tn101/get-order-histories
    Histórico de pedidos
  • POST/api/v2/tn101/reject-number
    Cancelar y reembolsar

Temp (s2) — /api/v2/tn102

  • GET/api/v2/tn102/get-services
    Servicios, operadores y recargos
  • GET/api/v2/tn102/get-area-stock
    Números disponibles por código de área
  • POST/api/v2/tn102/request-number
    Pedir un número (operador, códigos de área)
  • POST/api/v2/tn102/request-multiple
    Un número para varios servicios
  • POST/api/v2/tn102/request-specific-number
    Pedir un número concreto
  • POST/api/v2/tn102/reuse-number
    Volver a obtener el mismo número
  • GET/api/v2/tn102/get-number-details
    Detalle del pedido y código
  • GET/api/v2/tn102/get-reserved-list
    Pedidos abiertos
  • GET/api/v2/tn102/get-order-histories
    Histórico de pedidos
  • POST/api/v2/tn102/reject-number
    Cancelar y reembolsar (tras 5 minutos)

Alquiler — /api/v2/rental

  • GET/api/v2/rental/get-services
    Servicios de alquiler y precios por periodo
  • POST/api/v2/rental/request-number
    Alquilar un número
  • GET/api/v2/rental/get-rentals
    Tus alquileres
  • GET/api/v2/rental/get-rental-details
    Un alquiler con sus mensajes
  • GET/api/v2/rental/get-messages
    Mensajes de un alquiler
  • POST/api/v2/rental/renew-rental
    Renovar otro periodo
  • POST/api/v2/rental/set-auto-renew
    Activar o desactivar la renovación automática
  • POST/api/v2/rental/cancel-rental
    Cancelar y reembolsar (sin mensajes)

SIM real de EE. UU., Temp (s2) y alquiler

SIM real de EE. UU. vende números con SIM física que conservas durante días. La compra va en cola, así que un operador lento nunca agota el tiempo de tu petición:

  • get-services — todas las opciones; cada periodo de validez tiene su propio product_id, price y stock.
  • request-number — product_id y, opcional, quantity (1–100). Cobra al momento y responde con order_ids y status: "pending". 402 si el saldo no alcanza.
  • get-order-status — order_ids (separados por comas, hasta 100). pending mientras conseguimos el número; luego ready con number, expires_at y un share_link, o failed con error — un número fallido se reembolsa automáticamente.
  • get-numbers (status=active|all) y get-messages (order_id) — todos los SMS, del más reciente al más antiguo, con el code extraído.
  • renew-number — order_ids; cobra la renovación al momento y amplía cada número activo un periodo más, normalmente en pocas horas. get-numbers muestra renewal: "pending" hasta que se aplica; si no se aplica en 3 días se reembolsa automáticamente.
  • Un número entregado no es reembolsable. Compra uno primero al probar un servicio.
  • Webhooks: order.number_assigned cuando el número está listo, sms.received por cada SMS, order.failed + order.refunded si no se pudo entregar; llevan "provider": "us-real-sim".

Temp (s2) funciona como Temp (s1), con dos opciones más en request-number:

  • service_key — obligatorio; el service_key de tn102/get-services.
  • carrier — opcional, at&t o tmobile. Con keep_carrier: true el pedido falla en lugar de usar otro operador.
  • area_codes — opcional, separados por comas, p. ej. "212,305"; tn102/get-area-stock?service_key=… muestra el stock. Con lock_area_code: true el pedido falla en lugar de usar otro código.
  • Cada opción suma el recargo que devuelve get-services. Un pedido fallido nunca se cobra.
  • request-multiple — service_keys (2–7, separados por comas o en un array) y las mismas opciones carrier / area_codes: un número para todos, un pedido por servicio. Todo o nada: si un servicio no cabe en el número, no se cobra ninguno.
  • request-specific-number — number (10 dígitos de EE. UU.) y service_key: ese número exacto, por el precio del servicio más un recargo. No se cobra nada si no está disponible.
  • reject-number funciona a partir de cinco minutos tras la compra. Antes responde 409 con data.retry_after_seconds.
  • Consulta get-number-details; code contiene el código cuando llega. Los números sin usar se reembolsan solos al caducar.

Alquiler reserva un número para un servicio durante un periodo:

  • request-number — service_key y period (1d, 3d, 7d, 14d o 30d), obligatorios; opcionales area_codes, lock_area_code, auto_renew. Devuelve rental_id.
  • get-messages / get-rental-details — rental_id; todos los mensajes recibidos, del más reciente al más antiguo, con el código extraído.
  • renew-rental — rental_id; cobra el precio actual del mismo periodo y amplía la fecha de fin. 402 si el saldo no alcanza.
  • set-auto-renew — rental_id, auto_renew (true/false); renueva con el saldo poco antes del final.
  • cancel-rental — rental_id; reembolsa completo solo mientras no haya llegado ningún mensaje.

Los eventos de ambos llegan a tus webhooks como los de cualquier pedido; los de alquiler llevan "provider": "s2-rental".

Crea una cuenta para generar un token: la referencia completa y tus claves están en el panel, en el apartado de acceso a la API.

Preguntas frecuentes

¿Cómo consigo un token?
Crea una cuenta y genera uno en el panel, en el apartado de acceso a la API. Allí se muestra completo y se puede rotar cuando lo necesites.
¿Llamar a la API cuesta algo?
Las peticiones son gratuitas; los números no. Se te cobra por un número cuando `request-number` emite uno, al mismo precio por verificación que un pedido hecho desde el panel.
¿Hay un entorno de pruebas?
No hay un entorno separado. Hay uno solo, y un número pedido es un número real con un cargo real, que es también lo que hace que merezca la pena probar contra esta API.
¿Con qué frecuencia debo consultar el código?
`get-number-details` es una búsqueda indexada sin llamadas externas, así que unos pocos segundos entre consultas es razonable. Para cuando `pin` tenga valor o cuando el pedido pase su caducidad, y libera todo lo que no recibió nada.
¿Pueden avisarme en lugar de consultar?
Sí. Los webhooks se configuran por cuenta desde el panel y se disparan en los eventos de pedido, de modo que una integración de larga duración no tiene que quedarse en un bucle.

Páginas relacionadas

¿Todo listo para recibir tu código?

Crear la cuenta lleva un minuto y solo pagas por los números que entregan el mensaje.

Crear una cuenta gratis