✅ Trusted by 301,310+ users · ⭐ 4.1/5 on Trustpilot · 200+ countries

Read FAQs →
301,310+ users4.1/5 rating🌍 200+ countries⚡ Quickstart❓ FAQs📚 Full reference
🧩 API integration · copy/paste quickstart

PVAPins API docs for SMS verification

Integrate faster: request numbers, receive OTP SMS, handle errors cleanly, and scale with polling best practices. Base URL: https://api.pvapins.com/user/api/

  • Quickstart to first OTP — temporary or rent flow
  • Clear endpoints + examples — with copy buttons
  • Rate limits + errors — stable production integrations

Responsible use: Follow local laws and each platform’s terms. PVAPins is not affiliated with third-party apps.

60–90s quickstart

Minimal steps to your first OTP via API.

🔑 Needs API key
1
Create accountCopy your API key from the dashboard.
2
Load listsCountries → apps → pick service IDs.
3
Get numberRequest a number for country + app.
4
Fetch OTPPoll the SMS endpoint until the code arrives.
SMS verification and API integration
Tip for devsUse retry/backoff to respect rate limits and reduce failed polls.

Why developers use PVAPins API

Predictable responses, clear flows, and practical guidance for production.

Fast integration

From API key → number → OTP with copy/paste requests and expandable reference below.

🧭

Structured flows

Separate temporary and rent logic so your code stays easier to debug.

🛡️

Stability

Rate-limit-friendly polling, error mapping, and retry tips.

Quickstart (temporary flow)

Replace YOUR_API_KEY, COUNTRY_ID, APP_ID, and NUMBER with your values.

1) Load countries (no auth)
curl -s 'https://api.pvapins.com/user/api/load_countries.php'
2) Load apps for a country (no auth)
curl -s 'https://api.pvapins.com/user/api/load_apps.php?country_id=COUNTRY_ID'
3) Request number (auth)
curl -s 'https://api.pvapins.com/user/api/get_number.php?customer=YOUR_API_KEY&app=APP_NAME&country=COUNTRY_NAME'
4) Poll SMS / OTP (auth)
# Poll every 3–6s with backoff
curl -s 'https://api.pvapins.com/user/api/get_sms.php?customer=YOUR_API_KEY&number=NUMBER&country=COUNTRY_NAME&app=APP_NAME'

Integration tip: Use exponential backoff (e.g. 3s → 5s → 8s) and stop after a timeout.

Authentication & API key

Most action endpoints require your API key as the customer query parameter. Never expose it in client-side code.

🔑

Get your API key

Register, open your dashboard, and copy the key. Use it only on your server.

🧱

Security

Store keys in environment variables, rotate if leaked, and log requests in production.

Temporary numbers — core endpoints

One-time verification sessions. See full reference for payloads and errors.

Load countries

GET https://api.pvapins.com/user/api/load_countries.php
No auth
Purpose
Country list and IDs for your UI

Load apps

GET …/load_apps.php?country_id=
No authcountry_id
Required
country_id
Purpose
Apps/services available for that country

Get rates

GET …/get_rates.php
Auth
Params
customer, country (and app per docs)

Get number

GET …/get_number.php
AuthRate limit
Required
customer, app, country

Get SMS (OTP)

GET …/get_sms.php
Auth
Required
customer, number, country, app

Rent numbers API

For repeated OTPs or longer access — keep rent calls separate in your codebase.

🔁

When to rent

Repeat logins, re-verification, or when you may need another code on the same line.

🧩

API difference

Use rent-specific parameters (e.g. is_rent=1) as in the reference below.

Example: rent number request
curl -s 'https://api.pvapins.com/user/api/get_number.php?customer=YOUR_API_KEY&app=APP_NAME&country=COUNTRY_NAME&is_rent=1'

Errors, rate limits & stability

Treat limits as normal — throttle, backoff, and map errors to clear actions.

⏱️

Polling

Start around 3–6s, then backoff; stop after a max wait; log failures.

🚦

Rate limits

Throttle concurrent polls; queue requests under load.

🧾

Error mapping

One internal table: message → meaning → action (retry / new number / balance / key).

ErrorMeaningAction
Customer Not FoundInvalid or missing API keyVerify customer; rotate if leaked
No Number FoundNo inventory for selectionTry another country/app or timing
Not Possible (limit)Rate limitBackoff and retry later

Temporary vs rent

Pick the right model before you wire up automation.

OptionBest forRepeat accessNext step
TemporaryOne-off verification or testingNoRun quickstart →
RentMultiple OTPs / longer windowYesRent options →
RatesPricing by country & appPricing →

FAQs

Quick answers for integrators.

How do I get my PVAPins API key?

Register, log in, and copy your key from the dashboard. Use it server-side only.

Which endpoints don’t need authentication?

Listing countries/apps is typically public; requesting numbers and fetching SMS requires your key.

Fastest way to get an OTP?

Request a number, then poll get_sms with backoff until the code appears or you time out.

Temporary vs rent?

Temporary is for a short session; rent keeps the same line for repeated codes over a rental period.

“Customer Not Found”?

Check the customer parameter matches your API key exactly.

No SMS arriving?

Wait, poll with backoff, then try another route; avoid hammering the API.

Rate limits?

Yes — design throttling and exponential backoff into your integration.

Automation at scale?

Use monitoring, error mapping, and compliance controls; follow platform terms.

Need help integrating?

Use the quickstart and full reference, then contact us if you want flow validation or troubleshooting.

Full endpoint reference

Expand each block for parameters, examples, and error messages. Switch tabs for temporary vs rent endpoints.

GET Load Countries
Endpoint:
https://api.pvapins.com/user/api/load_countries.php
Example Request:
https://api.pvapins.com/user/api/load_countries.php
Parameters:
• No parameters required - returns all available countries
Response Format:
[ { "id": 58, "full_name": "USA" }, { "id": 62, "full_name": "UK" } ]
Response Fields:
id: Unique country identifier
full_name: Full country name
Notes:
  • This endpoint returns a JSON array of all available countries
  • No authentication required
  • Useful for populating country dropdowns in applications
  • Country names can be used with other API endpoints
GET Load Apps
Endpoint:
https://api.pvapins.com/user/api/load_apps.php?country_id=country_id
Example Request:
https://api.pvapins.com/user/api/load_apps.php?country_id=58
Parameters:
country_id: Country ID to get apps for (required)
Response Format:
[ { "id": 2548, "full_name": "Facebook40", "timestamp": "2025-08-13 10:25:32", "trending": 1, "deduct": "0.91" }, { "id": 2551, "full_name": "Gmail40", "timestamp": "2025-08-14 14:47:36", "trending": 1, "deduct": "0.84" } ]
Response Fields:
id: Unique app identifier
full_name: Full app name
timestamp: Last update timestamp
trending: Trending status (1 = trending, 0 = not trending)
deduct: Cost deduction amount
Notes:
  • This endpoint returns a JSON array of all available apps for a specific country
  • No authentication required
  • Useful for populating app dropdowns in applications
  • App names can be used with other API endpoints
  • Trending apps are marked with trending=1
  • Deduct field shows the cost for using this app
GET Check Rates
Endpoint:
https://api.pvapins.com/user/api/get_rates.php?customer=apikey&country=countryname
Example Request:
https://api.pvapins.com/user/api/get_rates.php?customer=YOUR_API_KEY&country=malaysia
Parameters:
customer: Your API key (required)
country: Country name to check rates for
Error Messages:
  • Customer Not Found
GET Get Number
Endpoint:
https://api.pvapins.com/user/api/get_number.php?customer=apikey&app=appname&country=countryname
Example Request (New Number):
https://api.pvapins.com/user/api/get_number.php?customer=YOUR_API_KEY&app=google&country=malaysia
Example Request (Reuse Number):
https://api.pvapins.com/user/api/get_number.php?customer=YOUR_API_KEY&app=google&country=malaysia&number=112869xxx
Parameters:
customer: Your API key (required)
app: Application name (e.g., google, whatsapp, telegram)
country: Country name (e.g., malaysia, indonesia, philippines)
number: Phone number to reuse (optional, for reuse feature only)
Rate Limit: 5 numbers per minute
🔄 Reuse Number Feature:
Free of charge - No deduction when reusing a number
15 minutes limit - Can only reuse numbers within 15 minutes of creation
User history required - Number must exist in your usage history
Usage: Add &number=PHONE_NUMBER parameter to reuse a previously used number
Example:?customer=apikey&app=google&country=malaysia&number=112869xxx
Error Messages:
  • Customer Not Found.
  • App Not Found.
  • Country Not Found.
  • Number not found in your history. (when reusing)
  • Number reuse is only available for supported services.
  • New Numbers registration in progress, please wait or check back later.
  • Error 102, check back later.
GET Get SMS
Endpoint:
https://api.pvapins.com/user/api/get_sms.php?customer=apikey&number=number&country=countryname&app=appname
Example Request:
https://api.pvapins.com/user/api/get_sms.php?customer=YOUR_API_KEY&number=112869xxx&country=malaysia&app=google
Parameters:
customer: Your API key (required)
number: Phone number to check SMS for
country: Country name
app: Application name
Error Messages:
  • Customer Not Found.
  • Number Not Found.
  • You have not received any code yet.
  • Your balance is expired.
  • Error 102, check back later.
GET Reject Number
Endpoint:
https://api.pvapins.com/user/api/get_reject_number.php?customer=apikey&number=number&country=countryname&app=appname
Example Request:
https://api.pvapins.com/user/api/get_reject_number.php?customer=YOUR_API_KEY&number=112869xxx&country=malaysia&app=google
Parameters:
customer: Your API key (required)
number: Phone number to reject
country: Country name
app: Application name
Time Limit: 3 minutes per number
Error Messages:
  • Customer Not Found.
  • App Not Found.
  • Country Not Found.
  • Number Not Found.
  • Number Rejected.
  • Not able to reject.
  • Error 102, check back later.
  • Limit: 3 MINUTES PER NUMBER
GET Check Balance
Endpoint:
https://api.pvapins.com/user/api/get_balance.php?customer=apikey
Example Request:
https://api.pvapins.com/user/api/get_balance.php?customer=YOUR_API_KEY
Parameters:
customer: Your API key (required)
Error Messages:
  • Customer Not Found
GET Get History
Endpoint:
https://api.pvapins.com/user/api/get_history.php?customer=apikey
Example Request:
https://api.pvapins.com/user/api/get_history.php?customer=YOUR_API_KEY
Parameters:
customer: Your API key (required)
Error Messages:
  • Customer Not Found

Rent Numbers API Endpoints

API endpoints for renting phone numbers for extended periods. These endpoints include the is_rent=1 parameter to distinguish from temporary numbers.

GET Load Countries (Rent)
Endpoint:
https://api.pvapins.com/user/api/load_countries.php?is_rent=1
Example Request:
https://api.pvapins.com/user/api/load_countries.php?is_rent=1
Parameters:
is_rent: Set to 1 to get countries available for rent (required)
Note: This endpoint returns countries that support number rental services
Response Format:
[ { "id": 58, "full_name": "USA" }, { "id": 62, "full_name": "UK" } ]
Response Fields:
id: Unique country identifier
full_name: Full country name
GET Load Apps (Rent)
Endpoint:
https://api.pvapins.com/user/api/load_apps.php?country_id=country_id&is_rent=1
Example Request:
https://api.pvapins.com/user/api/load_apps.php?country_id=58&is_rent=1
Parameters:
country_id: Country ID to get apps for (required)
is_rent: Set to 1 to get apps available for rent (required)
Note: This endpoint returns apps that support number rental services
Response Format:
[ { "id": 2333, "full_name": "Rent Adidas", "timestamp": "2025-06-17 21:04:01", "trending": 0, "deduct": "10.00" }, { "id": 2349, "full_name": "Rent Airbnb", "timestamp": "2025-06-17 21:03:54", "trending": 0, "deduct": "10.00" } ]
Response Fields:
id: Unique app identifier
full_name: Full app name
timestamp: Last update timestamp
trending: Trending status (1 = trending, 0 = not trending)
deduct: Cost deduction amount for rental
Notes:
  • This endpoint returns a JSON array of all available apps for rent in a specific country
  • No authentication required
  • Useful for populating app dropdowns in rental applications
  • App names can be used with other rental API endpoints
  • Trending apps are marked with trending=1
  • Deduct field shows the rental cost for using this app
GET Get Number (Rent)
Endpoint:
https://api.pvapins.com/user/api/rent.php?customer=apikey&app=appname&country=countryname
Example Request:
https://api.pvapins.com/user/api/rent.php?customer=YOUR_API_KEY&app=google&country=malaysia
Parameters:
customer: Your API key (required)
app: Application name (e.g., google, whatsapp, telegram)
country: Country name (e.g., malaysia, indonesia, philippines)
Rate Limit: 5 numbers per minute
Success Response:
{ "data": "112869xxx", "code": 100 }
Error Response:
{ "data": "Currently, The number is unavailable, Try again later", "code": 200 }
Response Fields:
data: Phone number (success) or error message (failure)
code: Response code (100 = success, 200 = error)
Notes:
  • This endpoint is specifically for renting phone numbers for extended periods
  • Authentication required via API key
  • Rate limited to 5 numbers per minute
  • Returns a rented phone number that can be used for longer periods
  • Use the returned number with other rental-specific endpoints
GET Load Rented Numbers
Endpoint:
https://api.pvapins.com/user/api/load_rent.php?customer=apikey
Example Request:
https://api.pvapins.com/user/api/load_rent.php?customer=YOUR_API_KEY
Parameters:
customer: Your API key (required)
Success Response:
[ { "id": 728, "user_id": "80768a26e52ca6156081", "key_id": "840811", "key_id2": null, "app_id": 2327, "number": "12817437990", "deduct": "3.33", "duration": 3, "country_id": "58", "is_released": 0, "auto_renew": 0, "received_message": 0, "api": "1010", "timestamp": "2025-08-17 20:14:13", "app_name": "Rent GPay GPlay GVoice", "country_name": "USA", "timestamp_readable": "17/08/2025 08:14 pm", "days": 2, "expiry": "2025-08-20 20:14:13" } ]
Response Fields:
id: Unique rental ID
user_id: User identifier
key_id: Key identifier
app_id: Application ID
number: Rented phone number
deduct: Cost deduction amount
duration: Rental duration in days
country_id: Country identifier
is_released: Release status (0 = active, 1 = released)
auto_renew: Auto-renewal status (0 = disabled, 1 = enabled)
received_message: Message count received
api: API identifier
timestamp: Rental start timestamp
app_name: Application name
country_name: Country name
timestamp_readable: Human-readable timestamp
days: Days remaining in rental
expiry: Rental expiry date and time
Notes:
  • This endpoint retrieves all currently rented phone numbers for your account
  • Authentication required via API key
  • Returns detailed information about each rented number including expiry dates
  • Use this endpoint to manage and monitor all your rented numbers
  • The days field shows remaining rental days
  • Check is_released to see if a number is still active
  • Response includes country and app information for each rented number
GET Get SMS (Rent)
Endpoint:
https://api.pvapins.com/user/api/load_rent_code.php?customer=apikey&country=countryname&app=appname&number=number
Example Request:
https://api.pvapins.com/user/api/load_rent_code.php?customer=YOUR_API_KEY&country=USA&app=Rent%20GPay%20GPlay%20GVoice&number=12817437990
Parameters:
customer: Your API key (required)
country: Country name (e.g., USA, UK, malaysia)
app: Application name (e.g., Rent GPay GPlay GVoice)
number: Rented phone number to check SMS for (required)
Success Response:
[ { "from": "22000", "message": "If someone requests this code, it is a scam. Use code 418494 only in Google Voice app to sign up. g.co/voice/help", "timestamp": "17/08/2025 08:15 pm" }, { "from": "Billing", "message": "3-day MDN rental started", "timestamp": "17/08/2025 08:14 pm" } ]
Response Fields:
from: Sender of the SMS message
message: Content of the SMS message
timestamp: Date and time when the SMS was received
Notes:
  • This endpoint retrieves SMS messages for rented phone numbers
  • Authentication required via API key
  • Returns an array of SMS messages with sender, content, and timestamp
  • Use this endpoint to check for verification codes and other messages
  • Messages are returned in chronological order (newest first)
  • URL encode app names that contain spaces (e.g., "Rent GPay GPlay GVoice")
GET Reject Number (Rent)
Endpoint:
https://api.pvapins.com/user/api/reject_rent.php?customer=apikey&app=appname&country=countryname&number=number
Example Request:
https://api.pvapins.com/user/api/reject_rent.php?customer=YOUR_API_KEY&app=google&country=malaysia&number=121345698
Parameters:
customer: Your API key (required)
app: Application name (e.g., google, whatsapp, telegram)
country: Country name (e.g., malaysia, indonesia, philippines)
number: Phone number to reject (required)
Success Response:
{ "data": "Rejected", "code": 100 }
Error Response:
{ "data": "Cant Rejected", "code": 200 }
Response Fields:
data: Response message (success or error)
code: Response code (100 = success, 200 = error)
Notes:
  • This endpoint allows you to reject/return a rented phone number
  • Authentication required via API key
  • Use this when you no longer need a rented number
  • Rejecting a number will release it back to the pool
  • Only works with numbers that are currently rented by your account
  • Check the response code to confirm if the rejection was successful
GET Renew Number (Rent)
Endpoint:
https://api.pvapins.com/user/api/rent_renew_number.php?customer=apikey&app=appname&country=countryname&number=number
Example Request:
https://api.pvapins.com/user/api/rent_renew_number.php?customer=YOUR_API_KEY&app=google&country=malaysia&number=121345698
Parameters:
customer: Your API key (required)
app: Application name (e.g., google, whatsapp, telegram)
country: Country name (e.g., malaysia, indonesia, philippines)
number: Phone number to renew (required)
Success Response:
{ "data": "Status Updated", "code": 100 }
Error Response:
{ "data": "Not enough balance", "code": 200 }
Response Fields:
data: Response message (success or error)
code: Response code (100 = success, 200 = error)
Notes:
  • This endpoint allows you to extend the rental period of a phone number
  • Authentication required via API key
  • Use this to keep a rented number for additional time periods
  • Requires sufficient balance in your account
  • Only works with numbers that are currently rented by your account
  • Check the response code to confirm if the renewal was successful
  • Renewal will extend the rental by the original duration period
Get API keyQuickstart