💬

WhatsApp Number Validation & Profile Lookup APIs

Verify whether phone numbers are registered on WhatsApp and retrieve public profile data in real time.

RESTful JSON API for lead validation, CRM enrichment, and customer intelligence.

Try the interactive demo

Overview

💡

Base URL https://api.opendata-api.com

Every call needs an API key. Paste it once below — it's attached to each request automatically.

GET /api/project/whatsapp/check-exist-by-phone

Check WhatsApp Account Exists (by Full Number)

Details

Lightweight existence check for a single number — returns whether the phone number is registered on WhatsApp, without fetching full profile details. Cheaper than a full profile lookup. Pass the full international number (with or without +, spaces, dashes, or 00 prefix); the backend parses it with libphonenumber. isExist can be true, false, or null (indeterminate — retry after a short backoff). When isExist=true, the response includes hasExtra (enrichment fields available for this number: always avatar and about, plus sparse deviceName / email / waOldDeviceName when known) and a userHash that must be passed to the profile/extra endpoints (Get Avatar / Get About / Get Device Name / Get Email / Get Previous Device Name / Get Business Profile / Get Presence) to authorize the heavier lookup. The userHash is valid for 24 hours.

ParameterInValue
phoneNumber* query
curl -X GET 'https://api.opendata-api.com/api/project/whatsapp/check-exist-by-phone?key=<API_KEY>&phoneNumber=<phoneNumber>'
GET /api/project/whatsapp/check-exist-by-cc-phone

Check WhatsApp Account Exists (CC + Phone Split)

Details

Same as Check WhatsApp Account Exists, but the country code and the national phone number are supplied as separate parameters. Use this when you already know the country code and want to bypass the backend's auto-split. cc is the dial prefix without + (1–4 digits); phone is the national subscriber number (6–15 digits, no leading zero). isExist can be true, false, or null (indeterminate — retry recommended). When isExist=true, the response includes hasExtra (avatar/about always when registered, plus sparse deviceName/email/waOldDeviceName when known) and a userHash to pass to Get Avatar / Get About / Get Device Name / Get Email / Get Previous Device Name / Get Business Profile / Get Presence.

ParameterInValue
cc* query
phone* query
curl -X GET 'https://api.opendata-api.com/api/project/whatsapp/check-exist-by-cc-phone?key=<API_KEY>&cc=<cc>&phone=<phone>'
GET /api/project/whatsapp/get-device-name

Get Device / Owner Name

Details

Fetch the owner display name decoded from the WhatsApp registration cert (typically only for currently active accounts). Two-step flow: call Check WhatsApp Account Exists first; only call this when hasExtra lists "deviceName". Pass the returned userHash here — the number is resolved server-side. Invalid/expired userHash is rejected without hitting upstream. When the field is absent, deviceName is null and message explains why.

ParameterInValue
userHash* query
curl -X GET 'https://api.opendata-api.com/api/project/whatsapp/get-device-name?key=<API_KEY>&userHash=<userHash>'
GET /api/project/whatsapp/get-email

Get Masked Backup Email

Details

Fetch the masked backup email from WhatsApp registration metadata (e.g. u*******6@gmail.com). This is not a business-profile contact email. Two-step flow: call Check WhatsApp Account Exists first; only call this when hasExtra lists "email". Pass the returned userHash here — the number is resolved server-side. Invalid/expired userHash is rejected without hitting upstream. When the field is absent, email is null and message explains why.

ParameterInValue
userHash* query
curl -X GET 'https://api.opendata-api.com/api/project/whatsapp/get-email?key=<API_KEY>&userHash=<userHash>'
GET /api/project/whatsapp/get-wa-old-device-name

Get Previous Device Name

Details

Fetch the previous-device name (wa_old_device_name) from WhatsApp registration metadata when the account is eligible for wa_old re-auth. Two-step flow: call Check WhatsApp Account Exists first; only call this when hasExtra lists "waOldDeviceName". Pass the returned userHash here — the number is resolved server-side. Invalid/expired userHash is rejected without hitting upstream. When the field is absent, waOldDeviceName is null and message explains why.

ParameterInValue
userHash* query
curl -X GET 'https://api.opendata-api.com/api/project/whatsapp/get-wa-old-device-name?key=<API_KEY>&userHash=<userHash>'
GET /api/project/whatsapp/get-avatar

Get Profile Avatar (Display Photo)

Details

Fetch the public display photo (DP) of a WhatsApp user. Two-step flow: first call Check WhatsApp Account Exists (by Full Number) to obtain a userHash for the target number, then pass that userHash here. Calls without a valid (or expired/unknown) userHash are rejected without hitting the upstream. The number is resolved from the userHash server-side — no phone parameter is accepted. If the number is registered but the user has no photo or hides it by privacy, pictureSet=false and reason explains why. When pictureSet=true, the response includes the temporary photo URL and a picture version id that changes when the photo changes.

ParameterInValue
userHash* query
curl -X GET 'https://api.opendata-api.com/api/project/whatsapp/get-avatar?key=<API_KEY>&userHash=<userHash>'
GET /api/project/whatsapp/get-about

Get About / Status Text

Details

Retrieve the user's About (status signature) text and profile-picture version id. Two-step flow: obtain a userHash via Check WhatsApp Account Exists (by Full Number) first, then pass it here. Invalid/expired userHash is rejected without hitting the upstream. If the number is not registered, exists=false; an empty about means the user has no status text or hides it.

ParameterInValue
userHash* query
curl -X GET 'https://api.opendata-api.com/api/project/whatsapp/get-about?key=<API_KEY>&userHash=<userHash>'
GET /api/project/whatsapp/get-biz-profile

Get Business Profile

Details

Retrieve the WhatsApp Business profile: business name, verified level, description, address, email, website, and member-since info. Two-step flow: obtain a userHash via a check-exist endpoint first, then pass it here. Invalid/expired userHash is rejected. Personal (non-business) numbers return isBusiness=false.

ParameterInValue
userHash* query
curl -X GET 'https://api.opendata-api.com/api/project/whatsapp/get-biz-profile?key=<API_KEY>&userHash=<userHash>'
GET /api/project/whatsapp/get-presence

Get Presence / Last Seen

Details

Retrieve online state / last-seen. Strongly constrained by the target's privacy: if the requester is not a contact and the target's last-seen/online privacy is not set to everyone, presence is not delivered and visible=false (a real result that cannot be bypassed). Two-step flow: obtain a userHash via a check-exist endpoint first, then pass it here. A single call can take up to ~17s.

ParameterInValue
userHash* query
curl -X GET 'https://api.opendata-api.com/api/project/whatsapp/get-presence?key=<API_KEY>&userHash=<userHash>'
GET /api/project/whatsapp/check-active

Check Active Status

Details

Check in real time whether a phone number is registered and active on WhatsApp. Returns a direct active flag for the full international number — a standalone check that does not require a userHash. Ideal for quick yes/no validation in signup flows and list hygiene.

ParameterInValue
phoneNumber* path
curl -X GET 'https://api.opendata-api.com/api/project/whatsapp/check-active?key=<API_KEY>&phoneNumber=<phoneNumber>'
GET /api/project/whatsapp/batch-check-10

Batch Check (up to 10 numbers)

Details

Check whether up to 10 phone numbers are registered on WhatsApp in a single request. Returns exist and isBusiness status for each number. Supply numbers as a comma-separated list. Efficient for validating small batches in one call.

ParameterInValue
accounts* query
curl -X GET 'https://api.opendata-api.com/api/project/whatsapp/batch-check-10?key=<API_KEY>&accounts=<accounts>'