# Approve WhatsApp group join requests

`POST /v1/whatsapp/groups/{group_id}/join-requests/batch-approve`

Approves the named join requests, up to 50 in one call.

WhatsApp decides each request on its own, so the batch can be part-applied:
the response lists the ones it accepted in `decided` and the rest in
`failed` with the reason each was refused. A refusal is usually a person
who has not accepted WhatsApp's current terms, which no retry fixes.

Each person approved can enter the group through its invite link. Re-read the
group to see who has arrived.

A group holds 8 participants besides your business. Approving more than the
group has room for does not refuse the call: the requests that fit are
decided and the rest come back in `failed`, each saying the approval would
take the group past its participant limit. A group that is not `active`
does refuse the whole call, with a `409` `WhatsAppGroupNotActive`.

## Code samples

**TypeScript**

```ts
const result = await bird.whatsapp.groups.joinRequests.approve(
  "wag_01krdgeqcxet5s7t44vh8rt9mg",
  { join_request_ids: ["wgj_01krdgeqcxet5s7t44vh8rt9mg"] },
);
console.log(result.decided.length, result.failed.length);
```

Examples: [TypeScript](/docs/api/reference/approve-whatsapp-group-join-requests.ts.md) · [Python](/docs/api/reference/approve-whatsapp-group-join-requests.py.md) · [Go](/docs/api/reference/approve-whatsapp-group-join-requests.go.md) · [PHP](/docs/api/reference/approve-whatsapp-group-join-requests.php.md) · [CLI](/docs/api/reference/approve-whatsapp-group-join-requests.cli.md) · [MCP](/docs/api/reference/approve-whatsapp-group-join-requests.mcp.md) · [cURL](/docs/api/reference/approve-whatsapp-group-join-requests.curl.md)

## Example response `202`

```json
{
  "decided": [
    "wgj_01krdgeqcxet5s7t44vh8rt9mg"
  ],
  "failed": [
    {
      "join_request_id": "wgj_01krdgeqcxet5s7t44vh8rt9mg",
      "error": {
        "description": "Group subject contains content that cannot be used.",
        "meta_error_code": "2388024"
      }
    }
  ]
}
```

## Path parameters

- `group_id` (string): ID of the group whose join requests are being decided.

## Request body

- `join_request_ids` (array of string, required): The join requests to act on, as returned by `GET /v1/whatsapp/groups/{group_id}/join-requests`. Each is decided on its own, so one can fail while the rest succeed. An ID that names no waiting request returns a `422` `WhatsAppGroupJoinRequestNotFound`. The 50 is Bird's own request bound, not a WhatsApp one: how many people the group can hold does not limit how many can queue at its link, so a rejection sweep is not held to the size of the group it is refusing entry to.

## Response body

- `decided` (array of string, required): The join requests WhatsApp accepted the decision for. A person approved here can enter the group; a person rejected here sees the join button again.
- `failed` (array of object, required): The join requests WhatsApp refused, each with its reason. Empty when the whole batch was applied.
- `failed.join_request_id` (string, required): The join request that was not decided.
- `failed.error` (object, required): Why WhatsApp refused. The common one is a person who has not accepted WhatsApp's current terms, which no retry fixes.
- `failed.error.description` (string, required): WhatsApp's own explanation of the refusal, passed through. Show it to the person who asked for the change; never match on its text. Carries Bird's own words instead when the failure was Bird's verdict, such as a confirmation that never arrived.
- `failed.error.meta_error_code` (nullable string): WhatsApp's most specific code for the refusal: its error subcode where it sent one, otherwise its top-level code. Treat it as an opaque string. Null when the failure was Bird's own verdict rather than a WhatsApp refusal.

## Related resources

- [Should I use a Bird SDK or call the API directly?](/explained/platform/should-i-use-an-sdk-or-call-the-api-directly) (answer)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first email](/docs/get-started/send-your-first-email) (docs)

[Get an implementation brief](/learn/workspace?topic=api-basics)
