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.
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 | — |
| No matching service found. | ||||
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
curl "https://turonay.com/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getPrices&service=wa&country=41"Response
{
"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
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.
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.