Аутентификация

Runnev аутентифицирует каждый запрос bearer-токеном. Нет подписей запросов и нет OAuth-плясок; всё, что нужно, — один заголовок.

Заголовок Authorization

Отправляйте свой ключ как bearer-токен в каждом запросе:

bash
curl https://runnev.dev/v1/streams \
  -H "Authorization: Bearer rnv_live_00112233445566778899aabbccddeeff"

Три эндпоинта публичны и не требуют ключа: GET /v1/health, GET /v1/version и доступ только для чтения к публичному демо-потоку. Всё остальное без валидного ключа возвращает 401.

Формат ключа

Ключ — это префикс, за которым следуют ровно 32 строчных шестнадцатеричных символа:

ПрефиксЗначениеПример
rnv_live_Боевой ключ, полный доступ к своему проектуrnv_live_00112233445566778899aabbccddeeff
rnv_test_Тестовый ключ, более низкие лимиты частотыrnv_test_2f8c41a6d90b47e3ba15c7e08d3f6a24

Полный шаблон — rnv_(live|test)_[0-9a-f]{32}. Всё, что не соответствует этой форме, отклоняется как invalid_api_key ещё до поиска, так что обрезанный или неверно набранный ключ падает быстро.

Публичный демо-ключ

Этот ключ намеренно публичен. Он может только читать демо-поток, не может публиковать и ограничен 60 запросами в минуту с одного IP. Его безопасно помещать в клиентский код, и именно он питает живую демонстрацию на главной странице.

публичный, только для чтения
rnv_test_2f8c41a6d90b47e3ba15c7e08d3f6a24

Как выглядят отказы

Проблемы аутентификации возвращают структурированную ошибку. Три, с которыми вы столкнётесь:

Отсутствующий ключ

401 Unauthorized
{
  "error": {
    "type": "authentication_error",
    "code": "missing_api_key",
    "message": "No API key was provided. Send it as: Authorization: Bearer rnv_live_...",
    "request_id": "req_0Kj2wq8ULn4mAe1s",
    "doc_url": "https://runnev.dev/docs/errors#missing_api_key"
  }
}

Некорректный или неизвестный ключ

401 Unauthorized
{
  "error": {
    "type": "authentication_error",
    "code": "invalid_api_key",
    "message": "The API key is malformed or does not exist.",
    "request_id": "req_7Za1popL2mn4Ae0s",
    "doc_url": "https://runnev.dev/docs/errors#invalid_api_key"
  }
}

Валидный ключ, чужой проект

Ключ принадлежит одному проекту. Его использование против потока в другом проекте возвращает 403 с project_forbidden. Это отличается от 404: поток существует, просто вашему ключу нельзя его трогать.

403 Forbidden
{
  "error": {
    "type": "authentication_error",
    "code": "project_forbidden",
    "message": "This key cannot access streams in another project.",
    "request_id": "req_Q3ee1l0Pmn4bAe2s",
    "doc_url": "https://runnev.dev/docs/errors#project_forbidden"
  }
}

Ротация и отзыв

Создавайте ключи в панели управления и отзывайте их там же. Отозванный ключ при следующем использовании возвращает 401 с key_revoked. Ротируйте без простоя, выпустив новый ключ, задеплоив его и отозвав старый, когда трафик переключится. Ключи не несут собственного срока действия; ключ валиден, пока вы его не отзовёте.

Держите боевые ключи на стороне сервера

Ключ rnv_live_ может публиковать и удалять. Никогда не помещайте его в браузерный бандл, мобильное приложение или публичный репозиторий. Для всего, что может прочитать клиентское устройство, используйте демо-ключ только для чтения или выпустите узко ограниченный ключ и относитесь к нему как к публичному. Если ключ утёк — отзовите его; это всё лечение.