/v1/* em nome de uma conta merchant que autorizou o acesso. É diferente da chave de API: a chave é server-to-server da própria conta; OAuth é consentimento do titular da conta.
OAuth2 puro — sem OpenID Connect. Identidade da conta: GET /v1/me com scope
account:read. Não há /oauth/userinfo.Pré-requisitos
- Conta merchant com API pública habilitada (solicite ao suporte GoatPay se necessário).
- Aplicação registrada via API
/v1/oauth-appsou em Integrações → Aplicações OAuth no dashboard. - Credenciais DEV e PRODUCTION separadas (
client_id+client_secretpor ambiente). - Redirect URIs cadastradas com match exato (sem wildcards). HTTPS em produção;
http://localhostem DEV; schemes custom (myapp://callback) permitidos se registrados explicitamente.
Descoberta automática
Consulte GET /.well-known/oauth-authorization-server para obterauthorization_endpoint, token_endpoint, revocation_endpoint e scopes_supported.
Fluxo completo
1
1. Criar aplicação
POST /oauth-apps/create ou dashboard → Aplicações OAuth → nome, descrição e scopes. Gere credenciais DEV e Production; o
client_secret aparece uma vez.2
2. Redirect URI
Ex.:
https://sua-app.com/oauth/callback (produção), http://localhost:3000/oauth/callback (DEV) ou myapp://oauth/callback (app mobile, se registrado).3
3. PKCE
Gere
code_verifier e code_challenge (S256). Guarde o verifier no servidor; envie apenas o challenge no authorize.4
4. Autorizar
Redirecione para GET /oauth/authorize.
5
5. Token
Valide
state no callback e troque o code em POST /oauth/token.6
6. API
Use
Authorization: Bearer gp_oat_live_... nas rotas /v1/* dentro dos scopes aprovados.Consentimento
Após/oauth/authorize, o usuário vê em app.goatpay.com.br/oauth/consent:
- Nome, logo e desenvolvedor da aplicação
- Scopes solicitados com descrições
- Links para site, privacidade e termos (quando cadastrados)
error=access_denied.
PKCE (obrigatório)
Cadeia de scopes
Limites do OAuth vs API key
OAuth cobre operações de conta, PIX, transferências, payouts e webhooks dentro dos scopes acima. Não está disponível via OAuth (use API key da própria conta):- Pagamentos e transferências cripto
- Loja (
customers,products,coupons,payment-links) - Cobranças recorrentes (
billings,subscriptions) - Subcontas (
subaccount/*)
Identidade da conta
Webhooks
Apps OAuth com scopeswebhooks:read e webhooks:write podem cadastrar endpoints em /v1/webhooks/* com bearer gp_oat_*. Eventos de lifecycle OAuth (oauth.authorization.*, oauth.application.*, oauth.client.*) são entregues ao dono da aplicação e/ou à conta autorizada — veja o guia de webhooks.
Renovar e revogar
- Refresh:
grant_type=refresh_tokenem POST /oauth/token — o refresh anterior é invalidado (rotação). - Revogar: POST /oauth/revoke com
token=....
Erros comuns
No redirect (/oauth/authorize)
Na API (/v1/* com bearer)
Rotas
/oauth/* usam erros RFC 6749 (invalid_grant, etc.) sem envelope { success, data } — veja guia de erros.
Boas práticas
client_secretsomente no servidor — nunca no frontend ou app mobile- Gere e valide
stateno callback (CSRF) - Guarde
code_verifieraté trocar o code (expira em minutos) - Use credenciais DEV em homologação e PRODUCTION só em produção
- Revogue tokens ao desconectar integrações
vs API Key
MCP
O MCP Server autentica com API key (gp_live_...), não com OAuth bearer. Para automação via MCP, use chave de API; OAuth é para apps que redirecionam usuários ao consentimento.
Referência de endpoints
Gestão de aplicações
UseX-API-Key: gp_live_... nas rotas /v1/oauth-apps/* — mesmo padrão de webhooks. Permissões: oauth-apps.

