Skip to content

API-ключи

API-ключи — это учётные данные программной поверхности. Они принадлежат воркспейсу и несут список скоупов.

Создание ключа

bash
curl -b cookies.txt -X POST https://api.runne.run/v1/workspaces/WORKSPACE_ID/api-keys \
  -H 'Content-Type: application/json' \
  -d '{"name":"prod-key","scopes":["chat:write","balance:read"]}'

Тело запроса:

ПолеТипОбязательноПримечания
namestringдамин. 1 символ
scopesstring[]дамин. 1 элемент
rate_limitobjectнет{requests_per_minute, tokens_per_day} — оба положительные целые

Если rate_limit не указан, применяются значения по умолчанию: requests_per_minute: 60 и tokens_per_day: 1000000.

Ответ (HTTP 201):

json
{
  "id": "0191…",
  "raw_key": "rn_live_4xK9mP2qR7sT_7hJ3kL9mN2pQ5rT8vW1xY4zA6bC0dE2fG4hI6jK8",
  "key_id": "4xK9mP2qR7sT",
  "name": "prod-key",
  "scopes": ["chat:write", "balance:read"],
  "created_at": "…"
}

Список ключей

bash
curl -b cookies.txt https://api.runne.run/v1/workspaces/WORKSPACE_ID/api-keys
json
{
  "api_keys": [
    {
      "id": "0191…",
      "key_id": "4xK9mP2qR7sT",
      "name": "prod-key",
      "scopes": ["chat:write", "balance:read"],
      "created_at": "…",
      "last_used_at": "…",
      "revoked_at": null
    }
  ]
}

В ответе списка никогда нет исходного секрета — только публичный key_id.

Отзыв ключа

bash
curl -b cookies.txt -X DELETE https://api.runne.run/v1/workspaces/WORKSPACE_ID/api-keys/API_KEY_ID

Ответ:

json
{ "success": true }

Отзыв устанавливает revoked_at. Отозванный ключ отклоняется шлюзом (401 invalid or revoked API key) на следующем же запросе. Отзыв несуществующего или чужого ключа возвращает 404.

Матрица скоупов

Ключ работает на эндпоинте только если несёт требуемый скоуп. В таблице указано, что сервер применяет на самом деле.

ЭндпоинтТребуемый скоупПрименяется?
POST /v1/chat/completionschat:writeда
GET /v1/balancebalance:readда
GET /v1/modelsmodels:readнет — каталог публичный

models:read не применяется

GET /v1/modelsGET /v1/models/{provider}/{model}) сейчас не требуют аутентификации, поэтому models:read — зарезервированный скоуп без enforcement. В beta считайте каталог публичным.

Выдавайте клиенту минимум скоупов. Ключ только с balance:read не может вызывать chat completions, и наоборот.

Безопасность raw-ключа

raw_key возвращается ровно один раз, при создании. Сервер хранит только HMAC-SHA256(secret) и не может восстановить исходное значение.

  • Храните ключ в secrets-менеджере; никогда в системе контроля версий или логах.
  • Никогда не выводите raw_key в логи или сообщения об ошибках.
  • Ротация — через отзыв старого ключа и создание нового (ротация на стороне клиента) либо через ротацию серверных секретов (API_KEY_SERVER_SECRET / _PREV) для плавной ротации на стороне сервера — см. Аутентификация.
  • Пересоздавайте, а не «восстанавливайте»: эндпоинта «показать raw-ключ» нет по замыслу.

Связанное