Skip to content
BulkNumberChecker

WAChecker Public API

A simple REST API to check whether phone numbers are registered on WhatsApp. Authenticate with an API key, get 100 free checks to start, then pay as you go at $5 per 1,000 validations. Build automations, AI agents, and integrations.

Auth & pricing

  • 100 numbers per request — submit up to 100 phone numbers in one API call.
  • API key required — send it as or on every request. Create keys on your page.
  • 100 free credits, then $5 per 1,000 — 1 credit per successfully checked number. Invalid or unparseable lines are free.
  • Poll endpoints are unmetered — GET status calls do not consume credits. Poll as often as needed.

Need higher limits? .

Just one number?

The flow below is the bulk async API (submit → poll → CSV). For a single number, skip the polling entirely and use the synchronous endpoint — one request, answer in the body.

Submit numbers

POST up to 10 phone numbers. You receive a immediately. Validation happens asynchronously.

curl -X POST https://api.bulknumberchecker.com/api/v1/check \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer wac_your_api_key" \
  -d '{
    "numbers": ["+6281234567890", "+14155552671"],
    "default_country": "ID"
  }'

Example response (2 credits charged):

{
  "request_id": "req_abc123xyz",
  "total": 2,
  "cached": 0,
  "pending": 2,
  "status": "pending",
  "status_url": "https://api.bulknumberchecker.com/api/v1/check/req_abc123xyz"
}

Poll for results

Poll every 3–5 seconds until is or . Poll calls do not consume quota.

curl https://api.bulknumberchecker.com/api/v1/check/req_abc123xyz

Example completed response:

{
  "request_id": "req_abc123xyz",
  "status": "completed",
  "progress": { "total": 2, "completed": 2, "cached": 0 },
  "eta_seconds": null,
  "results": [
    {
      "input": "+6281234567890",
      "phoneNumber": "+6281234567890",
      "countryCode": "ID",
      "countryName": "Indonesia",
      "whatsappStatus": "valid"
    },
    {
      "input": "+14155552671",
      "phoneNumber": "+14155552671",
      "countryCode": "US",
      "countryName": "United States",
      "whatsappStatus": "invalid"
    }
  ]
}

Download CSV

Once is , download results as a CSV file. Returns 404 {error:"not_ready"} if called before completion.

curl -o results.csv \
  https://api.bulknumberchecker.com/api/v1/check/req_abc123xyz/csv

CSV columns: Input, Phone Number, Country Code, Country, WhatsApp Status

Code examples

// JavaScript (fetch) — submit, poll, and print results
const API = "https://api.bulknumberchecker.com";

async function checkNumbers(numbers) {
  // Step 1: submit
  const res = await fetch(`${API}/api/v1/check`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ numbers }),
  });
  if (!res.ok) throw new Error(`Submit failed: ${res.status}`);
  const { request_id } = await res.json();

  // Step 2: poll until completed
  while (true) {
    const poll = await fetch(`${API}/api/v1/check/${request_id}`);
    const data = await poll.json();

    if (data.status === "completed") return data.results;
    if (data.status === "failed")   throw new Error("Validation failed");

    await new Promise((r) => setTimeout(r, 3000)); // wait 3s
  }
}

checkNumbers(["+6281234567890", "+14155552671"])
  .then((results) => console.log(results))
  .catch(console.error);

OpenAPI 3.1 Specification

The full machine-readable API spec is available at . Load it into any OpenAPI-compatible tool (Postman, Insomnia, Stoplight, Scalar, etc.) or feed it to an AI agent as a tool definition.

Resources

Try the web tool

No code needed — paste numbers, get 100 free checks, then pay as you go.