Autenticação
A Public API usa API Keys pra autenticação. Não há OAuth, não há tokens temporários — uma chave fixa, permanente até ser revogada.
Formato da chave
Toda chave tem o formato:
crm_live_<43 caracteres base64url>Exemplo:
crm_live_dG9rZW5fc2VjcmV0X2V4YW1wbGVfZG9fdGV4dG9fY29tcGxldG9zO prefixo crm_live_ ajuda você (e nós) a identificar visualmente que é uma chave da API Indutiva. Não há ambiente sandbox — todas as keys batem no mesmo CRM de produção. Isso é por design: você usa um tenant de teste real se quiser ambiente isolado.
Como passar a chave
Use o header X-API-Key:
curl https://app.indutivacrm.com.br/api/v1/contacts \ -H "X-API-Key: crm_live_seu_segredo_aqui"curl https://app.indutivacrm.com.br/api/v1/contacts \ -H "Authorization: Bearer crm_live_seu_segredo_aqui"Funciona tanto com X-API-Key quanto com Authorization: Bearer — escolha o que se encaixar melhor no seu cliente HTTP.
Resposta de erro
Se a chave estiver ausente, inválida, expirada ou revogada:
{ "error": "invalid_api_key", "message": "API Key não encontrada, revogada ou expirada"}Status code: 401 Unauthorized.
Outros erros relacionados:
| Status | error | Quando |
|---|---|---|
| 401 | invalid_api_key | Chave não existe, foi revogada, ou expirou |
| 403 | insufficient_scope | Chave válida, mas faltam scopes pra esse endpoint |
| 403 | endpoint_not_exposed | Endpoint só é acessível via UI (JWT), não via API Key |
| 429 | rate_limit_exceeded | Mais chamadas que o limite por minuto |
Isolamento por tenant
Cada chave pertence a um tenant específico — todas as chamadas autenticadas com ela só veem dados desse tenant. Não há “API Key global” que enxergue múltiplos tenants.
Segurança
Detalhes técnicos
- O segredo cru nunca é armazenado — guardamos apenas o hash SHA-256
- Verificação tem cache de 60s em memória pra evitar hit no DB a cada request
lastUsedAté atualizado de forma throttled (1x por minuto por key) pra não criar contenção no DB- Toda chamada é auditada na tabela
api_key_audit_logs(best-effort, async)