Escopos
identify: nome, nome de usuário e avatar (GET /api/v1/users/@me).email: inclui o e-mail no/users/@me.servers: lista dos servidores da pessoa (GET /api/v1/users/@me/servers).bot: adiciona o bot a um servidor escolhido na tela de autorização.applications.commands: combot, instala os comandos no servidor; sembot, é uma instalação de usuário (o bot pode mandar DM para quem autorizou).
Fluxo
// 1) mande a pessoa para:
https://falafy.com.br/app/oauth2/authorize?client_id=APP_ID&scope=identify%20email
&redirect_uri=https%3A%2F%2Fseu.site%2Fcallback&response_type=code&state=XYZ
&code_challenge=BASE64URL(SHA256(verifier))&code_challenge_method=S256
// 2) no callback, troque o code (form-urlencoded):
POST https://falafy.com.br/api/oauth2/token
grant_type=authorization_code&code=CODE&redirect_uri=https%3A%2F%2Fseu.site%2Fcallback
&client_id=APP_ID&code_verifier=VERIFIER (ou client_secret=... em servidores)
// 3) use o token:
GET https://falafy.com.br/api/v1/users/@me
Authorization: Bearer fo_at_...
Cadastre as URIs de redirecionamento exatas no portal. O state volta igual no redirecionamento: confira para evitar CSRF. Códigos valem 10 minutos e uma vez só.
Tokens
A resposta segue o padrão: access_token (1 hora), refresh_token (30 dias), token_type: "Bearer", expires_in e scope. Renove com grant_type=refresh_token: o refresh antigo deixa de valer (rotação). Revogue com POST /api/oauth2/token/revoke (token, client_id); isso encerra toda a autorização. GET /api/v1/oauth2/@me mostra app, escopos e validade.
Instalar bots
O link do portal (/app/oauth2/authorize?client_id=...&scope=bot%20applications.commands&permissions=...) mostra a tela de consentimento com a escolha do servidor e das permissões. Só entram as permissões que a pessoa que instala também tem, e Administrador nunca é concedido. Bots privados só podem ser instalados pelo dono. Com “Exigir autorização OAuth2 completa”, informe também redirect_uri e response_type=code.