Real Non-VOIP Numbers for SMS Verification - Instant Delivery

SMS Verification API — real non-VoIP numbers. getNumber, getSMS, getStatus for developers & resellers

API Landing · Reseller Program · Get API Key Free →

The OTP Grove REST API v1 lets you automate real non-VoIP SMS verification — non-VoIP number API buy, bulk reseller access, SMS-Activate API alternative. All charges deduct from your wallet. Get your API key from the dashboard API Key page.

Rate limits

Standard developer accounts: 60 requests/minute (standard) · 300+/minute (reseller). Reseller/enterprise tiers receive higher limits — contact support for mass SMS verification API volume.

Webhooks

Webhook SMS delivery available for reseller/enterprise tiers — contact support.

Developer API keywords

non-voip number API buy, real SIM API access, OTP API real non-voip, getNumber API real SIM, getSMS API non-voip, REST API real phone numbers, SMS-activate API alternative cheaper, bulk real SIM numbers API.

Authentication

Every request must include your API key using one of the following methods:

Bearer header example:

curl -X GET "https://otpgrove.com/api/v1/balance/" \ -H "Authorization: Bearer YOUR_API_KEY"

Query string example:

curl -X GET "https://otpgrove.com/api/v1/balance/?api_key=YOUR_API_KEY"

Invalid or missing keys receive 401 with {"error": "Invalid or missing API key"}.

Service types

The type parameter is used by /services/ and /buy/.

typeDescription
usa1Temp Number USA-1 (USA non-VoIP numbers)
usa2Temp Number USA-2 (alternate USA route)
globalGlobal Temp Number — requires country parameter
longtermLong-Term Providers — requires country parameter
dataplanData plans — optional country filter

For type=global, use GET /api/v1/countries/ to list valid country names.

Endpoints

GET /api/v1/balance/

Returns your OTP Grove wallet balance.

ParameterRequiredDescription
None
curl -X GET "https://otpgrove.com/api/v1/balance/" \ -H "Authorization: Bearer YOUR_API_KEY"

Example response:

{ "balance": "8.56", "currency": "USD" }

GET /api/v1/services/

List available services and prices for a product line. Only services with price > $0.00 are returned.

ParameterRequiredDescription
typeYesusa1, usa2, global, longterm, or dataplan
countryVariesRequired for global and longterm. Optional filter for dataplan (e.g. Afghanistan)
curl -X GET "https://otpgrove.com/api/v1/services/?type=usa1" \ -H "Authorization: Bearer YOUR_API_KEY"

Global example:

curl -X GET "https://otpgrove.com/api/v1/services/?type=global&country=Germany" \ -H "Authorization: Bearer YOUR_API_KEY"

Long-term example:

curl -X GET "https://otpgrove.com/api/v1/services/?type=longterm&country=Canada" \ -H "Authorization: Bearer YOUR_API_KEY"

Data plan example:

curl -X GET "https://otpgrove.com/api/v1/services/?type=dataplan&country=Afghanistan" \ -H "Authorization: Bearer YOUR_API_KEY"

Stable service IDs: Service IDs are stable database IDs (e.g. 1358186) — they do not change when the catalog syncs. Always use the id returned by /api/v1/services/ when calling /api/v1/buy/.

Example response (usa1 / usa2 / global): JSON array; response header X-Powered-By: OTPGrove API

[ { "id": 1358186, "service_code": "wp", "name": "163СOM", "price": "0.0260", "currency": "USD" } ]

Example response (longterm):

[ { "id": 63, "service_code": "rd:63", "name": "Canada (Virtual) - 30 days", "price": "40.0000", "currency": "USD", "country": "Canada" } ]

Example response (dataplan):

[ { "id": 2, "service_code": "data_plan_2", "name": "Data plan - 0.5 GB", "price": "4.6800", "currency": "USD", "country": "Afghanistan", "data_size": "0.5 GB" } ]

Use the id from this list as service_id when placing an order.

GET /api/v1/countries/

List all countries available for type=global with service counts.

ParameterRequiredDescription
None
curl -X GET "https://otpgrove.com/api/v1/countries/" \ -H "Authorization: Bearer YOUR_API_KEY"

Example response:

{ "countries": [ {"name": "Afghanistan", "services_count": 379}, {"name": "Albania", "services_count": 334}, {"name": "Algeria", "services_count": 312} ], "total": 201 }

Use the name value as the country parameter in /services/ and /buy/.

POST /api/v1/buy/

Purchase a service. Funds are charged from your wallet immediately.

FieldRequiredDescription
service_idYesInteger id from /services/ response (stable database ID)
typeYesusa1, usa2, global, longterm, or dataplan
countryVariesRequired for global and longterm. Optional for dataplan
area_codeNoUS state code or Random Location (usa1 / usa2 only; default: Random Location)
quantityNoInteger quantity (longterm / dataplan only; default: 1)

Parameters by type:

USA-1 buy example:

curl -X POST "https://otpgrove.com/api/v1/buy/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"service_id": 1358186, "type": "usa1"}'

Global buy example:

curl -X POST "https://otpgrove.com/api/v1/buy/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"service_id": 1356051, "type": "global", "country": "Germany"}'

Long-term buy example:

curl -X POST "https://otpgrove.com/api/v1/buy/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"service_id": 63, "type": "longterm", "country": "Canada", "quantity": 1}'

Data plan buy example:

curl -X POST "https://otpgrove.com/api/v1/buy/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"service_id": 2, "type": "dataplan", "country": "Afghanistan", "quantity": 1}'

Example response:

{ "order_id": "42", "number": "+1234567890", "status": "pending" }

GET /api/v1/sms/

Poll for SMS content or order details. The order_id must belong to your account. Supports all order types: usa1, usa2, global, longterm, dataplan.

ParameterRequiredDescription
order_idYesOrder ID string from /buy/ response
curl -X GET "https://otpgrove.com/api/v1/sms/?order_id=42" \ -H "Authorization: Bearer YOUR_API_KEY"

Example response (temp number):

{ "order_id": "42", "sms": "Your code is 123456", "status": "received" }

Status values: pending, received, cancelled, timeout.

GET /api/v1/status/

Check order status without the full SMS payload. The order_id must belong to your account. Supports all order types: usa1, usa2, global, longterm, dataplan.

ParameterRequiredDescription
order_idYesOrder ID string from /buy/ response
curl -X GET "https://otpgrove.com/api/v1/status/?order_id=42" \ -H "Authorization: Bearer YOUR_API_KEY"

Example response:

{ "order_id": "42", "status": "pending" }

Status values: pending, received, cancelled, timeout.

POST /api/v1/cancel/

Cancel a pending temp-number order. Refund is credited to your wallet when no SMS was received.

Cancel is only supported for usa1, usa2, and global orders. For longterm and dataplan orders, cancel returns:

{"error": "Cancel is not supported for this order type"}
FieldRequiredDescription
order_idYesOrder ID string from /buy/ response
curl -X POST "https://otpgrove.com/api/v1/cancel/" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"order_id": "42"}'

Example response:

{ "status": "cancelled", "refund": "0.50" }

Response codes

CodeMeaning
200Success
400Bad request — response body: {"error": "..."}
401Unauthorized — invalid or missing API key
404Not found — e.g. invalid service_id or order_id
Note: All 5 service types are available via REST API v1. Developer API landing · Reseller program

Error codes

HTTPMeaning
200Success
400Bad request — invalid parameters
401Invalid or missing API key
404Service or order not found
429Rate limit exceeded — retry after 60s
500Server error — contact support

API FAQ

Is OTPGrove API cheaper than SMS-Activate?

Yes. OTPGrove REST API starts from about $0.10 per real non-VoIP OTP with no $30 minimum. SMS-Activate shut down — migrate getNumber/getSMS scripts to /api/v1/ endpoints.

Does the API provide real non-VoIP numbers?

Yes. Every usa1/usa2/global temp number via API is a real non-VoIP carrier number — not VoIP. Ideal for WhatsApp, Google, Telegram OTP automation.

How do I get an API key?

Register free at /register/, fund your wallet, then copy your API key from the dashboard API Key page. Start integrating in minutes.

Can I buy bulk non-VoIP numbers via API?

Yes. High-volume developers and resellers get bulk non-VoIP API access with volume discounts. Contact support for wholesale rates above 10,000 OTP/month.

What are the API rate limits?

Standard accounts: 60 requests/minute per API key. Bulk/reseller tiers: 300+ requests/minute. Contact support to raise limits.

Does OTPGrove support webhooks?

Webhook delivery for incoming SMS is on the roadmap for reseller tiers. Currently poll GET /api/v1/sms/ every 3–5 seconds for OTP.