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/
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 |
| 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
Rate limit exceeded. Wait a moment before trying again.
Internal Server Error
Something went wrong on our end. Please try again later.