YOUR API KEY: XXXXXXXX
https://pvaotp.com/api/user/get_number.php?customer=apikey&app=appname&country=countryname&number=optional&area_code=optional&shownid=1&duration=duration
Example (new number): https://pvaotp.com/api/user/get_number.php?customer=apikey&app=Google+Voice&country=USA&number=&shownid=1&duration=3 days
Example (US area code filter): https://pvaotp.com/api/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://pvaotp.com/api/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:
Long durations are only available for US numbers, and only for services that have a price set for that duration. Call get_rates.php to see which durations a service offers and what they cost.
Pass shownid if you want to show id of number for reject. format: number|id
5 NUMBER PER MINUTE
https://pvaotp.com/api/user/get_history.php?customer=apikey
Messages:
https://pvaotp.com/api/user/get_balance.php?customer=apikey
Messages:
https://pvaotp.com/api/user/get_rates.php?customer=apikey&country=countryname&app=optional&duration=optional&type=optional
Example (all services, 15 minute prices): https://pvaotp.com/api/user/get_rates.php?customer=apikey&country=USA
Example (one service, all prices): https://pvaotp.com/api/user/get_rates.php?customer=apikey&country=USA&app=WhatsApp
Example (one service, one duration): https://pvaotp.com/api/user/get_rates.php?customer=apikey&country=USA&app=WhatsApp&duration=3 days
Example (all services, 3 day rent cost): https://pvaotp.com/api/user/get_rates.php?customer=apikey&country=USA&duration=3 days
Example (all services, 25 day rent cost): https://pvaotp.com/api/user/get_rates.php?customer=apikey&country=USA&duration=25 days
Example (renewal price list for one service): https://pvaotp.com/api/user/get_rates.php?customer=apikey&country=USA&app=WhatsApp&type=renew
Example (renewal cost of a 25 day extension): https://pvaotp.com/api/user/get_rates.php?customer=apikey&country=USA&app=WhatsApp&type=renew&duration=25 days
Returns a JSON array of every service in that country. rate is the standard 15-minute price. durations lists the long-term prices for that service, keyed by the same values you pass as the duration parameter on get_number.php and renew_number.php. A duration that is not listed is not offered for that service, and requesting it returns Duration not available for this service.
Example response:
[
{
"app": "WhatsApp",
"business_code": "wa",
"rate": "2.20",
"durations": {"3 days": "3.50", "7 days": "3.75", "14 days": "4.00", "25 days": "5.00"}
},
{
"app": "Some 15-minute only service",
"business_code": "sos",
"rate": "0.30",
"durations": {}
}
]Add the optional app parameter (service full name or business code) to get the prices for a single service instead of the whole country.
Add the optional duration parameter (same values as get_number.php) to get the price for one duration only. rate is then the price of that duration, and services which do not sell it are left out of the list, so this is the way to list what a country offers at 3, 7, 14 or 25 days.
Example response with duration=3 days:
[
{"app": "1688", "business_code": "1342", "duration": "3 days", "rate": "2.50"},
{"app": "Aeldra", "business_code": "1345", "duration": "3 days", "rate": "2.50"},
{"app": "WhatsApp", "business_code": "WhatsApp", "duration": "3 days", "rate": "3.50"}
]Add the optional type parameter to switch between buying and renewing. type=buy is the default and returns the prices you pay when you take a new number with get_number.php. type=renew returns the prices you pay to extend a number you already hold with renew_number.php. These are not the same: a 25 day extension is charged at the renewal price, which is normally higher than buying 25 days outright, so check type=renew before you extend. In the renewal list, rate is the price charged when you call renew_number.php without a duration, and durations holds the price of each extension length.
Example response with type=renew:
[
{
"app": "WhatsApp",
"business_code": "WhatsApp",
"rate": "8.00",
"durations": {"15 minutes": "2.20", "3 days": "3.50", "7 days": "3.75", "14 days": "4.00", "25 days": "8.00"}
}
]Renewal by duration exists only on US long-term rental services; anywhere else durations comes back empty and only the flat rate applies. A renewal duration is also only usable while the number still has enough time left on our side to cover that period, so a duration listed here can still be refused by renew_number.php for a particular number.
Messages:
https://pvaotp.com/api/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://pvaotp.com/api/user/get_number.php?customer=apikey&app=appname&country=countryname&number=number&duration=duration
Example : https://pvaotp.com/api/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://pvaotp.com/api/user/get_sms.php?customer=apikey&number=number&country=countryname&app=appname
Example : https://pvaotp.com/api/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://pvaotp.com/api/user/renew_number.php?customer=apikey&number=number&duration=duration
Example : https://pvaotp.com/api/user/renew_number.php?customer=apikey&number=17432592794&duration=3 days
Duration Parameters:
15 minutes3 days7 days14 days25 daysRenewal prices are not the same as purchase prices — a 25 day extension costs the renewal price, which is normally higher than buying 25 days on a new number. Call get_rates.php?customer=apikey&country=USA&app=service&type=renew first to see what each extension length will cost.
Messages:
Available for selected numbers only.
https://pvaotp.com/api/user/reject_code.php?customer=apikey&number=number&n_id=n_id&country=countryname&app=appname
Example : https://pvaotp.com/api/user/reject_code.php?customer=apikey&number=112869xxx&country=malaysia&app=google
Messages:
Get n_id from History api
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://pvaotp.com/api/json/get_balance.php
Method: GET
Parameters:
customer (required) - Your API keyExample Request:
https://pvaotp.com/api/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://pvaotp.com/api/json/get_history.php
Method: GET
Parameters:
customer (required) - Your API keyExample Request:
https://pvaotp.com/api/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://pvaotp.com/api/json/get_rates.php
Method: GET
Parameters:
customer (required) - Your API keycountry (required) - Country name (e.g., "USA")Example Request:
https://pvaotp.com/api/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://pvaotp.com/api/json/get_countries.php
Method: GET
Parameters:
customer (required) - Your API keyExample Request:
https://pvaotp.com/api/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://pvaotp.com/api/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://pvaotp.com/api/json/get_number.php?customer=YOUR_API_KEY&app=Google+Voice&country=USA&duration=3 days
Example Request (Filter by US Area Code):
https://pvaotp.com/api/json/get_number.php?customer=YOUR_API_KEY&app=Google+Voice&country=USA&area_code=201&duration=3 days
Example Request (Reuse Number):
https://pvaotp.com/api/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://pvaotp.com/api/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://pvaotp.com/api/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://pvaotp.com/api/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://pvaotp.com/api/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://pvaotp.com/api/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://pvaotp.com/api/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.
Success 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 message400 - 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