Профиль и хранение логов
Настройки аккаунта через API: имя, уведомление о низком балансе и хранение запросов и ответов.
Методы
| Метод | Право | Что делает |
|---|---|---|
GET /profile | profile:read | Аккаунт: почта, имя, настройки и лимиты |
PATCH /profile | profile:write | Изменить имя, тему или уведомление о низком балансе |
GET /request-logs/settings | profile:read | Сколько дней и какие запросы сохраняются |
PATCH /request-logs/settings | profile:write | Изменить хранение запросов |
С правом profile:read работает и GET /aitunnel/me: id и почта маской. Баланс — отдельное право, billing:read.
Профиль
curl https://api.aitunnel.ru/v1/aitunnel/profile \
-H "Authorization: Bearer sk-aitunnel-mgmt-xxx"{
"id": 123,
"email": "user@example.com",
"pending_email": null,
"email_verified": true,
"name": "Анна",
"display_name": "Анна",
"oauth_name": null,
"avatar_url": null,
"role": null,
"theme": "dark",
"low_balance_threshold": 150.5,
"notify_email": "alerts@example.com",
"limits": { "api_keys": 3, "overdraft": 0, "discount_percent": 0 },
"created_at": "2026-03-02T09:41:27.000Z",
"deletion_scheduled_for": null
}| Поле | Смысл |
|---|---|
id | Числовой id аккаунта |
email, email_verified | Почта аккаунта целиком и подтверждена ли она |
pending_email | Новый адрес, пока владелец не подтвердил смену почты. Иначе null |
name, display_name, oauth_name | display_name — имя из настроек, oauth_name — имя от Google, Yandex или GitHub, name — то из них, которое показывает кабинет |
avatar_url | Аватар от сервиса входа или null |
role | null у обычного аккаунта |
theme | Тема кабинета: dark, light, system или null |
low_balance_threshold | Порог, ₽: когда баланс опускается ниже, уходит письмо. null — письмо выключено |
notify_email | Куда приходят письма о низком балансе и бюджете ключей. null — на почту аккаунта |
limits | api_keys — сколько API-ключей можно держать сейчас, overdraft — на сколько баланс может уйти в минус, ₽, discount_percent — персональная скидка, уже применённая к каждому списанию |
created_at | Когда аккаунт зарегистрирован |
deletion_scheduled_for | Когда аккаунт будет удалён, если удаление запланировано. Иначе null |
Как защищён аккаунт — пароль, двухфакторная аутентификация — ключу управления не сообщается: эти сведения видит только владелец в кабинете.
Изменить профиль
PATCH /profile меняет только переданные поля и возвращает профиль целиком.
curl -X PATCH https://api.aitunnel.ru/v1/aitunnel/profile \
-H "Authorization: Bearer sk-aitunnel-mgmt-xxx" \
-H "Content-Type: application/json" \
-d '{
"low_balance_threshold": 500,
"notify_email": "alerts@example.com"
}'| Поле запроса | Смысл |
|---|---|
display_name | Имя, до 60 символов, без < и >. null возвращает имя от сервиса входа |
theme | dark, light или system |
low_balance_threshold | Число от 0, ₽. null выключает письмо |
notify_email | Адрес для писем. null — почта аккаунта |
- Почта и пароль здесь не меняются: у каждого свой порядок смены в кабинете, с подтверждением личности. Поле
emailв теле — ошибка400. - Новый порог отсчитывается заново: письмо о старом пороге не мешает прийти письму о новом.
Хранение запросов
Настройки хранения запросов и ответов аккаунта. GET /request-logs/settings читает их, PATCH меняет переданные поля; ответ у обоих один:
curl -X PATCH https://api.aitunnel.ru/v1/aitunnel/request-logs/settings \
-H "Authorization: Bearer sk-aitunnel-mgmt-xxx" \
-H "Content-Type: application/json" \
-d '{
"days": 7,
"categories": ["text", "images"]
}'{
"days": 7,
"categories": ["text", "images"]
}| Поле | Смысл |
|---|---|
days | Срок хранения: 0 — не сохранять, 1, 7 или 30 дней |
categories | Какие запросы сохранять: text, images, audio, video. Пустой список — ничего |
- Настройка действует на новые запросы. Что уже сохранено, хранится свой срок.
- У ключа может быть свой срок: поле
log_daysв управлении API-ключами. Он важнее срока аккаунта. - Хранение на 7 и 30 дней платное, см. цены.
- Удалить все сохранённые логи можно только в кабинете.
Ошибки
| Статус | Смысл |
|---|---|
400 | invalid_request — неверное или неизвестное поле, пустое тело. В error.metadata.fields — каждое поле с объяснением |
401 | authentication_failed — ключа нет, он неверный, отозван или истёк |
403 | permission_denied — у ключа нет нужного права, IP не в списке разрешённых или метод вызван API-ключом |
Изменения, сделанные ключом управления, видны владельцу в журнале активности.