Home › SMS API › SMS API Pricing
Per-activation pricing

SMS API Pricing

Every activation in the Turonay SMS verification API is priced by service and country, and you are charged only when the SMS code reaches you. The table below is built from the same source as the getPrices endpoint, so the list price you see here is what the API charges an account that has no tier discount.

195Services on sale
209Countries
$0.28Prices from

Current prices for popular services

The table lists the most requested services and, for each one, the cheapest country that is on sale right now. The “cheapest” country is picked among countries with at least 20 numbers in stock; if none qualifies, among all countries in stock. The price of the country with the largest stock is shown next to it. Values are list prices: tier discounts apply automatically for eligible accounts. The table is cached and may lag by up to about 10 minutes; the binding price is the one returned by getPrices and getNumber (the quote is locked for 120 seconds).

Service Cheapest country Price Stock Largest stock
WhatsAppwa Cameroon $0.28 (13,00 ₺) 21,920,063 —
Telegramtg Hong Kong $0.28 (13,00 ₺) 22,332,771 —
Google/Gmailgo Malaysia $0.28 (13,00 ₺) 27,113,098 —
Instagramig Canada $0.28 (13,00 ₺) 20,510,459 —
Facebookfb Latvia $0.28 (13,00 ₺) 25,365,537 —
TikToktk Philippines $0.28 (13,00 ₺) 26,548,827 —
Twitter/Xtw Brazil $0.28 (13,00 ₺) 4,557,821 —
Discordds Belgium $0.28 (13,00 ₺) 9,160,836 —
OpenAI (ChatGPT)dr Italy $0.28 (13,00 ₺) 2,265,857 —
Amazonam Malaysia $0.28 (13,00 ₺) 22,424,537 —
Microsoftmm Vietnam $0.28 (13,00 ₺) 3,297,951 —
Appleap Lithuania $0.28 (13,00 ₺) 21,983,080 —
Uberub Latvia $0.28 (13,00 ₺) 8,007,306 —
Tinderoi Italy $0.28 (13,00 ₺) 3,036,389 —
Steamst Latvia $0.28 (13,00 ₺) 6,945,930 —
Netflixnf Lithuania $0.28 (13,00 ₺) 2,350,970 —
Spotifysp USA $0.28 (13,00 ₺) 642,217 —
LinkedInli Canada $0.28 (13,00 ₺) 7,227,524 —
Snapchatsn Brazil $0.28 (13,00 ₺) 10,884,293 —
Vibervi Netherlands $0.28 (13,00 ₺) 26,692,033 —
Binancebn Indonesia $0.28 (13,00 ₺) 941,183 —
PayPalpy Lithuania $0.28 (13,00 ₺) 7,755,430 United States$0.59 (27,50 ₺) · 8,248,994
Claude AIai Philippines $0.28 (13,00 ₺) 1,728,936 —
Redditrd United Kingdom $0.34 (16,00 ₺) 1,017,018 —
Lineln Hong Kong $0.28 (13,00 ₺) 5,041,098 —
Githubgh Egypt $0.34 (16,00 ₺) 9,000 Indonesia$0.59 (27,50 ₺) · 17,719
Bumblebl Greece $0.28 (13,00 ₺) 1,429,334 Italy$0.59 (27,50 ₺) · 2,394,071
Airbnbabnb Brazil $0.28 (13,00 ₺) 3,990,285 —
Grindrgd Latvia $0.28 (13,00 ₺) 10,760,226 —
Mambamb Canada $0.28 (13,00 ₺) 16,840,547 —

Last updated: . The table refreshes roughly every 10 minutes. Prices move with provider costs. For the exact, account-specific amount always rely on the getPrices response.

Charges are made in Turkish lira (TRY). USD and RUB figures are informational conversions; when a currency other than TRY is selected, the TRY amount is shown in brackets.

What you pay, and when

There are no subscriptions, monthly bundles or unused credits. Each activation is sold at its own price, which depends on the service (WhatsApp, Telegram, Google and so on) and the country of the number. Money moves in three steps:

Reserve

When you call getNumber, the price is held on your balance. Nothing is spent yet, and getBalance shows only the amount still available.

Charge

The moment the SMS code reaches you, the amount is finalised. Because the service has been delivered, the activation can no longer be cancelled and the fee is not refunded.

Release

If you cancel before a code arrives (setStatus with status=8), the provider cancels the number, or it expires, the held amount goes back to your balance. No code, no charge.

Your balance must cover the price when you request a number, otherwise NO_BALANCE is returned. Reservations that are never settled are released automatically after about 20 minutes. You also need at least 5,00 ₺ on your account to request numbers.

Fetch prices programmatically

No need to copy prices by hand. Called with your API key, getPrices returns the price and stock for every service and country pair we can sell, as JSON shaped like {countryId: {serviceCode: {cost, count}}}. cost is the TRY amount that will leave your balance and count is the number of numbers in stock.

Request

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

Response

json
{
    "41": {
        "wa": {
            "cost": 13,
            "count": 21920063
        }
    }
}

Narrow the response with service and country; to find the cheapest country, send only service. getCountries maps country ids to names and getNumbersStatus returns stock per service for one country. The API reference lists every endpoint.

Find the cheapest country

python
import requests

API = "https://turonay.com/stubs/handler_api.php"
prices = requests.get(API, params={
    "api_key": "YOUR_API_KEY",
    "action": "getPrices",
    "service": "wa",
}, timeout=15).json()

# prices -> {country_id: {"wa": {"cost": ..., "count": ...}}}
cheapest = min(
    ((cid, v["wa"]) for cid, v in prices.items() if v["wa"]["count"] >= 20),
    key=lambda item: item[1]["cost"],
    default=None,
)
print(cheapest)

The price you see is backed by a quote: the offer in a getPrices response is remembered for about two minutes. If, within that window, the recalculated price for the same service and country comes out higher (for instance after a switch to a backup provider), you are charged the quoted price.

Tier discounts

The more balance you have loaded in total, the higher the tier you reach, and each tier carries a fixed discount. It is applied automatically: no coupon or special agreement is needed. The top tier currently gives 10% off the list price.

The discount shows up in the getPrices response and in the actual charge in the same way: the cost you see with your own key is the amount deducted. Prices never go below a fixed floor, so the effect can be smaller on the cheapest services. The table on this page is shown without any discount.

Cap your spend with maxPrice

Add maxPrice to getNumber or getNumberV2 to set the highest amount you accept for one activation. The value is in TRY, the same unit as cost in getPrices.

bash
curl "https://turonay.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getNumber&service=wa&country=41&maxPrice=13"
# ACCESS_NUMBER:<id>:<phone>   |   WRONG_MAX_PRICE:<price>

If the expected price is above your cap, WRONG_MAX_PRICE:<price> is returned before any number is taken, and nothing is deducted or held. If the price rises at purchase time because of a failover, the same check runs again: the number is cancelled and no reservation is opened.

Omitting the parameter, or sending 0, means no limit. A dot or a comma is accepted as the decimal separator (12.50, 12,50); ambiguous values such as 1,000.50 or 10 TRY are never silently accepted and are rejected with WRONG_MAX_PRICE.

Who are these prices for?

Developers who automate account verification, QA and test teams, resellers who sell numbers from their own panel, and anyone moving over from another service that uses the handler_api protocol get the most from per-activation pricing. See the SMS API for an overview, Resellers for reseller terms, and the Webhooks guide for code notifications by webhook.

Frequently asked questions

Am I charged if the SMS code never arrives?

No. When you get a number the amount is only held on your balance. If you cancel before a code arrives, the provider cancels the number, or it expires, the held amount goes back to your balance. The fee is finalised only when the SMS code reaches you.

Are the prices on this page the same as what the API charges?

Yes. The table is produced as an undiscounted list price from the same calculation the getPrices endpoint uses. If your account has a tier discount, the API amount is lower. The table refreshes about every 10 minutes, so very recent changes may not show up in between; check the getPrices response for the exact amount.

Are prices fixed, and how often do they change?

Prices can move with provider costs and stock. Right before buying a number you can ask for the current price with getPrices and set a ceiling with maxPrice. The offer in a getPrices response is also backed for about two minutes.

Which currency do I pay in?

API prices and charges are in Turkish lira (TRY). The USD and RUB figures shown on the site are informational conversions only.

How do I find the cheapest country through the API?

Call getPrices with only the service parameter; the response lists every country where that service is sold, with cost and count. Pick the country with the lowest cost that still has enough stock.

How does the tier discount work?

As the total balance you have loaded passes certain thresholds your tier rises and the discount is applied automatically. You do not enter a coupon; the discounted amount is the same in the getPrices response and in the actual charge.

Can I limit what I pay for one activation?

Yes. Add the maxPrice parameter (in TRY) to getNumber. If the price is above that value, no number is taken, WRONG_MAX_PRICE is returned and nothing is deducted from your balance.

See your own prices

Call getPrices with your API key: list price, your tier discount and current stock come back in one response. Sign-up is free and you only pay for activations that receive a code.