Chaves de API — listar, regenerar, rotacionar
Toda requisição à API do Pilot Status exige uma chave de API em um destes cabeçalhos:x-api-key: a chave bruta (ps_...)x-api-key-id: o ID da chave de API (o backend o resolve internamente)
ps_.

A página de API Keys — cada número tem uma chave padrão (exibida mascarada) com ação Regenerar, além de privacidade e retenção por número.
Escopos de chave
Não existem sub-chaves (sem pai/filho). No painel, as chaves são regeneradas, não criadas: cada número de WhatsApp tem uma chave padrão com escopo de número, e a chave com escopo de tenant é um singleton.
Uma chave com escopo de tenant em um endpoint de ação por número recebe 403
TENANT_SCOPE_NOT_ALLOWED; uma chave com escopo de número em um endpoint exclusivo de tenant recebe 403 NUMBER_SCOPE_NOT_ALLOWED.

A chave com escopo de tenant fica em Perfil → API — ela gerencia números via API pública e não envia mensagens.
GET /v1/api-keys — Listar chaves (somente escopo de tenant)
Uma chave com escopo de número recebe 403NUMBER_SCOPE_NOT_ALLOWED. Retorna um array plano e enxuto — um item por número — com numberId, number, displayName, keyId, keyLast4, além do valor real utilizável (key, revealable: true). Chaves legadas retornam com key: null e revealable: false — regenere aquele número para obter um valor utilizável.
Um item por número — a chave criada mais recentemente. Um número pode ter mais de uma chave, e a listagem agora as reduz à mais nova em vez de devolver uma linha por chave. As chaves mais antigas não são revogadas: elas continuam autenticando, apenas deixam de aparecer na lista. Chaves sem número associado continuam sendo listadas individualmente.
POST /v1/api-keys — Regenerar a chave de um número (somente escopo de tenant)
Envie o número alvo emwhatsappNumberId: sua chave padrão anterior é rotacionada/invalidada e a nova key bruta é retornada uma única vez. Não há “criar outra chave” — cada número tem exatamente uma chave padrão. Número desconhecido → 404 NUMBER_NOT_FOUND.
POST /v1/api-keys/regenerate — Rotacionar a própria chave do chamador
Rotaciona a chave do próprio escopo da chave que faz a chamada (funciona para ambos os escopos): a chave atual é invalidada e a nova chave bruta é retornada uma única vez na resposta.Privacidade e retenção de dados
A página de API Keys também hospeda o painel de Privacidade e retenção por número (o mesmo controle da página de Números). Ele determina se — e por quanto tempo — as conversas/o conteúdo das mensagens desse número são armazenados, e nunca afeta a entrega: o Chatwoot e os webhooks continuam funcionando em todos os modos (eles operam antes da camada de armazenamento). São três modos:- Armazenar indefinidamente (
STORE_INDEFINITE, padrão) — mantém tudo para sempre. - Armazenar por X dias (
STORE_X_DAYS) — mantém apenas os últimos N dias (piiRetentionDays, inteiro de 1 a 3650; uma tarefa diária apaga definitivamente os registros de chat mais antigos e redige o PII dos logs mais antigos). - Não armazenar / apenas retransmitir (
RELAY_ONLY) — nunca persiste o chat; as mensagens ainda são retransmitidas (os webhooks disparam, o Chatwoot espelha), mas/chate/logsficam vazios e a mídia recebida não é re-hospedada.
Boas práticas de segurança
- Use as chaves de API somente no backend (nunca no navegador).
- Armazene as chaves em variáveis de ambiente / um gerenciador de segredos.
- Trate as respostas que contêm chaves brutas como sensíveis (não as registre em logs).