Operator suspend now blocks outbound sends on customer-owned accounts
Released: June 5, 2026
POST /v1/{phone_number_id}/messages Changed
Section titled “POST /v1/{phone_number_id}/messages ”When the WhatsApp account that owns phone_number_id is attached to
a Customer (tenant-of-tenant on the multi-tenant platform tier)
whose status is suspended or archived, the API now refuses the
send up-front with a 422 and the new customer_suspended error
code. Previously the operator-facing status flip had no runtime
effect — the send went through.
The check applies to every send surface:
POST /v1/{phone_number_id}/messages(Public API)- Dashboard send
- Broadcasts — a suspended Customer aborts the broadcast at start AND mid-flight (the periodic compliance re-read picks up a suspension that lands during a long broadcast and stops further enqueues).
New error code
Section titled “New error code”error.code | When it fires | Recoverable? |
|---|---|---|
customer_suspended | The Customer that owns the sender WhatsApp account is suspended (operator-forced block) or archived (terminal soft-delete). | Yes for suspended — the operator clicks Unsuspend in the dashboard. No for archived. |
Example 422 response
Section titled “Example 422 response”{ "error": { "type": "invalid_request_error", "code": "customer_suspended", "message": "The customer account that owns this sender is suspended. Sends are blocked until the operator unsuspends the customer.", "request_id": "req_01HXYZABCDEFGHJKMNPQRSTVWX" }}Customer-owned accounts only — direct-org WhatsApp accounts
(those NOT attached to a Customer row, i.e. customer_id IS NULL)
are unaffected.
Dashboard Added
Section titled “Dashboard ”The Customer detail page now exposes Suspend and Unsuspend buttons next to Archive. Suspend asks for confirmation (parallel to the Archive flow) since it stops every outgoing WhatsApp message from the Customer’s accounts until it’s reversed.
SDK Changed
Section titled “SDK ”The TypeScript SDK OpenAPI snapshot has been refreshed. The
Message.error.code known-values list now includes
customer_suspended. No method changes — the existing
InvalidRequestError already carries the new code as a string.