Документация / Аутентификация
Ключи, заголовки и лимиты
Один ключ открывает все алиасы, разрешённые его политикой. Ключей может быть сколько угодно — по одному на сервис, окружение или разработчика, у каждого свой лимит расходов.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://ai.globall.dev/v1",
api_key=os.environ["TOK_API_KEY"],
)
for m in client.models.list().data:
print(m.id)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://ai.globall.dev/v1",
apiKey: process.env.TOK_API_KEY,
});
const list = await client.models.list();
for (const m of list.data) console.log(m.id);
curl https://ai.globall.dev/v1/models \ -H "Authorization: Bearer $TOK_API_KEY"
Заголовки запроса
- Authorization
- header
- Bearer gw_live_… — ключ из кабинета. Единственный обязательный заголовок.
- X-Conversation-Id
- header
- Липкость диалога: продолжение разговора уходит на тот же маршрут. Шлюз хранит от него только хэш.
- Idempotency-Key
- header
- Повтор без второго списания. Работает только при stream: false; ответ хранится 24 часа. Если в настройках организации включено «Не хранить содержимое», ответ не сохраняется вообще — повтор с тем же ключом исполнится заново и спишется второй раз.
Больше ни один заголовок на ответ не влияет: User-Agent попадает в журнал запросов, остальное шлюз не читает и вендору не передаёт. Заголовка проекта нет вовсе — проект это способ сгруппировать ключи в кабинете, и расходы разносятся по проекту того ключа, которым сделан запрос.
Заголовки ответа
- X-Request-Id
- header
- Идентификатор запроса. Назовите его в поддержке — по нему найдётся вся история попыток.
- X-Cost-Usd
- header
- Списанная сумма в долларах. В потоковом ответе приходит трейлером, после последнего кадра.
- X-Degraded
- header
- true, если ответ пришёл с запасной ступени, а не с основной.
- Retry-After
- header
- Секунды до повтора. Всегда есть у 429 и 503; у 502 приходит, когда вендор назвал своё время. Если он пришёл — ждите столько, сколько там написано, какой бы ни был статус.
- X-Route, X-Attempts
- header
- Какой маршрут ответил и с какой попытки. Идентификатор маршрута — наш внутренний и меняется без предупреждения: годится для поддержки и графиков, не для логики кода.
- X-Idempotent-Replay
- header
- true, если это повтор по Idempotency-Key, а не новый ответ; рядом X-Original-Request-Id — идентификатор того запроса, чей ответ вы получили.
- WWW-Authenticate
- header
- Bearer realm="aigw" — только вместе с 401.
Лимит на ключ
Дневной и месячный потолок в рублях задаётся в кабинете. Когда он выбран, запросы получают 429 с кодом spend_limit_exceeded и Retry-After до начала следующего окна; деньги дальше не списываются.
Пауза, блокировка, приостановка
Ключ на паузе — 403 key_paused, снимается в кабинете. Ключ, остановленный автоматикой, — 403 key_blocked с причиной в тексте. Приостановленная организация — 403 org_suspended. Отозванный ключ — 401.
Ключ, которого шлюз не знает, и запрос без заголовка Authorization получают 401 с кодом unauthorized и заголовком WWW-Authenticate.