API documentation

The IteMode Verify API lets you order virtual numbers and read incoming OTP codes programmatically. Every endpoint lives on a single URL and is selected with the action parameter, so integrating takes minutes.

Base URL
https://your-domain.com/api/public/v1/handler

All requests: GET or POST, parameters in the query string.
Responses: plain text for activation calls, JSON for catalog calls.

Authentication

Create a key under API keys in your dashboard and send it as api_key on every request. Keys are shown once — store them securely and never expose them in browser code.

curl "https://your-domain.com/api/public/v1/handler?api_key=itm_xxxxxxxxxxxxxxxx&action=getBalance"

getBalance

Returns your current IteMode Verify wallet balance in USD.

ParameterDescription
api_keyYour API key
actiongetBalance

Request

GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getBalance

Response

ACCESS_BALANCE:24.50

getServices

Lists the service codes you can order numbers for.

ParameterDescription
api_keyYour API key
actiongetServices

Request

GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getServices

Response

[
  { "code": "wa", "name": "WhatsApp" },
  { "code": "tg", "name": "Telegram" },
  { "code": "ig", "name": "Instagram" }
]

getCountries

Maps country IDs to country names. Use the ID as the country parameter.

ParameterDescription
api_keyYour API key
actiongetCountries

Request

GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getCountries

Response

{
  "0": "Russia",
  "6": "Indonesia",
  "16": "United Kingdom",
  "187": "United States"
}

getPrices

Live price and stock per country for one service, cheapest first. Prices are final — what you see is what is charged.

ParameterDescription
api_keyYour API key
actiongetPrices
serviceService code, e.g. wa

Request

GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getPrices&service=wa

Response

[
  {
    "service": "wa",
    "serviceName": "WhatsApp",
    "country": "6",
    "countryName": "Indonesia",
    "price": 0.42,
    "count": 1832
  }
]

getNumber

Orders a number. Your wallet is charged immediately and refunded automatically if the number cannot be issued, if you cancel before a code arrives, or if the 20-minute window expires with no SMS.

ParameterDescription
api_keyYour API key
actiongetNumber
serviceService code, e.g. wa
countryCountry ID from getCountries

Request

GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getNumber&service=wa&country=6

Response

ACCESS_NUMBER:3f6c1a92-8d0e-4f3b-9a12-77c0d1b5e4aa:6281234567890

Format: ACCESS_NUMBER:<activation_id>:<phone_number>

getStatus

Polls an activation for its SMS code. Poll every 3-5 seconds until you get STATUS_OK or STATUS_CANCEL.

ParameterDescription
api_keyYour API key
actiongetStatus
idactivation_id from getNumber

Request

GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getStatus&id=ACTIVATION_ID

Response

STATUS_WAIT_CODE      # still waiting for the SMS
STATUS_OK:742618      # code received
STATUS_CANCEL         # cancelled or expired (already refunded)

setStatus

Completes (6) an activation once you have used the code, or cancels (8) it before a code arrives to get an instant refund.

ParameterDescription
api_keyYour API key
actionsetStatus
idactivation_id
status6 = complete, 8 = cancel and refund

Request

GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=setStatus&id=ACTIVATION_ID&status=6

Response

ACCESS_ACTIVATION     # status 6 accepted
ACCESS_CANCEL         # status 8 accepted, wallet refunded

Error responses

ResponseHTTPMeaning
BAD_KEY401Missing, revoked or unknown API key
BAD_REQUEST400Missing or malformed parameters
NO_BALANCE402Wallet balance is too low — top up first
NO_NUMBERS409No numbers in stock for that service and country
NO_ACTIVATION404Unknown activation ID for this account
EARLY_CANCEL_DENIED409A code was already delivered, cancel is not possible
SERVICE_UNAVAILABLE503Temporary issue — retry with backoff

Full example

Order a WhatsApp number in Indonesia, wait for the code, then close the activation.

const API = "https://your-domain.com/api/public/v1/handler";
const KEY = process.env.ITEMODE_API_KEY;

// 1. Order a number
const order = await fetch(`${API}?api_key=${KEY}&action=getNumber&service=wa&country=6`)
  .then((r) => r.text());
const [, activationId, phone] = order.split(":");

// 2. Poll for the code (max 20 minutes)
let code = null;
for (let i = 0; i < 200 && !code; i++) {
  await new Promise((r) => setTimeout(r, 5000));
  const status = await fetch(`${API}?api_key=${KEY}&action=getStatus&id=${activationId}`)
    .then((r) => r.text());
  if (status.startsWith("STATUS_OK")) code = status.split(":")[1];
  if (status === "STATUS_CANCEL") break;
}

// 3. Close the activation
await fetch(`${API}?api_key=${KEY}&action=setStatus&id=${activationId}&status=${code ? 6 : 8}`);

console.log({ phone, code });