Если вы просто хотите использовать API напрямую — создайте ключ в личном кабинете. OAuth PKCE нужен разработчикам сторонних приложений, которые запрашивают доступ у пользователей.
Как это работает
Перенаправление на авторизацию
Приложение перенаправляет пользователя на
https://polza.ai/api/auth/authorize с параметрами.Consent screen
Пользователь видит экран подтверждения — выбирает организацию, разрешённые данные и лимит расходов.
Callback с кодом
После подтверждения пользователь перенаправляется обратно на
callback_url с параметром code.Шаг 1: Генерация PKCE
Сгенерируйте случайныйcode_verifier (43-128 символов, [A-Za-z0-9\-._~]) и вычислите code_challenge как BASE64URL(SHA256(code_verifier)).
Шаг 2: Перенаправление на авторизацию
Перенаправьте пользователя на эндпоинт авторизации с необходимыми параметрами:| Параметр | Обязательный | Описание |
|---|---|---|
response_type | да | Всегда code |
callback_url | да | URL для редиректа после авторизации (HTTPS, исключение: localhost) |
code_challenge | да | BASE64URL(SHA256(code_verifier)), 43-128 символов |
code_challenge_method | да | Всегда S256 |
state | нет | Произвольная строка для CSRF-защиты (возвращается без изменений) |
app_name | нет | Название приложения (отображается на consent screen) |
Шаг 3: Обработка callback
После авторизации пользователь будет перенаправлен на вашcallback_url с параметрами:
- При успехе:
?code=<код_авторизации>&state=<ваш_state> - При отказе:
?error=access_denied&state=<ваш_state>
Шаг 4: Обмен кода на API-ключ
Обменяйте код авторизации на API-ключ, отправивcode_verifier для подтверждения PKCE:
Параметр
callback_url в запросе должен точно совпадать с тем, что был указан при авторизации.Шаг 5: Использование API-ключа
Полученный ключ работает как обычный API-ключ Polza.ai:Данные пользователя
Получите информацию о пользователе, авторизовавшем ключ, через эндпоинтGET /api/auth/userinfo:
Доступные scopes
| Scope | Описание | Обязательный |
|---|---|---|
user:id | ID пользователя | да (всегда включён) |
user:name | Имя пользователя | нет |
user:email | Email пользователя | нет |
user:id включается автоматически.
Лимиты расходов
На consent screen пользователь может установить лимит расходов для OAuth-ключа:| Период | Описание |
|---|---|
day | Дневной лимит |
week | Недельный лимит |
month | Месячный лимит |
total | Общий лимит (без сброса) |
402.
Повторная авторизация
Если пользователь повторно авторизует то же приложение для той же организации, существующий API-ключ ротируется — генерируется новый секрет, обновляются scopes и лимиты. Дубликат ключа не создаётся. Старый секрет перестаёт работать.
Безопасность
- Только S256 — метод
plainне поддерживается - HTTPS обязателен для
callback_url(исключение:localhostи127.0.0.1для локальной разработки) - Код авторизации действителен 5 минут и может быть использован только один раз
- code_verifier проверяется с защитой от timing-атак
- Rate limit на эндпоинт
/api/auth/token: 5 запросов в минуту
Ошибки
В redirect (callback_url)
| Параметр | Значение | Описание |
|---|---|---|
error | access_denied | Пользователь отклонил авторизацию |
При обмене кода (POST /api/auth/token)
| HTTP | Сообщение | Причина |
|---|---|---|
| 400 | Невалидный код авторизации | Код не найден |
| 400 | Код авторизации уже использован | Повторная попытка обмена |
| 400 | Код авторизации истёк | Прошло более 5 минут |
| 400 | callback_url не совпадает | URL не совпадает с указанным при авторизации |
| 400 | Невалидный code_verifier | PKCE-проверка не пройдена |
| 429 | Too Many Requests | Превышен rate limit (5 запросов/мин) |
При авторизации (GET /api/auth/authorize)
| HTTP | Сообщение | Причина |
|---|---|---|
| 400 | Невалидный callback_url | Некорректный URL или отсутствует HTTPS |
| 400 | Поддерживается только метод S256 | Указан метод, отличный от S256 |
| 400 | Невалидный code_challenge | Не соответствует формату Base64url (43-128 символов) |
Следующие шаги
API Справочник
Полная документация эндпоинтов
Каталог моделей
Выберите модель для вашего приложения