Webhooks do workspace
Alguns eventos pertencem ao workspace, não a um número de WhatsApp: uma linha telefônica foi renovada, uma recarga da carteira foi paga. Eles vão para os webhooks do workspace, um cadastro separado dos webhooks de número. Os webhooks do workspace são o mesmo cadastro dos webhooks das linhas, vistos de uma superfície mais ampla:/v1/phone-lines/webhooksaceita só os eventos das linhas./v1/workspace/webhooksaceita todos os eventos do workspace: os eventos das linhas e owallet.topup_paid. Ele lista todos os webhooks do workspace, inclusive os criados pela superfície das linhas.
plwh_), mesma assinatura, mesmas retentativas e o mesmo log de entregas nas duas. Um webhook de número — mesmo inscrito em "*" — nunca recebe estes eventos.
Configurar
- No painel: Chaves do workspace (
/workspace-api-keys), seção Webhooks do workspace, como Proprietário ou Administrador. Os webhooks que escutam só eventos das linhas também aparecem em Linhas → Webhooks das linhas. - Pela API: os endpoints abaixo, com uma chave de workspace ou uma chave de conta com
x-workspace-id. Uma chave de número recebe 403NUMBER_SCOPE_NOT_ALLOWED. Com uma chave de conta ou um token OAuth/MCP, o usuário precisa ser Proprietário ou Administrador (caso contrário,403 PERMISSION_DENIED).
Os formatos de requisição e resposta, as regras de nome e URL e os erros são os mesmos de
/v1/phone-lines/webhooks — só mudam os eventos aceitos.
Criar um webhook para recargas pagas
"*" e os eventos da carteira
"*" significa todos os eventos das linhas, e só eles. Os eventos da carteira são opt-in: um webhook recebe wallet.topup_paid só se o nomear em events. Assim, um webhook criado para as linhas com "*" não passa a receber eventos de dinheiro que nunca pediu.
Para receber tudo, liste os dois: ["*", "wallet.topup_paid"].
Um webhook que nomeia um evento da carteira também pode ser lido, excluído e ter as entregas listadas em
/v1/phone-lines/webhooks, mas editá-lo ali é recusado com 400 INVALID_WEBHOOK, porque aquela superfície não conhece os eventos da carteira. Edite-o em /v1/workspace/webhooks.Eventos
Evento de recarga paga
Dispara uma vez por pedido de recarga creditado, em todos os caminhos: Pix, a página hospedada do Stripe, um checkout transparente e também as recargas feitas pelo painel. Uma reentrega ou uma confirmação duplicada do provedor de pagamento não o dispara de novo. Cobranças feitas pela plataforma — renovações, números, linhas — e ajustes de saldo feitos pela equipe da Pilot Status não o disparam.
Identifique a recarga pelo
orderId, e deduplique as entregas pelo id do envelope (enviado também no header Idempotency-Key). O webhook só é enviado depois que o pedido é concluído: quando ele chega, o GET /v1/billing/topups/{id} já responde status: "paid".
Payload, assinatura e retentativas
Toda entrega é umPOST com { id, event, createdAt, data }, assinado com x-pilot-status-signature (HMAC-SHA256 em hexadecimal do corpo bruto, com o segredo do webhook), com Idempotency-Key igual ao id. Cada entrega tem 6 tentativas no total, ao longo de cerca de 15 minutos. Código de verificação e detalhes: Webhooks das linhas → Verificar a assinatura e Entrega e retentativas.