PVADeals API

Build powerful SMS verification solutions with our non-VoIP phone number API. Get access to real carrier phone numbers for account verification across hundreds of services.

Base URL https://prod-v3.pvadeals.com

Introduction

The PVADeals API provides programmatic access to our SMS verification service. Use it to purchase phone numbers, receive SMS codes, and manage your verification workflow.

๐Ÿ“ฑ

Non-VoIP Numbers

Real carrier phone numbers that work with services that block VoIP.

โšก

Instant Delivery

SMS codes typically arrive within seconds of being sent.

๐Ÿ“ฅ

Postman Collection

Download our ready-to-use API collection to get started quickly.

Download JSON

Authentication

All API requests require authentication using your API key. Include it in the Authorization header with the Bearer prefix.

Request Header
Authorization: Bearer API-xxxxx...
๐Ÿ”‘

Getting Your API Key

Sign up at https://app.pvadeals.com/ to get your API key. Once registered, navigate to Settings โ†’ API Keys to generate or view your API key.

Example Request with Authentication

cURL
curl -X GET "https://prod-v3.pvadeals.com/v3/api/balance" \
  -H "Authorization: Bearer API-Y72DLKL33gGR2mDCOeZgNGriyL2yT56d..."

Quick Start

Follow this typical integration flow to purchase a number and receive an SMS verification code.

1
Get Services
โ†’
2
Purchase Number
โ†’
3
Use Number
โ†’
4
Receive Webhook
โ†’
5
Complete

Step 1: Get Available Services

cURL
curl -X GET "https://prod-v3.pvadeals.com/v3/api/services/all" \
  -H "Authorization: Bearer API-xxxxx..."

Step 2: Purchase a Number

cURL
curl -X POST "https://prod-v3.pvadeals.com/v3/api/purchase" \
  -H "Authorization: Bearer API-xxxxx..." \
  -H "Content-Type: application/json" \
  -d '{
    "services": [
      {"serviceId": "697139f7fe5460ddc2f27214"}
    ]
  }'

Step 3: Receive SMS via Webhook

Configure your webhook URL in the dashboard. When an SMS arrives, you'll receive a POST request with the verification code.

Rate Limits

To ensure fair usage and system stability, the API enforces the following rate limits:

Limit Type Limit Window Notes
API Requests 100 requests 60 seconds (rolling) Per API key

Rate Limit Response

When you exceed the rate limit, you'll receive a 429 Too Many Requests response:

429 Response
{
  "message": "API Rate limit exceeded. Maximum 100 requests per minute.",
  "status": 429,
  "retryAfter": 60
}
โš ๏ธ

Retry After

The retryAfter field indicates how many seconds to wait before making another request.

Error Handling

The API uses standard HTTP status codes to indicate success or failure of requests.

Status Code Meaning Common Causes
200 OK Success Request completed successfully
400 Bad Request Invalid Request Missing required fields, invalid JSON
401 Unauthorized Authentication Failed Missing or invalid API key
404 Not Found Resource Not Found Request ID or Service ID doesn't exist
422 Unprocessable Business Rule Violation Flag/Reuse not allowed for this request
429 Too Many Requests Rate Limit Exceeded Too many requests, wait and retry

Error Response Format

Error Response
{
  "success": false,
  "message": "Unauthorized Access! Invalid API key",
  "status": 401
}

Get Balance

Retrieve your current account balance and credit information.

GET /v3/api/balance

Example Request

cURL
curl -X GET "https://prod-v3.pvadeals.com/v3/api/balance" \
  -H "Authorization: Bearer API-xxxxx..."

Response

200 OK
{
  "success": true,
  "data": {
    "credits": 100.00
  },
  "message": "Balance retrieved successfully"
}

Response Fields

credits number Current account balance in USD

Get All Services

Retrieve a list of all available services for SMS verification.

GET /v3/api/services/all

Example Request

cURL
curl -X GET "https://prod-v3.pvadeals.com/v3/api/services/all" \
  -H "Authorization: Bearer API-xxxxx..."

Response

200 OK
{
  "success": true,
  "data": {
    "services": [
      {
        "_id": "697139f4fe5460ddc2f271e9",
        "name": "3Fun",
        "country": "USA",
        "price": 0.1
      },
      {
        "_id": "697139f7fe5460ddc2f27214",
        "name": "Airbnb",
        "country": "USA",
        "price": 0.2
      }
    ]
  }
}

Response Fields

_id string Service ID (use this for purchase)
name string Service/website name
country string Country (USA)
price number Price per number in USD

Purchase Number

Purchase one or more phone numbers for SMS verification. Numbers are available for 20 minutes.

POST /v3/api/purchase

Request Body

๐Ÿ“ฆ Request Body
services* array Array of service objects to purchase
โ”” serviceId* string Service ID from /services/all endpoint

Example Request

cURL
curl -X POST "https://prod-v3.pvadeals.com/v3/api/purchase" \
  -H "Authorization: Bearer API-xxxxx..." \
  -H "Content-Type: application/json" \
  -d '{
    "services": [
      {"serviceId": "697139f7fe5460ddc2f27214"}
    ]
  }'

Response

200 OK
{
  "success": true,
  "data": {
    "requests": [
      {
        "_id": "697a90d25ef1873ef44f48bc",
        "serviceName": "Airbnb",
        "serviceId": "697139f7fe5460ddc2f27214",
        "number": "+13130001234",
        "status": "RESERVED",
        "country": "US",
        "amount": 0.2,
        "numberType": "STR",
        "allowFlag": true,
        "allowReuse": false,
        "reuseCounter": 0,
        "endTime": "2026-01-28T23:02:26.292Z",
        "createdAt": "2026-01-28T22:42:26.452Z"
      }
    ]
  },
  "message": "Numbers purchased successfully"
}
๐Ÿ“จ

Webhook Notification

A number_purchased webhook event will be sent to your configured webhook URL after a successful purchase.

Flag Number

Flag a number to cancel it and receive a refund (if eligible). Only available when allowFlag: true.

POST /v3/api/flag/{id}

Path Parameters

Parameter Type Description
id* string The service request ID to flag

Example Request

cURL
curl -X POST "https://prod-v3.pvadeals.com/v3/api/flag/697a90d25ef1873ef44f48bc" \
  -H "Authorization: Bearer API-xxxxx..."

Response

200 OK
{
  "success": true,
  "data": true,
  "message": "Number flagged successfully"
}
โš ๏ธ

Flag Availability

Check the allowFlag field before attempting to flag. If allowFlag: false, the request will return a 422 error.

Reuse Number

Reuse a previously purchased number to receive additional SMS codes. Only available when allowReuse: true.

POST /v3/api/reuse/{id}

Path Parameters

Parameter Type Description
id* string The service request ID to reuse

Example Request

cURL
curl -X POST "https://prod-v3.pvadeals.com/v3/api/reuse/697a8d4f8130528198e0c0eb" \
  -H "Authorization: Bearer API-xxxxx..."

Response

200 OK
{
  "success": true,
  "data": {
    "_id": "697a8d4f8130528198e0c0eb",
    "serviceName": "Airbnb",
    "serviceId": "697a8d4f8130528198e0c0f4",
    "number": "+13130001234",
    "status": "RESERVED",
    "country": "USA",
    "amount": 0,
    "numberType": "STR",
    "allowFlag": false,
    "allowReuse": true,
    "reuseCounter": 2,
    "endTime": "2026-01-28T23:07:17.000Z"
  },
  "message": "Number reused successfully"
}
โš ๏ธ

Reuse

Reuse is time-limited and not guaranteed for all numbers. In some cases, additional charges may apply.

List Service Requests

Get a paginated list of your service requests (purchased numbers) using cursor-based pagination.

GET /v3/api/requests

Query Parameters

Parameter Type Default Description
first number 20 Number of items to fetch
after string - Cursor for forward pagination
before string - Cursor for backward pagination
orderField string _id Field to sort by
orderBy string desc Sort order: asc or desc

Example Request

cURL
curl -X GET "https://prod-v3.pvadeals.com/v3/api/requests?first=20&orderBy=desc" \
  -H "Authorization: Bearer API-xxxxx..."

Response

200 OK
{
  "success": true,
  "data": {
    "data": {
      "edges": [
        {
          "cursor": "Njk3YTkwZDI1ZWYxODczZWY0NGY0OGJj",
          "node": {
            "_id": "697a90d25ef1873ef44f48bc",
            "serviceName": "Airbnb",
            "serviceId": "697139f7fe5460ddc2f27214",
            "number": "+13130001234",
            "status": "COMPLETED",
            "country": "US",
            "amount": 0.2,
            "numberType": "STR",
            "allowFlag": false,
            "allowReuse": true,
            "reuseCounter": 0,
            "endTime": "2026-01-28T23:02:26.292Z",
            "createdAt": "2026-01-28T22:42:26.452Z"
          }
        }
      ]
    }
  }
}

Get Service Request

Get detailed information about a specific service request by its ID.

GET /v3/api/request/{id}

Path Parameters

Parameter Type Description
id* string The service request ID

Example Request

cURL
curl -X GET "https://prod-v3.pvadeals.com/v3/api/request/697a90d25ef1873ef44f48bc" \
  -H "Authorization: Bearer API-xxxxx..."

Response

200 OK
{
  "success": true,
  "data": {
    "_id": "697a90d25ef1873ef44f48bc",
    "serviceName": "Airbnb",
    "serviceId": "697139f7fe5460ddc2f27214",
    "number": "+13130001234",
    "status": "COMPLETED",
    "country": "US",
    "amount": 0.2,
    "numberType": "STR",
    "allowFlag": false,
    "allowReuse": true,
    "reuseCounter": 0,
    "messageCounter": 15,
    "endTime": "2026-01-28T23:02:26.292Z",
    "createdAt": "2026-01-28T22:42:26.452Z",
    "updatedAt": "2026-01-28T22:57:35.016Z"
  },
  "message": "Service request retrieved successfully"
}

Status Values

Status Description
RESERVED Number purchased, waiting for SMS
COMPLETED SMS received successfully
FLAGGED Number was flagged/cancelled
TIMEOUT Number expired without receiving SMS

Webhooks

Configure a webhook URL in your dashboard to receive real-time notifications about events.

๐Ÿ”„

Webhook Retry Policy

Webhooks are retried up to 5 times with a 5-second delay between each attempt if delivery fails.

sms_received

Triggered when an SMS is received on a purchased number.

Webhook Payload
{
  "event": "sms_received",
  "timestamp": "2026-01-28T22:57:35.001Z",
  "requestId": "697a90d25ef1873ef44f48bc",
  "serviceId": "697139f7fe5460ddc2f27214",
  "number": "+13130001234",
  "message": "Your Airbnb verification code is 2200."
}

number_purchased

Triggered when a number is successfully purchased.

Webhook Payload
{
  "event": "number_purchased",
  "timestamp": "2026-01-28T22:42:26.452Z",
  "requestId": "697a90d25ef1873ef44f48bc",
  "serviceId": "697139f7fe5460ddc2f27214",
  "number": "+13130001234",
  "message": ""
}

number_flagged

Triggered when a number is flagged/cancelled.

Webhook Payload
{
  "event": "number_flagged",
  "timestamp": "2026-01-28T22:42:25.673Z",
  "requestId": "697a8d4f8130528198e0c0eb",
  "serviceId": "697a8d4f8130528198e0c0f4",
  "number": "+13130001234",
  "message": ""
}

number_reused

Triggered when a number is reused.

Webhook Payload
{
  "event": "number_reused",
  "timestamp": "2026-01-28T21:50:36.765Z",
  "requestId": "697a82bf27787d2db20a29a0",
  "serviceId": "697a82c127787d2db20a29a6",
  "number": "+13130001234",
  "message": ""
}

Webhook Payload Fields

event string Event type (sms_received, number_purchased, etc.)
timestamp string ISO 8601 timestamp of the event
requestId string Ordered number's request ID
serviceId string Website name's service ID
number string The phone number
message string SMS content (only for sms_received)