Авторизация API-запросов
Передавайте ключ организации в заголовке нужного протокола и не раскрывайте его в URL и логах.
Передавайте ключ организации в заголовке нужного протокола и не раскрывайте его в URL и логах.
Задайте BASE_URL как корневой HTTPS-адрес API без завершающего / и без /v1, а API_KEY передайте из хранилища секретов. OpenAI-совместимые SDK используют ${BASE_URL}/v1, Anthropic-совместимые — BASE_URL.
Создайте ключ организации в API-ключах, сохраните его полное значение при однократном показе и проверьте, что выбранной организации доступен API. Ключу нужны права для выбранной операции. Сессия браузера и OAuth-авторизация CLI отделены от API-ключа и не заменяют его при генерации. Держите секрет в системном хранилище или менеджере секретов; передавайте его только процессу, который делает вызов.
Для OpenAI-совместимого клиента базовый адрес — ${BASE_URL}/v1, ключ передаётся как Bearer token. Для Anthropic-совместимого клиента базовый адрес — BASE_URL, ключ передаётся в x-api-key вместе с anthropic-version. До примеров передайте API_KEY процессу из хранилища секретов. Не набирайте полное значение прямо в shell-команде: оно может остаться в истории.
printf 'Authorization: Bearer %s\n' "$API_KEY" \
| curl -q -H @- -i "$BASE_URL/v1/models"
printf 'x-api-key: %s\n' "$API_KEY" \
| curl -q -H @- -i "$BASE_URL/v1/models" \
-H "anthropic-version: 2023-06-01"
Оба запроса должны вернуть HTTP 200 и массив data с каталогом, доступным ключу. ID из каталога можно передавать в запросах генерации. Код 401 означает отсутствие, ошибку или истечение срока ключа; проверьте передачу значения процессу, не печатая его. Код 403 означает недостаточный доступ организации или права. Проверьте выбранную организацию и метаданные ключа до платного вызова; публичные коды разобраны в ошибках и лимитах.
| Операция | Необходимое право | Проверка без генерации |
|---|---|---|
GET /v1/models, GET /v1/models/{model} | models:read | Вызов каталога выше. |
| Responses, Chat Completions, Messages и работа с сохранёнными беседами | inference:write | Посмотрите права ключа в кабинете; запрос генерации может списать кредиты. |
Один ключ может использоваться в обеих протокольных семьях, если его права и организация допускают соответствующую операцию. Не выдавайте общий ключ всей команде: отдельный ключ на приложение или окружение упрощает отзыв и расследование. Если операции нужны только для чтения каталога, не расширяйте право до генерации ради удобства.
Не помещайте ключ в URL, Git-конфигурацию, query браузера, скриншот или обращение в поддержку. Не записывайте полные заголовки запросов в логи приложения. При раскрытии отзовите ключ в кабинете, создайте замену и обновите каждый использовавший его клиент. Отзыв ключа не завершает сессию браузера и доступ CLI. Эти отдельные действия описаны в безопасности аккаунта.
При замене сначала создайте новый ключ, проверьте бесплатный каталог и один разрешённый вызов новым процессом, затем переключите клиентов и отзовите старый. Если старый ключ уже раскрыт, отзовите его немедленно и восстановите подключение новым. Полное значение после однократного показа не восстанавливается из кабинета.
Далее: выберите модель и сделайте ограниченный первый запрос.