API Documentation
Integrate WhatsApp number validation directly into your applications with our powerful REST API.
Quick Start
Get started in 2 minutes
Get your API Key
Generate an API key from your dashboard.
Make your first request
Use the example below to validate a phone number.
Handle the response
Check the status field to determine if the number is valid.
Authentication
Secure your API requests
All API requests require authentication using a Bearer token. Include your API key in the Authorization
header.
Authorization: Bearer YOUR_API_KEY
Keep your API key secure!
Never expose your API key in client-side code. Always make API calls from your server.
Base URL
API endpoint base
All API requests should be made to:
https://wavalidator.com/api/v1/
Validate Number
Check if a phone number has WhatsApp
/api/v1/validate/
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| phone_number | string | Required | Phone number with country code (e.g., "14155551234") |
{
"phone_number": "14155551234"
}
Response
| Field | Type | Description |
|---|---|---|
| phone_number | string | The validated phone number |
| status | string | "valid" if registered on WhatsApp, "invalid" if not, or "limit" when a rate limit has been reached (HTTP 429) |
| credits_remaining | integer | Your remaining credit balance |
{
"phone_number": "14155551234",
"status": "valid",
"credits_remaining": 99
}
{
"phone_number": "14155550000",
"status": "invalid",
"credits_remaining": 98
}
Code Examples
Ready-to-use code snippets
import requests
url = "https://wavalidator.com/api/v1/validate/"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"phone_number": "14155551234"
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
if result["status"] == "valid":
print("✓ Number has WhatsApp!")
else:
print("✗ Number does not have WhatsApp")
Bulk Check
Validate up to 100 numbers in one request
Pricing: 1 credit per number
Each number in the payload costs 1 credit. Maximum 100 numbers per request. Only successfully checked numbers consume credits.
/api/v1/bulk-check/
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
| numbers | array[string] | Required | Array of phone numbers with country code. Max 100 items. |
{
"numbers": [
"14155551234",
"14155550000",
"447911123456"
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| checked | integer | Number of numbers actually processed |
| invalid | integer | Numbers skipped due to empty/invalid format |
| total | integer | Total numbers submitted in payload |
| credits_used | integer | Credits consumed by this request |
| credits_remaining | integer | Your remaining credit balance |
| results | array | Per-number result objects (see below) |
Result Object
| Field | Type | Description |
|---|---|---|
| number | string | The phone number checked |
| exists | boolean | true if the number has WhatsApp, false otherwise |
| source | string | Data source used for the check (e.g. "live") |
Example Response
{
"checked": 3,
"invalid": 0,
"total": 3,
"credits_used": 3,
"credits_remaining": 97,
"results": [
{
"number": "14155551234",
"exists": true,
"source": "live"
},
{
"number": "14155550000",
"exists": false,
"source": "live"
},
{
"number": "447911123456",
"exists": true,
"source": "live"
}
]
}
Code Examples
import requests
url = "https://wavalidator.com/api/v1/bulk-check/"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"numbers": ["14155551234", "14155550000", "447911123456"]
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
print(f"Checked: {result['checked']} numbers")
for r in result['results']:
status = "✓ Has WhatsApp" if r['exists'] else "✗ No WhatsApp"
print(f"{r['number']}: {status}")
Error Handling
Handle errors gracefully
Bad Request
Invalid JSON format or missing phone_number parameter.
Unauthorized
Missing or invalid API key. Check your Authorization header.
Payment Required
You've run out of credits. Purchase more credits to continue.
Too Many Requests — "status": "limit"
Rate limit reached (per-minute). The
response body carries "status": "limit".
Wait before trying again.
Internal Server Error
Something went wrong on our end. Please try again later.