Sign inGet Started

WhatsApp group webhooks

Two webhook events report join-request activity on a group that requires approval. Both are the requester's own doing, so neither shows up on the response to any call you make, and a request raised and cancelled between two reads of the list leaves nothing behind. Subscribe to them and you do not have to poll.
EventFires when
whatsapp.group.join_request_createdSomeone opens the invite link and asks to join
whatsapp.group.join_request_revokedThey cancel that request before you decide it
Deciding a request fires no event, because the outcome is already on the response to your own call. Neither event is part of a message's timeline.

Join request created

代码示例
{
  "type": "whatsapp.group.join_request_created",
  "timestamp": "2026-09-22T10:07:57Z",
  "data": {
    "group_id": "wag_01krdgeqd0abc5s7t44vh8rt9mg",
    "whatsapp_number_id": "wan_01krdgeqd1def5s7t44vh8rt9mg",
    "workspace_id": "ws_01krdgeqcxet5s7t44vh8rt9mg",
    "join_request": {
      "id": "wgj_01krdgeqcxet5s7t44vh8rt9mg",
      "bsuid": "US.1566655121691972",
      "phone_number": "+13124495648",
      "username": "john.doe"
    }
  }
}
timestamp is when the person asked to join.

Join request revoked

代码示例
{
  "type": "whatsapp.group.join_request_revoked",
  "timestamp": "2026-09-22T11:12:03Z",
  "data": {
    "group_id": "wag_01krdgeqd0abc5s7t44vh8rt9mg",
    "whatsapp_number_id": "wan_01krdgeqd1def5s7t44vh8rt9mg",
    "workspace_id": "ws_01krdgeqcxet5s7t44vh8rt9mg",
    "join_request": {
      "id": "wgj_01krdgeqcxet5s7t44vh8rt9mg",
      "bsuid": "US.1566655121691972",
      "phone_number": "+13124495648",
      "username": "john.doe"
    }
  }
}
The data is the same as on the request it cancels, with the same join_request.id. timestamp is when the request was cancelled.

Fields

FieldMeaning
group_idThe group the person asked to join
whatsapp_number_idThe business number that created and administers the group
workspace_idThe workspace that owns the group
join_request.idThe request. The same ID the join-request list returns and the batch approve and reject operations take, so you can decide straight from the event
join_request.bsuidThe requester's business-scoped user ID. Every request carries it, and it carries over to participants if you approve, so key your own records on it
join_request.phone_numberThe requester's number in E.164 format, or null if they have not shared it with your business
join_request.usernameThe requester's WhatsApp username, or null if they have not chosen one

Next steps