Skip to main content
Number capabilities are a beta. On the Numbers page of the Console, a team owner or admin selects Join on the Number capabilities beta row, reviews the terms and selects Accept and join. Until the team has joined and the beta is offered to it, every capability request returns 403 permission_denied.
WhatsApp does not enable every feature for every account at the same time. It rolls features out by account, country and app version, and it sets limits such as how long a sent message stays editable. The capabilities endpoint tells you which configuration gates are enabled for one of your numbers. Your app must also check client requirements and handle operations WhatsApp rejects.

How the values are produced

Polymorfa reads the WhatsApp configuration of each number connected as a linked device when the number first connects, at each login when WhatsApp reports a change, when WhatsApp asks for a refresh, and on the refresh interval WhatsApp sets for the number (one day by default). Each capability evaluates the configuration gates identified in WhatsApp Web. These values do not check client-environment requirements or guarantee that WhatsApp’s server will accept an operation.
  • Values come from a linked-device connection. A number that has never had one (connected only through the Official API) reports status unknown. A number whose linked-device connection was removed keeps the values last synced.
  • Values reflect WhatsApp’s configuration at syncedAt. They are not a live check. A change WhatsApp makes appears after the number’s next sync.
  • Values describe the WhatsApp account last linked to the number, whether or not it is connected now. Read the number’s session for its connection status.
  • status is unknown and every value is null before the number’s first sync, and when another WhatsApp account is linked to the number: from that account’s first sync attempt until its configuration is synced. Polymorfa recognizes another account by the account creation time WhatsApp reports when the number logs in. If WhatsApp does not report it for the newly linked account, the change is not detected, and the values stay those of the account they were synced for until the next sync. When Polymorfa cannot tell whether the stored configuration belongs to the account linked now, status is also unknown until WhatsApp’s configuration is synced again for that account; failed sync attempts do not clear it.
  • A capability says what WhatsApp allows the number. It does not mean the Polymorfa API offers an operation for that feature.
  • source is server only when every setting a value was evaluated from was sent by WhatsApp and used as sent; otherwise WhatsApp’s own default or limit took part and source is client_default.

Before you start

  • Your team has joined the beta. Leaving it refuses capability reads; numbers and every other API are unaffected.
  • You call from your server with an organization key or project token that has the sessions:read scope. A project token reaches only its own project’s numbers. Client tokens are rejected.
sessionId is the session name or its ID.

Read a number’s capabilities

The example shows three of the entries. The response always contains every capability, in the same order. Ignore keys your app does not recognize. New capabilities can be added; an existing key never changes meaning.

Capabilities

Errors

Group capabilities

The group read and capability-change event are not offered. Number-capabilities beta enrollment does not enable these extensions. The group read contract is GET /messaging/{session}/groups/{id}/capabilities. Use the group’s Polymorfa identifier and a server credential with groups:read. The linked number must be a current member of the group. Official API group connections do not provide this read. The response includes status, syncedAt, checkedAt, and three feature keys: polls.endTime, polls.hideVoters, and polls.creatorEdit. A gate is enabled when WhatsApp enables it for the number or that group. A value’s source is server or client_default; unknown values have a null value and source. Values stay unknown until the number has completed its first number-level configuration sync and a group configuration sync has succeeded for the account linked to the number. Reading capabilities does not open the chat or fetch configuration. syncedAt identifies the successful configuration read; checkedAt includes later failed checks. Account replacement makes the former account’s group values unknown. These gates describe configuration and do not grant permission to edit another participant’s poll. The corresponding MCP tool is groups_capabilities, with session and id arguments. It follows the same server credential, scope, membership and beta checks as the API. The extension is not offered through either interface. See Read group capabilities.

Capability change events

The session.capabilities_updated contract describes changes to a number’s effective capabilities on a project webhook. The payload contains the number capability response and changedKeys, the keys whose value or source changed. A status or account-type change also produces an event, even when changedKeys is empty. Routine checks and configuration changes that leave capabilities unchanged do not produce events. Group capability changes do not produce this event. Publication and delivery require the same beta access as a capability read. When access is withdrawn or unavailable, queued changes wait for access to return and expire after seven days. Published history follows your ordinary event retention. Retries retain the event ID; deduplicate by that ID. See Webhooks for signature verification and delivery handling.