List phone numbers
List all WhatsApp phone numbers purchased by the authenticated user.
By default, released numbers are excluded. Connected (bring-your-own)
numbers are returned in the separate connected array — they are not
billed and have no provisioning lifecycle.
API key authentication - use your Zernio API key as a Bearer token
In: header
Query Parameters
Filter by status (by default excludes released numbers). NOTE:
status=pending_regulatory returns the "provisioning" view — numbers
still in review PLUS recently-declined (last 30 days) ones, so a
failed registration surfaces (with regulatoryDeclineReason) instead
of silently disappearing. Declined numbers can be re-submitted via
POST /v1/whatsapp/phone-numbers/{id}/remediate. verifying is the
short-lived state after the number is provisioned on our side while
WhatsApp confirms the activation code; the number is not billed until
it reaches active.
"provisioning" | "verifying" | "pending_payment" | "pending_regulatory" | "regulatory_declined" | "active" | "suspended" | "releasing" | "released"Filter by profile
Response Body
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.whatsappphonenumbers.getWhatsAppPhoneNumbers();console.log(data);{
"numbers": [
{
"_id": "string",
"phoneNumber": "string",
"country": "string",
"status": "pending_payment",
"registrantName": "string",
"telnyxOrderId": "string",
"monthlyCents": 0,
"profileId": {},
"provisionedAt": "2019-08-24T14:15:22Z",
"metaPreverifiedId": "string",
"metaVerificationStatus": "string",
"onfidoVerificationUrl": "string",
"endUserFirstName": "string",
"endUserLastName": "string",
"regulatoryDeclineReason": "string",
"createdAt": "2019-08-24T14:15:22Z"
}
],
"connected": [
{
"accountId": "string",
"phoneNumber": "string",
"displayName": "string",
"profileId": "string",
"connectedAt": "2019-08-24T14:15:22Z"
}
],
"sandbox": {
"phoneNumber": "+12029087457",
"accountId": "string",
"template": {
"name": "sandbox_start",
"language": "en"
},
"isSandbox": true
}
}{
"error": "Unauthorized"
}Estimate per-minute cost GET
Returns a zero-markup estimated cost for an outbound call to the given destination, broken down by Meta + Telnyx + recording line items. Costs are pass-through, no margin applied.
Get phone number GET
Retrieve the current status of a purchased phone number. Poll this to track Meta pre-verification (US sync path) and, for regulated (Tier 3/4) numbers, the async lifecycle: pending_regulatory → active (or regulatory_declined). When a regulated number has an Onfido ID step, `onfidoVerificationUrl` appears here once the order is placed — forward it to the end user. (Or subscribe to the whatsapp.number.* webhooks instead of polling.)