Создать API-ключ

POSThttps://api.souz.ai/v1/keys

Возвращает сырой ключ; он же сохраняется в зашифрованном виде, и автор может получить его снова через GET /v1/keys/{id}/secret. Ключ создаёт участник, который вызывает метод (через ключ управления — его держатель), и он же держатель: траты ключа идут в его лимит, при его удалении ключ отзывается. Необязательно: spend_limit_micro и spend_limit_reset (none | daily | monthly) — потолок трат ключа сразу при создании. Разработчик и выше. kind: management — ключ управления: создают владелец и администратор и только в кабинете (ключом управления — 403 cabinet_only); потолка трат у него нет — он не тратит.

Авторизация

ManagementKey

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

ClientSession

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

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

Имя и потолок — все поля необязательны

application/json
Схема CreateAPIKeyRequest
kindstring

user — обычный ключ, запускает модели; management — ключ управления: создают владелец и администратор и только в кабинете, трат и потолка у него нет.

Значения: user, management
По умолчанию: "user"
namestring
Пример: "production"
spend_limit_microinteger

Потолок трат ключа в микроединицах валюты; без поля — без потолка. У ключа управления потолка нет: с полем — 400.

Пример: 5000000000
spend_limit_resetstring

Как часто обновляется потолок: none (по умолчанию, на весь срок), daily, monthly — по UTC.

Значения: none, daily, monthly
Пример: "monthly"

Ответы

201Created
application/json
Схема CreateAPIKeyResponse
created_atstringобязательно
Пример: "2026-08-21T12:00:00Z"
idstringобязательно
Пример: "key_1a2b3c4d5e6f7890"
keystringобязательно
Пример: "sk_9f8e7d6c5b4a39281706f5e4d3c2b1a0"
namestring
Пример: "production"
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