Python — WhatsApp Data API
Copy-paste Python examples using the standard `requests` library plus async variants with `httpx`. Works on Python 3.8+.
Install
pip install requests # or for async pip install httpx
Single profile lookup
import os
import requests
BASE = "https://whatsapp-proxy.checkleaked.cc"
HEADERS = {
# Direct proxy uses your direct-purchase key (issued in our dashboard).
# For RapidAPI marketplace: BASE = "https://whatsapp-data1.p.rapidapi.com"
# plus add: "x-rapidapi-host": "whatsapp-data1.p.rapidapi.com"
"x-rapidapi-key": os.environ["WHATSAPP_API_KEY"],
}
def lookup(number: str) -> dict:
r = requests.get(f"{BASE}/number/{number}", headers=HEADERS, timeout=10)
r.raise_for_status()
return r.json()
if __name__ == "__main__":
data = lookup("13105551234")
print(f"On WhatsApp: {data.get('isWAContact')}")
print(f"Business: {data.get('isBusiness')}")
print(f"About: {data.get('about')}")Async / concurrent lookup
import asyncio
import os
import httpx
BASE = "https://whatsapp-proxy.checkleaked.cc"
HEADERS = {
# Direct proxy uses your direct-purchase key (issued in our dashboard).
# For RapidAPI marketplace: BASE = "https://whatsapp-data1.p.rapidapi.com"
# plus add: "x-rapidapi-host": "whatsapp-data1.p.rapidapi.com"
"x-rapidapi-key": os.environ["WHATSAPP_API_KEY"],
}
async def lookup_many(numbers: list[str]) -> list[dict]:
async with httpx.AsyncClient(timeout=15, headers=HEADERS) as client:
tasks = [client.get(f"{BASE}/number/{n}") for n in numbers]
responses = await asyncio.gather(*tasks, return_exceptions=True)
return [r.json() if not isinstance(r, Exception) else {"error": str(r)} for r in responses]
if __name__ == "__main__":
out = asyncio.run(lookup_many(["13105551234", "447911123456", "34612345678"]))
print(out)Bulk check (single POST)
import os
import requests
BASE = "https://whatsapp-proxy.checkleaked.cc"
HEADERS = {
"x-rapidapi-key": os.environ["WHATSAPP_API_KEY"],
"Content-Type": "application/json",
}
def bulk_check(numbers: list[str]) -> list[dict]:
r = requests.post(
f"{BASE}/bulk_check",
json={"numbers": numbers},
headers=HEADERS,
timeout=60,
)
r.raise_for_status()
# Returns ARRAY: [{success, number, hasWhatsapp, isBanned, formatted, country, ...}, ...]
return r.json()Retries & rate-limit handling
import os
import time
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
BASE = "https://whatsapp-proxy.checkleaked.cc"
HEADERS = {
# Direct proxy uses your direct-purchase key (issued in our dashboard).
# For RapidAPI marketplace: BASE = "https://whatsapp-data1.p.rapidapi.com"
# plus add: "x-rapidapi-host": "whatsapp-data1.p.rapidapi.com"
"x-rapidapi-key": os.environ["WHATSAPP_API_KEY"],
}
session = requests.Session()
retry = Retry(
total=5,
backoff_factor=1.5,
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["GET"],
respect_retry_after_header=True,
)
session.mount("https://", HTTPAdapter(max_retries=retry))
def lookup(number: str) -> dict:
r = session.get(f"{BASE}/number/{number}", headers=HEADERS, timeout=10)
if r.status_code == 429:
wait = int(r.headers.get("Retry-After", "60"))
time.sleep(wait)
return lookup(number)
r.raise_for_status()
return r.json()Bulk CSV processing (per-number, with pacing)
import csv
import os
import time
import requests
BASE = "https://whatsapp-proxy.checkleaked.cc"
HEADERS = {
# Direct proxy uses your direct-purchase key (issued in our dashboard).
# For RapidAPI marketplace: BASE = "https://whatsapp-data1.p.rapidapi.com"
# plus add: "x-rapidapi-host": "whatsapp-data1.p.rapidapi.com"
"x-rapidapi-key": os.environ["WHATSAPP_API_KEY"],
}
with open("numbers.csv") as f_in, open("results.csv", "w", newline="") as f_out:
reader = csv.DictReader(f_in)
writer = csv.DictWriter(f_out, fieldnames=["number", "isWAContact", "isBusiness", "about"])
writer.writeheader()
for row in reader:
r = requests.get(
f"{BASE}/number/no_picture/{row['number']}",
headers=HEADERS,
timeout=10,
)
d = r.json() if r.ok else {}
writer.writerow({
"number": row["number"],
"isWAContact": d.get("isWAContact", False),
"isBusiness": d.get("isBusiness", False),
"about": d.get("about", ""),
})
time.sleep(0.5) # 2 req/sec — respect tier burst limitRelated
What Our Users Say
Real reviews from our satisfied customers
4.5/5 (162 reviews)