DEV Community

2FASMS
2FASMS

Posted on Edited on

Cómo obtener números de verificación por SMS con la API de 2FASMS

¿Necesitas un número de teléfono para recibir un código de verificación por SMS y quieres hacerlo desde código en lugar de navegar por una web? Este tutorial muestra cómo usar la API REST de 2FASMS para consultar tu saldo, listar los servicios disponibles, comprar un número virtual y leer el código SMS.

Todas las peticiones usan curl, así que puedes seguirlo desde cualquier terminal. Al final hay una colección de Postman lista para usar.

Requisitos previos

  • Una cuenta de 2FASMS
  • Tu clave de API, que aparece en los ajustes de tu cuenta

Guarda la clave en una variable de entorno para no pegarla en los comandos ni subirla por error a un repositorio:

export API_KEY="YOUR_API_KEY"
Enter fullscreen mode Exit fullscreen mode

La URL base de todas las peticiones es https://api.2fasms.com. Los endpoints autenticados esperan tu clave en la cabecera Authorization como token Bearer.

Paso 1: Consultar tu saldo

curl -H "Authorization: Bearer $API_KEY" \
     "https://api.2fasms.com/order/api/get_balance"
Enter fullscreen mode Exit fullscreen mode

Respuesta:

{
  "balance": 25.50,
  "user_id": 123
}
Enter fullscreen mode Exit fullscreen mode

Si falta la clave obtienes un 400, y si la clave no es válida, un 401.

Paso 2: Listar los servicios disponibles

Este endpoint no requiere autenticación. Añade el slug de un país para ver los servicios de ese país:

curl "https://api.2fasms.com/order/api/services?country=france"
Enter fullscreen mode Exit fullscreen mode

Respuesta (abreviada):

{
  "country": "france",
  "services": [
    {
      "name": "whatsapp",
      "providers": ["provider_5", "provider_7", "provider_9"],
      "min_price": 15.20,
      "max_price": 33.50
    }
  ],
  "total": 89,
  "from_cache": true
}
Enter fullscreen mode Exit fullscreen mode

El campo name es el slug del servicio que usarás en el siguiente paso. Para ver la lista de países y sus slugs, llama a GET /order/api/countries.

Paso 3: Comprar un número

Envía un POST con los slugs del país y del servicio:

curl -X POST \
     -H "Authorization: Bearer $API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"country":"france","service":"whatsapp"}' \
     "https://api.2fasms.com/order/api/get_number"
Enter fullscreen mode Exit fullscreen mode

Respuesta:

{
  "orderId": 12345,
  "number": "+33123456789",
  "status": "ok"
}
Enter fullscreen mode Exit fullscreen mode

Guarda el orderId: lo necesitas para leer el SMS. Usa el number en la aplicación o web donde quieres recibir el código.

Posibles errores: 400 por parámetros inválidos, 406 por saldo insuficiente y 500 si el servicio o el país no están disponibles.

Paso 4: Leer el código SMS

Cuando hayas solicitado el código en el servicio de destino, consulta el pedido:

curl -X POST \
     -H "Authorization: Bearer $API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"orderId":12345}' \
     "https://api.2fasms.com/order/api/check_order"
Enter fullscreen mode Exit fullscreen mode

Cuando llega el SMS, la respuesta contiene el código:

{
  "status": "success",
  "data": [{ "orderId": 12345, "sms": "123456" }]
}
Enter fullscreen mode Exit fullscreen mode

Este pequeño bucle de shell consulta cada 5 segundos durante 2 minutos como máximo:

for i in $(seq 1 24); do
  curl -s -X POST \
       -H "Authorization: Bearer $API_KEY" \
       -H "Content-Type: application/json" \
       -d '{"orderId":12345}' \
       "https://api.2fasms.com/order/api/check_order"
  echo
  sleep 5
done
Enter fullscreen mode Exit fullscreen mode

Obtienes un 404 si el pedido no existe y un 400 si falta orderId.

Webhook en lugar de consultar cada pocos segundos

Puedes registrar un endpoint HTTPS y 2FASMS enviará con POST cada SMS recibido:

curl -X POST \
     -H "Authorization: Bearer $API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"url":"https://your-app.com/sms-hook"}' \
     "https://api.2fasms.com/user/webhook"
Enter fullscreen mode Exit fullscreen mode

El contenido incluye el ID del pedido, el servicio, el país, el texto completo del SMS, el code extraído, el número y la hora de recepción. Las entregas fallidas (respuestas que no son 2xx) se reintentan hasta 3 veces. Envía una url vacía para desactivar el webhook.

Paso 5: Finalizar el pedido

Cuando termines, cierra el pedido:

curl -X POST \
     -H "Authorization: Bearer $API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"orderId":12345}' \
     "https://api.2fasms.com/order/api/finish_order"
Enter fullscreen mode Exit fullscreen mode
{
  "message": "order has been finished"
}
Enter fullscreen mode Exit fullscreen mode

Un 406 significa que el pedido ya estaba cancelado o caducado, o que el SMS sigue pendiente.

Pruébalo en Postman

He reunido las cuatro peticiones principales (saldo, servicios, compra de número y lectura del SMS) en una colección pública de Postman. La clave es una variable {{api_key}}: solo tienes que poner la tuya.

https://documenter.getpostman.com/view/59423970/2sBYHXRJZs

Para terminar

Este es el flujo completo: saldo, servicios, número, código. A partir de aquí puedes integrarlo en tu suite de pruebas, en la automatización de registros de tu entorno de staging o en cualquier flujo que necesite un número temporal.

Puedes crear una cuenta y obtener tu clave de API aquí: https://2fasms.com/?ref=dev-tuto

Divulgación: trabajo en el equipo de 2FASMS.

Top comments (0)