---
title: "Gerenciando grupos do WhatsApp"
description: "Crie um grupo do WhatsApp pela API, aguarde WhatsApp confirmar, distribua o link de convite, decida solicitações de entrada, e fixe, renomeie ou exclua o grupo."
canonical: "https://bird.com/pt-br/documentacao/guides/whatsapp/groups/management"
---

# Gerenciando grupos do WhatsApp

Tudo o que a página [**Groups**](https://bird.com/dashboard/w/whatsapp/groups) faz, doze operações em `/v1/whatsapp/groups` também fazem, então toda a vida de um grupo cabe em código: criá-lo, aguardar WhatsApp confirmar, distribuir o link de convite, decidir quem entra, manter os detalhes e as fixações atualizados, e excluí-lo quando a conversa terminar.

Duas coisas definem cada chamada nesta página. **Ninguém pode ser adicionado a um grupo**, então o link de convite é a única forma de entrar, e convidar pessoas acontece fora da API. **A maioria das alterações se consolida em WhatsApp e não na resposta**, então a chamada que aceita uma alteração não é a que informa que ela funcionou; [Como uma alteração se consolida](#como-uma-alteração-é-confirmada) cobre isso uma vez para cada operação à qual se aplica.

[Grupos do WhatsApp](/docs/guides/whatsapp/groups) cobre para que serve um grupo e o mesmo ciclo de vida no dashboard. [Enviando para um grupo do WhatsApp](/docs/guides/whatsapp/groups/sending) cobre o envio de mensagens para um grupo.

## Pré-requisitos

Você precisa de uma chave API com acesso a `whatsapp_management`: nível de leitura para as leituras nesta página, nível de escrita para todo o resto. [Usuários, equipes e funções](/docs/guides/users-teams-roles) cobre como conceder esse acesso.

Você também precisa de um número comercial com status de Official Business Account, que WhatsApp exige do administrador de um grupo e que [Antes de criar um grupo](/docs/guides/whatsapp/groups#before-you-create-a-group) cobre como obter. `GET /v1/whatsapp/numbers` informa isso por número como `is_official_business_account`, então leia lá em vez de descobrir a partir de um `412`. O flag corresponde ao `meta_synced_at` do número, então um número conectado há poucos minutos pode ainda não ter sido lido de volta.

Inicialize o client para sua linguagem usando o guia de SDK para [TypeScript](/docs/sdks/typescript), [Python](/docs/sdks/python), [Go](/docs/sdks/go) ou [PHP](/docs/sdks/php). Para exemplos com CLI, [instale e autentique o CLI](/docs/cli#authenticate). Os exemplos com cURL usam o host dos EUA; se sua chave começa com `bk_eu1_`, chame `https://eu1.platform.bird.com` em vez disso. Os SDKs leem a região a partir da sua chave, então não definem host.

## 1. Criar o grupo

Uma criação nomeia o número administrador e um assunto, e mais ninguém. Duas escolhas são fixas por toda a vida do grupo e não podem ser alteradas depois: o número, e `join_approval_mode`, que decide se abrir o link de convite admite alguém diretamente (`auto_approve`, o padrão) ou gera uma solicitação que você decide (`approval_required`).

> **Note:** creating a group needs a business number with Official Business Account status, the blue check mark WhatsApp puts next to a business name in the chat. [WhatsApp Official Business Account](/docs/knowledge-base/whatsapp/official-business-account) covers what Meta requires and how to request it.

**TypeScript**

```typescript
const group = await bird.whatsapp.groups.create({
  whatsapp_number_id: "wan_01krdgeqcxet5s7t44vh8rt9mg",
  subject: "Norwood Fleet — Tuesday route",
  join_approval_mode: "approval_required",
});
console.log(group.id, group.status); // pending; read it back for the invite link
```

Examples: [TypeScript](/pt-br/documentacao/guides/whatsapp/groups/management.ts.md) · [Python](/pt-br/documentacao/guides/whatsapp/groups/management.py.md) · [Go](/pt-br/documentacao/guides/whatsapp/groups/management.go.md) · [PHP](/pt-br/documentacao/guides/whatsapp/groups/management.php.md) · [CLI](/pt-br/documentacao/guides/whatsapp/groups/management.cli.md) · [cURL](/pt-br/documentacao/guides/whatsapp/groups/management.curl.md)

O API retorna `202` com o grupo em `status` `pending` e sem `invite_link`: WhatsApp emite o link quando confirma o grupo. O assunto aceita até 128 caracteres e uma `description` opcional até 2.048, e ambos são exibidos a qualquer pessoa que abrir o link, então nomeie o grupo pelo seu propósito e não por uma referência interna.

## 2. Aguardar WhatsApp confirmar

Leia o grupo de volta até que seu `status` saia de `pending`. A leitura responde `200` independentemente do status, então ramifique com base em `status` em vez de no sucesso da chamada.

**TypeScript**

```typescript
const group = await bird.whatsapp.groups.get("wag_01krdgeqcxet5s7t44vh8rt9mg");
console.log(group.status, group.invite_link);
```

Examples: [TypeScript](/pt-br/documentacao/guides/whatsapp/groups/management.ts.md) · [Python](/pt-br/documentacao/guides/whatsapp/groups/management.py.md) · [Go](/pt-br/documentacao/guides/whatsapp/groups/management.go.md) · [PHP](/pt-br/documentacao/guides/whatsapp/groups/management.php.md) · [CLI](/pt-br/documentacao/guides/whatsapp/groups/management.cli.md) · [cURL](/pt-br/documentacao/guides/whatsapp/groups/management.curl.md)

Cinco status podem retornar, e apenas um deles é um grupo com o qual você pode trabalhar:

| Status      | O que significa                                                                               |
| ----------- | --------------------------------------------------------------------------------------------- |
| `pending`   | WhatsApp não confirmou o grupo. `invite_link` é null e nada aqui pode ser compartilhado       |
| `active`    | O grupo existe, seu link de convite funciona e aceita mensagens e alterações                  |
| `suspended` | WhatsApp interrompeu a atividade no grupo. Apenas WhatsApp reverte isso                       |
| `deleted`   | O grupo não existe mais, e permanece legível para que uma referência armazenada ainda resolva |
| `failed`    | WhatsApp recusou a criação, o que é terminal                                                  |

`failed` é a outra saída de `pending`, e `last_operation.last_error.description` traz o motivo do próprio WhatsApp. Nunca tente novamente uma criação que falhou nesse grupo: crie um novo, alterando o que a recusa objetou.

## 3. Permitir a entrada de pessoas no grupo

Envie o `invite_link` do grupo às pessoas que você quer nele, pelo canal que já as alcança. Nenhuma operação adiciona um participante, então o link é a única forma de entrar e a decisão de participar é deles. Ele admite qualquer pessoa que o possua, então trate-o como a credencial que é: [grupos WhatsApp](/docs/guides/whatsapp/groups#invite-people-to-the-group) explica até onde distribuir um.

Em um grupo `auto_approve`, qualquer pessoa com o link entra e não há nada a decidir. Em um grupo `approval_required`, abrir o link gera uma solicitação de entrada. Liste as pendentes e decida-as em lotes de até 50:

**TypeScript**

```typescript
const waiting = [];
for await (const request of bird.whatsapp.groups.joinRequests.list(
  "wag_01krdgeqcxet5s7t44vh8rt9mg",
)) {
  waiting.push(request.id);
}
const result = await bird.whatsapp.groups.joinRequests.approve("wag_01krdgeqcxet5s7t44vh8rt9mg", {
  join_request_ids: waiting.slice(0, 50),
});
console.log(result.decided.length, result.failed.length);
```

Examples: [TypeScript](/pt-br/documentacao/guides/whatsapp/groups/management.ts.md) · [Python](/pt-br/documentacao/guides/whatsapp/groups/management.py.md) · [Go](/pt-br/documentacao/guides/whatsapp/groups/management.go.md) · [PHP](/pt-br/documentacao/guides/whatsapp/groups/management.php.md) · [CLI](/pt-br/documentacao/guides/whatsapp/groups/management.cli.md) · [cURL](/pt-br/documentacao/guides/whatsapp/groups/management.curl.md)

WhatsApp decide cada solicitação individualmente, então um lote pode ser parcialmente aplicado: a resposta separa `decided` de `failed`, e cada falha traz o motivo que WhatsApp informou em `error.description`. Leia a resposta em vez do código de status. Uma recusa geralmente é de uma pessoa que não aceitou os termos atuais de WhatsApp, o que nenhuma nova tentativa resolve.

Aprovar mais pessoas do que o grupo comporta não recusa a chamada: as solicitações que cabem são decididas e o restante retorna em `failed`, cada uma dizendo que a aprovação levaria o grupo além do [seu limite de participantes](/docs/guides/whatsapp/groups#what-whatsapp-limits). A rejeição funciona da mesma forma, via `POST /v1/whatsapp/groups/{group_id}/join-requests/batch-reject`. Uma solicitação também sai da lista quando a própria pessoa a cancela, então um ID que era válido instantes atrás pode retornar um `422` [`E15051`](/docs/api/errors/E15051) quando você for usá-lo.

O 50 é o limite do próprio Bird por solicitação, não um limite de WhatsApp, então uma varredura de rejeição não está restrita a quantas pessoas o grupo comporta.

### Acompanhe as solicitações conforme chegam

Inscreva-se em `whatsapp.group.join_request_created` e `whatsapp.group.join_request_revoked` para saber quando alguém pede para entrar e quando cancela, em vez de consultar a lista periodicamente. Uma solicitação criada e cancelada entre duas leituras da lista não deixa rastro, então esses eventos são a única forma de vê-la. Cada evento traz o `join_request.id` que as operações em lote recebem, então você pode decidir diretamente a partir dele. [Webhooks de grupo WhatsApp](/docs/guides/whatsapp/webhooks/groups) traz os dois payloads e todos os campos.

### Rotação do link de convite

A rotação emite um novo link e invalida todos os links anteriores do grupo, então quem ainda tiver um não consegue entrar. Faça a rotação quando um link se espalhou mais do que você pretendia ou depois de remover alguém que você não quer de volta. O novo link vem na própria chamada, que responde `200`:

**TypeScript**

```typescript
const link = await bird.whatsapp.groups.inviteLink.rotate("wag_01krdgeqcxet5s7t44vh8rt9mg");
console.log(link.invite_link); // every earlier link has stopped working
```

Examples: [TypeScript](/pt-br/documentacao/guides/whatsapp/groups/management.ts.md) · [Python](/pt-br/documentacao/guides/whatsapp/groups/management.py.md) · [Go](/pt-br/documentacao/guides/whatsapp/groups/management.go.md) · [PHP](/pt-br/documentacao/guides/whatsapp/groups/management.php.md) · [CLI](/pt-br/documentacao/guides/whatsapp/groups/management.cli.md) · [cURL](/pt-br/documentacao/guides/whatsapp/groups/management.curl.md)

A rotação não é como você lê o link atual. O grupo carrega seu `invite_link`, então ler o grupo é a leitura.

O CLI nunca solicita confirmação, então seus comandos destrutivos recebem `--yes`: rotacionar um link, remover um participante, excluir um grupo, desafixar uma mensagem e rejeitar solicitações de entrada são todos recusados com `confirmation_required` sem ele.

## Como uma alteração é confirmada

WhatsApp confirma algumas alterações na própria resposta e outras em um webhook, e o código de status indica qual dos dois casos você está vendo:

| Operação                                    | Responde | Onde o resultado aparece                                     |
| ------------------------------------------- | -------- | ------------------------------------------------------------ |
| Criar, atualizar, excluir                   | `202`    | O `last_operation` do grupo, quando WhatsApp responde        |
| Remover um participante                     | `202`    | O `last_operation` próprio do participante em `participants` |
| Aprovar ou rejeitar solicitações de entrada | `202`    | `decided` e `failed` na própria resposta                     |
| Rotacionar, fixar, desafixar                | `200`    | A resposta, que já é a alteração aplicada                    |

Nas duas primeiras linhas, o `202` é a solicitação aceita, não aplicada. `last_operation.status` fica como `pending` até WhatsApp responder, normalmente em segundos, e então se define como `success` ou `failed`, com `last_error.description` trazendo o motivo em caso de falha. Releia o grupo para ver o que entrou em vigor.

Enquanto uma operação está `pending`, outra alteração na mesma coisa retorna um `409` [`E15054`](/docs/api/errors/E15054). Alterações no nível do grupo compartilham o `last_operation` do grupo, então uma renomeação pendente bloqueia uma exclusão. Cada participante carrega o seu próprio, então remover várias pessoas ao mesmo tempo dá a cada uma seu próprio estado e sua própria falha, e apenas a remoção pendente daquela pessoa bloqueia outra tentativa nela.

Dois `409`s protegem as escritas e `status` é verificado primeiro, então um grupo que não está `active` retorna [`E15047`](/docs/api/errors/E15047) independentemente do que `last_operation` diga. Isso importa para um grupo ainda sendo criado, que está pendente nas duas condições ao mesmo tempo.

Toda escrita também recebe um header `Idempotency-Key`. [Idempotência](/docs/guides/idempotency) cobre como tentar novamente com segurança.

## Alterar o assunto, a descrição ou a foto do grupo

Uma atualização altera o que os participantes veem no topo do grupo. Campos que você omitir são mantidos como estão; envie `null` para limpar a descrição ou a foto, já que uma string vazia é um `422` em vez de uma segunda forma de limpar.

**TypeScript**

```typescript
const group = await bird.whatsapp.groups.update("wag_01krdgeqcxet5s7t44vh8rt9mg", {
  subject: "Norwood Fleet — Wednesday route",
});
console.log(group.last_operation?.status); // pending until WhatsApp reports back
```

Examples: [TypeScript](/pt-br/documentacao/guides/whatsapp/groups/management.ts.md) · [Python](/pt-br/documentacao/guides/whatsapp/groups/management.py.md) · [Go](/pt-br/documentacao/guides/whatsapp/groups/management.go.md) · [PHP](/pt-br/documentacao/guides/whatsapp/groups/management.php.md) · [CLI](/pt-br/documentacao/guides/whatsapp/groups/management.cli.md) · [cURL](/pt-br/documentacao/guides/whatsapp/groups/management.curl.md)

WhatsApp aplica cada campo separadamente, então uma atualização pode ser parcialmente aplicada: um campo recusado enquanto os outros entram em vigor. Quando a operação se confirma, `last_operation.results` traz uma entrada por campo que a atualização enviou, que é como você associa uma recusa à entrada que a gerou.

`profile_picture_url` nomeia um arquivo na biblioteca de mídia do seu espaço de trabalho, e não um endereço na internet, e WhatsApp aceita um JPEG quadrado de pelo menos 192 por 192 pixels e até 5 MB. Limpá-lo remove a foto que Bird armazena, mas WhatsApp não tem operação para remover a foto de um grupo, então os participantes continuam vendo a atual até que outra foto a substitua. O número administrador e `join_approval_mode` são fixados na criação e não podem ser alterados aqui.

## Remover um participante

A remoção não pode ser desfeita. WhatsApp impede que uma pessoa removida entre no grupo pelo link de convite, e o bloqueio acompanha a pessoa, não o link, então rotacionar o link não a deixa voltar. Sem operação de adição para combinar com esta, nada devolve alguém a este grupo depois de removido, e alcançá-lo de novo significa criar outro grupo e convidá-lo para ele.

Identifique a pessoa por qualquer um dos identificadores sob os quais o `participants` do grupo a lista: seu `bsuid`, que todos têm, ou seu `phone_number` no formato E.164, que está lá apenas quando WhatsApp o compartilha. Em uma URL, codifique o `+` inicial como `%2B`, a menos que seu cliente já faça isso.

**TypeScript**

```typescript
const group = await bird.whatsapp.groups.participants.remove(
  "wag_01krdgeqcxet5s7t44vh8rt9mg",
  "+15550002222",
);
console.log(group.participants?.length);
```

Examples: [TypeScript](/pt-br/documentacao/guides/whatsapp/groups/management.ts.md) · [Python](/pt-br/documentacao/guides/whatsapp/groups/management.py.md) · [Go](/pt-br/documentacao/guides/whatsapp/groups/management.go.md) · [PHP](/pt-br/documentacao/guides/whatsapp/groups/management.php.md) · [CLI](/pt-br/documentacao/guides/whatsapp/groups/management.cli.md) · [cURL](/pt-br/documentacao/guides/whatsapp/groups/management.curl.md)

A remoção de um participante fica `pending` na entrada dele até WhatsApp confirmar, e nunca chega a `success`: a entrada desaparecendo de `participants` é o que indica que funcionou. Um valor nomeando alguém que não está no grupo retorna um `422` [`E15050`](/docs/api/errors/E15050).

## Fixar uma mensagem

Fixar mantém uma das mensagens do próprio grupo no topo do chat, para que alguém que entre depois não precise rolar até o ponto ao qual a conversa sempre volta. Uma fixação dura `duration_days`, de 1 a 30, e o padrão é 7.

**TypeScript**

```typescript
const pin = await bird.whatsapp.groups.pins.create("wag_01krdgeqcxet5s7t44vh8rt9mg", {
  message_id: "wam_01kya19eknftrs2s6p82asmvnh",
  duration_days: 14,
});
console.log(pin.pinned_until);
```

Examples: [TypeScript](/pt-br/documentacao/guides/whatsapp/groups/management.ts.md) · [Python](/pt-br/documentacao/guides/whatsapp/groups/management.py.md) · [Go](/pt-br/documentacao/guides/whatsapp/groups/management.go.md) · [PHP](/pt-br/documentacao/guides/whatsapp/groups/management.php.md) · [CLI](/pt-br/documentacao/guides/whatsapp/groups/management.cli.md) · [cURL](/pt-br/documentacao/guides/whatsapp/groups/management.curl.md)

A mensagem precisa ser uma que este grupo contém: uma mensagem de outro grupo, ou uma mensagem individual, retorna um `422` [`E15053`](/docs/api/errors/E15053). Um grupo comporta [apenas um certo número de fixações por vez](/docs/guides/whatsapp/groups#what-whatsapp-limits), e fixar além disso desafixa a mais antiga em vez de falhar; fixar uma mensagem já fixada substitui sua expiração. O que o grupo tem fixado no momento está no próprio grupo, como `pinned_messages`.

WhatsApp desafixa uma mensagem automaticamente quando seus dias passam, então desafixe apenas para retirá-la antes do prazo. `DELETE /v1/whatsapp/groups/{group_id}/pinned-messages/{message_id}` responde `200`, e repeti-lo é seguro: uma mensagem que este grupo contém mas que não está fixada não altera nada e ainda responde `200`.

## Excluir o grupo

Excluir remove o grupo em WhatsApp. Todos os participantes perdem o acesso, incluindo sua empresa, e o link de convite para de funcionar. Isso não pode ser desfeito, e retomar a conversa significa criar um novo grupo e enviar seu link.

**TypeScript**

```typescript
const group = await bird.whatsapp.groups.delete("wag_01krdgeqcxet5s7t44vh8rt9mg");
console.log(group.last_operation?.status); // pending until WhatsApp confirms it
```

Examples: [TypeScript](/pt-br/documentacao/guides/whatsapp/groups/management.ts.md) · [Python](/pt-br/documentacao/guides/whatsapp/groups/management.py.md) · [Go](/pt-br/documentacao/guides/whatsapp/groups/management.go.md) · [PHP](/pt-br/documentacao/guides/whatsapp/groups/management.php.md) · [CLI](/pt-br/documentacao/guides/whatsapp/groups/management.cli.md) · [cURL](/pt-br/documentacao/guides/whatsapp/groups/management.curl.md)

O grupo continua legível depois em `status` `deleted`, então uma referência armazenada a ele ainda resolve em vez de se tornar um `404`. Um grupo `failed` também pode ser excluído, e esse não atinge nenhum sistema externo: a criação nunca produziu um grupo em WhatsApp, então limpar o registro é contabilidade interna de Bird. Qualquer outro status recusa com um `409` [`E15047`](/docs/api/errors/E15047).

## Listar seus grupos

A lista retorna os grupos que seu espaço de trabalho criou, do mais recente ao mais antigo, como uma página paginada por cursor. Filtre pelo número administrador (`number`, como número E.164 ou ID `wan_`), pela WhatsApp Business Account sob a qual ele envia (`waba`), ou por `status`, repetindo o parâmetro para corresponder a vários. `q` pesquisa o assunto e a descrição por uma substring, sem distinção de maiúsculas e minúsculas.

**TypeScript**

```typescript
for await (const group of bird.whatsapp.groups.list({ status: ["active"] })) {
  console.log(group.id, group.subject, group.participant_count);
}
```

Examples: [TypeScript](/pt-br/documentacao/guides/whatsapp/groups/management.ts.md) · [Python](/pt-br/documentacao/guides/whatsapp/groups/management.py.md) · [Go](/pt-br/documentacao/guides/whatsapp/groups/management.go.md) · [PHP](/pt-br/documentacao/guides/whatsapp/groups/management.php.md) · [CLI](/pt-br/documentacao/guides/whatsapp/groups/management.cli.md) · [cURL](/pt-br/documentacao/guides/whatsapp/groups/management.curl.md)

Um grupo excluído permanece na lista com `status` `deleted`, então filtre por status para ver apenas os grupos nos quais você ainda pode enviar mensagens.

## Solução de problemas

- **`412` ([E15045](/docs/api/errors/E15045))**: O número não possui o status de Official Business Account, então WhatsApp não o deixará criar um grupo. A decisão é de WhatsApp: solicite o status no WhatsApp Manager no perfil do número, ou crie o grupo em um número que já o possua.
- **`404` ([E15046](/docs/api/errors/E15046))**: O ID não corresponde a nenhum grupo deste espaço de trabalho. Um grupo pertence ao espaço de trabalho que o criou, então um ID de outro espaço de trabalho não é encontrado aqui.
- **`409` ([E15047](/docs/api/errors/E15047))**: O grupo está pendente, suspenso, excluído ou falhou. Apenas um grupo ativo aceita alterações. Leia o grupo para ver em que estado ele está.
- **`409` ([E15049](/docs/api/errors/E15049))**: O número já administra os 10.000 grupos que WhatsApp permite. Exclua grupos cuja conversa já terminou ou crie este em outro número.
- **`409` ([E15054](/docs/api/errors/E15054))**: Uma alteração no mesmo grupo ou no mesmo participante ainda está pendente. Leia `last_operation` e aguarde a confirmação.
- **`422` ([E15050](/docs/api/errors/E15050))**: O caminho não identifica ninguém no grupo. Leia o `participants` do grupo e use um `bsuid` ou `phone_number` como ele os reporta.
- **`422` ([E15051](/docs/api/errors/E15051))**: Um dos IDs de solicitação de entrada não está mais aguardando decisão. Liste as solicitações novamente e use os IDs que retornarem.
- **`422` ([E15053](/docs/api/errors/E15053))**: A mensagem pertence a outro grupo ou a uma conversa individual. O `to.group_id` da mensagem indica qual grupo pode fixá-la.
- **Um grupo `pending` que nunca se torna ativo**: Bird desiste de esperar em vez de deixá-lo pendente e move o grupo para `failed` com o motivo em `last_operation.last_error`. Crie um substituto em vez de tentar novamente.

## Referência

Os formatos completos de solicitação e resposta estão na referência API: [criar](/docs/api/reference/create-whatsapp-group), [listar](/docs/api/reference/list-whatsapp-groups), [obter](/docs/api/reference/get-whatsapp-group), [atualizar](/docs/api/reference/update-whatsapp-group), [excluir](/docs/api/reference/delete-whatsapp-group), [rotacionar o link de convite](/docs/api/reference/rotate-whatsapp-group-invite-link), [remover um participante](/docs/api/reference/delete-whatsapp-group-participant), [listar](/docs/api/reference/list-whatsapp-group-join-requests), [aprovar](/docs/api/reference/approve-whatsapp-group-join-requests) e [rejeitar](/docs/api/reference/reject-whatsapp-group-join-requests) solicitações de entrada, e [fixar](/docs/api/reference/create-whatsapp-group-pinned-message) e [desafixar](/docs/api/reference/delete-whatsapp-group-pinned-message) uma mensagem.

## Próximos passos

- [Grupos WhatsApp](/docs/guides/whatsapp/groups): para que serve um grupo e o mesmo ciclo de vida no dashboard
- [Enviando para um grupo WhatsApp](/docs/guides/whatsapp/groups/sending): como endereçar o grupo, o que é necessário e os recibos por participante
- [Recebendo mensagens de grupo WhatsApp](/docs/guides/whatsapp/groups/receiving): qual participante escreveu e como responder ao grupo
- [IDs de usuário com escopo de negócio](/docs/guides/whatsapp/business-scoped-user-ids): o identificador pelo qual um participante é nomeado quando você não tem o número de telefone
- [Idempotência](/docs/guides/idempotency): como tentar novamente uma escrita que pode já ter sido aceita

## Related resources

- [Connecting WhatsApp to Bird: from buying a number to a live channel](/learn/whatsapp/connecting-whatsapp-to-bird) (video)
- [What is the 24-hour customer service window on WhatsApp?](/explained/whatsapp/what-is-the-24-hour-customer-service-window) (answer)
- [WhatsApp message builder](/tools/whatsapp-message-builder) (tool)
- [WhatsApp](/whatsapp-api) (product)

[Get an implementation brief](/learn/workspace?topic=whatsapp)
