Вход через proxy.gonka.gg

Обычный OAuth 2.0 Authorization Code с PKCE — та же форма, что у «Войти через Google». Пользователь жмёт вашу кнопку, попадает на экран согласия proxy.gonka.gg, подтверждает и возвращается с одноразовым кодом, который вы меняете на сервере. Пароль мы не отдаём.

Регистрация клиента пока ручная — напишите имя приложения и redirect URL, мы выдадим client_id / client_secret с фиксированным набором scope.

Scope

ScopeЧто даёт
profileId аккаунта, email, дата регистрации
usageБаланс, всего токенов, запросы, расход
api_keyНовый отзываемый API-ключ для этого подключения. Старые ключи никогда не раскрываются — мы храним только хеши.

1. Отправьте пользователя

Сгенерируйте PKCE code_verifier и code_challenge (base64url от SHA-256(verifier)), затем редирект:

GET https://proxy.gonka.gg/oauth/authorize
    ?client_id=YOUR_CLIENT_ID
    &redirect_uri=https://yourapp.com/callback
    &state=RANDOM_CSRF_TOKEN
    &code_challenge=BASE64URL(SHA256(code_verifier))
    &code_challenge_method=S256

2. Обменяйте код (на сервере)

curl https://api.proxy.gonka.gg/api/oauth/token \
  -H "Content-Type: application/json" \
  -d '{
    "grant_type": "authorization_code",
    "code": "<code from redirect>",
    "redirect_uri": "https://yourapp.com/callback",
    "client_id": "YOUR_CLIENT_ID",
    "client_secret": "YOUR_CLIENT_SECRET",
    "code_verifier": "<verifier from step 1>"
  }'

В ответе access_token (oat_…), refresh_token (ort_…) и при первом подключении один раз api_key (sk-…). Ключ сохраните сразу.

Access token живёт 1 час. Обновление: grant_type=refresh_token.

3. Профиль и расход

curl https://api.proxy.gonka.gg/api/oauth/userinfo \
  -H "Authorization: Bearer oat_..."

Эндпоинты

МетодПутьАвторизацияОписание
GET/oauth/authorizeБраузерСтраница согласия
POST/api/oauth/tokenclient_id + secretКод или refresh
GET/api/oauth/userinfoAccess tokenПрофиль / расход
POST/api/oauth/revokeНетОтозвать access или refresh token

Пользователь отключает приложения в настройках. Это отзывает токены и выпущенный ключ.