API para recibir SMS

Compra números y lee códigos de verificación con una API JSON. Sin KYC, solo criptomonedas.

REST · JSONOpenAPI 3.1 Especificación OpenAPI →

Cada operación de aquí es también una herramienta MCP. Los endpoints REST son una traducción de las mismas herramientas que expone el servidor MCP, así que un agente autónomo y una integración convencional obtienen el mismo comportamiento. Si vas a apuntar un agente de IA a OTPDrop, empieza por Agentes.

¿Cómo encaja todo en la API?

  1. Crea una cuenta y guarda la semilla que devuelve. Es la única credencial y no puede restablecerse.
  2. Crea una recarga, envía las criptomonedas y espera a que se acredite.
  3. Compra un número para el servicio y el país que necesites: el saldo se descuenta al instante.
  4. Consulta el código SMS. Si no llega ninguno antes de que expire el pedido, hay reembolso automático.

Financia una vez, compra muchas: una sola recarga cubre tantos números como permita su saldo, así que solo la primera compra espera una confirmación.

Autenticación

Envía la semilla de la cuenta como token bearer. No hay clave de API aparte ni llamada de inicio de sesión: la semilla es la credencial.

Authorization: Bearer YOUR-SEED-PHRASE

Los endpoints del catálogo no necesitan autenticación en absoluto, así que puedes consultar servicios, países y precios antes de que exista una cuenta. Todo lo que toca dinero o pedidos requiere la cabecera.

La semilla no se puede recuperar. Solo guardamos un hash de ella. Si la pierdes, la cuenta y su saldo desaparecen, sin restablecimiento y sin ninguna vía de soporte para volver a entrar.

URL base

Todos los endpoints son relativos a:

https://otpdrop.com/api/v1

Las respuestas son JSON. Los cuerpos POST se aceptan como application/json o application/x-www-form-urlencoded.

Errores

Los fallos devuelven un estado fuera de 2xx y un único objeto de error.

{
  "error": {
    "code": "invalid_request",
    "message": "unknown service: \"whatsap\""
  }
}
EstadoSignificado
200Correcto
201Creado: ya existe una cuenta, una recarga o un pedido
401Falta la semilla en la cabecera Authorization o no es válida
422La petición se entendió pero no pudo llevarse a cabo
500Algo falló por nuestra parte

Mensajes habituales con 422:

MensajeCausa
insufficient_fundsEl saldo es menor que el precio: crea antes una recarga
unknown serviceNo existe ese código de servicio; mira «listar servicios»
unknown countryNo existe ese código de país; mira «listar países»
unknown coinMoneda no aceptada; mira el endpoint de recarga
amount_usd must be between…Las recargas están limitadas a $25–$1000

¿Hay límites de frecuencia?

No hay cuota publicada ni clave de API que estrangular, pero llamar a los endpoints en bucle no sale gratis. Dos de ellos están pensados para consultas repetidas y merecen especial cuidado.

EndpointRitmo razonablePor qué
Catálogo y cotizacionesGuárdalos en cachéLos precios cambian poco; no hace falta pedir el catálogo en cada petición.
/topups/{id}Cada 10-15 segundosLa confirmación en la red tarda minutos, no milisegundos. Consultar más rápido no te dice nada antes.
/orders/{id}/smsCada 3-5 segundosLos códigos suelen llegar en segundos; un bucle más apretado solo añade carga.
ComprasSegún haga faltaCada compra descuenta de un saldo real, así que un bucle descontrolado te cuesta dinero antes que a nosotros.

El tráfico que parezca un ataque se bloqueará en el borde sin un 429 de cortesía. Si tienes un motivo legítimo para consultar con más frecuencia, escríbenos primero en la página de contacto.

Listar servicios

GET/api/v1/services

Todos los servicios con su código, categoría y precio más bajo. No requiere autenticación.

Petición

curl -s https://otpdrop.com/api/v1/services

Respuesta

{
  "services": [
    {
      "code": "binance",
      "name": "Binance",
      "category": "Finance",
      "from_price_cents": 85,
      "color": "#F0B90B",
      "icon": "binance"
    }
  ],
  "count": 133
}

Listar países

GET/api/v1/countries

Every country with its dial code and how many services are available there. No authentication required.

Petición

curl -s https://otpdrop.com/api/v1/countries

Respuesta

{
  "countries": [
    {
      "code": "us",
      "name": "United States",
      "dial_code": "+1",
      "service_count": 133
    }
  ],
  "count": 197
}

Matriz de precios

GET/api/v1/catalog

The most useful service and country combinations with their prices, cheapest first. No authentication required.

Parámetros

NombreTipoDescripción
limitintegeropcionalHow many rows to return, 1 to 500. Defaults to 12.

Petición

curl -s 'https://otpdrop.com/api/v1/catalog?limit=2'

Respuesta

{
  "items": [
    {
      "service": "badoo",
      "country": "us",
      "price_cents": 35
    }
  ],
  "count": 2
}

Cotizar un precio

GET/api/v1/quote

The exact price for one service and country before you commit to buying. No authentication required.

Parámetros

NombreTipoDescripción
servicestringobligatorioService code, e.g. telegram
countrystringobligatorioCountry code, e.g. us

Petición

curl -s 'https://otpdrop.com/api/v1/quote?service=telegram&country=us'

Respuesta

{
  "service": "telegram",
  "country": "us",
  "price_cents": 111,
  "price_usd": "1.11",
  "currency": "USD",
  "purchasable": true
}

Crear cuenta

POST/api/v1/accounts

Generates an account and returns its seed. This is the only time the seed is ever shown. No authentication required.

Petición

curl -s -X POST https://otpdrop.com/api/v1/accounts

Respuesta

{
  "public_id": "acc_7f3c1a92",
  "seed": "PABh-ZbRt-9xKm-Lq4V",
  "seed_prefix": "PABh",
  "balance_cents": 0,
  "warning": "This seed is shown exactly once, right now..."
}

Crear recarga

POST/api/v1/topups

Claims a deposit address and returns the exact amount to send, as coin_amount, at the rate in rate_usd. Each top-up gets its own address, and it expires at expires_at. Send only the named coin, on the named network, before then.

Parámetros

NombreTipoDescripción
amount_usdnumberobligatorioHow much to add to the balance, in USD. Minimum 25, maximum 1000.
coinstringobligatorioBTC, LTC, ETH, XMR, SOL, TRX, BNB, USDT, USDC and more

Petición

curl -s -X POST https://otpdrop.com/api/v1/topups \
  -H 'Authorization: Bearer YOUR-SEED' \
  -H 'content-type: application/json' \
  -d '{"amount_usd": 25, "coin": "XMR"}'

Respuesta

{
  "topup_id": "top_019195919c80fc8f",
  "status": "awaiting_payment",
  "coin": "XMR",
  "address": "89Rm4XN39m9PCr8Sr3yAFnXvLRRWQVEE...",
  "amount_cents": 2500,
  "amount_usd": "25.00",
  "coin_amount": "0.1337",
  "rate_usd": 187.02,
  "bonus_cents": 0,
  "credited_total_cents": 2500,
  "expires_at": 1788532810
}

Estado de la recarga

GET/api/v1/topups/{id}

Whether a deposit has been credited. Confirmation is not instant — poll this rather than assuming the funds arrived.

Parámetros

NombreTipoDescripción
idstringobligatorioThe top-up id, in the path

Petición

curl -s https://otpdrop.com/api/v1/topups/top_019195919c80fc8f \
  -H 'Authorization: Bearer YOUR-SEED'

Respuesta

{
  "topup_id": "top_019195919c80fc8f",
  "status": "credited",
  "coin": "XMR",
  "amount_usd": "25.00",
  "coin_amount": "0.1337",
  "credited_total_cents": 2500,
  "expires_at": 1788532810
}

Comprar un número

POST/api/v1/orders

Debits the balance and issues a number immediately. There is no per-purchase address and no second wait. Fails with insufficient_funds if the balance is short.

Parámetros

NombreTipoDescripción
servicestringobligatorioService code, e.g. telegram
countrystringobligatorioCountry code, e.g. us

Petición

curl -s -X POST https://otpdrop.com/api/v1/orders \
  -H 'Authorization: Bearer YOUR-SEED' \
  -H 'content-type: application/json' \
  -d '{"service": "telegram", "country": "us"}'

Respuesta

{
  "order_id": "ord_1ad450bf7a42519c",
  "service": "telegram",
  "country": "us",
  "phone": "+15558329008",
  "status": "paid",
  "price_usd": "1.11"
}

Listar tus pedidos

GET/api/v1/orders

Every order on the account, newest first, with status, number and price. Useful for reconciling state after a restart rather than for polling.

Petición

curl -s https://otpdrop.com/api/v1/orders \
  -H 'Authorization: Bearer YOUR-SEED'

Respuesta

{
  "orders": [
    {
      "order_id": "ord_1ad450bf7a42519c",
      "service": "telegram",
      "country": "us",
      "phone": "+15558329008",
      "status": "paid",
      "price_usd": "1.11"
    }
  ],
  "count": 1
}

Obtener un pedido

GET/api/v1/orders/{id}

The current state of one order: its number, status and price.

Parámetros

NombreTipoDescripción
idstringobligatorioThe order id, in the path

Petición

curl -s https://otpdrop.com/api/v1/orders/ord_1ad450bf7a42519c \
  -H 'Authorization: Bearer YOUR-SEED'

Respuesta

{
  "order_id": "ord_1ad450bf7a42519c",
  "service": "telegram",
  "country": "us",
  "phone": "+15558329008",
  "status": "paid",
  "price_usd": "1.11"
}

Obtener el código SMS

GET/api/v1/orders/{id}/sms

Poll this until arrived turns true. If the order expires with nothing delivered, the price returns to your balance automatically.

Parámetros

NombreTipoDescripción
idstringobligatorioThe order id, in the path

Petición

curl -s https://otpdrop.com/api/v1/orders/ord_1ad450bf7a42519c/sms \
  -H 'Authorization: Bearer YOUR-SEED'

Respuesta

{
  "order_id": "ord_1ad450bf7a42519c",
  "status": "paid",
  "arrived": false,
  "code": null
}

¿Cómo es una integración completa?

De la cuenta al código en seis llamadas. Todo lo de abajo es real: pégalo y funciona.

# 1. Crear una cuenta y guardar la semilla
SEED=$(curl -s -X POST https://otpdrop.com/api/v1/accounts | jq -r .seed)

# 2. Financiarla: envía coin_amount a la dirección devuelta
curl -s -X POST https://otpdrop.com/api/v1/topups \
  -H "Authorization: Bearer \$SEED" \
  -H 'content-type: application/json' \
  -d '{"amount_usd": 25, "coin": "USDT"}'

# 3. Consultar hasta que el depósito se acredite
curl -s https://otpdrop.com/api/v1/topups/TOPUP_ID \
  -H "Authorization: Bearer \$SEED" | jq .status

# 4. Comprobar el precio antes de comprometerse
curl -s 'https://otpdrop.com/api/v1/quote?service=telegram&country=us'

# 5. Comprar: se descuenta el saldo y el número se entrega al momento
ORDER=$(curl -s -X POST https://otpdrop.com/api/v1/orders \
  -H "Authorization: Bearer \$SEED" \
  -H 'content-type: application/json' \
  -d '{"service": "telegram", "country": "us"}' | jq -r .order_id)

# 6. Consultar el código
until curl -s https://otpdrop.com/api/v1/orders/\$ORDER/sms \
  -H "Authorization: Bearer \$SEED" | jq -e .code; do sleep 4; done

La misma secuencia en Python, sin la shell:

import time, requests

API = "https://otpdrop.com/api/v1"
seed = requests.post(f"{API}/accounts").json()["seed"]
auth = {"Authorization": f"Bearer {seed}"}

topup = requests.post(f"{API}/topups", headers=auth,
                      json={"amount_usd": 25, "coin": "USDT"}).json()
print("send", topup["coin_amount"], topup["coin"], "to", topup["address"])

while requests.get(f"{API}/topups/{topup['topup_id']}",
                   headers=auth).json()["status"] != "credited":
    time.sleep(15)

order = requests.post(f"{API}/orders", headers=auth,
                      json={"service": "telegram", "country": "us"}).json()
print("number:", order["phone"])

while True:
    sms = requests.get(f"{API}/orders/{order['order_id']}/sms",
                       headers=auth).json()
    if sms["arrived"]:
        print("code:", sms["code"])
        break
    time.sleep(4)

Servidor MCP

Las mismas operaciones están disponibles por Model Context Protocol en https://otpdrop.com/mcp, como once herramientas. Para añadirlo a Claude Code:

claude mcp add --transport http otpdrop https://otpdrop.com/mcp

La configuración y la lista completa de herramientas están en la página para agentes.

Archivos de descubrimiento

Descripciones del servicio legibles por máquinas, todas servidas sin autenticación.

ArchivoContenido
/openapi.jsonEl esquema OpenAPI 3.1 completo
/.well-known/agent.jsonCapacidades, modelo de autenticación y reglas de negocio
/llms.txtUna orientación breve para modelos de lenguaje
/llms-full.txtLo mismo con el catálogo completo incluido

Preguntas frecuentes

¿La API de OTPDrop necesita una clave?

No. No hay nada que solicitar ni ningún paso de aprobación. La credencial es la semilla de la cuenta, enviada como token bearer, y los endpoints del catálogo no necesitan credencial alguna.

¿Cuánto cuesta la API de OTPDrop?

Nada más allá de los números que compres. No hay suscripción, ni coste por llamada, ni volumen mínimo: pagas los mismos precios que quien use la web.

¿Con qué lenguajes de programación funciona la API?

Con cualquiera capaz de hacer una petición HTTPS. Es JSON simple sobre HTTP con una cabecera bearer, así que no hay SDK que instalar ni nada que mantener al día con nuestras versiones.

¿Qué pasa si el código SMS nunca llega?

El pedido se reembolsa solo a tu saldo cuando expira, y puedes cancelarlo antes desde la web. Se te cobra por códigos entregados, no por intentos.

¿La API REST es lo mismo que el servidor MCP?

Sí, deliberadamente. Cada endpoint REST es una traducción de una llamada a una herramienta MCP, así que los dos no pueden separarse: arreglar uno es arreglar el otro. Elige el que le venga mejor a tu cliente.

¿Se puede probar la API sin gastar nada?

El catálogo, las cotizaciones y la creación de cuenta son gratuitos, así que puedes construir y probar casi toda una integración antes de financiar un saldo. Solo comprar cuesta dinero.