Pular para o conteúdo principal

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/webhooks aceita só os eventos das linhas.
  • /v1/workspace/webhooks aceita todos os eventos do workspace: os eventos das linhas e o wallet.topup_paid. Ele lista todos os webhooks do workspace, inclusive os criados pela superfície das linhas.
Mesmo segredo de assinatura (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 403 NUMBER_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

O secret vem só nesta resposta e não tem rotação. Guarde-o antes de qualquer outra coisa. Criar não é idempotente: um POST repetido cria um segundo webhook.

"*" 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 é um POST 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.