Skip to main content
OAuth 2.0 permite que aplicações de terceiros acessem a API pública /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

  1. Conta merchant com API pública habilitada (solicite ao suporte GoatPay se necessário).
  2. Aplicação registrada via API /v1/oauth-apps ou em Integrações → Aplicações OAuth no dashboard.
  3. Credenciais DEV e PRODUCTION separadas (client_id + client_secret por ambiente).
  4. Redirect URIs cadastradas com match exato (sem wildcards). HTTPS em produção; http://localhost em DEV; schemes custom (myapp://callback) permitidos se registrados explicitamente.

Descoberta automática

Consulte GET /.well-known/oauth-authorization-server para obter authorization_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)
O usuário pode aprovar ou negar. Em caso de negação, o redirect traz error=access_denied.

PKCE (obrigatório)

Cadeia de scopes

O token nunca recebe scope maior que o aprovado pelo usuário.

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/*)
Consulte escopo da API pública para o mapa completo.

Identidade da conta

Documentação: GET /v1/me. Retorna a conta merchant autorizada, não o perfil pessoal de quem autorizou.

Webhooks

Apps OAuth com scopes webhooks: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

Access tokens expiram em 15 minutos. Armazene refresh tokens com segurança no servidor.

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_secret somente no servidor — nunca no frontend ou app mobile
  • Gere e valide state no callback (CSRF)
  • Guarde code_verifier até 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

Use X-API-Key: gp_live_... nas rotas /v1/oauth-apps/* — mesmo padrão de webhooks. Permissões: oauth-apps.