Skip to main content
WhatsApp groups work for both unofficial (QR-paired) numbers and official Meta Cloud API numbers, provided the Meta number is an approved Official Business Account (OBA) with groups enabled.
When a Meta Cloud API number is not an eligible OBA, the group endpoints return 400 META_GROUPS_NOT_ELIGIBLE.

Group id model

A group is identified everywhere by its JID ending in @g.us. For Meta Cloud API numbers the group is represented as a pseudo-JID <META_GROUP_ID>@g.us — you use it exactly like any other group JID (the opaque Meta group id ↔ @g.us conversion happens internally at the Meta HTTP boundary). Newsletters/channels (@newsletter) remain unsupported for Meta numbers.

Sending to a group

On POST /v1/messages/send, pass groupId (JID ending in @g.us) instead of destinationNumber or newsletterId. Exactly one destination per request.
  • The same template/category rules apply as for phone numbers.

GET /v1/groups

Returns { "groups": [ { "id": "…@g.us", "name": "…" } ] } for the same WhatsApp instance as POST /v1/messages/send for that API key (the number bound to the key).
  • Listing uses the same connection as sending (same instance resolution as POST /v1/messages/send).
  • The session must be connected (OPEN); otherwise 409 with WHATSAPP_INSTANCE_NOT_CONNECTED.
  • Works for unofficial numbers and eligible Meta Cloud API numbers.

Group management endpoints

All require a number-scoped API key (ps_*) in the x-api-key header. {groupId} is the JID (…@g.us), path-encoded. On Meta numbers that are not an eligible OBA these return 400 META_GROUPS_NOT_ELIGIBLE.

Example (create a group)

Obtaining groupId

  • message.group webhook: payload includes groupId (and groupName when available).
  • GET /v1/groups: returns the group ids for the number bound to the key.

Common errors (stable API codes)

  • 400 META_GROUPS_NOT_ELIGIBLE — the Meta Cloud API number is not an approved Official Business Account (or groups are not enabled for it).
  • 409 WHATSAPP_INSTANCE_NOT_CONNECTED — the session is not OPEN.
  • WHATSAPP_UPSTREAM_ERROR, WHATSAPP_INVALID_JSON, LINKED_WHATSAPP_INSTANCE_NOT_FOUND; other stable codes may appear depending on instance configuration.

Variables in buttons

Every {{placeholder}} in the stored template JSON (body and button labels) is validated on send and appears in the top-level variables array of GET /v1/templates/{id} after you save the template in the dashboard.