Dados da tela de consentimento (JSON consumido pelo painel)
Início do fluxo Authorization Code. O navegador do usuário final é
redirecionado para a página de consentimento do app
(https://app.orbitsender.com/oauth/authorize?...) — não para este
endpoint da API diretamente. Este GET /api/oauth/authorize é a API
(responde JSON) que alimenta aquela tela: retorna nome e logo do app
e os scopes solicitados (com marca de sensibilidade). Ao aprovar, o
painel chama internamente POST /api/oauth/authorize/decision (endpoint
interno do painel, não exposto ao parceiro), que redireciona de volta
ao redirect_uri com ?code=...&state=....
Requer a sessão do usuário final (cookie/JWT do painel) — não usa
api-key nem token de parceiro. Não cria nada; apenas descreve o consent.
PKCE (code_challenge + code_challenge_method=S256) é obrigatório
para apps públicos.
Query Parameters
Identificador público do app de parceiro.
Deve casar exatamente com uma das URIs registradas do app.
uriScopes separados por espaço (ex.: statistics:read campaigns:read). Subconjunto dos scopes aprovados do app.
Valor opaco anti-CSRF devolvido no redirect.
PKCE — obrigatório para apps públicos.
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/api/oauth/authorize?client_id=string&redirect_uri=http%3A%2F%2Fexample.com&response_type=code&scope=string"{ "success": true, "client": { "name": "Painel do Parceiro", "logo_url": "https://cdn.parceiro.com/logo.png", "homepage_url": "https://parceiro.com", "privacy_url": "https://parceiro.com/privacidade" }, "scopes": [ { "scope": "statistics:read", "description": "Ler estatísticas agregadas do tenant (sem PII).", "sensitive": false }, { "scope": "campaigns:read", "description": "Ler/listar campanhas (status/progresso agregado).", "sensitive": false } ], "redirect_uri": "https://parceiro.com/oauth/callback", "state": "xyz123"}{ "success": false, "error": "invalid_scope", "message": "Scopes não aprovados para o app: settings:read"}{ "success": false, "error": "Too Many Requests", "code": "rate_limited", "message": "Muitas requisições. Tente novamente em instantes."}