YOUR API KEY: XXXXXXXX
https://api.smspinverify.com/user/get_number.php?customer=apikey&app=appname&country=countryname&number=optional&area_code=optional&shownid=1&duration=duration
Example (new number): https://api.smspinverify.com/user/get_number.php?customer=apikey&app=Google+Voice&country=USA&number=&shownid=1&duration=3 days
Example (US area code filter): https://api.smspinverify.com/user/get_number.php?customer=apikey&app=Google+Voice&country=USA&area_code=201&shownid=1&duration=3 days
Example (request specific number again): https://api.smspinverify.com/user/get_number.php?customer=apikey&app=Google+Voice&country=USA&number=17432592794&shownid=1&duration=3 days
Request a specific number (reuse): To get the same number again for an app (like on the homepage “Specific Number” box), pass the number parameter with the full phone number (e.g. number=16143548416). Use the same app and country as when you first got that number. Reuse may be free within the reuse window, depending on the app.
US area code filter: Pass area_code as a 3-digit value (example: 201) to limit numbers .
Success Response:
14155551234 (default, number only)14155551234|987654 (when shownid=1, format is number|n_id)Duration Parameters:
15 minutes (default)3 days7 days14 days25 daysMessages:
Pass shownid if you want to show id of number for reject. format: number|id
5 NUMBER PER MINUTE
https://api.smspinverify.com/user/get_history.php?customer=apikey
Messages:
https://api.smspinverify.com/user/get_balance.php?customer=apikey
Messages:
https://api.smspinverify.com/user/get_rates.php?customer=apikey&country=countryname
Messages:
https://api.smspinverify.com/user/get_countries.php?customer=apikey
Returns a JSON array of all active countries with their id, country (full name to use in other endpoints as the country parameter), and short_code.
Example response:
[
{"id": 1, "country": "USA", "short_code": "US"},
{"id": 31, "country": "Canada", "short_code": "CA"},
{"id": 52, "country": "United kingdom UK","short_code": "GB"},
{"id": 745,"country": "USA Rent", "short_code": "US"}
]Messages:
https://api.smspinverify.com/user/get_number.php?customer=apikey&app=appname&country=countryname&number=number&duration=duration
Example : https://api.smspinverify.com/user/get_number.php?customer=apikey&app=Google+Voice&country=USA&number=17432592794&duration=3 days
Duration Parameters:
15 minutes (default)3 days7 days14 days25 daysMessages:
5 NUMBER PER MINUTE
https://api.smspinverify.com/user/get_sms.php?customer=apikey&number=number&country=countryname&app=appname
Example : https://api.smspinverify.com/user/get_sms.php?customer=apikey&number=112869xxx&country=malaysia&app=google
Messages:
3 MINUTES PER NUMBER
Step 1: Set your Webhook URL in account settings (must be HTTPS).
Step 2: Call get_number.php with shownid=1 to receive number|n_id.
Step 3: Call get_sms.php using that number. When SMS is found, API returns the message and also sends a webhook POST to your URL.
Webhook Request Method:POST
Webhook Content-Type:application/json
Example Webhook Payload:
{
"message": "Your Google verification code is 482913",
"otp": "482913",
"user_id": "123456",
"number": "14155551234",
"country_id": "USA",
"app_id": "Google Voice",
"timestamp": "2026-02-25 10:24:15"
}Your endpoint should reply: HTTP 200 (any response body is fine).
Example endpoint response:
{"received": true}Webhook is sent only when a code is found during get_sms processing.
https://api.smspinverify.com/user/renew_number.php?customer=apikey&number=number&duration=duration
Example : https://api.smspinverify.com/user/renew_number.php?customer=apikey&number=17432592794&duration=3 days
Duration Parameters:
15 minutes3 days7 days14 days25 daysMessages:
Available for selected numbers only.
https://api.smspinverify.com/user/reject_code.php?customer=apikey&number=number&n_id=n_id&country=countryname&app=appname
Example : https://api.smspinverify.com/user/reject_code.php?customer=apikey&number=112869xxx&country=malaysia&app=google
Messages:
Get n_id from History api
https://api.smspinverify.com/user/esim_plans.php?customer=apikey
Example : https://api.smspinverify.com/user/esim_plans.php?customer=apikey&country=US&sort=price&per_page=10
Optional parameters:
country — 2-letter ISO code (US, GB, TR). Also matches regional bundles that include it.search — free text on the plan or region name.package_code — one exact plan, e.g. to re-check a price before ordering.max_price, min_data_gb, days — filters.sort = price | data | days, order = asc | desc.page, per_page (max 100).price is what you pay, in USD.
{
"success": true,
"balance": "102.87",
"paging": {"page":1, "per_page":2, "total":37, "total_pages":19},
"count": 2,
"plans": [
{
"package_code": "P3YTYXBRV",
"name": "United States 100MB 7Days",
"price": "0.60",
"currency": "USD",
"data_bytes": 104857600,
"data": "100MB",
"validity_days": 7,
"validity_unit": "DAY",
"countries": [{"code":"US","name":"United States"}],
"speed": "3G/4G/5G",
"topup_support": true,
"networks": [{"code":"US","carriers":["Verizon","AT&T"],"types":["5G"]}]
}
]
}https://api.smspinverify.com/user/esim_buy.php?customer=apikey&package_code=code
Example : https://api.smspinverify.com/user/esim_buy.php?customer=apikey&package_code=P3YTYXBRV&request_id=my-order-1001&expected_price=0.60
Optional parameters:
request_id — your own id for this purchase (up to 64 chars). Repeating a call with the same request_id returns the original order instead of buying a second eSIM. Use this if your code can retry.expected_price — the order is refused with PRICE_CHANGED if the price is no longer this, so a catalogue update cannot charge you more than you expected.Your balance is debited only when the order succeeds; if the supplier fails, nothing is charged. Limit 10 orders per minute.
{
"success": true,
"charged": "0.60",
"balance": "102.27",
"order": {
"order_id": 51,
"order_no": "B26091314150018",
"package_name": "United States 100MB 7Days",
"price_paid": "0.60",
"status": "ready",
"activation_code": "LPA:1$rsp-eu.simlessly.com$7311A7EB...",
"qr_code_url": "https://p.qrsim.net/...",
"install_url": "https://p.qrsim.net/...",
"iccid": "8932042000024918296",
"data": "100MB",
"expires_at": "2027-03-12T14:15:24+0000"
},
"note": "The eSIM is ready to install."
}error_code values:
NO_CUSTOMER / BAD_CUSTOMER — missing or invalid API key.NO_PACKAGE / PACKAGE_NOT_FOUND — package_code missing or not on sale.PRICE_CHANGED — expected_price no longer matches.INSUFFICIENT_BALANCE — not charged; add funds and retry.SUPPLIER_ERROR — not charged; the operator refused the order.RATE_LIMITED — more than 10 orders in a minute.BUSY — another order for your account is mid-flight; retry shortly.If status is "processing" the operator is still releasing the profile — poll esim_order.php for the QR and activation code.
https://api.smspinverify.com/user/esim_order.php?customer=apikey&order_id=id
Example : https://api.smspinverify.com/user/esim_order.php?customer=apikey&order_id=51&refresh=1
Look up by order_id, order_no or iccid. Call it with none of them to list your orders (page, per_page up to 50). Add refresh=1 to force a supplier read; a plan that is not ready yet is always read live, and forced refreshes are limited to once a minute per order.
Returns the install details plus everything the operator reports about the SIM:
{
"success": true,
"order": {
"order_id": 51,
"status": "ready",
"activation_code": "LPA:1$rsp-eu.simlessly.com$7311A7EB...",
"qr_code_url": "https://p.qrsim.net/...",
"iccid": "8932042000024918296",
"imsi": "206018226618296",
"data": "100MB",
"expires_at": "2027-03-12T14:15:24+0000",
"smdp_status": "RELEASED",
"esim_status": "GOT_RESOURCE",
"usage": {
"used_bytes": 0, "used": "",
"remaining_bytes": 104857600, "remaining": "100MB"
},
"sim": {
"apn": "bicsapn", "pin": "7639", "puk": "91625444",
"ip_export": "US", "activated_at": "", "installed_at": "",
"validity_days": 7, "validity_unit": "DAY", "topup_support": true
}
}
}error_code values:
ORDER_NOT_FOUND — no such order on your account.Order the same proxies as on the Proxies page from your own code. Payment comes from your account balance at the same price as the website.
proxy_products.php to get countries, packages, mobile plans and periods.proxy_price.php.proxy_buy.php, passing that price as expected_price and your own request_id.proxy_order.php.proxy_extend.php. The IPs stay the same.Every proxy call answers JSON with success. On failure it also has error_code (for your code to check) and error (a readable message). Parameters can be sent by GET or POST.
Products (use the name or the number in product):
| product | id | What it is | You choose |
|---|---|---|---|
ipv4 | 4 | Private IPv4 datacenter (HQ proxy) | country, period, quantity 1–20 |
ipv4_shared | 3 | Shared IPv4 (up to 3 users) | country, period, quantity 1–20 |
ipv6 | 6 | Private IPv6 | country, period (from 3 days), quantity 1–20 |
mtproto | 5 | Telegram MTProto proxy | country, period, quantity 1–20 |
isp | 7 | ISP (static residential) proxy | country, period, quantity 1–20 |
mobile | 8 | Mobile 4G/5G proxy | country, plan, period, quantity 1–5 |
ipv4_mix | 9 | IPv4 mix pack | package, period, quantity = a package size |
isp_mix | 10 | ISP mix pack | package, period, quantity = a package size |
residential | 11 | Rotating residential, pay per GB | gb (1, 2, 3, 5, 10, 25, 50 — only amounts in stock, see gb_options) |
https://api.smspinverify.com/user/proxy_products.php?customer=apikey
Example : https://api.smspinverify.com/user/proxy_products.php?customer=apikey&product=mobile
product is optional and returns one product. price_per_ip is a guide; proxy_price.php gives the exact total.
{
"success": true,
"balance": "25.00",
"count": 1,
"products": [
{
"product": "isp", "product_id": 7, "name": "ISP proxy",
"protocols": ["http", "https", "socks5"],
"from_price": "6.00", "from_unit": "/ IP / month", "currency": "USD",
"periods": [{"days": 7, "label": "1 week"}, {"days": 30, "label": "1 month"}],
"order_by": "country", "max_quantity": 20,
"countries": [{"code": "US", "name": "United States"}]
}
]
}Mobile countries also list plans (plan id, carrier, line dedicated or shared, rotation). Mix packs list packages with their allowed sizes. Residential lists gb_options.
https://api.smspinverify.com/user/proxy_price.php?customer=apikey&product=product&...
Examples :
The price is worked out exactly the way proxy_buy.php charges, without taking any money. Limit 60 price checks per minute.
{
"success": true,
"product": "ipv4", "product_id": 4,
"period_days": 30, "quantity": 2, "country": "US",
"price": "6.00", "currency": "USD",
"balance": "25.00", "enough_balance": true
}https://api.smspinverify.com/user/proxy_buy.php?customer=apikey&product=product&...
Example : https://api.smspinverify.com/user/proxy_buy.php?customer=apikey&product=ipv4&country=US&period=30&quantity=2&expected_price=6.00&request_id=my-order-1001
Same order parameters as proxy_price.php, plus:
request_id — your own id for this purchase (up to 64 characters). Calling again with the same request_id returns the first order instead of buying again. Use this if your code can retry.expected_price — the order is refused with PRICE_CHANGED if it would cost more than this.Your balance is charged only when the supplier accepts the order. If the supplier fails, the money goes straight back to your balance. Limit 10 orders per minute.
{
"success": true,
"charged": "6.00",
"balance": "19.00",
"order": {
"order_id": 123, "product": "ipv4", "name": "HQ proxy",
"price_paid": "6.00", "period_days": 30, "quantity": 2, "country": "US",
"request_id": "my-order-1001",
"status": "ready",
"expires_at": "2026-10-27 12:00:00",
"proxies": [
{
"host": "185.xxx.xxx.10", "ip": "185.xxx.xxx.10", "country": "US",
"username": "aBcD12", "password": "Xy9kLm",
"http_port": "8000", "socks5_port": "8000",
"http": "http://aBcD12:[email protected]:8000",
"socks5": "socks5h://aBcD12:[email protected]:8000",
"expires_at": "2026-10-27 12:00:00"
}
]
},
"note": "Your proxies are ready."
}What changes by product:
http_port and socks5_port. Mobile plans with IP change by link include change_ip_url; open it to get a new IP.mtproto) returns port, secret and a ready tg_link instead of a login.res.proxy-seller.com, ports 10000–10999, and traffic (limit_gb, used_gb, left_gb). Add _c_US to the username for a country or _s_name to keep one IP for a session. Buying again adds GB to the same login.error_code values:
NO_CUSTOMER / BAD_CUSTOMER — missing or invalid API key.NO_PRODUCT / PRODUCT_NOT_FOUND — product missing or not on sale.BAD_REQUEST — a country, plan, package, period or quantity that is not valid for this product. The message says which.PRICE_CHANGED — it would cost more than expected_price. Nothing was charged.INSUFFICIENT_BALANCE — nothing was charged; add funds and retry.SUPPLIER_ERROR / UNAVAILABLE — nothing was charged; try again later or pick another country.OUT_OF_STOCK — residential only: that many GB is not available right now. Nothing was charged; the message says how many GB you can buy, and proxy_products.php lists only amounts in stock.RATE_LIMITED — more than 10 orders in a minute.BUSY — another order for your account is still running; retry shortly.ORDER_RECORD_FAILED — paid and bought, but not saved. Contact support with the message.If status is "processing", the supplier is still setting the proxies up. Call proxy_order.php with the order_id a minute later to get the credentials.
https://api.smspinverify.com/user/proxy_order.php?customer=apikey&order_id=id
Example : https://api.smspinverify.com/user/proxy_order.php?customer=apikey&order_id=123
Look up one order by order_id or by your request_id. Call it with neither to list all your proxy orders with their credentials, newest first (page, per_page up to 50). The response has the same order shape as proxy_buy.php; status is ready, processing or expired.
error_code values:
ORDER_NOT_FOUND — no such order on your account.https://api.smspinverify.com/user/proxy_extend.php?customer=apikey&order_id=id&period=days
Example : https://api.smspinverify.com/user/proxy_extend.php?customer=apikey&order_id=123&period=30&expected_price=6.00
Extends every proxy in the order together and keeps the same IPs. Get the price first with proxy_price.php?order_id=123&period=30. Residential traffic is not extended here; buy more GB with proxy_buy.php instead.
{
"success": true,
"charged": "6.00",
"balance": "13.00",
"order": { "order_id": 123, "status": "ready", "expires_at": "2026-11-26 12:00:00", "proxies": [ ... ] }
}Uses the same error_code values as ordering, plus NO_ORDER, NO_PERIOD and ORDER_NOT_FOUND.
All JSON API endpoints return responses in a standardized format:
{"success": true, "data": {...}} or {"success": true, "message": "..."}{"success": false, "error": "Error message"}All responses include appropriate HTTP status codes (200, 400, 404, 429, 500, 503).
Endpoint:https://api.smspinverify.com/json/get_balance.php
Method: GET
Parameters:
customer (required) - Your API keyExample Request:
https://api.smspinverify.com/json/get_balance.php?customer=YOUR_API_KEY
Success Response (200):
{
"success": true,
"data": {
"id": "123",
"full_name": "John Doe",
"email": "[email protected]",
"balance": "100.50"
}
}Error Responses:
{"success": false, "error": "Customer Not Found."} (400) - Customer parameter missing or invalid{"success": false, "error": "Customer not found."} (404) - Customer does not exist{"success": false, "error": "Access denied."} (500) - IP address blocked{"success": false, "error": "Database connection failed."} (500) - Database error{"success": false, "error": "Database query failed."} (500) - Query errorEndpoint:https://api.smspinverify.com/json/get_history.php
Method: GET
Parameters:
customer (required) - Your API keyExample Request:
https://api.smspinverify.com/json/get_history.php?customer=YOUR_API_KEY
Success Response (200):
{
"success": true,
"data": [
{
"id": "8666290",
"number": "15717412873",
"message": "Your code is 123456",
"country_name": "USA",
"app_name": "Google Voice",
"timestamp": "2024-01-15 10:30:00"
},
{
"id": "8666289",
"number": "15717412874",
"message": "",
"country_name": "USA",
"app_name": "WhatsApp",
"timestamp": "2024-01-15 10:25:00"
}
]
}Error Responses:
{"success": false, "error": "Customer Not Found."} (400) - Customer parameter missing{"success": false, "error": "Access denied."} (500) - IP address blocked{"success": false, "error": "Database connection failed."} (500) - Database error{"success": false, "error": "Database query failed."} (500) - Query errorEndpoint:https://api.smspinverify.com/json/get_rates.php
Method: GET
Parameters:
customer (required) - Your API keycountry (required) - Country name (e.g., "USA")Example Request:
https://api.smspinverify.com/json/get_rates.php?customer=YOUR_API_KEY&country=USA
Success Response (200):
{
"success": true,
"data": [
{
"app": "Google Voice",
"business_code": "go",
"rate": "0.50"
},
{
"app": "WhatsApp",
"business_code": "wa",
"rate": "0.75"
}
]
}Error Responses:
{"success": false, "error": "Customer Not Found."} (400) - Customer parameter missing{"success": false, "error": "Country Not Found."} (400) - Country parameter missing{"success": false, "error": "Country Not Found."} (404) - Country does not exist{"success": false, "error": "Access denied."} (500) - IP address blocked{"success": false, "error": "Database connection failed."} (500) - Database error{"success": false, "error": "Database query failed."} (500) - Query error{"success": false, "error": "Too many requests. Please wait."} (429) - Rate limit exceededEndpoint:https://api.smspinverify.com/json/get_countries.php
Method: GET
Parameters:
customer (required) - Your API keyExample Request:
https://api.smspinverify.com/json/get_countries.php?customer=YOUR_API_KEY
Success Response (200):
{
"success": true,
"data": [
{ "id": 1, "country": "USA", "short_code": "US" },
{ "id": 31, "country": "Canada", "short_code": "CA" },
{ "id": 52, "country": "United kingdom UK", "short_code": "GB" },
{ "id": 745, "country": "USA Rent", "short_code": "US" }
]
}Use the country value when calling get_rates, get_number, etc.
Error Responses:
{"success": false, "error": "Customer Not Found."} (400) - Customer parameter missing{"success": false, "error": "Access denied."} (500) - IP address blocked{"success": false, "error": "Database connection failed."} (500) - Database errorEndpoint:https://api.smspinverify.com/json/get_number.php
Method: GET
Parameters:
customer (required) - Your API keyapp (required) - App name (e.g., "Google Voice") or business codecountry (required) - Country name (e.g., "USA")number (optional) - Phone number to reuse. When provided, the API will reuse this existing number instead of assigning a new one. The number must belong to your account and match the specified country/app combination.area_code (optional) - 3-digit US area code filter. Example: 201.duration (optional) - Duration for number rental. Valid values: 15 minutes (default), 3 days, 7 days, 14 days, 25 days.Example Request (Get New Number):
https://api.smspinverify.com/json/get_number.php?customer=YOUR_API_KEY&app=Google+Voice&country=USA&duration=3 days
Example Request (Filter by US Area Code):
https://api.smspinverify.com/json/get_number.php?customer=YOUR_API_KEY&app=Google+Voice&country=USA&area_code=201&duration=3 days
Example Request (Reuse Number):
https://api.smspinverify.com/json/get_number.php?customer=YOUR_API_KEY&app=Google+Voice&country=USA&number=15717412873
How to request a specific number again: To get the same number again (like the “Specific Number” option on the homepage), call Get Number with the number parameter set to the full phone number (e.g. number=16143548416). Use the same app and country as when you first received that number. The number must belong to your account; reuse may be free within the app’s reuse window.
Area code + specific number: You can pass both number and area_code. If the requested number does not match the selected area code, the API returns an error.
Success Response (200):
{
"success": true,
"data": {
"id": "8666290",
"number": "15717412873",
"deduction": "0.45"
}
}Error Responses:
{"success": false, "error": "Customer Not Found."} (400) - Customer parameter missing{"success": false, "error": "App Not Found."} (400) - App parameter missing{"success": false, "error": "Country Not Found."} (400) - Country parameter missing{"success": false, "error": "Not Enough balance"} (400) - Insufficient balance{"success": false, "error": "Customer Not Found."} (404) - Customer does not exist{"success": false, "error": "App or Country Not Found."} (404) - App or country not found{"success": false, "error": "Number is not available."} (403) - App restricted for user{"success": false, "error": "No free channels available check after sometime."} (503) - No numbers available{"success": false, "error": "Too many unused numbers. Service blocked for next 6 hours."} (429) - User blocked due to unused numbers{"success": false, "error": "Access denied."} (500) - IP address blocked{"success": false, "error": "Database connection failed."} (500) - Database error{"success": false, "error": "Database query failed."} (500) - Query error{"success": false, "error": "Error 102, check back later."} (500) - Provider not supported{"success": false, "error": "Your balance is expired."} (400) - Account expired{"success": false, "error": "SMS service error"} (503) - External SMS service errorNote: Rate limit: 5 numbers per minute
Endpoint:https://api.smspinverify.com/json/get_sms.php
Method: GET
Parameters:
customer (required) - Your API keyn_id (required) - Number ID (from get_number response or history)Example Request:
https://api.smspinverify.com/json/get_sms.php?customer=YOUR_API_KEY&n_id=8666290
Success Response (200):
{
"success": true,
"message": "Your verification code is 123456"
}Error Responses:
{"success": false, "error": "Customer Not Found."} (400) - Customer parameter missing{"success": false, "error": "Number ID (n_id) is required."} (400) - n_id parameter missing{"success": false, "error": "Number record not found."} (404) - Number ID does not exist{"success": false, "error": "App or Country Not Found."} (404) - App or country not found{"success": false, "error": "You have not received any code yet."} (400) - No SMS received yet{"success": false, "error": "Too many requests. Please wait."} (429) - Rate limit exceeded (3 minutes per number){"success": false, "error": "Access denied."} (500) - IP address blocked{"success": false, "error": "Database connection failed."} (500) - Database error{"success": false, "error": "Database query failed."} (500) - Query error{"success": false, "error": "SMS service error"} (503) - External SMS service errorNote: Rate limit: 3 minutes per number
Endpoint:https://api.smspinverify.com/json/reject_code.php
Method: GET
Parameters:
customer (required) - Your API keyn_id (required) - Number ID (from get_number response or history)Example Request:
https://api.smspinverify.com/json/reject_code.php?customer=YOUR_API_KEY&n_id=8666290
Success Response (200):
{
"success": true,
"message": "Number Rejected."
}Error Responses:
{"success": false, "error": "Customer Not Found."} (400) - Customer parameter missing{"success": false, "error": "Number ID (n_id) is required."} (400) - n_id parameter missing{"success": false, "error": "Number record not found."} (404) - Number ID does not exist{"success": false, "error": "App or Country Not Found."} (404) - App or country not found{"success": false, "error": "Cant Reject."} (400) - Cannot reject (number already used or time expired){"success": false, "error": "You have not received any code yet."} (400) - Cannot reject without SMS{"success": false, "error": "Access denied."} (500) - IP address blocked{"success": false, "error": "Database connection failed."} (500) - Database error{"success": false, "error": "Database query failed."} (500) - Query error{"success": false, "error": "SMS service error"} (503) - External SMS service errorEndpoint:https://api.smspinverify.com/json/renew_number.php
Method: GET
Parameters:
customer (required) - Your API keynumber (required) - Phone number to renewduration (required) - Duration for renewal. Valid values: 15 minutes, 3 days, 7 days, 14 days, 25 days.Example Request:
https://api.smspinverify.com/json/renew_number.php?customer=YOUR_API_KEY&number=15717412873&duration=3 days
Success Response (200):
{
"success": true,
"message": "Number renewed successfully.",
"data": {
"new_expiry": "2024-01-18",
"new_balance": "95.50"
}
}Error Responses:
{"success": false, "error": "Customer Not Found."} (400) - Customer parameter missing{"success": false, "error": "Number is required."} (400) - Number parameter missing{"success": false, "error": "Invalid duration parameter."} (400) - Duration parameter invalid{"success": false, "error": "Insufficient balance."} (400) - Not enough balance{"success": false, "error": "Renewal is only available after a message has been received."} (400) - No SMS received yet{"success": false, "error": "Number not found."} (404) - Number does not belong to user{"success": false, "error": "Access denied."} (500) - IP address blockedNote: Available for selected numbers only.
Travel eSIMs are bought and managed over JSON as well, but these three endpoints sit under
https://api.smspinverify.com/user/ instead of https://api.smspinverify.com/json/,
and they carry an extra error_code field alongside error so your code can
branch on the exact reason a purchase failed. The customer parameter is the same API key.
Errors returned by all three: NO_CUSTOMER (401) missing key, BAD_CUSTOMER (401)
invalid or inactive key, IP_BLOCKED (403), SERVER_ERROR (500).
Endpoint:https://api.smspinverify.com/user/esim_plans.php
Method: GET
Parameters:
customer (required) - Your API keycountry (optional) - 2-letter ISO code such as US. Also matches regional bundles that include it.search (optional) - Free text on the plan or region namepackage_code (optional) - One exact plan, to re-check a price before orderingmax_price, min_data_gb, days (optional) - Filterssort (optional) - price, data or days; order - asc or descpage, per_page (optional) - per_page maximum is 100Example Request:
https://api.smspinverify.com/user/esim_plans.php?customer=YOUR_API_KEY&country=US&sort=price&per_page=10
Success Response (200):price is what you pay, in USD.
{
"success": true,
"balance": "102.87",
"paging": {"page": 1, "per_page": 10, "total": 37, "total_pages": 4},
"count": 1,
"plans": [
{
"package_code": "P3YTYXBRV",
"name": "United States 100MB 7Days",
"price": "0.60",
"currency": "USD",
"data_bytes": 104857600,
"data": "100MB",
"validity_days": 7,
"validity_unit": "DAY",
"countries": [{"code": "US", "name": "United States"}],
"speed": "3G/4G/5G",
"topup_support": true,
"networks": [{"code": "US", "carriers": ["Verizon", "AT&T"], "types": ["5G"]}]
}
]
}Error Responses:
{"success": false, "error_code": "BAD_COUNTRY", ...} (400) - country is not a 2-letter ISO code{"success": false, "error_code": "ESIM_UNAVAILABLE", ...} (503) - eSIM service is downEndpoint:https://api.smspinverify.com/user/esim_buy.php
Method: GET
Parameters:
customer (required) - Your API keypackage_code (required) - Plan to buy, from esim_plans.phprequest_id (optional) - Your own id for this purchase, up to 64 characters of letters, digits, dot, underscore, colon or hyphen. Repeating a call with the same request_id returns the original order instead of buying a second eSIM. Use this if your code can retry.expected_price (optional) - The order is refused if the price is no longer this, so a catalogue update cannot charge you more than you expectedExample Request:
https://api.smspinverify.com/user/esim_buy.php?customer=YOUR_API_KEY&package_code=P3YTYXBRV&request_id=my-order-1001&expected_price=0.60
Success Response (200):
{
"success": true,
"charged": "0.60",
"balance": "102.27",
"order": {
"order_id": 51,
"order_no": "B26091314150018",
"package_name": "United States 100MB 7Days",
"price_paid": "0.60",
"status": "ready",
"activation_code": "LPA:1$rsp-eu.simlessly.com$7311A7EB...",
"qr_code_url": "https://p.qrsim.net/...",
"install_url": "https://p.qrsim.net/...",
"iccid": "8932042000024918296",
"data": "100MB",
"expires_at": "2027-03-12T14:15:24+0000"
},
"note": "The eSIM is ready to install."
}If status is processing the operator is still releasing the profile: poll
esim_order.php for the QR code and activation code. A repeated request_id
returns the original order with "duplicate": true and charges nothing.
Error Responses:
{"success": false, "error_code": "NO_PACKAGE", ...} (400) - package_code missing{"success": false, "error_code": "BAD_REQUEST_ID", ...} (400) - request_id too long or has invalid characters{"success": false, "error_code": "INSUFFICIENT_BALANCE", ...} (402) - Not charged; add funds and retry{"success": false, "error_code": "PACKAGE_NOT_FOUND", ...} (404) - Plan is not on sale{"success": false, "error_code": "PRICE_CHANGED", ...} (409) - expected_price no longer matches{"success": false, "error_code": "PRICE_UNAVAILABLE", ...} (409) - Plan has no price configured{"success": false, "error_code": "BUSY", ...} (409) - Another order for your account is mid-flight; retry shortly{"success": false, "error_code": "RATE_LIMITED", ...} (429) - More than 10 orders in a minute{"success": false, "error_code": "ORDER_RECORD_FAILED", ...} (500) - Bought but not saved; contact support with the order number{"success": false, "error_code": "SUPPLIER_ERROR", ...} (503) - Not charged; the operator refused the orderNote: Your balance is only spent on a successful order. If the supplier fails, the charge is returned. Limit is 10 orders per minute.
Endpoint:https://api.smspinverify.com/user/esim_order.php
Method: GET
Parameters:
customer (required) - Your API keyorder_id, order_no or iccid (optional) - Look up one order. Pass none of them to list your orders.page, per_page (optional) - When listing; per_page maximum is 50refresh (optional) - 1 forces a supplier read. A plan that is not ready yet is always read live, and forced refreshes are limited to once a minute per order.Example Request:
https://api.smspinverify.com/user/esim_order.php?customer=YOUR_API_KEY&order_id=51&refresh=1
Success Response (200): the install details plus everything the operator reports about the SIM.
{
"success": true,
"order": {
"order_id": 51,
"status": "ready",
"activation_code": "LPA:1$rsp-eu.simlessly.com$7311A7EB...",
"qr_code_url": "https://p.qrsim.net/...",
"iccid": "8932042000024918296",
"imsi": "206018226618296",
"data": "100MB",
"expires_at": "2027-03-12T14:15:24+0000",
"smdp_status": "RELEASED",
"esim_status": "GOT_RESOURCE",
"usage": {
"used_bytes": 0, "used": "",
"remaining_bytes": 104857600, "remaining": "100MB"
},
"sim": {
"apn": "bicsapn", "pin": "7639", "puk": "91625444",
"ip_export": "US", "activated_at": "", "installed_at": "",
"validity_days": 7, "validity_unit": "DAY", "topup_support": true
}
}
}Error Responses:
{"success": false, "error_code": "ORDER_NOT_FOUND", ...} (404) - No such order on your accountSuccess Responses:
"success": trueget_balance, get_history, get_rates, get_number return data in "data" fieldget_sms, reject_code return message in "message" field200Error Responses:
"success": false and "error" field with error message"error_code" field with a fixed machine-readable code400 - Bad Request (missing/invalid parameters)403 - Forbidden (access denied)404 - Not Found (resource not found)429 - Too Many Requests (rate limited)500 - Internal Server Error (server/database errors)503 - Service Unavailable (no numbers available, service errors)Content-Type: All responses return Content-Type: application/json