group_lifecycle_updategroup_participants_updategroup_settings_updategroup_status_updateinvite_link parameter that contains an invite link for the group. You can send this invite link to WhatsApp users interested in joining the group.POST /<BUSINESS_PHONE_NUMBER_ID>/groups{ "messaging_product": "whatsapp", "subject": "<GROUP_SUBJECT>", "description": "<GROUP_DESCRIPTION>", "join_approval_mode": "<JOIN_APPROVAL_MODE>" }
| Placeholder | Description | Sample Value |
|---|---|---|
<BUSINESS_PHONE_NUMBER_ID>String | Required Business phone number ID. | 12784358810 |
<GROUP_SUBJECT>String | Required Group subject. Maximum 128 characters. Whitespace is trimmed. | New Purchase Inquiry |
<GROUP_DESCRIPTION>String | Optional Group description. Maximum 2048 characters. | Jim, an existing client, would like to learn about new car purchase options for current year models. |
<JOIN_APPROVAL_MODE>String | Optional Indicates if WhatsApp users who click the invitation link can join the group with or without being approved first. Values can be:
If omitted, join_approval_mode is set to auto_approve by default. | auto_approve |
group_lifecycle_update webhook is triggered.group_participants_update webhook for a user accepting the join request] (/documentation/business-messaging/whatsapp/groups/webhooks#user-accepts-or-cancels-join-request) is triggered. You can also get a list of open join requests via API. Use the contents of the webhook or API response to approve or reject requests.GET /<GROUP_ID>/join_requests| Placeholder | Description | Sample Value |
|---|---|---|
<GROUP_ID>String | Required. Group ID. | Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD |
{ "data": [ { "join_request_id": "<JOIN_REQUEST_ID>", "wa_id": "<WHATSAPP_USER_ID>", "creation_timestamp": "<JOIN_REQUEST_CREATION_TIMESTAMP"> }, //Additional join request objects would follow, if any ], "paging": { "cursors": { "before": "<BEFORE_CURSOR>", "after": "<AFTER_CURSOR>" } } }
| Placeholder | Description | Sample Value |
|---|---|---|
<JOIN_REQUEST_ID>String | Join request ID. | MTY0NjcwNDM1OTU6MTIwMzYzNDA0Njk0MjMzODIw |
<WHATSAPP_USER_ID>String | WhatsApp user ID. | 16505551234 |
<JOIN_REQUEST_CREATION_TIMESTAMP>Integer | Unix timestamp indicating when the join request was created. | 1755548877 |
<BEFORE_CURSOR>String | Before cursor. See Paginated Results. | eyJvZAmZAzZAXQiOjAsInZAlcnNpb25JZACI6IjE3NTU1NTM3MDUxNzUwNTQ1MTAifQZDZD |
<AFTER_CURSOR>String | After cursor. See Paginated Results. | eyJvZAmZAzZAXQiOjAsInZAlcnNpb25JZACI6IjE3NTU1NTM3MDUxNzUwNTQ1MTAifQZDZD |
POST /<GROUP_ID>/join_requests{ "messaging_product": "whatsapp", "join_requests": [ "<JOIN_REQUEST_ID>", // Additional join request IDs would go here, if approving in bulk ] }
| Placeholder | Description | Sample Value |
|---|---|---|
<GROUP_ID>String | Required. Group ID. | Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD |
{ "messaging_product": "whatsapp", "approved_join_requests": [ "<JOIN_REQUEST_ID>", // Additional join request IDs would go here, it approved in bulk ], //Only included if unable to approve one or more join requests "failed_join_requests": [ { "join_request_id": "<JOIN_REQUEST_ID>", "errors": [ { "code": "<ERROR_CODE>", "message": "<ERROR_MESSAGE>", "title": "<ERROR_TITLE>", "error_data": { "details": "<ERROR_DETAILS>" } } ] } ], "errors": [ { "code": "<ERROR_CODE>", "message": "<ERROR_MESSAGE>", "title": "<ERROR_TITLE>", "error_data": { "details": "<ERROR_DETAILS>" } } ] }
| Placeholder | Description | Sample Value |
|---|---|---|
<JOIN_REQUEST_ID>String | ID of approved join request, or ID of failed join request, if we were unable to approve. | MTY0NjcwNDM1OTU6MTIwMzYzNDA0Njk0MjMzODIw |
<ERROR_CODE>Integer | Error code, if unable to approve. | 131203 |
<ERROR_MESSAGE>String | Error message, if unable to approve. | (#131203) Recipient has not accepted our new Terms of Service and Privacy Policy. |
<ERROR_TITLE>String | Error title, if unable to approve. | Unable to add participant to group |
<ERROR_DETAILS>String | Error details, if unable to approve. | Recipient has not accepted our new Terms of Service and Privacy Policy. |
group_participants_update webhook is triggered.DELETE /<GROUP_ID>/join_requests{ "messaging_product": "whatsapp", "join_requests": [ "<JOIN_REQUEST_ID>", //Additional join request IDs would go here, it rejecting in bulk ] }
| Placeholder | Description | Sample Value |
|---|---|---|
<GROUP_ID>String | Required. Group ID. | Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD |
<JOIN_REQUEST_ID>String | Required. ID of join request to reject. | MTY0NjcwNDM1OTU6MTIwMzYzNDA0Njk0MjMzODIw |
{ "messaging_product": "whatsapp", "rejected_join_requests": [ "<JOIN_REQUEST_ID>", //Additional join request IDs would go here, it rejecting in bulk ], //Only included if unable to reject one or more join requests "failed_join_requests": [ { "join_request_id": "<JOIN_REQUEST_ID>", "errors": [ { "code": "<ERROR_CODE>", "message": "<ERROR_MESSAGE>", "title": "<ERROR_TITLE>", "error_data": { "details": "<ERROR_DETAILS>" } } ] } ], "errors": [ { "code": "<ERROR_CODE>", "message": "<ERROR_MESSAGE>", "title": "<ERROR_TITLE>", "error_data": { "details": "<ERROR_DETAILS>" } } ] }
| Placeholder | Description | Sample Value |
|---|---|---|
<JOIN_REQUEST_ID>String | ID of rejected join request, or ID of failed join request, if we were unable to reject. | MTY0NjcwNDM1OTU6MTIwMzYzNDA0Njk0MjMzODIw |
<ERROR_CODE>Integer | Error code, if unable to reject. | 131203 |
<ERROR_MESSAGE>String | Error message, if unable to reject. | (#131203) Recipient has not accepted our new Terms of Service and Privacy Policy. |
<ERROR_TITLE>String | Error title, if unable to reject. | Unable to add participant to group |
<ERROR_DETAILS>String | Error details, if unable to reject. | Recipient has not accepted our new Terms of Service and Privacy Policy. |
| Placeholder | Description | Sample Value |
|---|---|---|
<GROUP_ID>String | Required The ID of the group you want to get or reset an invite link for. | Y2FwaV9ncm91cDoxOTUwNTU1MDA3OToxMjAzNjMzOTQzMjAdOTY0MTUZD |
GET /<GROUP_ID>/invite_link{ "messaging_product": "whatsapp", "invite_link": "https://chat.whatsapp.com/<LINK_ID>" }
invite_link always begins with the prefix https://chat.whatsapp.com/. The only variable portion is <LINK_ID>.POST /<GROUP_ID>/invite_link{ "messaging_product": "whatsapp", }
{ "messaging_product": "whatsapp", "invite_link": "https://chat.whatsapp.com/<LINK_ID>" }
utility, you cannot modify it when you copy it from template library to your WABA.GET /message_template_library?category=utility&topic=group_invite_link&language=enPOST /<BUSINESS_PHONE_NUMBER_ID>/messages| Placeholder | Description | Sample Value |
|---|---|---|
<BUSINESS_PHONE_NUMBER_ID>Integer | Required Business phone number ID. | 13057863445 |
curl --location 'https://graph.facebook.com/<API_VERSION>/<BUSINESS_PHONE_NUMBER_ID>/messages?access_token=' \ --header 'Content-Type: application/json' \ --data '{ "messaging_product": "whatsapp", "to": "<WHATSAPP_USER_PHONE_NUMBER>", "type": "template", "template": { "name": "<TEMPLATE_NAME>", "language": { "code": "<TEMPLATE_LANGUAGE>" }, "components": [ { "type": "body", "parameters": [ { "type": "group_id", "group_id": "<GROUP_ID>" }, { ...additional parameters } ] } ] } }'
DELETE /<GROUP_ID>| Placeholder | Description | Sample Value |
|---|---|---|
<GROUP_ID>String | Required The ID of the group you want to delete. | Y2FwaV9ncm91cDoxOTUwNTU1MDA3OToxMjAzNjMzOTQzMjAdOTY0MTUZD |
group_lifecycle_update webhook is triggered.DELETE /<GROUP_ID>/participants{ "messaging_product": "whatsapp", "participants": [ { "user": "<WHATSAPP_USER_PHONE_NUMBER> or <WHATSAPP_USER_ID>" }, { "user": "<WHATSAPP_USER_PHONE_NUMBER> or <WHATSAPP_USER_ID>"" }, ... ] }
| Placeholder | Description | Sample Value |
|---|---|---|
"participants": []Array | Optional Specifies an array of phone numbers or WhatsApp IDs of WhatsApp accounts. The business phone number used to create the group is always added to the group as the creator and admin.
| |
group_participants_update webhook is triggered.GET /<GROUP_ID>?fields=<FIELDS>| Placeholder | Description | Sample Value |
|---|---|---|
<GROUP_ID>String | Required The ID of the group you are querying info from. | Y2FwaV9ncm91cDoxOTUwNTU1MDA3OToxMjAzNjMzOTQzMjAdOTY0MTUZD |
<FIELDS>String | Optional A comma-separated list of fields to return. If no fields are passed in, only the group id is returned. | "subject,description,participants,join_approval_mode" |
| Field | Description | Sample Return Value |
|---|---|---|
join_approval_modeString | Indicates if WhatsApp users who click the invitation link can join the group with or without being approved first. Values can be:
| auto_approve |
subjectString | The subject for the group. | "Artificial Intelligence Insights" |
descriptionString | The group description, if set during creation time. | "Explore AI developments, share knowledge, and discuss the future of artificial intelligence with fellow enthusiasts and experts." |
suspendedBoolean | Returns true if the group has been suspended by WhatsApp. | false |
creation_timestampInteger | UNIX timestamp in seconds at which the group was created. | 683731200 |
participantsList | A list of objects {"wa_id": "<WA_ID>"}, where <WA_ID> is a participant in the group being queried. | [{"wa_id": "2228675309"}, {"wa_id": "7693349922"}] |
total_participant_countInteger | The total number of participants in the group, excluding your business. | 6 |
{ "messaging_product": "whatsapp", "id": "<GROUP_ID>", "subject": "<SUBJECT>", "creation_timestamp": "<TIMESTAMP>", "suspended": "<SUSPENDED>", "description": "<DESCRIPTION>", "total_participant_count": "<TOTAL_PARTICIPANT_COUNT>", "participants": [ { "wa_id": "<WA_ID>" }, { "wa_id": "<WA_ID>" } ], "join_approval_mode": "<JOIN_APPROVAL_MODE>" }
GET /<BUSINESS_PHONE_NUMBER_ID>/groups?limit=<LIMIT>, // Optional &after=<AFTER_CURSOR>, // Optional &before=<BEFORE_CURSOR> // Optional
| Parameter | Description |
|---|---|
<LIMIT>Optional | Number of groups to fetch in the request. Min: 1 | Default: 25 | Max: 1024 |
<BEFORE_CURSOR>Optional | Cursor that points to the beginning of a page of data. Learn more about Paginated Results in Graph API here |
<AFTER_CURSOR>Optional | Cursor that points to the end of a page of data. Learn more about Paginated Results in Graph API here |
{ "data": { "groups": [ {"id": "GROUP_ID", "subject": SUBJECT, "created_at": "TIMESTAMP"}, {"id": "GROUP_ID", "subject": SUBJECT, "created_at": "TIMESTAMP"} … ] }, "paging": { "cursors": { "after": "MTAxNTExOTQ1MjAwNzI5NDE=", "before": "NDMyNzQyODI3OTQw" }, "previous": "https://graph.facebook.com/VERSION/PHONE_NUMBER_ID/groups?limit=10&before=NDMyNzQyODI3OTQw", "next": "https://graph.facebook.com/VERSION/PHONE_NUMBER_ID/groups?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE=" } }
| Parameter | Description |
|---|---|
data[groups]List | A list of groups, each containing the group id, group subject, and UNIX timestamp for group creation. |
pagingObject | A pagination object. Learn more about Paginated Results in Graph API here |
POST /<GROUP_ID>{ "messaging_product": "whatsapp", "subject": "<GROUP_SUBJECT>", "profile_picture_file": "<FILE_PATH>", "description": "<GROUP_DESCRIPTION>", }
| Placeholder | Description | Sample Value |
|---|---|---|
<FILE_PATH>String | Optional A path to an image file stored in your local directory. To upload a file: Follow the same request structure as the Upload Media endpoint. Sample file upload cURL: Group profile picture requirement:
| /local/path/file.jpg |
<GROUP_SUBJECT>String | Optional The new subject for the group.
| "Watch Enthusiasts" |
<GROUP_DESCRIPTION>String | Optional The new description for the group.
| "Join our community to discuss the latest timepieces, share watch reviews, and connect with fellow horology enthusiasts." |
group_settings_update webhook is triggered.