SMS-ActSMS·Act
ServicesRechargeGuideDocsAPI
Log inLog in / Sign up
SMS·Act

Choose a service first, then log in to view the supported countries/regions for that service and continue to the activation flow.

Services
  • Services
  • Pricing
  • Guide
  • Developer API
  • Docs
Legal & support
  • About Us
  • How it works & site policies
  • Terms of Service
  • Privacy Policy
  • Contact Us

© 2023-2026 SMS-Act The world's leading online SMS verification platform

Countries/Regions · Services

Developer API

SMS-Act API

Order phone numbers, receive verification codes and get refunds from your own code. A small REST API with predictable errors.

Get an access keyDownload OpenAPI spec

On this page

  • Quickstart
  • Full example
  • Authentication
  • Conventions
  • Endpoints
  • Objects
  • Error codes

Quickstart

  1. 1Generate an access key in your account under the API tab and keep it on your server.
  2. 2Pick a service and a country with GET /services and GET /services/{service}/countries.
  3. 3Order a number with POST /activations, then poll GET /activations/{id} until status is completed and read code.
  4. 4No code yet? Cancel with POST /activations/{id}/cancel for a full refund, or let the activation expire.

Full example

Orders a number, polls every 5 seconds and prints the code. If no code arrives within 10 minutes, it cancels the activation for a refund. Set the SMS_ACT_KEY environment variable to your access key and run it.

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.");
}

Authentication

Send your access key in the X-Access-Key header with every request except /health. Anyone with the key can spend your balance, so never expose it. If it leaks, rotate it in your account right away.

Base URL

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

Conventions

Responses

Successful responses use HTTP 2xx and wrap the payload in data. Errors use HTTP 4xx or 5xx with an error object containing code, message, requestId and optional details.

Error handling

Branch on error.code, never on message. Include requestId (also in the X-Request-Id header) when you contact support.

Activation lifecycle

An activation starts as waiting and becomes completed when the code arrives, or cancelled when you cancel it or it is cancelled automatically when no code arrives (usually after about 15 minutes, at the latest at expiresAt, 20 minutes after creation). Cancelled activations are always fully refunded.

Polling

Poll GET /activations/{id} every 3 seconds or slower. Faster polling is not an error, but it only returns the last known state.

Idempotency

Send an Idempotency-Key header (for example a UUID) with POST /activations. Retrying with the same key within 24 hours returns the original activation instead of charging you again.

Rate limits

Each key may send 60 requests per 10 seconds. Above that you receive 429 RATE_LIMITED with a Retry-After header. Failed authentication is limited per IP too: after about 20 failed attempts within a minute, every request from that IP (even with a valid key) gets 429 until the minute ends.

Concurrent orders and daily limits

Up to 3 activations can be waiting at the same time (orders placed on the website count too). Above that, POST /activations returns 409 PENDING_LIMIT_REACHED; wait for one to finish or cancel it. Once 15 activations have failed in a day (cancelling counts, and so does an automatic timeout) and fewer than 10% of the day's activations succeeded, ordering is paused until the next day (403 ACTIVATIONS_RESTRICTED). For a new account that has never received a code, this means at most 14 failures a day. While integrating, avoid ordering and cancelling in a row.

Balance

Creating activations requires a minimum balance, shown as minBalanceToOrder in GET /account/balance. Other endpoints keep working when your balance is low.

Formats

Activation IDs are strings, timestamps are RFC 3339 in UTC and prices are in credits. Lists accept page and pageSize (1–100) and return pagination.

Endpoints

Endpoint and field descriptions come from the OpenAPI specification and are in English.

Get account balance

GET/account/balance

Responses

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).

Request example

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

Response example

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

List services that can be ordered

GET/services

Parameters

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

  • qstringquery

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

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

Responses

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).

Request example

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

Response example

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

List countries

GET/countries

Parameters

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

  • qstringquery

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

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

Responses

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).

Request example

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

Response example

{
  "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.

Parameters

  • servicestringRequiredpath
NameInTypeRequiredDescription
servicepathstringYes

Responses

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).

Request example

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

Response example

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

List activations created through the API

GET/activations

Parameters

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

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

Responses

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).

Request example

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

Response example

{
  "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.

Parameters

  • Idempotency-Keystringheader

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

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

Request body

  • servicestringRequired
  • countryIdintegerRequired

    (≥ 0)

NameTypeRequiredDescription
servicestringYes
countryIdintegerYes(≥ 0)

Responses

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.

Request example

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}'

Response example

{
  "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}

Parameters

  • idstringRequiredpath
NameInTypeRequiredDescription
idpathstringYes

Responses

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).

Request example

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

Response example

{
  "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.

Parameters

  • idstringRequiredpath
NameInTypeRequiredDescription
idpathstringYes

Responses

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.

Request example

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

Response example

{
  "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/healthNo authentication

Responses

  • 200Service is up.

Request example

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

Response example

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

Objects

Activation

  • idstringRequired
  • status"waiting" | "completed" | "cancelled"Required
  • servicestringRequired
  • serviceNamestringRequired
  • countryIdinteger | nullRequired

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

  • countryNamestring | nullRequired

    English name. Null in the same cases as countryId.

  • phoneNumberstringRequired

    E.164 format.

  • codestring | nullRequired

    The verification code, set when status is completed.

  • priceMoneyRequired
  • createdAtstringRequired
  • expiresAtstringRequired

    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 | nullRequired
  • cancelledAtstring | nullRequired
NameTypeRequiredDescription
idstringYes
status"waiting" | "completed" | "cancelled"Yes
servicestringYes
serviceNamestringYes
countryIdinteger | nullYesNull only for a few legacy activations created before the country was recorded.
countryNamestring | nullYesEnglish name. Null in the same cases as countryId.
phoneNumberstringYesE.164 format.
codestring | nullYesThe verification code, set when status is completed.
priceMoneyYes
createdAtstringYes
expiresAtstringYesUpper 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 | nullYes
cancelledAtstring | nullYes

ActivationCreated

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

  • idstringRequired
  • status"waiting" | "completed" | "cancelled"Required
  • servicestringRequired
  • serviceNamestringRequired
  • countryIdinteger | nullRequired

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

  • countryNamestring | nullRequired

    English name. Null in the same cases as countryId.

  • phoneNumberstringRequired

    E.164 format.

  • codestring | nullRequired

    The verification code, set when status is completed.

  • priceMoneyRequired
  • createdAtstringRequired
  • expiresAtstringRequired

    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 | nullRequired
  • cancelledAtstring | nullRequired
  • warningActivationWarning

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

NameTypeRequiredDescription
idstringYes
status"waiting" | "completed" | "cancelled"Yes
servicestringYes
serviceNamestringYes
countryIdinteger | nullYesNull only for a few legacy activations created before the country was recorded.
countryNamestring | nullYesEnglish name. Null in the same cases as countryId.
phoneNumberstringYesE.164 format.
codestring | nullYesThe verification code, set when status is completed.
priceMoneyYes
createdAtstringYes
expiresAtstringYesUpper 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 | nullYes
cancelledAtstring | nullYes
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"Required
  • failedTodayintegerRequired
  • blockThresholdintegerRequired

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

  • messagestringRequired
NameTypeRequiredDescription
code"DAILY_FAILURE_WARNING"Yes
failedTodayintegerYes
blockThresholdintegerYesOrdering is blocked for the rest of the day once this many activations have failed.
messagestringYes

Service

  • codestringRequired
  • namestringRequired
NameTypeRequiredDescription
codestringYes
namestringYes

Country

  • idintegerRequired
  • iso2string | nullRequired

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

  • namestringRequired
NameTypeRequiredDescription
idintegerYes
iso2string | nullYesISO 3166-1 alpha-2. Several countries may share a code (e.g. virtual and physical US numbers) — always order by id.
namestringYes

ServiceCountry

  • countryIdintegerRequired
  • iso2string | nullRequired
  • countryNamestringRequired
  • priceMoneyRequired
  • availablebooleanRequired

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

NameTypeRequiredDescription
countryIdintegerYes
iso2string | nullYes
countryNamestringYes
priceMoneyYes
availablebooleanYesBest-effort stock hint. true does not guarantee a number; false means ordering will most likely fail with NO_NUMBERS_AVAILABLE.

Balance

  • balancenumberRequired

    May contain decimals.

  • currency"credits"Required
  • minBalanceToOrdernumberRequired

    Minimum balance required to create an activation.

NameTypeRequiredDescription
balancenumberYesMay contain decimals.
currency"credits"Yes
minBalanceToOrdernumberYesMinimum balance required to create an activation.

Money

  • amountnumberRequired
  • currency"credits"Required
NameTypeRequiredDescription
amountnumberYes
currency"credits"Yes

Pagination

  • pageintegerRequired

    (≥ 1)

  • pageSizeintegerRequired

    (1–100)

  • totalintegerRequired

    (≥ 0)

NameTypeRequiredDescription
pageintegerYes(≥ 1)
pageSizeintegerYes(1–100)
totalintegerYes(≥ 0)

Error codes

Retryable errors may succeed if you send the same request again later. Use the same Idempotency-Key when retrying POST /activations.

  • INVALID_REQUESTHTTP 400Retryable: NoA parameter is missing or malformed. details.field names it.
  • UNAUTHORIZEDHTTP 401Retryable: NoThe X-Access-Key header is missing, invalid or the key was revoked.
  • INSUFFICIENT_BALANCEHTTP 402Retryable: NoBalance is below the minimum required to create activations. Top up and retry.
  • ACCOUNT_SUSPENDEDHTTP 403Retryable: NoThe account that owns the key has been suspended.
  • DAILY_LIMIT_REACHEDHTTP 403Retryable: 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 403Retryable: 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 404Retryable: NoThe activation does not exist or belongs to another account.
  • NOT_FOUNDHTTP 404Retryable: NoThe endpoint or service does not exist.
  • NO_NUMBERS_AVAILABLEHTTP 409Retryable: YesNo numbers right now for this service and country. Retry in a minute or try another country.
  • PENDING_LIMIT_REACHEDHTTP 409Retryable: YesToo 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 409Retryable: NoThe activation already received a code and cannot be cancelled.
  • IDEMPOTENCY_IN_PROGRESSHTTP 409Retryable: YesA request with the same Idempotency-Key is still being processed.
  • UNSUPPORTED_SERVICE_COUNTRYHTTP 422Retryable: NoThis service cannot be ordered in this country. See GET /services/{service}/countries.
  • IDEMPOTENCY_KEY_REUSEDHTTP 422Retryable: NoThe Idempotency-Key was already used with a different request body.
  • RATE_LIMITEDHTTP 429Retryable: YesToo 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 502Retryable: YesThe number provider failed. Nothing was charged.
  • INTERNAL_ERRORHTTP 500Retryable: YesUnexpected server error. Nothing was charged. Retry with the same Idempotency-Key.