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.
| Parameter | Description |
|---|---|
| api_key | Your API key |
| action | getBalance |
Request
GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getBalanceResponse
ACCESS_BALANCE:24.50getServices
Lists the service codes you can order numbers for.
| Parameter | Description |
|---|---|
| api_key | Your API key |
| action | getServices |
Request
GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getServicesResponse
[
{ "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.
| Parameter | Description |
|---|---|
| api_key | Your API key |
| action | getCountries |
Request
GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getCountriesResponse
{
"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.
| Parameter | Description |
|---|---|
| api_key | Your API key |
| action | getPrices |
| service | Service code, e.g. wa |
Request
GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getPrices&service=waResponse
[
{
"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.
| Parameter | Description |
|---|---|
| api_key | Your API key |
| action | getNumber |
| service | Service code, e.g. wa |
| country | Country ID from getCountries |
Request
GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getNumber&service=wa&country=6Response
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.
| Parameter | Description |
|---|---|
| api_key | Your API key |
| action | getStatus |
| id | activation_id from getNumber |
Request
GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=getStatus&id=ACTIVATION_IDResponse
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.
| Parameter | Description |
|---|---|
| api_key | Your API key |
| action | setStatus |
| id | activation_id |
| status | 6 = complete, 8 = cancel and refund |
Request
GET https://your-domain.com/api/public/v1/handler?api_key=KEY&action=setStatus&id=ACTIVATION_ID&status=6Response
ACCESS_ACTIVATION # status 6 accepted
ACCESS_CANCEL # status 8 accepted, wallet refundedError responses
| Response | HTTP | Meaning |
|---|---|---|
| BAD_KEY | 401 | Missing, revoked or unknown API key |
| BAD_REQUEST | 400 | Missing or malformed parameters |
| NO_BALANCE | 402 | Wallet balance is too low — top up first |
| NO_NUMBERS | 409 | No numbers in stock for that service and country |
| NO_ACTIVATION | 404 | Unknown activation ID for this account |
| EARLY_CANCEL_DENIED | 409 | A code was already delivered, cancel is not possible |
| SERVICE_UNAVAILABLE | 503 | Temporary 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 });