1. Autenticação#
A API suporta dois métodos de autenticação:
JWT (Bearer Token)#
Obtido via /v1/auth/login. Enviar no header:
text
Authorization: Bearer <jwt_token>
- Algoritmo: HS256
- Expiracao padrão: 15 minutos
- Claims:
company_id,user_id,role,is_superadmin - Revalidacao de empresa: em cada request autenticada com JWT (exceto
is_superadmin), o servidor consulta o master DB para garantir que a empresa existe e estáactive. Empresa inexistente →403comcompany not found; suspensa →403comcompany suspended; falha de banco nessa consulta →503comservice unavailable. O mesmo critério de empresa ativa se aplica a API key (token inválido continua401).
API Key#
Obtida via /v1/tokens ou retornada no registro (POST /v1/auth/register). Enviar no header:
text
X-API-Key: ctc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- Formato:
ctc_+ 64 caracteres hex (32 bytes aleatorios) - Chaves emitidas antes da renomeacao para Catcher (2026-05) usam o prefixo legado
bza_e continuam válidas — a API aceita os dois prefixos, não e preciso rotacionar - Armazenada como hash SHA256 no banco (nunca em texto plano)
- Pode ser revogada a qualquer momento
⚠️ ATENÇÃO — NÃO CONFUNDIR OS HEADERS:
Tipo de credencial Header correto Exemplo JWT (sessão browser) Authorization: Bearer <jwt>Authorization: Bearer eyJhbG...API Key (integração/SDK) X-API-Key: <ctc_token>X-API-Key: ctc_4615fb31...Usar
Authorization: Bearer ctc_...retorna401 TOKEN_INVALID— o middleware JWT tenta decodificar octc_como JWT e falha. O tokenctc_DEVE ser enviado viaX-API-Key.O token retornado no
POST /v1/auth/registeré um API key (ctc_...), NÃO um JWT. UseX-API-Keypara todas as chamadas subsequentes com esse token.
Sessão do navegador (cookies)#
O Console usa um terceiro modo, exclusivo para navegador:
- O access token JWT fica apenas em memória (nunca em
localStorage). - O refresh usa o cookie
biazap_refresh_token(HttpOnly, rotacionado a cada uso). - Requests unsafe (POST/PATCH/DELETE) do navegador devem enviar o header
X-CSRF-Token, lido do cookiebiazap_csrf_token. Ausente ou divergente →403 CSRF_INVALID. - Integrações server-to-server (API key ou Bearer JWT puro) NÃO precisam de CSRF — o requisito de CSRF so vale para sessões de navegador com cookie.
Roles (Papeis)#
| Role | Descricao |
|---|---|
owner |
Dono da empresa. Acesso total: usuários, tokens, instâncias, mensagens |
admin |
Administrador. Gerencia instâncias, webhooks, filas |
agent |
Agente. Envia mensagens, acessa chats/contatos |
superadmin |
Administrador da plataforma. Acesso a rotas /v1/admin/* |
Acesso por Role#
| Recurso | owner | admin | agent |
|---|---|---|---|
| Tokens e Usuários | x | - | - |
| Instâncias (CRUD) | x | x | - |
| Mensagens | x | x | x |
| Chats e Contatos | x | x | x |
| Presença e Perfil | x | x | x |
| Grupos | x | x | x |
| Mídia | x | x | x |
| Fila | x | x | - |
| Webhooks | x | x | - |
| Admin | superadmin only | - | - |
Rate Limiting#
- Baseado em Redis, por empresa
- Limite configuravel por plano (padrão: 60 req/min)
- Rotas
/v1/admin/*não aplicam throttling adicional por request; o acesso depende de JWT válido comis_superadmin=true - Headers de resposta:
X-RateLimit-Limit- Total permitido por minutoX-RateLimit-Remaining- Restantes no periodoX-RateLimit-Reset- Timestamp Unix do resetRetry-After- Segundos para aguardar (quando 429)