{pnid} is the phone_number_id.
Reading needs channels:read. Changing needs channels:write.
List the numbers
GET /api/v1/partner/tenants/{external_ref}/channels/whatsapp/numbers/ answers { "data": [...] }.
Add a number from the same account
Do not sign up again for a second number of the same account. List the numbers that Meta has under the account:connected. Connect one:
code set to number_claimed. The same call also works at .../numbers/adopt/.
Switch on, pause
POST .../numbers/{pnid}/activate/ with assistant_id, or { "on": false }. See Setup.
The number object has is_primary (the first number that was connected), activated, activated_at and settings.
Check a number
GET .../numbers/{pnid}/health/ checks the access token, the webhook subscription, the registration, the payment method
and whether the number can send. The result is kept for 10 minutes and has cached set to true when it is a kept result.
Add ?refresh=true to ask Meta again.
If the number needs registration, needs_registration is true. Register it with its two-step PIN:
platform_type and needs_registration. A PIN that
Meta refuses answers 400.
In payment, method_linked can be null with reason not_permitted. Meta lets only a Business Solution Provider read
the payment method. In that case the tenant checks it in Meta’s Billing hub, and billing_url points to it.
Settings
GET and PATCH .../numbers/{pnid}/settings/ read and change four settings. Send only the ones that change.
Business profile
GET .../numbers/{pnid}/profile/ returns what customers see in the details of the number: about, address,
description, email, websites, vertical and profile_picture_url. PATCH changes only the fields you send. Send
JSON, or multipart form data with a photo file (JPEG or PNG, 5 MB at most). A PATCH with no field and no photo answers
400. A refusal by Meta answers 400, or 502 when Meta asks you to try again.
Disconnect
DELETE .../numbers/{pnid}/ disconnects the number. It is archived, not deleted. A number that is not connected answers
404.