Pay a number’s extra-number charge
An extra number is a WhatsApp number past the capacity your workspace has paid for. It is charged when the number first connects — see Extra numbers. When that charge is refused (card declined, no balance), the number stays connected but sending from it is blocked until the charge is paid.POST /v1/numbers/{id}/pay charges it now — wallet credits first, the remainder on the saved card — and lifts the block.
Requires a tenant-scoped key — the same rule as
POST /v1/subscription/extra-numbers. With an OAuth / MCP token, only the workspace Owner may pay (billing:manage) — 403 PERMISSION_DENIED otherwise.When to use it
- When
GET /v1/numbersorGET /v1/numbers/{id}showsextraChargeUnpaidSinceset on a number. - When
POST /v1/messages/sendanswers409 NUMBER_BLOCKEDwithreason: "extra_charge_unpaid". - Right after you fixed what refused the charge — a new card, for example — and do not want to wait.
PLAN_NUMBER_LIMIT_REACHED below. In the dashboard, the workspace owner can also use Pay now on the Numbers page.
How to know a number is blocked
GET /v1/numbers and GET /v1/numbers/{id} carry two fields on every number:
These fields are not part of
health. A blocked number keeps its state, can have health.sendable: true, and never shows extra_charge_unpaid in health.code. See List & get numbers.
Request parameters
No request body.
Response
Success (200)
Errors
Branch oncode, never on the HTTP status: three of the refusals are 402.
Error body:
{ "error": "<message>", "code": "<CODE>", … }.
- The
PAYMENT_FAILEDandINSUFFICIENT_FUNDSbodies also carryproratedTotalandcurrency— the amount that was attempted.INSUFFICIENT_FUNDSaddswalletReason. Theirerroris a human-readable message in Portuguese. - The
PLAN_NUMBER_LIMIT_REACHED,502,409and404bodies carry onlyerrorandcode. Theirerroris a bilingual sentence,English | Português.
After a
402 the number stays blocked. After a 502 nothing changes: a number that was already blocked stays blocked until a retry goes through, and a processor failure never blocks a number by itself.What happens if it stays unpaid
- A number connected by QR code that stays unpaid for 7 days is disconnected at
extraChargeDisconnectAt: its device is logged out and it stops counting toward your capacity. You get a reminder 2 days before. Connecting it again is a new first connection, charged like any other. - A Meta Cloud API number is never disconnected. It stays blocked for sending until it is paid.
Notes
- The call is idempotent: once nothing is owed, it answers
not_requiredand charges nothing. - Messages queued before the block are not sent: they fail and show
NUMBER_BLOCKEDin Log error codes. Send them again after paying. - Receiving is not affected. The block is on sending only.