Изменить настройки аккаунта
https://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/jsonmax_price_multiplierMaxPriceMultiplier | nullПотолок цены; null снимает потолок, без поля — не меняется.
no_storebooleanРежим без хранения для всех ключей аккаунта; без поля — не меняется.
routingRoutingrouting_optionsModelRoutingOptions | nullwebhookWebhookSettingsPatchОтветы
200OK
application/jsonПотолок цены для всех ключей аккаунта, когда запрос его не задаёт; null — без потолка.
no_storebooleanобязательноРежим без хранения для всех ключей аккаунта, включая плейграунд. По умолчанию
выключен: тексты запросов — промпт, сообщения и ответ чата, текст речи, расшифровка —
хранятся до retention.chat_content_days дней, файлы — retention.files_days. Включён —
тексты запросов и ответов не сохраняются; файлы живут retention.files_days, как
без режима. store: false в запросе включает то же для одного вызова.
retentionobjectобязательноСроки хранения, те же, что в GET /v1/key.
chat_content_daysintegerобязательноfiles_daysintegerобязательноПресет роутинга для всех ключей аккаунта, включая встроенный ключ плейграунда, когда запрос его не называет.
routing_optionsModelRoutingOptions | null400Запрос отклонён; `error.detail[]` называет поля и допустимые значения.
application/json401Нет ключа или ключ недействителен.
application/json403Нельзя: у ключа не тот вид (модели запускает API-ключ, аккаунт — ключ управления), у роли
Нельзя: у ключа не тот вид (модели запускает API-ключ, аккаунт — ключ управления), у роли
участника нет права или подпись ссылки на файл не сходится. detail[].reason говорит,
что именно: requires_api_key, requires_management_key, cabinet_only (только в
кабинете), insufficient_role (в allowed — роли, которым можно), not_key_author
(секрет ключа открывает только тот, кто его создал).
application/json415Тип тела не тот, что принимает метод: `Content-Type: application/json` (у загрузки файла и транскрибации — `multipart/form-data`). В `detail[]` — `{"path": "body", "reason": "unsupported_format"}` и принимаемые типы.
application/json429Слишком часто — повторите через `Retry-After` секунд. Запуск моделей, задачи и файлы результатов частотой не ограничены (их ограничивают баланс и лимиты трат); здесь 429 — на поток запросов с ключом, который сервер не знает, с одного адреса, и на потоки сверх 1000 одновременных на аккаунт (события задачи, чат с `stream: true`). Пределы — раздел «Лимиты» руководства.
application/json503Плановые работы (`maintenance`): новые запросы приостановлены до `error.ends_at`,
Плановые работы (maintenance): новые запросы приостановлены до error.ends_at,
причина — в error.reason. Повторите после этого времени (или через Retry-After
секунд, чтобы узнать, не закончились ли работы раньше); принятые задачи доделываются,
переключаться никуда не нужно. Состояние — GET /v1/status.
application/json