Become an SMS Verification Reseller
Sell Turonay's virtual number infrastructure under your own brand and with your own markup. In the SMS reseller API model, getPrices tells you your cost and you set the selling price. Tiered discounts, signed webhooks and paying only for activations that deliver a code keep your risk small.
API pages
Who is reselling for?
With a single API key you can manage the activations of many customers and sell SMS verification behind your own interface. The interface, the pricing and the customer relationship stay with you; on the Turonay side only the balance tied to your API key moves. You can start with a small bot and keep using the same integration as your customer base grows.
Telegram bot owners
Add a “get number” command to your bot. You keep the customer balances; every activation is deducted from your Turonay balance.
Panel and website owners
Sell SMS verification on your own site. Panels that speak handler_api usually connect after just changing the base URL.
Agencies and software houses
Build one integration for your clients and keep pricing and invoicing on your side.
QA and test teams
Test your sign-up and verification flows end to end with real SMS; you do not pay for attempts where no code arrives.
How the margin works
The cost in the getPrices response is what you pay Turonay; your account's tier discount is already reflected in it. The price you charge your customer is up to you, and the difference is your margin.
curl "https://turonay.com/stubs/handler_api.php?api_key=YOUR_KEY&action=getPrices&service=wa&country=62"
{"62":{"wa":{"cost":12.50,"count":744716}}}| Item | Example amount |
|---|---|
Your cost (getPrices → cost) | 12.50 TRY |
| Your selling price | 18.00 TRY |
| Margin per activation | 5.50 TRY |
The figures are examples only. Real prices differ by service and country and should always be read live with getPrices.
If you keep your selling price fixed, send the highest cost you are willing to bear per activation as maxPrice. If the price goes above that, nothing is purchased and your margin never turns negative. Checking the price with getPrices before you show it to your customer is the most reliable way to keep your selling price in line with the current cost.
curl "https://turonay.com/stubs/handler_api.php?api_key=YOUR_KEY&action=getNumber&service=wa&country=62&maxPrice=12"
WRONG_MAX_PRICE:12.50Tiered discounts
Every account is placed in a membership tier based on the total it has loaded into its balance. As you top up, your tier rises, and each tier carries a discount rate. Turonay sets the thresholds and rates; after you sign in, the tier page shows the current tier list and how far you are from the next tier.
- The discount is applied to API prices automatically:
getPricesshows your discounted cost andgetNumberreserves the same price. - If you qualify for more than one tier, the highest discount applies.
- A discount never lowers a price below a minimum floor price.
- Because exact rates can change over time, no fixed percentage is quoted on this page; you see the current rate on your tier page.
Integration options
handler_api compatibility
Thanks to the handler_api-compatible protocol, existing bots and panels usually connect after changing the base URL and key. Language-specific examples: Python, PHP, Node.js.
Notifications with webhooks
Use signed webhooks to hand the code to your customer without polling; the notification is queued as soon as the code is recorded and is typically delivered within 1–2 minutes. The body is signed with HMAC-SHA256.
getActiveActivations for dashboards
getActiveActivations returns your open activations together with their codes. Your server can resume where it left off after a restart, and you can feed your own admin screen with it.
For all methods see the SMS API hub and the API reference.
Risk and billing protections
The main risks in reselling are paying for activations that are never delivered and losing money on price swings. The system limits both like this:
- Pay on code: when a number is allocated the amount is only reserved; it is charged when the code arrives.
- Release: if you cancel before a code, the provider cancels, or the activation expires, the reserved amount returns to your balance.
- Price cap: if
maxPriceis exceeded nothing is purchased andWRONG_MAX_PRICE:priceis returned. - Price quote: the price you see in
getPricesis held for a short time (about two minutes); even if the price rises in that window, the price you saw is charged. - No cancellation after the code:
setStatus 8returnsEARLY_CANCEL_DENIEDin that case. Write your customer refund policy around this rule. - Insufficient balance: if your balance does not cover the price,
NO_BALANCEis returned and nothing is purchased. - Request limit: there is a per-minute request limit (default 60 requests per minute per key and IP). Use webhooks instead of frequent polling.
How to get started
1. Sign up
To create your account, go to the sign-up page.
2. Top up your balance
Add funds on the payment page by card, crypto or bank transfer. Your total top-ups determine your tier.
3. Get your API key
Generate your key in the API section of your profile.
4. Test it
Verify the connection with getBalance and getPrices and get your first number. Details: API reference.
5. Add a webhook and go live
Register your webhook URL, send a test event from your profile and start selling.
Reseller FAQ
Is there a separate fee or contract to become a reseller?
There is no separate subscription or fee for API access. You get your API key from your profile and only pay for delivered codes.
Can I set my own price for my customers?
Yes. getPrices shows you your own cost; the price you sell at is entirely up to you. Your margin is the difference between your selling price and your cost.
How is the tier discount determined?
Your tier depends on the total you have loaded into your account balance, and each tier has a discount rate. If you qualify for several tiers, the highest applies. The discount is reflected automatically in getPrices and getNumber prices; after signing in you can see the current rates on your tier page.
What if my customer gives up before the code arrives?
If you cancel with setStatus 8 before a code arrives, the reserved amount returns to your balance and nothing is charged. The same happens when the provider cancels or the activation expires.
What if a customer asks to cancel after the code has arrived?
Once the code has arrived the activation cannot be cancelled: setStatus 8 returns EARLY_CANCEL_DENIED and the fee is not refunded because the service was delivered. Set your own refund policy accordingly.
How many activations can I run at the same time?
The number of simultaneous activations depends on your balance and the per-minute request limit (default 60 requests per minute per key and IP). If you plan many concurrent activations, use webhooks instead of frequent polling.
How do I follow prices and stock live?
getPrices returns the current price and stock count per service and country as JSON; getNumbersStatus lists the stock of services in a country, and getCountries lists the countries you can get numbers for.
Start as a reseller
Get your API key, see your cost with getPrices, validate the flow with a small test activation and make your first sale. If you get stuck anywhere, write to us through the support ticket system.