Skip to content
Wbiztool

Number verification API

WhatsApp number verification results (API)

Read number verification results page by page, filtered by task or by status. Use it to export the numbers that are on WhatsApp, clean invalid numbers out of your contact list or sync results into your CRM.

GEThttps://wbiztool.com/api/v1/verification/results/

Without filters, it returns every verification in your workspace, newest first. That includes tasks created from the Number verification dashboard page, not only those created through the API.

Quick example#

curl "https://wbiztool.com/api/v1/verification/results/?campaign_id=4521&status=verified&limit=100&offset=0" \
  -H "Authorization: Bearer YOUR_API_KEY"

Request parameters#

All parameters go in the query string.

Authentication

Authorizationheaderrequired

Bearer YOUR_API_KEY, using a key from Settings → API keys. You can pass the key as an api_key query parameter instead, but the header keeps it out of server and proxy logs.

Filters and pagination

campaign_idintegeroptional

Only return numbers from this verification task. It must be a verification task in the same workspace as the API key. Leave it out to get results from all tasks.

statusstringoptional

Only return numbers with this status: pending, verified or invalid. Any other value is ignored and no status filter is applied, including unknown, so status=unknown returns every status. Values are case-sensitive: Verified is ignored and returns every status.

limitintegeroptional

Results per page. Default 100. Use a value of 1 or more.

offsetintegeroptional

How many results to skip. Default 0. Must be 0 or more.

Response#

A successful request returns HTTP 200:

{
  "status": "success",
  "total_count": 2,
  "returned_count": 2,
  "limit": 100,
  "offset": 0,
  "has_more": false,
  "results": [
    {
      "id": 88215,
      "campaign_id": 4521,
      "campaign_name": "Website leads - September",
      "number": "14155550123",
      "status": "verified",
      "checked_at": "2026-09-16T10:16:26.730114+00:00",
      "created_at": "2026-09-16T10:15:00.483101+00:00"
    },
    {
      "id": 88213,
      "campaign_id": 4521,
      "campaign_name": "Website leads - September",
      "number": "919876543210",
      "status": "verified",
      "checked_at": "2026-09-16T10:16:12.204551+00:00",
      "created_at": "2026-09-16T10:15:00.482913+00:00"
    }
  ]
}
FieldTypeDescription
statusstring"success". Errors return "error".
total_countintegerResults matching your filters, across all pages.
returned_countintegerResults in this response.
limitintegerThe limit used.
offsetintegerThe offset used.
has_morebooleantrue if offset + limit is less than total_count, so there's another page.
resultsarrayThe results, newest first.
results[].idintegerID of this verification record.
results[].campaign_idinteger or nullID of the task the number belongs to.
results[].campaign_namestring or nullName of that task.
results[].numberstringThe cleaned phone number.
results[].statusstringpending, verified, invalid, or unknown for a cancelled check.
results[].checked_atstring or nullWhen the number was checked, or null while it's pending.
results[].created_atstringWhen the number was added.

Timestamps are ISO 8601 in UTC with a +00:00 offset. For what each status means, see Number status values.

Errors#

Errors return a JSON body with status set to "error" and an HTTP error code:

{ "status": "error", "message": "Campaign not found" }
HTTPMessageHow to fix it
405Only GET method allowedSend a GET request.
401API key requiredAdd the Authorization: Bearer YOUR_API_KEY header.
401Invalid API keyCheck the key exists and hasn't been deleted or disabled.
404Campaign not foundThe campaign_id doesn't exist, isn't a verification task, or belongs to another workspace.
500Internal server error: …Usually campaign_id, limit or offset isn't a whole number, offset is negative, or offset + limit is negative.

Reading every page#

Increase offset by limit until has_more is false.

Export all verified numbers from a task
import requests

numbers, offset, limit = [], 0, 500

while True:
    response = requests.get(
        "https://wbiztool.com/api/v1/verification/results/",
        headers={"Authorization": "Bearer YOUR_API_KEY"},
        params={"campaign_id": 4521, "status": "verified", "limit": limit, "offset": offset},
        timeout=60,
    )
    result = response.json()
    if result["status"] != "success":
        raise RuntimeError(result["message"])

    numbers += [item["number"] for item in result["results"]]
    if not result["has_more"]:
        break
    offset += limit

print(len(numbers), "numbers are on WhatsApp")

Tips#

  • De-duplicate by id when paging. Results are sorted by creation time, newest first. Numbers from the same task share almost the same timestamp and new verifications can be added while you page, so a row can appear on two pages or be skipped. Filtering by campaign_id and waiting for the task to finish reduces this.
  • Wait for completion before exporting. Check Verification status until overall_status is completed, or handle pending results in your code.
  • Clean your contact list by exporting status=invalid and removing those numbers before your next campaign.
  • Page size: there's no maximum limit, but a very large page makes a large, slow response.