Todas as formas de integração com a nossa API são realizadas utilizando o protocolo OAuth 2.0. Independentemente do tipo de aplicação que você está construindo — um serviço backend, uma integração servidor-a-servidor, ou um aplicativo mobile — a autenticação segue esse padrão, através da emissão de um access_token que deve ser enviado em toda requisição subsequente à API.Nossa API disponibiliza três formas de autenticação (grant types), cada uma adequada a um cenário de integração diferente:
Antes de utilizar qualquer um dos fluxos abaixo, sua aplicação precisa ser cadastrada por nossa equipe, que fornecerá um client_id e, dependendo do tipo de integração, um client_secret:
Client confidencial (usado em Password e Client Credentials): recebe client_ideclient_secret. Adequado apenas para aplicações capazes de armazenar o segredo com segurança — tipicamente serviços backend rodando em ambiente controlado.
Client público (usado em Authorization Code com PKCE): recebe apenas client_id, sem client_secret. Adequado para aplicações que rodam no dispositivo do usuário final (mobile, desktop, navegador), onde qualquer segredo embutido no código pode ser extraído.
⚠️ Se você não tem certeza de qual tipo de client sua aplicação precisa, veja a tabela acima: qualquer aplicação instalada no dispositivo do usuário final (app mobile, app desktop, SPA rodando no navegador) deve usar um client público com Authorization Code + PKCE. Nunca embuta um client_secret nesse tipo de aplicação.
Use quando sua aplicação coleta as credenciais (usuário e senha) do próprio usuário final diretamente — sem redirecioná-lo a uma tela de login separada. Esse fluxo só deve ser usado por aplicações de confiança total, já que a aplicação tem acesso direto à senha do usuário.
Use quando a requisição não representa um usuário específico — por exemplo, um job agendado, uma integração entre sistemas, ou um serviço que precisa consultar/gravar dados na API em nome da própria aplicação (não de uma pessoa).
Note que não há usuário associado — não existe a chave usuario na resposta, e o access_token gerado representa a aplicação como um todo, não uma pessoa. Consequentemente, este token só deve ser usado contra endpoints da API que não dependem de contexto de usuário (ex: rotas administrativas, integrações de dados, webhooks).
Use quando sua aplicação não consegue armazenar um segredo com segurança — o caso de qualquer app mobile, desktop ou single-page application, já que o código roda no dispositivo do usuário e pode ser inspecionado.PKCE (Proof Key for Code Exchange, RFC 7636) é uma extensão de segurança do fluxo Authorization Code do OAuth2: no lugar de um client_secret fixo, a aplicação gera um segredo descartável e único por login (o code_verifier), de forma que, mesmo que alguém intercepte o authorization code durante o fluxo, não consiga trocá-lo por um access_token sem esse segredo temporário.
code_verifier: string aleatória, gerada com um gerador criptograficamente seguro, entre 43 e 128 caracteres (charset: A-Z, a-z, 0-9, -, ., _, ~).
code_challenge: hash SHA-256 do code_verifier, codificado em base64url (sem padding =).
state: string aleatória (mínimo 128 bits de entropia), usada para proteção contra CSRF.
Recomendação: use uma biblioteca de PKCE já testada para sua plataforma em vez de implementar manualmente — AppAuth-Android / AppAuth-iOS, react-native-app-auth, flutter_appauth. Elas cobrem geração de verifier/challenge, abertura de Custom Tab e validação de state automaticamente.
Guarde o code_verifier e o state localmente (em memória) — você precisará deles no Passo 4.
Abra a URL abaixo em uma Custom Tab do navegador do sistema (Android) ou SFSafariViewController (iOS) — nunca em uma WebView comum embutida no seu app:
GET https://api.bussoladagestao.com.br/v1/oauth/authorize
Parâmetro
Descrição
client_id
O client_id fornecido no cadastro da sua aplicação.
redirect_uri
Uma das URIs de redirecionamento cadastradas para o seu client. Deve corresponder exatamente à uma das cadastradas.
response_type
Valor fixo: code
code_challenge
O code_challenge gerado no Passo 1.
code_challenge_method
Valor fixo: S256 (o método plain não é suportado).
Antes de qualquer outra coisa, valide o state: compare com o valor gerado no Passo 1. Se não forem idênticos, rejeite a resposta — isso indica uma possível tentativa de CSRF.O code recebido tem validade de 10 minutos e é de uso único.
⚠️ refresh_token sempre é null neste fluxo. O access_token tem vida longa e, ao expirar, é necessário repetir o fluxo completo a partir do Passo 2 — não implemente lógica esperando um refresh token.
Disponível apenas para tokens emitidos via Password Grant. Permite obter um novo access_token sem enviar usuário/senha novamente:
POST https://api.bussoladagestao.com.br/v1/oauth/token
Content-Type: application/json
A resposta segue o mesmo formato da requisição original (access_token, novo refresh_token, usuario). Guarde sempre o refresh_token mais recente recebido — o anterior deixa de ser válido após o uso.