---
title: "Создать API-ключ"
method: POST
path: "/v1/keys"
tags: ["Management"]
---

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

`POST /v1/keys`

## Request

- Base URL: `https://api.hubris.pw`
- URL: `https://api.hubris.pw/v1/keys`
- Auth: HTTP bearer

Создаёт новый inference-ключ. Полный ключ возвращается один раз в поле `key` — сохраните его сразу, повторно получить его нельзя. Лимиты: 30 созданий в час, не более 500 активных ключей на аккаунт.

## Request body

- object
  - `name` string, required
  - `limit_kopecks` integer, nullable
  - `limit_period` 'day' | 'week' | 'month' | 'none': Период сброса лимита: day (по умолчанию), week, month, none — без сброса.
  - `daily_limit_kopecks` integer, nullable
  - `read_only` boolean: Ключ только для чтения — без запросов к моделям. По умолчанию false.
  - `allowed_ips` string[], nullable: Привязка к адресу: до 32 записей — IPv4/IPv6-адрес или подсеть (CIDR). null или [] — снять привязку (любой адрес).
  - `privacy_mask_default` 'inherit' | 'off' | 'on' | 'required'

## Response `201`

Ключ создан. Поле `key` — полный ключ, показывается один раз.

- object
  - `id` string, uuid, required
  - `name` string, required
  - `key_prefix` string, required
  - `disabled` boolean, required
  - `limit_kopecks` integer, nullable, required: Лимит расхода ключа в копейках за период `limit_period`. null = без лимита.
  - `limit_period` 'day' | 'week' | 'month' | 'none', required: Период сброса лимита: day — календарные сутки (00:00 МСК), week — с понедельника, month — с 1-го числа, none — без сброса (лимит на весь расход ключа).
  - `spent_period_kopecks` integer, required: Потрачено этим ключом в текущем периоде, в копейках.
  - `limit_remaining_kopecks` integer, nullable, required: Сколько ещё можно потратить в текущем периоде: лимит минус траты минус резервы роликов в работе, не меньше 0. null — без лимита.
  - `period_reset_at` string, nullable, required: Момент следующего сброса (ISO 8601); null для limit_period=none.
  - `daily_limit_kopecks` integer, nullable, required: Устаревшее. Равно limit_kopecks при limit_period=day, иначе null. Используйте limit_kopecks.
  - `spent_24h_kopecks` integer, required: Устаревшее. Равно spent_period_kopecks. Используйте spent_period_kopecks.
  - `read_only` boolean, required: Ключ только для чтения: каталог моделей, баланс и статистика доступны, запросы к моделям (всё, что тратит баланс) — 403 key_read_only.
  - `allowed_ips` string[], nullable, required: Привязка к адресу: IPv4/IPv6-адреса и подсети (CIDR), с которых ключ принимает запросы; null — с любого адреса. Запрос с другого адреса — 403 key_ip_not_allowed.
  - `disabled_reason` 'manual' | 'spike', nullable, required: Почему ключ отключён: manual — вручную, spike — заморозка при всплеске трат; null — включён.
  - `disabled_until` string, nullable, required: Момент автоматического включения после заморозки (ISO 8601); null — до ручного включения или ключ включён.
  - `spike_limit_kopecks` integer, nullable, required: Защита от всплеска: порог расхода в копейках за окно spike_window_minutes; null — выключена.
  - `spike_window_minutes` integer, nullable, required: Окно защиты от всплеска: 1, 5, 15, 30 или 60 минут.
  - `spike_cooldown_minutes` integer, nullable, required: Период охлаждения: через сколько минут ключ включится снова (15, 60, 360, 1440); null — до ручного включения.
  - `privacy_mask_default` 'inherit' | 'off' | 'on' | 'required', required
  - `last_used_at` string, nullable, required
  - `created_at` string, required
  - `key` string, required: Полный API-ключ. Показывается ТОЛЬКО в этом ответе — сохраните его сразу.

## Other responses

- `400`: Невалидное тело запроса.
- `401`: Невалидный ключ.
- `403`: Нужен management-ключ.
- `404`: Ключ не найден (гонка с параллельным отзывом).
- `429`: Превышен лимит созданий или потолок ключей.

---

[API](https://skmtc.dev/hubris/apis/hubris-api.md) · [All operations](https://skmtc.dev/hubris/apis/hubris-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hubris/apis/hubris-api/revisions/79ea91ed8f10?raw)
