Pular para o conteúdo

Scopes (permissões)

Scopes controlam exatamente o que uma API Key pode fazer. Em vez de “chave administrativa total”, você escolhe permissões granulares por recurso e por operação (leitura vs escrita).

Convenção de nomes

Os scopes seguem o padrão <recurso>:<ação>:

  • contacts:read — listar contatos, buscar por id
  • contacts:write — criar, atualizar, deletar contatos
  • deals:read — listar/ver negócios
  • deals:write — criar/atualizar/deletar negócios

write é sempre cumulativo: cobre POST, PATCH e DELETE no recurso. Não há scopes separados pra criar vs deletar — quem cria pode também deletar.

Catálogo completo

Recursos CRM core

ScopePermite
contacts:readGET /contacts, GET /contacts/:id, POST /contacts/search
contacts:writePOST/PATCH/DELETE em contacts
companies:readGET listagem e detalhe de empresas
companies:writeMutações em empresas
deals:readGET listagem e detalhe de negócios
deals:writeMutações em negócios
activities:readGET atividades vinculadas a um contato/empresa/deal
activities:writeCriar/atualizar atividades, registrar ligações, e-mails, tarefas

Sales

ScopePermite
proposals:readListar/ver propostas
proposals:writeCriar/atualizar propostas

Configurações e catálogos

ScopePermite
pipelines:readListar pipelines e suas etapas (útil pra criar deals com stageId correto)
properties:readListar propriedades customizadas de contact/company/deal
tags:readListar tags
tags:writeCriar/atualizar tags
lists:readListar listas estáticas/dinâmicas
lists:writeManipular membros de listas estáticas

Forms

ScopePermite
forms:readListar formulários configurados
forms:submissions:readLer submissions de formulários

Webhooks (saída)

ScopePermite
webhooks:manageCRUD de webhooks que disparam quando eventos do CRM acontecem

Wildcard

ScopePermite
*Todos os scopes acima + scopes futuros

Como o guard avalia

Quando uma request chega:

  1. Endpoint sem @RequireScopes decorator? Bloqueado pra API Key. Esses endpoints só são acessíveis via UI logada (JWT).
  2. Key tem *? Libera qualquer scope, qualquer endpoint marcado.
  3. Key tem todos os scopes exigidos? Libera.
  4. Falta algum scope? 403 insufficient_scope com mensagem indicando qual falta.

Exemplo: POST /contacts exige contacts:write. Uma key com apenas contacts:read recebe:

{
"error": "insufficient_scope",
"message": "Scope insuficiente. Necessário: contacts:write",
"required": ["contacts:write"],
"have": ["contacts:read"]
}

Princípio do menor privilégio

Ao criar uma chave, marque os scopes que a integração realmente precisa:

  • Integração só lê? Apenas *:read
  • Webhook recebe leads e cria contatos? Apenas contacts:write
  • Cria deals quando lead vira oportunidade? contacts:read + deals:write + pipelines:read (pra saber stageId correto)

Quanto menos privilégio, menor o impacto se a chave vazar.

O catálogo de scopes está versionado junto com a API. Novos scopes podem ser adicionados a qualquer momento — keys existentes não são afetadas. Scopes nunca são removidos sem deprecation prévio (mínimo 90 dias de aviso).

Pra acompanhar mudanças, veja o changelog (público) ou se inscreva nas notificações do CRM.