Saltar al contenido
DualSMS

Getting started

Overview

The DualSMS API is the same handler_api.php protocol used across the SMS activation industry. Every request is a simple GET (POST also works) with your api_key and an action. Answers are plain text (ACCESS_NUMBER:…) or JSON for the V2 and list methods. Prices are in INR — the same prices you see on the website. Need codes by email instead? See the Temp Mail API.

Base URL

https://dualsms.com/stubs/handler_api.php

Your API key

Create a free account or sign in — your key appears here and in every example.

Getting started

Authentication

Add api_key=YOUR_API_KEY to every request. Generate or regenerate the key in Settings → API. The key can spend your balance, so keep it on your server — never in a browser or mobile app.

  • Keep it secretServer-side only; rotate it if it leaks.
  • 120 requests / minPer key. Use webhooks to poll less.
  • Same prices & refundsAs buying on the website.
  1. 1Buy a numbergetNumber
  2. 2Wait for the SMSgetStatus or webhook
  3. 3FinishsetStatus status=6
# 1. Buy a WhatsApp number in India
curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getNumber&service=wa&country=22"
# → ACCESS_NUMBER:<id>:<phone>

# 2. Poll every few seconds (or use a webhook)
curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getStatus&id=<id>"
# → STATUS_WAIT_CODE … then STATUS_OK:482913

# 3. Done
curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=setStatus&id=<id>&status=6"
# → ACCESS_ACTIVATION

Reference

Activation API

Buying numbers, reading codes and closing activations.

Request a number

action=getNumberPlain text Changes your account

Reserves a number and charges your balance. The price is final — if no SMS arrives before the activation expires, the full amount is refunded automatically. If the cheapest server runs out mid-purchase we fail over to the next one at the same price or lower.

GEThttps://dualsms.com/stubs/handler_api.php?api_key=$api_key&action=getNumber&service=$service&country=$country&maxPrice=$maxPrice&providerIds=$providerIds&operator=$operator

Parameters

api_key requiredYour API key (Settings → API).
service requiredService code, e.g. wa for WhatsApp. See the service codes table.
country requiredCountry: SMS-Activate numeric id (22 = India) or ISO code (in). See the country codes table.
maxPrice optionalHighest price you accept, in your balance currency. If the current price is higher you get WRONG_MAX_PRICE instead of a number.
providerIds optionalBuy only on these servers, comma-separated: 1,2,3 (the numbers on the site's Server 1, Server 2… — getPricesV3 lists them with prices). The cheapest of them is used and failover stays within them; none in stock → NO_NUMBERS.
operator optionalSame as providerIds (for bots that send operator). Values that aren't server numbers, like any, mean any server.

Responses

  • ACCESS_NUMBER:$id:$phoneNumber reserved. Save $id — you need it for getStatus and setStatus.

Possible errors

curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getNumber&service=wa&country=22"

Example response

ACCESS_NUMBER:66f1c0a2e4b0c1a2b3c4d5e6:919810427735

Try this method

Sign in to run it with your own key.

Request a number (JSON)

action=getNumberV2JSON Changes your account

Identical to getNumber, but the answer is JSON and includes what you were charged and when the activation started.

GEThttps://dualsms.com/stubs/handler_api.php?api_key=$api_key&action=getNumberV2&service=$service&country=$country&maxPrice=$maxPrice&providerIds=$providerIds&operator=$operator

Parameters

api_key requiredYour API key (Settings → API).
service requiredService code.
country requiredCountry id or ISO code.
maxPrice optionalHighest price you accept.
providerIds optionalBuy only on these servers, comma-separated (1,2,3).
operator optionalSame as providerIds.

Responses

  • {"activationId","phoneNumber","activationCost","countryCode","activationTime"}Number reserved.

Possible errors

curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getNumberV2&service=wa&country=22"

Example response

{
  "activationId": "66f1c0a2e4b0c1a2b3c4d5e6",
  "phoneNumber": "919810427735",
  "activationCost": "12.00",
  "countryCode": 22,
  "activationTime": "2026-10-20T10:56:00.000Z"
}

Try this method

Sign in to run it with your own key.

Change activation status

action=setStatusPlain text Changes your account

Moves an activation forward. Cancel (8) refunds the full price as long as no SMS has arrived; it may be refused for the first two minutes (EARLY_CANCEL_DENIED) while the provider is still delivering. Complete (6) closes the activation once you have your code.

GEThttps://dualsms.com/stubs/handler_api.php?api_key=$api_key&action=setStatus&id=$id&status=$status

Parameters

api_key requiredYour API key (Settings → API).
id requiredActivation id from getNumber.
status required1 — number is ready (SMS sent) · 3 — request another SMS on the same number · 6 — complete · 8 — cancel and refund.

Responses

  • ACCESS_READYReadiness confirmed (status 1).
  • ACCESS_RETRY_GETWaiting for another SMS (status 3).
  • ACCESS_ACTIVATIONActivation completed (status 6).
  • ACCESS_CANCELCancelled and refunded (status 8).

Possible errors

curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=setStatus&id=66f1c0a2e4b0c1a2b3c4d5e6&status=6"

Example response

ACCESS_ACTIVATION

Try this method

Sign in to run it with your own key.

Get the activation status

action=getStatusPlain text

Returns the current state of an activation and the code once it arrives. Poll every 3–5 seconds — or skip polling entirely and receive codes on your webhook.

GEThttps://dualsms.com/stubs/handler_api.php?api_key=$api_key&action=getStatus&id=$id

Parameters

api_key requiredYour API key (Settings → API).
id requiredActivation id from getNumber.

Responses

  • STATUS_WAIT_CODEWaiting for the SMS.
  • STATUS_WAIT_RETRY:$lastCodeWaiting for another SMS; $lastCode is the previous one.
  • STATUS_OK:$codeThe code arrived.
  • STATUS_CANCELCancelled or expired (and refunded if no code arrived).

Possible errors

curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getStatus&id=66f1c0a2e4b0c1a2b3c4d5e6"

Example response

STATUS_OK:482913

Try this method

Sign in to run it with your own key.

Get the activation status (JSON)

action=getStatusV2JSON

JSON version of getStatus, including the complete SMS text and when it was received — useful when the message contains more than a numeric code.

GEThttps://dualsms.com/stubs/handler_api.php?api_key=$api_key&action=getStatusV2&id=$id

Parameters

api_key requiredYour API key (Settings → API).
id requiredActivation id from getNumber.

Responses

  • {"verificationType","sms":{"dateTime","code","text"},"call","status"}sms is null while waiting.

Possible errors

curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getStatusV2&id=66f1c0a2e4b0c1a2b3c4d5e6"

Example response

{
  "verificationType": 0,
  "sms": { "dateTime": "2026-10-20 10:56:07", "code": "482913", "text": "Your WhatsApp code: 482-913" },
  "call": null,
  "status": "STATUS_OK"
}

Try this method

Sign in to run it with your own key.

List active activations

action=getActiveActivationsJSON

Returns every open activation on your account — handy after a restart of your bot, to pick up where it left off.

GEThttps://dualsms.com/stubs/handler_api.php?api_key=$api_key&action=getActiveActivations

Parameters

api_key requiredYour API key (Settings → API).

Responses

  • {"status":"success","activeActivations":[…]}activationStatus: 1 waiting · 2 code received.

Possible errors

curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getActiveActivations"

Example response

{
  "status": "success",
  "activeActivations": [
    {
      "activationId": "66f1c0a2e4b0c1a2b3c4d5e6",
      "serviceCode": "wa",
      "phoneNumber": "919810427735",
      "activationCost": "12.00",
      "activationStatus": "2",
      "smsCode": ["482913"],
      "smsText": ["Your WhatsApp code: 482-913"],
      "activationTime": "2026-10-20 10:56:00",
      "countryCode": "22"
    }
  ]
}

Try this method

Sign in to run it with your own key.

Balance

action=getBalancePlain text

The balance you can spend now, in the site currency, with two decimals. Money on hold on your account isn't included.

GEThttps://dualsms.com/stubs/handler_api.php?api_key=$api_key&action=getBalance

Parameters

api_key requiredYour API key (Settings → API).

Responses

  • ACCESS_BALANCE:$balanceCurrent balance.

Possible errors

curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getBalance"

Example response

ACCESS_BALANCE:976.00

Try this method

Sign in to run it with your own key.

Reference

Utility API

Prices, stock, countries and services — cache these on your side and refresh every few minutes.

Prices and stock

action=getPricesJSON

Your price and how many numbers are available, grouped by country id then service code. Filter with service and/or country to keep the answer small. Cached for one minute.

GEThttps://dualsms.com/stubs/handler_api.php?api_key=$api_key&action=getPrices&service=$service&country=$country

Parameters

api_key requiredYour API key (Settings → API).
service optionalOnly this service code.
country optionalOnly this country id or ISO code.

Responses

  • {"$country":{"$service":{"cost","count"}}}cost is your price; count is available numbers.

Possible errors

curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getPrices&service=wa&country=22"

Example response

{
  "22": {
    "wa": { "cost": 12, "count": 4310 }
  }
}

Try this method

Sign in to run it with your own key.

Prices per server

action=getPricesV3JSON

Like getPrices, but split by server: country id → service code → server number → your price, available numbers and the server's id and name. Pass the ids you want to getNumber as providerIds (or operator). Same shape as SMSBower's getPricesV3. Cached for one minute.

GEThttps://dualsms.com/stubs/handler_api.php?api_key=$api_key&action=getPricesV3&service=$service&country=$country

Parameters

api_key requiredYour API key (Settings → API).
service optionalOnly this service code.
country optionalOnly this country id or ISO code.

Responses

  • {"$country":{"$service":{"$server":{"price","count","provider_id","provider_name"}}}}price is your price on that server; count is available numbers there.

Possible errors

curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getPricesV3&service=wa&country=22"

Example response

{
  "22": {
    "wa": {
      "1": { "price": 12, "count": 3100, "provider_id": 1, "provider_name": "Server 1" },
      "3": { "price": 14.5, "count": 1210, "provider_id": 3, "provider_name": "Server 3" }
    }
  }
}

Try this method

Sign in to run it with your own key.

List of countries

action=getCountriesJSON

Every country you can buy numbers in, keyed by the id to pass as country.

GEThttps://dualsms.com/stubs/handler_api.php?api_key=$api_key&action=getCountries

Parameters

api_key requiredYour API key (Settings → API).

Responses

  • {"$id":{"id","eng","iso","visible"}}One entry per country.

Possible errors

curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getCountries"

Example response

{
  "22": { "id": 22, "eng": "India", "iso": "in", "visible": 1 },
  "6": { "id": 6, "eng": "Indonesia", "iso": "id", "visible": 1 }
}

Try this method

Sign in to run it with your own key.

List of services

action=getServicesListJSON

Every service you can buy numbers for, with the code to pass as service.

GEThttps://dualsms.com/stubs/handler_api.php?api_key=$api_key&action=getServicesList

Parameters

api_key requiredYour API key (Settings → API).

Responses

  • {"status":"success","services":[{"code","name"}]}One entry per service.

Possible errors

curl "https://dualsms.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getServicesList"

Example response

{
  "status": "success",
  "services": [
    { "code": "wa", "name": "WhatsApp" },
    { "code": "tg", "name": "Telegram" }
  ]
}

Try this method

Sign in to run it with your own key.

Instead of polling getStatus, give us a URL and we'll POST every SMS to it within seconds of arrival — plus an event when an activation is completed, cancelled or expires. Webhooks work for numbers bought on the website and through the API.

  1. 1Open Settings → API and paste your HTTPS endpoint into Webhook URL.
  2. 2Copy the signing secret (whsec_…) into your server.
  3. 3Press Send test event — you should answer with any 2xx within 5 seconds.
  4. 4Buy a number: each SMS is POSTed to your URL.
Create an account to use webhooksSettings → API → Webhook URL

Events & payloads

EventSent when
sms.receivedAn SMS arrives on one of your numbers (one event per SMS).
activation.statusAn activation is completed, cancelled, expires (refunded) or goes back to waiting after “another SMS”.
webhook.testYou press “Send test event” in Settings.

POST sms.received

{
  "id": "6714f2c9a1b2c3d4e5f60718",
  "event": "sms.received",
  "createdAt": "2026-10-20T10:56:07.412Z",
  "data": {
    "activationId": "66f1c0a2e4b0c1a2b3c4d5e6",
    "service": "wa",
    "serviceName": "WhatsApp",
    "country": 22,
    "countryName": "India",
    "phone": "919810427735",
    "price": 12,
    "status": "received",
    "code": "482913",
    "text": "Your WhatsApp code: 482-913",
    "receivedAt": "2026-10-20T10:56:07.000Z"
  }
}

POST activation.status

{
  "id": "6714f31ea1b2c3d4e5f60719",
  "event": "activation.status",
  "createdAt": "2026-10-20T11:16:00.204Z",
  "data": {
    "activationId": "66f1c0a2e4b0c1a2b3c4d5e6",
    "service": "wa",
    "serviceName": "WhatsApp",
    "country": 22,
    "countryName": "India",
    "phone": "919810427735",
    "price": 12,
    "status": "expired",
    "previousStatus": "waiting",
    "refunded": true
  }
}

Verify the signature

Every request carries X-Webhook-Signature: t=<unix time>,v1=<hex>, where v1 is HMAC-SHA256 of <t>.<raw body> with your signing secret. Reject requests whose signature doesn't match or whose timestamp is more than 5 minutes old.

HeaderValue
Content-Typeapplication/json
X-Webhook-Eventsms.received · activation.status · webhook.test
X-Webhook-IdUnique delivery id — use it to ignore duplicates
X-Webhook-TimestampUnix seconds when we signed it
X-Webhook-Signaturet=…,v1=… (HMAC-SHA256)
# Check your endpoint by hand with a signed test body:
SECRET="whsec_..."; T=$(date +%s); BODY='{"event":"webhook.test","data":{}}'
SIG=$(printf "%s.%s" "$T" "$BODY" | openssl dgst -sha256 -hmac "$SECRET" | sed 's/^.* //')
curl -X POST https://your-server.com/sms-webhook \
  -H "content-type: application/json" \
  -H "x-webhook-signature: t=$T,v1=$SIG" \
  -d "$BODY"

# Or press "Send test event" in Settings → API.

Retries & delivery

  • Answer within 5 seconds with any 2xx. Do slow work after replying.
  • Failures are retried after 10 s, 1 min, 5 min, 30 min and 2 h (6 attempts).
  • The same event can arrive twice — de-duplicate on X-Webhook-Id or the event id.
  • We only call public addresses and never follow redirects; use the final HTTPS URL.
  • Settings → API shows the last deliveries with status codes and a Redeliver button.
  • Webhooks are free and don't count towards the API rate limit.
  1. getNumberNumber reserved, price charged
  2. STATUS_WAIT_CODEWaiting for the SMS
  3. STATUS_OK:codeCode arrived — request another (3) or finish (6)
  4. STATUS_CANCELCancelled or expired — refunded if no code

Reference

Errors

AnswerMeaning
BAD_KEYThe API key is missing or wrong.Copy the key again from Settings → API.
BAD_ACTIONUnknown action.Check the spelling — actions are case-sensitive.
BAD_SERVICEUnknown or disabled service code.Use a code from the service codes table.
BAD_COUNTRYUnknown or disabled country.Use an id or ISO code from the country codes table.
BAD_STATUSsetStatus got a status it doesn't support, or the change isn't possible now (e.g. cancelling a number that already received a code).Use 1, 3, 6 or 8; check getStatus first — a number with a code can only be finished (6).
NO_NUMBERSNo numbers in stock for this service and country right now.Try another country or retry in a minute.
NO_BALANCENot enough balance for this number.Top up your wallet.
WRONG_MAX_PRICEThe current price is above your maxPrice.Raise maxPrice or try later.
NO_ACTIVATIONNo activation with that id on your account.Use the id returned by getNumber.
EARLY_CANCEL_DENIEDCancel isn't allowed yet (first ~2 minutes).Wait and cancel again, or let it expire — it's refunded either way.
ACCOUNT_BANThis account is suspended.Contact support.
TOO_MANY_REQUESTSMore than 120 requests per minute (HTTP 429).Slow down; poll every 3–5 s or use the webhook.
ERROR_SQLTemporary server error.Retry the request.
Loading codes…
Loading codes…

Temp mail

Temp Mail API

Buy temporary email addresses that receive verification codes. The Temp Mail API uses the standard mail-activation protocol (getActivation, getCode, setStatus), so a bot built for that protocol works here once you change the base URL. Call /api/mail/<method> with GET (POST also works; parameters always go in the query string) and the same api_key as the numbers API. Every answer is JSON: {"status":1,…} on success, {"status":0,"error":"…"} on failure. Prices are in INR, as strings with two decimals, and service takes the same service codes as the numbers API.

Base URL

https://dualsms.com/api/mail

Your API key

Create a free account or sign in — your key appears here and in every example.

  • Standard protocolThe usual mail-activation methods and answers.
  • 120 requests / minPer key, shared with the numbers API.
  • Refunded if no codeCharged at getActivation, refunded automatically.

Quick start: your first email code

  1. 1Buy an emailgetActivation
  2. 2Wait for the codegetCode
  3. 3FinishsetStatus status=3
# 1. What's in stock for Telegram (price per email, count)
curl "https://dualsms.com/api/mail/getPriceRests?api_key=YOUR_API_KEY&service=tg"

# 2. Buy a Telegram email on gmail.com
curl "https://dualsms.com/api/mail/getActivation?api_key=YOUR_API_KEY&service=tg&domain=gmail.com"
# → {"status":1,"mail":"[email protected]","mailId":100001}

# 3. Poll every few seconds
curl "https://dualsms.com/api/mail/getCode?api_key=YOUR_API_KEY&mailId=<mailId>"
# → {"status":0,"error":"Code has not been received yet, please try again later"} … then {"status":1,"code":"123456"}

# 4. Done
curl "https://dualsms.com/api/mail/setStatus?api_key=YOUR_API_KEY&id=<mailId>&status=3"
# → {"status":1,"message":"Activation succeed"}

Temp mail

Mail methods

Buying addresses, reading codes and closing them — plus prices and your balance.

Buy an email address

/api/mail/getActivationJSON Changes your account

Reserves an email address and charges your balance. If no code arrives before the address closes, it's cancelled and the full price is refunded automatically. Leave out domain to get the cheapest domain in stock. A ref parameter is accepted and ignored.

GEThttps://dualsms.com/api/mail/getActivation?api_key=$api_key&service=$service&domain=$domain&maxPrice=$maxPrice

Parameters

api_key requiredYour API key (Settings → API).
service requiredService code, e.g. tg for Telegram — the same codes as the numbers API. See the service codes table.
domain optionalEmail domain from getPriceRests, e.g. gmail.com. Without it you get the cheapest domain in stock.
maxPrice optionalHighest price you accept, in your balance currency. If the current price is higher you get “Not available at this price. Try another” with the current price in data.actual_available_price.

Responses

  • {"status":1,"mail","mailId"}Address reserved. Save mailId — you need it for getCode, getStatus and setStatus.

Possible errors

curl "https://dualsms.com/api/mail/getActivation?api_key=YOUR_API_KEY&service=tg&domain=gmail.com"

Example response

{
  "status": 1,
  "mail": "[email protected]",
  "mailId": 100001
}

Try this method

Sign in to run it with your own key.

Get the code

/api/mail/getCodeJSON

Returns the latest code that arrived on the address. Until it arrives — and while you wait for the next code after setStatus 5 — the answer is “Code has not been received yet, please try again later”. Poll every 3–5 seconds. Most emails give a short code, but some services send a verification link or a whole email instead: then code is that link, or the email's text / HTML, exactly as it arrived.

GEThttps://dualsms.com/api/mail/getCode?api_key=$api_key&mailId=$mailId

Parameters

api_key requiredYour API key (Settings → API).
mailId requiredThe mailId from getActivation (it may also be sent as id).

Responses

  • {"status":1,"code"}The latest code.
  • {"status":0,"error":"Code has not been received yet, please try again later"}No code yet — ask again in a few seconds.

Possible errors

curl "https://dualsms.com/api/mail/getCode?api_key=YOUR_API_KEY&mailId=100001"

Example response

{
  "status": 1,
  "code": "123456"
}

Try this method

Sign in to run it with your own key.

Get the status

/api/mail/getStatusJSON

The state of an address as a number (see Mail statuses), its last code, and whether you can ask for another code with setStatus 5.

GEThttps://dualsms.com/api/mail/getStatus?api_key=$api_key&id=$id

Parameters

api_key requiredYour API key (Settings → API).
id requiredThe mailId from getActivation (it may also be sent as mailId).

Responses

  • {"status":1,"data":{"status","status_description","available_to_get_next_code","last_code"}}data.status: 1 waiting for a code · 3 code received · 5 waiting for the next code · 2 cancelled.

Possible errors

curl "https://dualsms.com/api/mail/getStatus?api_key=YOUR_API_KEY&id=100001"

Example response

{
  "status": 1,
  "data": {
    "status": 3,
    "status_description": "Mail has been activated",
    "available_to_get_next_code": true,
    "last_code": "123456"
  }
}

Try this method

Sign in to run it with your own key.

Change the status

/api/mail/setStatusJSON Changes your account

Cancel (2) refunds the full price — only before a code has arrived. Finish (3) closes the address once you have your code. Next code (5) keeps the same address open for another code at no extra cost.

GEThttps://dualsms.com/api/mail/setStatus?api_key=$api_key&id=$id&status=$status

Parameters

api_key requiredYour API key (Settings → API).
id requiredThe mailId from getActivation (it may also be sent as mailId).
status required2 — cancel and refund (no code yet) · 3 — finish · 5 — wait for the next code on the same address.

Responses

  • {"status":1,"message":"Success"}Cancelled and refunded (status 2).
  • {"status":1,"message":"Activation succeed"}Finished (status 3).
  • {"status":1,"message":"Wait for next code"}Waiting for another code (status 5).

Possible errors

curl "https://dualsms.com/api/mail/setStatus?api_key=YOUR_API_KEY&id=100001&status=3"

Example response

{
  "status": 1,
  "message": "Activation succeed"
}

Try this method

Sign in to run it with your own key.

Prices and stock

/api/mail/getPriceRestsJSON

Your price per email and how many are in stock, grouped by service code then email domain. Only what is in stock is listed — an empty data means nothing is on sale right now. Filter with service and/or domain to keep the answer small. Cached for 30 seconds.

GEThttps://dualsms.com/api/mail/getPriceRests?api_key=$api_key&service=$service&domain=$domain

Parameters

api_key requiredYour API key (Settings → API).
service optionalOnly this service code.
domain optionalOnly this email domain.

Responses

  • {"status":1,"data":{"$service":{"$domain":{"price","count"}}}}price is your price per email; count is how many are in stock.

Possible errors

curl "https://dualsms.com/api/mail/getPriceRests?api_key=YOUR_API_KEY&service=tg"

Example response

{
  "status": 1,
  "data": {
    "tg": {
      "gmail.com": { "price": "162.00", "count": 5678 },
      "outlook.com": { "price": "24.00", "count": 1240 }
    }
  }
}

Try this method

Sign in to run it with your own key.

Balance

/api/mail/getBalanceJSON

The balance you can spend now, in the site currency, with two decimals — the same wallet the numbers API uses (money on hold isn't included). An extra beyond the standard mail protocol.

GEThttps://dualsms.com/api/mail/getBalance?api_key=$api_key

Parameters

api_key requiredYour API key (Settings → API).

Responses

  • {"status":1,"balance"}Current balance.

Possible errors

curl "https://dualsms.com/api/mail/getBalance?api_key=YOUR_API_KEY"

Example response

{
  "status": 1,
  "balance": "976.00"
}

Try this method

Sign in to run it with your own key.

Temp mail

Mail statuses

You pay at getActivation. If no code arrives before the address closes, it's cancelled and refunded automatically. After a code, finish with setStatus 3 — or get another code on the same address with setStatus 5 (free; the address stays open a while longer). getStatus returns one of these in data.status:

StatusMeaning
1Waiting for codePaid; waiting for the first code.Poll getCode. Cancel with setStatus 2 for a full refund — or let it close: it's refunded automatically.
3Mail has been activatedA code arrived (last_code), or you finished the address.Use the code and finish with setStatus 3 — or, while available_to_get_next_code is true, ask for another code with setStatus 5.
5Waiting for next codeWaiting for another code on the same address; last_code is the previous one.Poll getCode — it answers “Code has not been received yet…” until the new code arrives.
2Activation canceledCancelled or expired before a code arrived — the price was refunded.Buy a new address.

Temp mail

Mail errors

Every error is {"status":0,"error":"…"} with HTTP 200 (429 when you go over the rate limit) — compare the error text.

ErrorMeaning
Bad keyThe API key is missing or wrong.Copy the key again from Settings → API.
Account is bannedThis account is suspended.Contact support.
Too many requestsMore than 120 requests per minute, counted together with the numbers API (HTTP 429) — or your previous purchase is still being processed.Slow down; poll every 3–5 s.
Unknown methodThe method at the end of the URL doesn't exist.Check the spelling — methods are case-sensitive.
Not supportedgetBatch, getBatches, getActivationsByBatch and requestRefund aren't available here.Buy addresses one at a time; refunds are automatic.
Bad service paramservice is missing, unknown or disabled.Use a code from the service codes table or getPriceRests.
Bad maxPrice parammaxPrice isn't a positive number.Send a price like 150, or leave it out.
No mails yetNo emails in stock for this service and domain right now (or temp mail is unavailable).Try another domain, or retry in a minute.
Not available at this price. Try anotherThe price is above your maxPrice, or it changed during the purchase. data.actual_available_price is the current price.Raise maxPrice, or try another domain.
Insufficient balanceNot enough balance for this email.Top up your wallet.
Code has not been received yet, please try again laterNo code yet (or no new code yet after setStatus 5). Not a failure.Poll again in 3–5 seconds.
Activation is already canceledThe address was cancelled or expired before a code arrived (and refunded).Buy a new address.
Pass mail idgetCode was called without a mailId.Send the mailId from getActivation.
Bad id paramid is missing or not a number.Send the mailId from getActivation as id.
No activation found with such idNo address with that id on your account.Use the mailId returned by getActivation.
Bad status paramsetStatus got a status it doesn't support.Use 2, 3 or 5.
Bad actual activation statusThe address can't move to that status now — e.g. cancel after a code arrived (or too early), or finish twice.Check getStatus first; a refused cancel can be retried a minute later.
Activation is not available to get next codeThis address can't receive another code.Buy a new address.
Internal server errorTemporary server error.Retry the request.

Preguntas frecuentes

API questions

¿Sigues con dudas? Nuestro equipo de soporte suele responder en pocos minutos.

Is the API compatible with SMS-Activate and Grizzly SMS?

Yes. It speaks the same handler_api.php protocol — the same actions, parameters and answers. Point an existing bot or panel at our base URL, use your API key, and it works without code changes.

How do I get an API key?

Create a free account, open Settings → API and press Generate API key. Treat the key like a password: anyone who has it can spend your balance. You can regenerate it at any time.

Do I pay for numbers that never receive an SMS?

No. If no SMS arrives before the activation expires, or you cancel with setStatus status=8 before a code arrives, the full price goes back to your balance automatically.

Should I poll getStatus or use a webhook?

Either works. Polling every 3–5 seconds is simplest. A webhook pushes each SMS to your server within seconds, saves requests and keeps you well under the rate limit.

What are the rate limits?

120 requests per minute per API key by default — your own limit is shown on the API access page, and resellers with a busy bot can ask support for more. Above it you get TOO_MANY_REQUESTS with HTTP 429 — slow down or switch to webhooks.

Which country codes can I use?

SMS-Activate numeric ids (for example 22 for India) or two-letter ISO codes (in). Both are listed in the country codes table on this page.

Cargando…