Изменить настройки аккаунта

PATCHhttps://api.souz.ai/v1/settings

Каждое поле необязательно; отсутствующее не меняется. routing — cheap, balanced или fast. max_price_multiplier — 1.5, 2, 3, 5 или 10; null снимает потолок. webhook.url — абсолютный https-адрес на публичный хост (та же проверка, что у callback_url), null или пустая строка снимает адрес. no_store — true или false.

routing_options — словарь целиком: PATCH заменяет весь сохранённый словарь, поэтому сначала прочитайте его (GET /v1/settings), добавьте или измените ключ своей модели и отправьте словарь обратно; null очищает его. Ключ — существующая модель или *; каждый цвет в only/ignore/order — канал этой модели из GET /v1/models/{id}/channels. Так агент закрепляет выбранный цвет для всего аккаунта: {"routing_options": {"gpt-5-nano": {"only": ["blue"]}}}.

Неверное значение — 400 со списком допустимых или с путём поля (routing_options.<модель>.only[0]); ничего не меняется. Нужен ключ управления или сессия участника с ролью разработчика или выше. Отвечает полными настройками после изменения.

Авторизация

ManagementKey

Ключ управления из кабинета souz.ai (выдают владелец и администратор аккаунта — себе или участнику). Даёт ровно то, что его держатель видит и может в кабинете: баланс, историю операций и запросов, расходы, обычные ключи, настройки аккаунта — с той же ролью, лимитами и цифрами. Модели не запускает. Обычный API-ключ здесь не подходит: 403 forbidden с detail[].reason: requires_management_key.

ClientSession

Сессия кабинета souz.ai в браузере — те же ручки, что у ключа управления.

Тело запроса обязательно

Что изменить

application/json
Схема AccountSettingsPatch
max_price_multiplierMaxPriceMultiplier | null

Потолок цены; null снимает потолок, без поля — не меняется.

no_storeboolean

Режим без хранения для всех ключей аккаунта; без поля — не меняется.

routingRouting
routing_optionsModelRoutingOptions | null

Ответы

200OK
application/json
Схема AccountSettingsResponse
max_price_multiplierMaxPriceMultiplier | nullобязательно

Потолок цены для всех ключей аккаунта, когда запрос его не задаёт; null — без потолка.

no_storebooleanобязательно

Режим без хранения для всех ключей аккаунта, включая плейграунд. По умолчанию выключен: тексты запросов — промпт, сообщения и ответ чата, текст речи, расшифровка — хранятся до retention.chat_content_days дней, файлы — retention.files_days. Включён — тексты запросов и ответов не сохраняются; файлы живут retention.files_days, как без режима. store: false в запросе включает то же для одного вызова.

retentionobjectобязательно

Сроки хранения, те же, что в GET /v1/key.

chat_content_daysintegerобязательно
files_daysintegerобязательно
routingRoutingобязательно

Пресет роутинга для всех ключей аккаунта, включая встроенный ключ плейграунда, когда запрос его не называет.

routing_optionsModelRoutingOptions | null
webhookWebhookSettingsобязательно
400Запрос отклонён; `error.detail[]` называет поля и допустимые значения.
application/json
401Нет ключа или ключ недействителен.
application/json
403Нельзя: у ключа не тот вид (модели запускает API-ключ, аккаунт — ключ управления), у роли

Нельзя: у ключа не тот вид (модели запускает API-ключ, аккаунт — ключ управления), у роли участника нет права или подпись ссылки на файл не сходится. detail[].reason говорит, что именно: requires_api_key, requires_management_key, cabinet_only (только в кабинете), insufficient_role (в allowed — роли, которым можно), not_key_author (секрет ключа открывает только тот, кто его создал).

application/json
415Тип тела не тот, что принимает метод: `Content-Type: application/json` (у загрузки файла и транскрибации — `multipart/form-data`). В `detail[]` — `{"path": "body", "reason": "unsupported_format"}` и принимаемые типы.
application/json
429Слишком часто — повторите через `Retry-After` секунд. Запуск моделей, задачи и файлы результатов частотой не ограничены (их ограничивают баланс и лимиты трат); здесь 429 — на поток запросов с ключом, который сервер не знает, с одного адреса, и на потоки сверх 1000 одновременных на аккаунт (события задачи, чат с `stream: true`). Пределы — раздел «Лимиты» руководства.
application/json
503Плановые работы (`maintenance`): новые запросы приостановлены до `error.ends_at`,

Плановые работы (maintenance): новые запросы приостановлены до error.ends_at, причина — в error.reason. Повторите после этого времени (или через Retry-After секунд, чтобы узнать, не закончились ли работы раньше); принятые задачи доделываются, переключаться никуда не нужно. Состояние — GET /v1/status.

application/json