Affordable SMS Verification APIs
Developers · By SMS Activate Team · Draft - not yet published · 7 min read

An SMS verification API lets your app request a verification code for a user, receive it on a rented number, and read it back - all in code, with no dashboard and no manual step. The question is not whether an API exists. It is what you pay for, and what happens when the code never arrives.
Affordable, for a developer, means something specific: your wallet is charged when a number is issued, and for an eligible activation the charge is refunded when no code arrives. You can test with a small wallet top-up and one cheap activation. And the retry section below shows how not to get charged twice for the same verification. This guide explains the pricing models, what to compare besides price, and how the SMS Activate API works - with only facts you can check in the documentation.
What is an SMS verification API?
It is a REST API your code calls to do the same job the dashboard does by hand: pick a service and a country, get a number, and read the code that arrives on it.
The usual flow in code:
Your app requests a number for a service and a country. The API returns a number and an activation ID. Your app shows the number to the user, or sends it to the service being verified. The service sends the code to that number. Your app polls the API for the code, and reads it when it arrives.
The code appears in the API response the same way it appears in the dashboard: next to the number, in your account. No SIM card, no phone, no manual step.
How does API pricing actually work?
There are two models, and the difference between them is the difference between a cheap API and an expensive one.
Pay per activation attempt. You pay when you request the number, whether the code arrives or not. If the code never arrives, you paid for nothing. If you retry, you pay again. This model looks cheap on the price page, because the price is quoted per request - and requests are what you pay for.
Pay per received code. Your wallet is charged when the number is issued. If no SMS arrives within the activation window, an eligible order cancels and the charge is refunded to your wallet. This is the model SMS Activate uses: the wallet is charged when the order is placed, and an eligible activation is refunded if no SMS arrives within the 20-minute window.
The second model is the affordable one, for a simple reason: you do not pay for failures. In a pay-per-attempt model, a 20 percent failure rate means you pay for 100 attempts to get 80 codes. In a pay-per-code model, you pay for 80 codes. The headline price can be higher and the real cost lower, because the refund rule is doing the work.
What should I compare besides price?
Price per activation is the first number people compare, and it is the least useful one on its own. Compare these instead.
Refund-on-no-SMS. Is there a written rule that refunds the wallet when no SMS arrives in the window? For SMS Activate, the rule is written down: an eligible activation is refunded to your wallet if no SMS arrives within the 20-minute window, and can be cancelled after the first 2 minutes if nothing has arrived. A provider with no refund rule, or a rule that only appears after you pay, charges you for failures.
Idempotency and request keys. When your code retries a request - a timeout, a network error, a user tapping twice - does the API charge you twice for the same verification, or does it recognise the retry as the same request? An idempotency key, or a request key you pass with the call, is how an API answers that.
Documentation quality. Can you build from the docs alone, without guessing? The SMS Activate API has documentation with code examples in cURL, Python, PHP, and JavaScript. If a provider's docs are a single page with no examples, you will pay for that gap in debugging time.
Test cost. Can you test with a small wallet top-up and one cheap activation, or does the provider require a large minimum? The cheapest way to evaluate an API is to run one real activation against a test account and watch the code arrive. A provider that makes that expensive is a provider that does not want you to test it.
Number type. Some services reject VoIP numbers, so a provider should state its number type in its own words before you pay. Acceptance is still decided by each service, not by the provider.
What does the SMS Activate API look like?
The API is a REST API, and the documentation includes code examples in cURL, Python, PHP, and JavaScript, so you can start from the language you already use.
Access is through an API key that you create in the dashboard, and the documentation shows how to use it in your requests.
The wallet model is the same as the dashboard: you top up your wallet, the wallet is charged when an order is placed, and an eligible activation is refunded when no SMS arrives within the 20-minute window. Prices vary by app, country, and current tier, and the final price is shown before you confirm. Prices are in US dollars.
For testing, there is a separate path. Test the flow end to end - request a number, send a code, read it back - before you wire it into production, and before you trust it with real users.
How do I test cheaply before building on it?
Do not build a full integration against an API you have never run. Test it in four steps, and each step costs almost nothing.
Step 1: Read the docs. Open the API documentation and confirm the endpoints you need exist: request a number, check the code, cancel an activation. If an endpoint is missing from the docs, it is missing from the API.
Step 2: Top up the smallest amount the wallet page allows. Do not load a large balance into a provider you have never used.
Step 3: Run one cheap activation against a test account. Pick a throwaway sign-up, not a real user. Request the code once, poll for it, and confirm it arrives in the API response. Watch the timing: how long between the request and the code.
Step 4: Test the refund. Cancel an activation after the first 2 minutes with no SMS arrived, or let one expire with no SMS, and confirm the wallet is refunded. A refund rule you have never seen work is a promise, not a feature.
Only then build the integration. The whole test costs the price of one cheap activation, and it tells you more than any price page will.
How do I avoid double-charging on retries?
Retries are where API costs quietly double. A user taps twice, a network call times out, your code retries automatically - and each retry is a new activation, charged again.
The fixes, in order:
Request once. Your code should request the code once per verification, and show the user a clear waiting state. Do not let a double tap create a second activation. Use a request key if the API supports one. An idempotency key tells the API that a repeated call is the same request, not a new one. Poll, do not re-request. When the code is slow, poll the API for the code on the existing activation. Requesting a new activation because the first one is slow is the most common way to pay twice. Cancel before retrying. If the activation is genuinely dead - no SMS, window running out - cancel it, confirm the refund, and only then start a new one.
When should I use a rental through the API?
A one-time activation lasts 20 minutes and then closes. That is fine for a single sign-up. It is the wrong tool when the same user will need a code again - a new login, a new device, a security check. For those cases, rent the number for a set period through the same API, and keep the activation ID so your code can check the same number again later. Rental periods are shown in the dashboard before you confirm, and rental refunds are checked manually.
Frequently asked questions
How much does an SMS verification API cost?
Prices vary by app, country, and current tier, and the final price is shown before you confirm. Prices are in US dollars. The honest comparison is not the price per activation - it is the price per code that actually arrives, which depends on the refund rule when no SMS arrives.
Do I pay if the code never arrives?
On SMS Activate, no - for an eligible one-time activation, if no SMS arrives within the 20-minute window, an eligible order cancels and the charge is refunded to your wallet. You can also cancel an eligible activation yourself after the first 2 minutes if nothing has arrived and the window has not ended. Rental refunds are checked manually.
What programming languages does the API support?
The documentation includes code examples in cURL, Python, PHP, and JavaScript. Since it is a REST API, you can call it from any language that can make an HTTP request.
Can I test the API for free?
There is a free public demo inbox with shared numbers, for seeing how the flow works without paying. It is for throwaway checks only - anyone can read the messages on a shared number. For a real test, top up the smallest amount the wallet page allows and run one cheap activation against a test account.
What is the difference between SMS Activate and SMSOTPS?
Both are our own brands for the same kind of service: private temporary numbers for SMS verification, with an API. SMS Activate is at smsactivate.uk and SMSOTPS is at smsotps.com. Check the API documentation and pricing on each site before you build, because they are separate brands.
What if a service rejects the number my API requested?
Each service decides which numbers it accepts, and its policy can change. If a number is rejected, cancel the activation, confirm the refund, and try a different country. No provider can promise a specific app will accept a specific number.
Ready to try it?
Open the dashboard to see the price for your service and country before you order.
Open the dashboard