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"
}Initiate outbound call POST
Initiates an outbound Business-Initiated Call. The Telnyx-side SIP leg is originated server-side (Option B: SIP-first). Telnyx INVITEs Meta directly over TLS:5061 with the SIP digest credentials we captured at calling-enablement time). No client-side SDP is required; pass only `accountId` and `to`. To send the consumer the call-consent prompt instead of placing a call, pass `action: "send_call_permission_request"` (+ optional `bodyText`). The consumer must tap Allow in WhatsApp before `start_call` is permitted; Meta limits the prompt to 1 per consumer per 24h (2 per 7 days) and requires an open 24h service window.
Purchase phone number POST
Initiate purchasing a WhatsApp phone number. Payment-first flow: the user does not pick a specific number. The system either creates a Stripe Checkout Session (first number) or increments the existing subscription quantity and provisions inline (subsequent numbers). Requires a paid plan. The maximum number of phone numbers is determined by the user's plan.