SMS-ActSMS·Act
서비스충전가이드문서API
로그인로그인 / 가입
SMS·Act

160개 이상의 국가/지역, 600개 이상의 서비스에서 사용 가능한 실제 번호를 대여하세요. 받은 만큼만 결제하며, 구독이나 최소 금액은 없습니다.

서비스
  • 서비스
  • 요금
  • 가이드
  • 개발자 API
  • 문서
법무 및 지원
  • 플랫폼 소개
  • 이용 안내 및 정책
  • 이용약관
  • 개인정보 처리방침
  • 문의하기

© 2023-2026 SMS-Act 세계 최고의 온라인 SMS 인증 플랫폼

지원 국가/지역 · 지원 서비스

개발자 API

SMS-Act API

번호 주문, 인증번호 수신, 취소와 환불을 직접 만든 프로그램에서 처리하세요. 간결하고 오류 처리가 명확한 REST API입니다.

액세스 키 받기OpenAPI 명세 다운로드

이 페이지의 내용

  • 빠른 시작
  • 전체 예제
  • 인증
  • 공통 규칙
  • 엔드포인트
  • 객체
  • 오류 코드

빠른 시작

  1. 1계정 페이지의 ‘API’ 탭에서 액세스 키를 생성하고 서버에 보관합니다.
  2. 2GET /services와 GET /services/{service}/countries로 서비스와 국가를 고릅니다.
  3. 3POST /activations로 번호를 주문한 뒤 status가 completed가 될 때까지 GET /activations/{id}를 폴링하고 code를 읽습니다.
  4. 4인증번호가 오지 않으면 POST /activations/{id}/cancel로 취소해 전액 환불받거나, 주문이 만료되도록 두세요.

전체 예제

번호를 주문하고 5초마다 상태를 조회해 인증 코드를 출력합니다. 10분 안에 코드가 오지 않으면 주문을 취소하고 환불받습니다. 환경 변수 SMS_ACT_KEY에 액세스 키를 설정한 뒤 실행하세요.

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

인증

/health를 제외한 모든 요청에 X-Access-Key 헤더로 액세스 키를 보내세요. 키가 있으면 누구나 잔액을 쓸 수 있으니 절대 노출하지 마세요. 유출되었다면 즉시 계정 페이지에서 교체하세요.

기본 URL

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

공통 규칙

응답

성공하면 HTTP 2xx와 함께 데이터가 data에 담깁니다. 실패하면 HTTP 4xx 또는 5xx와 함께 code, message, requestId, 선택적 details가 담긴 error 객체를 반환합니다.

오류 처리

오류는 error.code로 판단하고 message에 의존하지 마세요. 고객센터에 문의할 때 requestId(X-Request-Id 헤더에도 있음)를 알려 주세요.

주문 수명 주기

주문은 waiting으로 시작해 인증번호를 받으면 completed, 직접 취소하거나 코드가 오지 않아 자동 취소되면(보통 약 15분 후, 늦어도 생성 20분 뒤인 expiresAt) cancelled가 됩니다. 취소된 주문은 항상 전액 환불됩니다.

폴링

GET /activations/{id}는 3초 이상 간격으로 폴링하세요. 더 빠르게 요청해도 오류는 아니지만 마지막으로 확인된 상태만 반환됩니다.

멱등성

POST /activations에 Idempotency-Key 헤더(예: UUID)를 함께 보내세요. 24시간 안에 같은 값으로 재시도하면 중복 결제 없이 원래 주문이 반환됩니다.

요청 한도

키마다 10초에 60건까지 요청할 수 있습니다. 초과하면 Retry-After 헤더와 함께 429 RATE_LIMITED가 반환됩니다. 인증 실패도 IP별로 제한됩니다. 같은 IP에서 1분 안에 약 20번 실패하면 그 1분이 끝날 때까지 해당 IP의 모든 요청(유효한 키 포함)에 429가 반환됩니다.

동시 주문 및 일일 실패 한도

동시에 waiting 상태일 수 있는 주문은 최대 3건입니다(웹사이트에서 한 주문도 포함). 초과하면 POST /activations가 409 PENDING_LIMIT_REACHED를 반환하므로, 하나가 끝나거나 취소될 때까지 기다리세요. 하루 실패 주문이 15건에 이르고(직접 취소와 자동 시간 초과 모두 포함) 그날 성공률이 10% 미만이면 그날은 주문할 수 없습니다(403 ACTIVATIONS_RESTRICTED). 인증번호를 한 번도 받은 적 없는 새 계정은 하루 최대 14번까지 실패할 수 있다는 뜻입니다. 연동 테스트 중에는 주문 후 곧바로 취소하는 일을 연달아 하지 마세요.

잔액

주문하려면 최소 잔액이 필요하며, GET /account/balance의 minBalanceToOrder로 확인할 수 있습니다. 잔액이 적어도 다른 엔드포인트는 그대로 사용할 수 있습니다.

데이터 형식

주문 ID는 문자열, 시간은 UTC 기준 RFC 3339 형식, 가격 단위는 크레딧입니다. 목록은 page와 pageSize(1–100)를 받고 pagination을 반환합니다.

엔드포인트

엔드포인트와 필드 설명은 OpenAPI 명세를 따르므로 영어로 표시됩니다.

Get account balance

GET/account/balance

응답

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

요청 예시

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

응답 예시

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

List services that can be ordered

GET/services

매개변수

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

  • qstringquery

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

이름위치유형필수설명
pagequeryinteger아니요(≥ 1, default 1)
pageSizequeryinteger아니요(1–100, default 20)
qquerystring아니요Case-insensitive search on service code or name. (max length 50)

응답

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

요청 예시

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

응답 예시

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

List countries

GET/countries

매개변수

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

  • qstringquery

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

이름위치유형필수설명
pagequeryinteger아니요(≥ 1, default 1)
pageSizequeryinteger아니요(1–100, default 20)
qquerystring아니요Case-insensitive search on English name or ISO code. (max length 50)

응답

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

요청 예시

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

응답 예시

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

매개변수

  • servicestring필수path
이름위치유형필수설명
servicepathstring예

응답

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

요청 예시

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

응답 예시

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

List activations created through the API

GET/activations

매개변수

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

  • status"waiting" | "completed" | "cancelled"query
이름위치유형필수설명
pagequeryinteger아니요(≥ 1, default 1)
pageSizequeryinteger아니요(1–100, default 20)
statusquery"waiting" | "completed" | "cancelled"아니요

응답

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

요청 예시

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

응답 예시

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

매개변수

  • Idempotency-Keystringheader

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

이름위치유형필수설명
Idempotency-Keyheaderstring아니요Strongly recommended. Replaying the same key within 24 hours returns the original activation instead of ordering again. (max length 64)

요청 본문

  • servicestring필수
  • countryIdinteger필수

    (≥ 0)

이름유형필수설명
servicestring예
countryIdinteger예(≥ 0)

응답

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.

요청 예시

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

응답 예시

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

매개변수

  • idstring필수path
이름위치유형필수설명
idpathstring예

응답

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

요청 예시

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

응답 예시

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

매개변수

  • idstring필수path
이름위치유형필수설명
idpathstring예

응답

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.

요청 예시

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

응답 예시

{
  "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/health인증 불필요

응답

  • 200Service is up.

요청 예시

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

응답 예시

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

객체

Activation

  • idstring필수
  • status"waiting" | "completed" | "cancelled"필수
  • servicestring필수
  • serviceNamestring필수
  • countryIdinteger | null필수

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

  • countryNamestring | null필수

    English name. Null in the same cases as countryId.

  • phoneNumberstring필수

    E.164 format.

  • codestring | null필수

    The verification code, set when status is completed.

  • priceMoney필수
  • createdAtstring필수
  • expiresAtstring필수

    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 | null필수
  • cancelledAtstring | null필수
이름유형필수설명
idstring예
status"waiting" | "completed" | "cancelled"예
servicestring예
serviceNamestring예
countryIdinteger | null예Null only for a few legacy activations created before the country was recorded.
countryNamestring | null예English name. Null in the same cases as countryId.
phoneNumberstring예E.164 format.
codestring | null예The verification code, set when status is completed.
priceMoney예
createdAtstring예
expiresAtstring예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 | null예
cancelledAtstring | null예

ActivationCreated

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

  • idstring필수
  • status"waiting" | "completed" | "cancelled"필수
  • servicestring필수
  • serviceNamestring필수
  • countryIdinteger | null필수

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

  • countryNamestring | null필수

    English name. Null in the same cases as countryId.

  • phoneNumberstring필수

    E.164 format.

  • codestring | null필수

    The verification code, set when status is completed.

  • priceMoney필수
  • createdAtstring필수
  • expiresAtstring필수

    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 | null필수
  • cancelledAtstring | null필수
  • warningActivationWarning

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

이름유형필수설명
idstring예
status"waiting" | "completed" | "cancelled"예
servicestring예
serviceNamestring예
countryIdinteger | null예Null only for a few legacy activations created before the country was recorded.
countryNamestring | null예English name. Null in the same cases as countryId.
phoneNumberstring예E.164 format.
codestring | null예The verification code, set when status is completed.
priceMoney예
createdAtstring예
expiresAtstring예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 | null예
cancelledAtstring | null예
warningActivationWarning아니요The 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"필수
  • failedTodayinteger필수
  • blockThresholdinteger필수

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

  • messagestring필수
이름유형필수설명
code"DAILY_FAILURE_WARNING"예
failedTodayinteger예
blockThresholdinteger예Ordering is blocked for the rest of the day once this many activations have failed.
messagestring예

Service

  • codestring필수
  • namestring필수
이름유형필수설명
codestring예
namestring예

Country

  • idinteger필수
  • iso2string | null필수

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

  • namestring필수
이름유형필수설명
idinteger예
iso2string | null예ISO 3166-1 alpha-2. Several countries may share a code (e.g. virtual and physical US numbers) — always order by id.
namestring예

ServiceCountry

  • countryIdinteger필수
  • iso2string | null필수
  • countryNamestring필수
  • priceMoney필수
  • availableboolean필수

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

이름유형필수설명
countryIdinteger예
iso2string | null예
countryNamestring예
priceMoney예
availableboolean예Best-effort stock hint. true does not guarantee a number; false means ordering will most likely fail with NO_NUMBERS_AVAILABLE.

Balance

  • balancenumber필수

    May contain decimals.

  • currency"credits"필수
  • minBalanceToOrdernumber필수

    Minimum balance required to create an activation.

이름유형필수설명
balancenumber예May contain decimals.
currency"credits"예
minBalanceToOrdernumber예Minimum balance required to create an activation.

Money

  • amountnumber필수
  • currency"credits"필수
이름유형필수설명
amountnumber예
currency"credits"예

Pagination

  • pageinteger필수

    (≥ 1)

  • pageSizeinteger필수

    (1–100)

  • totalinteger필수

    (≥ 0)

이름유형필수설명
pageinteger예(≥ 1)
pageSizeinteger예(1–100)
totalinteger예(≥ 0)

오류 코드

재시도 가능한 오류는 잠시 후 같은 요청을 다시 보내면 성공할 수 있습니다. POST /activations를 재시도할 때는 같은 Idempotency-Key를 사용하세요.

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