Перейти к содержимому
Аутентификация

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

Каждый запрос передает ваш API-ключ в заголовке. Один ключ на аккаунт работает на каждом эндпоинте и с каждой моделью, в любой из двух форм заголовка.

Заголовок · SDK OpenAI
Authorization: Bearer YOUR_API_KEY
Заголовок · SDK Anthropic
x-api-key: YOUR_API_KEY

Принимаемые заголовки

Оба заголовка читаются на каждом эндпоинте /v1, независимо от формата, на котором работает эндпоинт. Отправляйте один из них.

Заголовок Описание
Authorization: Bearer <key> Проверяется первым. Пишите Bearer с заглавной B и одним пробелом перед ключом. SDK OpenAI отправляют этот заголовок.
x-api-key: <key> Читается, если в запросе нет заголовка Authorization: Bearer. SDK Anthropic отправляют этот заголовок.

С SDK OpenAI задайте ключ и базовый URL; SDK отправит Authorization: Bearer.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1"
)

response = client.chat.completions.create(
    model="shannon-3",
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ]
)

print(response.choices[0].message.content)

С SDK Anthropic задайте ключ и базовый URL без /v1; SDK отправит x-api-key.

import anthropic

client = anthropic.Anthropic(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com"
)

message = client.messages.create(
    model="shannon-3",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ]
)

print("".join(block.text for block in message.content if block.type == "text"))

Каким эндпоинтам нужен ключ

Эндпоинт Ключ
POST /v1/chat/completions Обязателен
POST /v1/messages Обязателен
POST /v1/responses Обязателен
POST /v1/tokenize Обязателен
POST /v1/messages/count_tokens Обязателен
GET /v1/models Не нужен

Ваш ключ

  • Ключ — это sk-, за которым следуют 43 символа из A–Z, a–z, 0–9, - и _: всего 46 символов.
  • У каждого аккаунта ровно один ключ. Он создается при первом открытии Keys & usage.
  • Ключ дает полный доступ к API для вашего аккаунта: ко всем эндпоинтам, всем моделям и всему балансу.
  • У ключа нет срока действия. Он работает, пока вы не замените или не отзовете его.

Замена и отзыв

Заменять и отзывать ключ можно на странице Keys & usage. Keys & usage

Действие Что происходит
Замена Выдается новый ключ, а старый перестает работать. Новый ключ работает сразу.
Отзыв Ключ перестает работать, новый ключ не выдается. Замените ключ, чтобы снова получить рабочий.
  • Оба действия вступают в силу сразу: на следующий запрос со старым ключом придет 401. Считайте 60 секунд верхней границей, после которой старый ключ отклоняется везде.
  • Все клиенты аккаунта используют один ключ, поэтому замена затрагивает их всех. Вставьте новый ключ в свои клиенты сразу после замены.
  • Баланс, использование и защита от флуда относятся к аккаунту, а не к ключу. Новый ключ продолжает работу с тем же балансом и тем же счетчиком запросов за текущую минуту.

Ошибки

Любая ошибка аутентификации имеет статус 401 и тип authentication_error. Случаи различаются по сообщению.

Статус Тип Сообщение Когда
401 authentication_error Missing authentication В запросе нет ни заголовка Authorization: Bearer, ни заголовка x-api-key, начинающегося с sk-. Так же отвечает сервер на bearer в нижнем регистре и на значение Authorization без Bearer.
401 authentication_error Invalid API key Ключ не является текущим ключом аккаунта: он набран с опечаткой, был отозван или заменен при смене.
{
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key",
    "code": "invalid_api_key",
    "param": null
  }
}
  • На всех путях, кроме /v1/messages, объект error также содержит code: "invalid_api_key", в том числе при отсутствии ключа, и param: null.
  • Ключ проверяется до чтения тела. Запрос без действительного ключа получает 401, даже если его тело некорректно или слишком велико.
  • Значение Authorization: Bearer, которое не начинается с sk-, не считается API-ключом. Оно получает 401 с сообщением о том, что токен недействителен или просрочен.

Браузеры и CORS

  • API отвечает на кросс-доменные запросы браузера только для фиксированного списка origin. JavaScript на странице другого origin не может читать ответы /v1.
  • Вызывайте API со своего сервера, а страница пусть обращается к вашему серверу. Так ключ не попадет и в исходный код страницы.
  • Серверный код и инструменты командной строки это не затрагивает: правило применяют только браузеры.
  • Вход на shannon-ai.com не аутентифицирует запросы /v1. Cookies там не читаются; ключ — единственные учетные данные.
  • Для разрешенного origin браузер может отправлять content-type, authorization, x-api-key, anthropic-version, anthropic-beta, openai-beta и x-request-id, а также читать заголовок ответа x-request-id.

Как сберечь ключ

  • Храните ключ на сервере. Не помещайте его в веб-страницы, мобильные приложения или публичные репозитории: тот, у кого он есть, может потратить весь ваш баланс.
  • Загружайте ключ из переменной окружения или хранилища секретов, а не записывайте в код.
  • Если ключ мог утечь, замените его на Keys & usage. Старый ключ перестанет работать сразу.
  • После утечки откройте список запросов на Keys & usage. Он показывает все запросы, сделанные с этим ключом за последние 30 дней.