SMS-ActSMS·Act
ServiciosRecargarGuíaDocsAPI
AccederAcceder / Registrarse
SMS·Act

Alquila números reales en 160+ países/regiones para 600+ servicios. Pagas solo por los códigos recibidos — sin suscripción ni mínimos.

Servicios
  • Servicios
  • Precios
  • Guía
  • API para desarrolladores
  • Docs
Legal y soporte
  • Sobre la plataforma
  • Cómo funciona y políticas
  • Términos del servicio
  • Política de privacidad
  • Contacto

© 2023-2026 SMS-Act La plataforma líder mundial de verificación SMS en línea

Países/Regiones · Servicios

API para desarrolladores

SMS-Act API

Pide números, recibe códigos de verificación y obtén reembolsos desde tu propio código. Una API REST sencilla con errores predecibles.

Obtener una clave de accesoDescargar especificación OpenAPI

En esta página

  • Inicio rápido
  • Ejemplo completo
  • Autenticación
  • Convenciones
  • Endpoints
  • Objetos
  • Códigos de error

Inicio rápido

  1. 1Genera una clave de acceso en la pestaña “API” de tu cuenta y guárdala en tu servidor.
  2. 2Elige un servicio y un país con GET /services y GET /services/{service}/countries.
  3. 3Pide un número con POST /activations y consulta GET /activations/{id} hasta que status sea completed; luego lee code.
  4. 4¿No llega el código? Cancela con POST /activations/{id}/cancel para un reembolso completo o deja que el pedido caduque.

Ejemplo completo

Pide un número, consulta el estado cada 5 segundos y muestra el código. Si no llega en 10 minutos, cancela la activación con reembolso. Define la variable de entorno SMS_ACT_KEY con tu clave de acceso y ejecútalo.

pip install requests
SMS_ACT_KEY=your_key python sms_act_example.py
import os
import time
import uuid

import requests

BASE_URL = "https://sms-act.net/sms/open-api/v1"
SESSION = requests.Session()
SESSION.headers["X-Access-Key"] = os.environ["SMS_ACT_KEY"]


def call(method, path, **kwargs):
    resp = SESSION.request(method, BASE_URL + path, timeout=30, **kwargs)
    body = resp.json()
    if resp.status_code >= 400:
        err = body["error"]
        raise RuntimeError(f"{err['code']}: {err['message']} (requestId={err['requestId']})")
    return body["data"]


# 1. Order a number. The Idempotency-Key makes network retries safe.
activation = call(
    "POST",
    "/activations",
    json={"service": "wa", "countryId": 6},
    headers={"Idempotency-Key": str(uuid.uuid4())},
)
print("Phone number:", activation["phoneNumber"])

# 2. Poll every 5 seconds until the code arrives (or give up after 10 minutes).
deadline = time.time() + 10 * 60
while activation["status"] == "waiting" and time.time() < deadline:
    time.sleep(5)
    activation = call("GET", f"/activations/{activation['id']}")

# 3. No code in time: cancel for a full refund.
if activation["status"] == "waiting":
    try:
        activation = call("POST", f"/activations/{activation['id']}/cancel")
    except RuntimeError:
        # The code may have arrived just before cancelling; read the final state.
        activation = call("GET", f"/activations/{activation['id']}")

if activation["status"] == "completed":
    print("Code:", activation["code"])
else:
    print("No code received; the activation was cancelled and refunded.")
# Node.js 18+
SMS_ACT_KEY=your_key node sms_act_example.mjs
import { randomUUID } from "node:crypto";

const BASE_URL = "https://sms-act.net/sms/open-api/v1";
const ACCESS_KEY = process.env.SMS_ACT_KEY;
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

async function call(method, path, { body, headers = {} } = {}) {
  const resp = await fetch(BASE_URL + path, {
    method,
    headers: { "X-Access-Key": ACCESS_KEY, "Content-Type": "application/json", ...headers },
    body: body ? JSON.stringify(body) : undefined,
  });
  const json = await resp.json();
  if (!resp.ok) {
    const { code, message, requestId } = json.error;
    throw new Error(`${code}: ${message} (requestId=${requestId})`);
  }
  return json.data;
}

// 1. Order a number. The Idempotency-Key makes network retries safe.
let activation = await call("POST", "/activations", {
  body: { service: "wa", countryId: 6 },
  headers: { "Idempotency-Key": randomUUID() },
});
console.log("Phone number:", activation.phoneNumber);

// 2. Poll every 5 seconds until the code arrives (or give up after 10 minutes).
const deadline = Date.now() + 10 * 60 * 1000;
while (activation.status === "waiting" && Date.now() < deadline) {
  await sleep(5000);
  activation = await call("GET", `/activations/${activation.id}`);
}

// 3. No code in time: cancel for a full refund.
if (activation.status === "waiting") {
  try {
    activation = await call("POST", `/activations/${activation.id}/cancel`);
  } catch {
    // The code may have arrived just before cancelling; read the final state.
    activation = await call("GET", `/activations/${activation.id}`);
  }
}

if (activation.status === "completed") {
  console.log("Code:", activation.code);
} else {
  console.log("No code received; the activation was cancelled and refunded.");
}

Autenticación

Envía tu clave de acceso en la cabecera X-Access-Key en todas las solicitudes excepto /health. Cualquiera que tenga la clave puede gastar tu saldo, así que nunca la expongas. Si se filtra, rótala de inmediato en tu cuenta.

URL base

https://sms-act.net/sms/open-api/v1

Convenciones

Respuestas

Las respuestas correctas usan HTTP 2xx y los datos van en data. Los errores usan HTTP 4xx o 5xx con un objeto error que incluye code, message, requestId y details opcionales.

Gestión de errores

Decide según error.code, nunca según message. Incluye requestId (también en la cabecera X-Request-Id) al contactar con soporte.

Ciclo de vida del pedido

Un pedido empieza como waiting y pasa a completed cuando llega el código, o a cancelled si lo cancelas o se cancela automáticamente si no llega el código (normalmente a los 15 minutos, como máximo en expiresAt, 20 minutos tras la creación). Los pedidos cancelados siempre se reembolsan por completo.

Consultas periódicas

Consulta GET /activations/{id} cada 3 segundos o más. Consultar más rápido no da error, pero solo devuelve el último estado conocido.

Idempotencia

Envía la cabecera Idempotency-Key (por ejemplo, un UUID) con POST /activations. Reintentar con el mismo valor en 24 horas devuelve el pedido original sin volver a cobrarte.

Límites de solicitudes

Cada clave puede enviar 60 solicitudes cada 10 segundos. Por encima recibirás 429 RATE_LIMITED con la cabecera Retry-After. La autenticación fallida también se limita por IP: tras unos 20 intentos fallidos en un minuto, todas las solicitudes de esa IP (incluso con una clave válida) reciben 429 hasta que termine ese minuto.

Pedidos simultáneos y límite diario de fallos

Puede haber como máximo 3 activaciones en estado waiting a la vez (los pedidos hechos en el sitio web también cuentan). Por encima, POST /activations devuelve 409 PENDING_LIMIT_REACHED; espera a que termine una o cancélala. Cuando fallan 15 activaciones en un día (cancelar y el vencimiento automático cuentan) y menos del 10 % de las del día tuvieron éxito, no se puede pedir hasta el día siguiente (403 ACTIVATIONS_RESTRICTED). Para una cuenta nueva que nunca ha recibido un código, esto equivale a un máximo de 14 fallos al día. Durante la integración, evita pedir y cancelar seguidamente.

Saldo

Para crear pedidos se necesita un saldo mínimo, indicado como minBalanceToOrder en GET /account/balance. Los demás endpoints siguen funcionando con saldo bajo.

Formatos

Los ID de pedido son cadenas, las fechas están en RFC 3339 (UTC) y los precios en créditos. Las listas aceptan page y pageSize (1–100) y devuelven pagination.

Endpoints

Las descripciones de endpoints y campos provienen de la especificación OpenAPI y están en inglés.

Get account balance

GET/account/balance

Respuestas

data: Balance

  • 200Current balance.
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Ejemplo de solicitud

curl -X GET "https://sms-act.net/sms/open-api/v1/account/balance" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Ejemplo de respuesta

{
  "data": {
    "balance": 92,
    "currency": "credits",
    "minBalanceToOrder": 60
  }
}

List services that can be ordered

GET/services

Parámetros

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

  • qstringquery

    Case-insensitive search on service code or name. (max length 50)

NombreUbicaciónTipoObligatorioDescripción
pagequeryintegerNo(≥ 1, default 1)
pageSizequeryintegerNo(1–100, default 20)
qquerystringNoCase-insensitive search on service code or name. (max length 50)

Respuestas

data: Service[] + pagination

  • 200A page of services.
  • 400INVALID_REQUEST — a parameter is missing or malformed (details.field).
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Ejemplo de solicitud

curl -X GET "https://sms-act.net/sms/open-api/v1/services" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Ejemplo de respuesta

{
  "data": [
    {
      "code": "wa",
      "name": "Whatsapp"
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 20,
    "total": 1
  }
}

List countries

GET/countries

Parámetros

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

  • qstringquery

    Case-insensitive search on English name or ISO code. (max length 50)

NombreUbicaciónTipoObligatorioDescripción
pagequeryintegerNo(≥ 1, default 1)
pageSizequeryintegerNo(1–100, default 20)
qquerystringNoCase-insensitive search on English name or ISO code. (max length 50)

Respuestas

data: Country[] + pagination

  • 200A page of countries.
  • 400INVALID_REQUEST — a parameter is missing or malformed (details.field).
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Ejemplo de solicitud

curl -X GET "https://sms-act.net/sms/open-api/v1/countries" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Ejemplo de respuesta

{
  "data": [
    {
      "id": 6,
      "iso2": "ID",
      "name": "Indonesia"
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 20,
    "total": 1
  }
}

List countries where a service can be ordered

GET/services/{service}/countries

Includes the price and a best-effort availability hint. Not paginated.

Parámetros

  • servicestringObligatoriopath
NombreUbicaciónTipoObligatorioDescripción
servicepathstringSí

Respuestas

data: ServiceCountry[]

  • 200Orderable countries for the service.
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 404ACTIVATION_NOT_FOUND or NOT_FOUND.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Ejemplo de solicitud

curl -X GET "https://sms-act.net/sms/open-api/v1/services/wa/countries" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Ejemplo de respuesta

{
  "data": [
    {
      "countryId": 6,
      "iso2": "ID",
      "countryName": "Indonesia",
      "price": {
        "amount": 8,
        "currency": "credits"
      },
      "available": true
    }
  ]
}

List activations created through the API

GET/activations

Parámetros

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

  • status"waiting" | "completed" | "cancelled"query
NombreUbicaciónTipoObligatorioDescripción
pagequeryintegerNo(≥ 1, default 1)
pageSizequeryintegerNo(1–100, default 20)
statusquery"waiting" | "completed" | "cancelled"No

Respuestas

data: Activation[] + pagination

  • 200A page of activations, newest first.
  • 400INVALID_REQUEST — a parameter is missing or malformed (details.field).
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Ejemplo de solicitud

curl -X GET "https://sms-act.net/sms/open-api/v1/activations" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Ejemplo de respuesta

{
  "data": [
    {
      "id": "2348810953",
      "status": "completed",
      "service": "wa",
      "serviceName": "Whatsapp",
      "countryId": 6,
      "countryName": "Indonesia",
      "phoneNumber": "+6281234567890",
      "code": "482915",
      "price": {
        "amount": 8,
        "currency": "credits"
      },
      "createdAt": "2026-10-08T09:30:00Z",
      "expiresAt": "2026-10-08T09:50:00Z",
      "completedAt": "2026-10-08T09:31:12Z",
      "cancelledAt": null
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 20,
    "total": 1
  }
}

Order a phone number

POST/activations

Charges price.amount credits. Nothing is charged if the request fails.

Parámetros

  • Idempotency-Keystringheader

    Strongly recommended. Replaying the same key within 24 hours returns the original activation instead of ordering again. (max length 64)

NombreUbicaciónTipoObligatorioDescripción
Idempotency-KeyheaderstringNoStrongly recommended. Replaying the same key within 24 hours returns the original activation instead of ordering again. (max length 64)

Cuerpo de la solicitud

  • servicestringObligatorio
  • countryIdintegerObligatorio

    (≥ 0)

NombreTipoObligatorioDescripción
servicestringSí
countryIdintegerSí(≥ 0)

Respuestas

data: ActivationCreated

  • 200Idempotent replay — the activation created by an earlier request with the same Idempotency-Key.
  • 201Activation created.
  • 400INVALID_REQUEST — a parameter is missing or malformed (details.field).
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 402INSUFFICIENT_BALANCE — details.balance, details.required.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 409NO_NUMBERS_AVAILABLE, PENDING_LIMIT_REACHED (details.pending, details.limit), ACTIVATION_NOT_CANCELLABLE or IDEMPOTENCY_IN_PROGRESS.
  • 422UNSUPPORTED_SERVICE_COUNTRY or IDEMPOTENCY_KEY_REUSED.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).
  • 502UPSTREAM_ERROR — the number provider failed. Nothing was charged and it is safe to retry.

Ejemplo de solicitud

curl -X POST "https://sms-act.net/sms/open-api/v1/activations" \
  -H "X-Access-Key: $SMS_ACT_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"service":"wa","countryId":6}'

Ejemplo de respuesta

{
  "data": {
    "id": "2348810953",
    "status": "waiting",
    "service": "wa",
    "serviceName": "Whatsapp",
    "countryId": 6,
    "countryName": "Indonesia",
    "phoneNumber": "+6281234567890",
    "code": null,
    "price": {
      "amount": 8,
      "currency": "credits"
    },
    "createdAt": "2026-10-08T09:30:00Z",
    "expiresAt": "2026-10-08T09:50:00Z",
    "completedAt": null,
    "cancelledAt": null
  }
}

Get an activation (poll this for the code)

GET/activations/{id}

Parámetros

  • idstringObligatoriopath
NombreUbicaciónTipoObligatorioDescripción
idpathstringSí

Respuestas

data: Activation

  • 200The activation. code is set once status is completed.
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 404ACTIVATION_NOT_FOUND or NOT_FOUND.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Ejemplo de solicitud

curl -X GET "https://sms-act.net/sms/open-api/v1/activations/2348810953" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Ejemplo de respuesta

{
  "data": {
    "id": "2348810953",
    "status": "completed",
    "service": "wa",
    "serviceName": "Whatsapp",
    "countryId": 6,
    "countryName": "Indonesia",
    "phoneNumber": "+6281234567890",
    "code": "482915",
    "price": {
      "amount": 8,
      "currency": "credits"
    },
    "createdAt": "2026-10-08T09:30:00Z",
    "expiresAt": "2026-10-08T09:50:00Z",
    "completedAt": "2026-10-08T09:31:12Z",
    "cancelledAt": null
  }
}

Cancel an activation and get a full refund

POST/activations/{id}/cancel

Allowed only while waiting. Cancelling an already cancelled activation succeeds.

Parámetros

  • idstringObligatoriopath
NombreUbicaciónTipoObligatorioDescripción
idpathstringSí

Respuestas

data: Activation

  • 200The cancelled activation.
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 404ACTIVATION_NOT_FOUND or NOT_FOUND.
  • 409NO_NUMBERS_AVAILABLE, PENDING_LIMIT_REACHED (details.pending, details.limit), ACTIVATION_NOT_CANCELLABLE or IDEMPOTENCY_IN_PROGRESS.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).
  • 502UPSTREAM_ERROR — the number provider failed. Nothing was charged and it is safe to retry.

Ejemplo de solicitud

curl -X POST "https://sms-act.net/sms/open-api/v1/activations/2348810953/cancel" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Ejemplo de respuesta

{
  "data": {
    "id": "2348810953",
    "status": "cancelled",
    "service": "wa",
    "serviceName": "Whatsapp",
    "countryId": 6,
    "countryName": "Indonesia",
    "phoneNumber": "+6281234567890",
    "code": null,
    "price": {
      "amount": 8,
      "currency": "credits"
    },
    "createdAt": "2026-10-08T09:30:00Z",
    "expiresAt": "2026-10-08T09:50:00Z",
    "completedAt": null,
    "cancelledAt": "2026-10-08T09:35:00Z"
  }
}

Health check

GET/healthSin autenticación

Respuestas

  • 200Service is up.

Ejemplo de solicitud

curl -X GET "https://sms-act.net/sms/open-api/v1/health"

Ejemplo de respuesta

{
  "status": "ok",
  "version": "1.5.0"
}

Objetos

Activation

  • idstringObligatorio
  • status"waiting" | "completed" | "cancelled"Obligatorio
  • servicestringObligatorio
  • serviceNamestringObligatorio
  • countryIdinteger | nullObligatorio

    Null only for a few legacy activations created before the country was recorded.

  • countryNamestring | nullObligatorio

    English name. Null in the same cases as countryId.

  • phoneNumberstringObligatorio

    E.164 format.

  • codestring | nullObligatorio

    The verification code, set when status is completed.

  • priceMoneyObligatorio
  • createdAtstringObligatorio
  • expiresAtstringObligatorio

    Upper bound: if no code arrives, the activation is cancelled and refunded automatically, usually after about 15 minutes and at the latest by this time.

  • completedAtstring | nullObligatorio
  • cancelledAtstring | nullObligatorio
NombreTipoObligatorioDescripción
idstringSí
status"waiting" | "completed" | "cancelled"Sí
servicestringSí
serviceNamestringSí
countryIdinteger | nullSíNull only for a few legacy activations created before the country was recorded.
countryNamestring | nullSíEnglish name. Null in the same cases as countryId.
phoneNumberstringSíE.164 format.
codestring | nullSíThe verification code, set when status is completed.
priceMoneySí
createdAtstringSí
expiresAtstringSíUpper bound: if no code arrives, the activation is cancelled and refunded automatically, usually after about 15 minutes and at the latest by this time.
completedAtstring | nullSí
cancelledAtstring | nullSí

ActivationCreated

Returned by POST /activations. Same as Activation, optionally with a warning.

  • idstringObligatorio
  • status"waiting" | "completed" | "cancelled"Obligatorio
  • servicestringObligatorio
  • serviceNamestringObligatorio
  • countryIdinteger | nullObligatorio

    Null only for a few legacy activations created before the country was recorded.

  • countryNamestring | nullObligatorio

    English name. Null in the same cases as countryId.

  • phoneNumberstringObligatorio

    E.164 format.

  • codestring | nullObligatorio

    The verification code, set when status is completed.

  • priceMoneyObligatorio
  • createdAtstringObligatorio
  • expiresAtstringObligatorio

    Upper bound: if no code arrives, the activation is cancelled and refunded automatically, usually after about 15 minutes and at the latest by this time.

  • completedAtstring | nullObligatorio
  • cancelledAtstring | nullObligatorio
  • warningActivationWarning

    The activation was created and charged; this is only a heads-up. Do not retry because of it.

NombreTipoObligatorioDescripción
idstringSí
status"waiting" | "completed" | "cancelled"Sí
servicestringSí
serviceNamestringSí
countryIdinteger | nullSíNull only for a few legacy activations created before the country was recorded.
countryNamestring | nullSíEnglish name. Null in the same cases as countryId.
phoneNumberstringSíE.164 format.
codestring | nullSíThe verification code, set when status is completed.
priceMoneySí
createdAtstringSí
expiresAtstringSíUpper bound: if no code arrives, the activation is cancelled and refunded automatically, usually after about 15 minutes and at the latest by this time.
completedAtstring | nullSí
cancelledAtstring | nullSí
warningActivationWarningNoThe activation was created and charged; this is only a heads-up. Do not retry because of it.

ActivationWarning

The activation was created and charged; this is only a heads-up. Do not retry because of it.

  • code"DAILY_FAILURE_WARNING"Obligatorio
  • failedTodayintegerObligatorio
  • blockThresholdintegerObligatorio

    Ordering is blocked for the rest of the day once this many activations have failed.

  • messagestringObligatorio
NombreTipoObligatorioDescripción
code"DAILY_FAILURE_WARNING"Sí
failedTodayintegerSí
blockThresholdintegerSíOrdering is blocked for the rest of the day once this many activations have failed.
messagestringSí

Service

  • codestringObligatorio
  • namestringObligatorio
NombreTipoObligatorioDescripción
codestringSí
namestringSí

Country

  • idintegerObligatorio
  • iso2string | nullObligatorio

    ISO 3166-1 alpha-2. Several countries may share a code (e.g. virtual and physical US numbers) — always order by id.

  • namestringObligatorio
NombreTipoObligatorioDescripción
idintegerSí
iso2string | nullSíISO 3166-1 alpha-2. Several countries may share a code (e.g. virtual and physical US numbers) — always order by id.
namestringSí

ServiceCountry

  • countryIdintegerObligatorio
  • iso2string | nullObligatorio
  • countryNamestringObligatorio
  • priceMoneyObligatorio
  • availablebooleanObligatorio

    Best-effort stock hint. true does not guarantee a number; false means ordering will most likely fail with NO_NUMBERS_AVAILABLE.

NombreTipoObligatorioDescripción
countryIdintegerSí
iso2string | nullSí
countryNamestringSí
priceMoneySí
availablebooleanSíBest-effort stock hint. true does not guarantee a number; false means ordering will most likely fail with NO_NUMBERS_AVAILABLE.

Balance

  • balancenumberObligatorio

    May contain decimals.

  • currency"credits"Obligatorio
  • minBalanceToOrdernumberObligatorio

    Minimum balance required to create an activation.

NombreTipoObligatorioDescripción
balancenumberSíMay contain decimals.
currency"credits"Sí
minBalanceToOrdernumberSíMinimum balance required to create an activation.

Money

  • amountnumberObligatorio
  • currency"credits"Obligatorio
NombreTipoObligatorioDescripción
amountnumberSí
currency"credits"Sí

Pagination

  • pageintegerObligatorio

    (≥ 1)

  • pageSizeintegerObligatorio

    (1–100)

  • totalintegerObligatorio

    (≥ 0)

NombreTipoObligatorioDescripción
pageintegerSí(≥ 1)
pageSizeintegerSí(1–100)
totalintegerSí(≥ 0)

Códigos de error

Los errores reintentables pueden resolverse si envías la misma solicitud más tarde. Usa el mismo Idempotency-Key al reintentar POST /activations.

  • INVALID_REQUESTHTTP 400Reintentable: NoA parameter is missing or malformed. details.field names it.
  • UNAUTHORIZEDHTTP 401Reintentable: NoThe X-Access-Key header is missing, invalid or the key was revoked.
  • INSUFFICIENT_BALANCEHTTP 402Reintentable: NoBalance is below the minimum required to create activations. Top up and retry.
  • ACCOUNT_SUSPENDEDHTTP 403Reintentable: NoThe account that owns the key has been suspended.
  • DAILY_LIMIT_REACHEDHTTP 403Reintentable: NoToo many activations failed today (cancelled orders count as failures). Ordering resumes tomorrow. With the default limits, a new account that has never received a code can fail up to 14 times a day; see ACTIVATIONS_RESTRICTED.
  • ACTIVATIONS_RESTRICTEDHTTP 403Reintentable: NoOrdering is restricted for today due to an abnormal failure pattern: 15 or more failures with a success rate below 10%, for any account. cancelled orders (manual or automatic timeout) count as failures.
  • ACTIVATION_NOT_FOUNDHTTP 404Reintentable: NoThe activation does not exist or belongs to another account.
  • NOT_FOUNDHTTP 404Reintentable: NoThe endpoint or service does not exist.
  • NO_NUMBERS_AVAILABLEHTTP 409Reintentable: SíNo numbers right now for this service and country. Retry in a minute or try another country.
  • PENDING_LIMIT_REACHEDHTTP 409Reintentable: SíToo many activations are still waiting for a code (at most 3 at a time, counting orders placed on the website too). Wait for one to finish or cancel it.
  • ACTIVATION_NOT_CANCELLABLEHTTP 409Reintentable: NoThe activation already received a code and cannot be cancelled.
  • IDEMPOTENCY_IN_PROGRESSHTTP 409Reintentable: SíA request with the same Idempotency-Key is still being processed.
  • UNSUPPORTED_SERVICE_COUNTRYHTTP 422Reintentable: NoThis service cannot be ordered in this country. See GET /services/{service}/countries.
  • IDEMPOTENCY_KEY_REUSEDHTTP 422Reintentable: NoThe Idempotency-Key was already used with a different request body.
  • RATE_LIMITEDHTTP 429Reintentable: SíToo many requests: more than 60 per 10 seconds on one key, too many failed authentication attempts from one IP, or another order from the same account is still being created. Wait for the number of seconds in Retry-After.
  • UPSTREAM_ERRORHTTP 502Reintentable: SíThe number provider failed. Nothing was charged.
  • INTERNAL_ERRORHTTP 500Reintentable: SíUnexpected server error. Nothing was charged. Retry with the same Idempotency-Key.