Skip to main content

Обзор API

API управления token позволяет вам управлять полным жизненным циклом ваших API-ключей в коде, вместо того чтобы кликать по консоли по одному key за раз. Наиболее распространенный сценарий использования — массовая выдача: предоставлять каждому члену команды, downstream-клиенту или проекту свой key, у каждого — свои лимиты на сколько он может потратить, к каким моделям он может обращаться, и как долго он остается действительным.

Лимит квоты

remain_quota ограничивает, сколько этот key может потратить в сумме

Лимит модели

models задает allowlist; обращения ко всему, что вне его, отклоняются

Лимит срока действия

expired_time задает временную метку истечения, после которой key перестает работать
Если вам нужен только один или два key, консоль быстрее — см. Как создать API key. Этот API предназначен для автоматизированной выдачи, плановой ротации или интеграции управления key в ваши собственные системы.

Как получить ваш System Token

API для управления token аутентифицируется с помощью системного token, который не то же самое, что ключ API.
1

Открыть консоль

Перейдите на api.apiyi.com/account/profile, чтобы открыть страницу профиля
2

Найдите системный token

Найдите раздел «Параметры аккаунта - System Token» в нижней части страницы
3

Сгенерируйте AccessToken

Введите пароль вашей учетной записи, чтобы получить AccessToken, который можно использовать для последующих запросов к API
Получить системный token
Системный token может создавать и удалять API-ключи. Относитесь к нему как к паролю вашей учетной записи.Системный token не может напрямую вызывать модели — использование его с /v1/chat/completions отклоняется — но он может создавать API-ключи, которые могут. Утечка системного token поэтому значительно хуже, чем утечка одного API-ключа. Храните его в secret manager, а не в коде, никогда не добавляйте его в repository и периодически выполняйте его ротацию.

Эндпоинты

Все эндпоинты аутентифицируются одинаково: передавайте необработанный системный token в заголовке Authorization, без префикса Bearer. Базовый URL — https://api.apiyi.com.

Создание token

Пример запроса

Поля запроса

unlimited_quota по умолчанию = false, а remain_quota по умолчанию = 0 — если опустить оба поля, будет создан token с нулевой квотой, который нельзя использовать. Либо явно задайте remain_quota, либо установите unlimited_quota в true.
Используйте поле models для списка разрешённых моделей.Структура ответа также содержит model_limits, model_limits_enabled и allow_ips. Передача этих полей не вызывает ошибку — эндпоинт по-прежнему возвращает 200 — но сейчас они не влияют ни на что, и при повторном чтении token видно, что они не заданы. Используйте models, чтобы ограничить доступные модели. Ограничения по исходному IP пока нужно реализовать на своей стороне.

Пример ответа

key в ответе представлен в виде обычного текста и не включает префикс sk-. Вам нужно добавить его самостоятельно — в примере выше фактический API key — это sk-K1RPzapu….Сохраняйте и передавайте key сразу после создания и не оставляйте тела ответов, содержащие key, в файлах журналов.

Пакетное создание

На стороне сервера нет batch-эндпоинта — передача чего-то вроде count в теле запроса не влияет ни на что и все равно создает один token. Выпуск batch выполняется циклом на стороне клиента.
У одного пользователя может быть не более 1 000 token. Это ограничение на уровне аккаунта, и оно учитывает token, которые отключены, но не удалены. Как только вы достигнете его, create-эндпоинт завершится с ошибкой — удалите token, которые вам больше не нужны, чтобы освободить слоты.Перед batch-запуском пройдитесь постранично по GET /api/token/?p=0&page_size=100, чтобы подсчитать, что у вас уже есть. При ротации ключей обязательно доводите до конца последний шаг: «создайте новый ключ → переведите трафик → отключите старый ключ → удалите его, когда вызовы прекратятся». Отключение без удаления оставляет слот занятым, поэтому после нескольких циклов ротации вы упретесь в лимит.

Использование трех лимитов

Лимит квоты

remain_quota ограничивает, сколько token может потратить. Конвертация соответствует API запроса баланса:

Правило конвертации

500,000 квот = $1.00 USD
Например, чтобы выдать downstream-клиенту ключ с лимитом $10, установите remain_quota в 5000000 с unlimited_quota, установленным в false. Потребление на текущий момент можно прочитать в поле used_quota token.

Лимит модели

models — это список разрешенных значений, разделенный запятыми. После задания вызов модели вне списка отклоняется:
Ответом будет HTTP 403, и плата не взимается. Если не указывать models, ограничение отсутствует.

Лимит срока действия

expired_time — это Unix-метка времени в секундах, при этом -1 означает «никогда». Например, ключ, срок действия которого истекает через 30 дней:

Список токенов

Основные поля:

Обновление token

Эндпоинт обновления требует полный объект — это не патч.Правильная последовательность: GET полный объект token, измените поля, которые хотите поменять, затем PUT весь объект обратно. Отправка только измененных полей очистит остальные.

Отключение и удаление

Отключение (сохраняет запись)

После отключения ключ сразу перестает работать — запросы с ним возвращают 401 — но запись token и история его использования сохраняются.

Удаление (необратимо)

Пакетное удаление также выполняется в виде цикла на стороне клиента:
Удаление нельзя отменить. Если вы хотите лишь временно приостановить key, вместо этого отключите его — история использования останется доступной для сверки.

Вопросы и ответы

key в ответе не содержит префикс sk-. Добавьте его сами: рабочий API-ключ — это sk-, за которым следует возвращенное значение.
Скорее всего, при создании не был задан ни remain_quota, ни unlimited_quota было установлено в true. Такая комбинация по умолчанию создает token с нулевой квотой. Создайте его заново, явно указав одно из этих двух значений.
Эти поля — вместе с model_limits_enabled — сейчас не действуют. Их передача не вызывает ошибки, но ничего не сохраняется. Используйте models, чтобы ограничить доступные модели; ограничения по source-IP пока нужно реализовать на своей стороне.
На стороне сервера нет пакетного эндпоинта, и передача чего-то вроде count в теле не дает эффекта. Вместо этого выполняйте create-вызов на клиенте в цикле — см. раздел о пакетном создании выше.
Не более 1,000 на пользователя, и отключенные, но не удаленные token учитываются в этом итоге. Когда достигнете лимита, создание будет неудачным, пока вы не удалите token, которые больше не нужны. При ротации ключей не забудьте завершить удалением — одно только отключение сохраняет слот занятым.
Эндпоинт обновления требует полный объект. GET полный объект сначала, внесите изменения, а затем PUT отправьте его целиком, а не только измененные поля.
Отключение (status: 2) сразу прекращает работу ключа, но сохраняет запись и историю использования, и вы можете в любой момент вернуть его в состояние 1. Удаление необратимо и удаляет запись. Для временной приостановки лучше использовать отключение.
Поле used_quota token — это накопленные расходы этого ключа (÷ 500,000 = USD). Для разбивки по периодам или детализации на уровне вызовов отфильтруйте по имени token на странице журнала в консоли — см. Как посмотреть мои записи вызовов.

Важные замечания

system token — это не API-ключ, и они не взаимозаменяемы
  • API-ключ (начинается с sk-) используется для /v1/* эндпоинтов инференса
  • system token (обычная строка без префикса) используется для /api/* эндпоинтов управления
При их смешении возвращаются 401 и ошибка invalid-token соответственно.
Осторожно обращайтесь с ключами в открытом видеИ ответ на создание, и список token возвращают ключи в открытом виде. Поэтому:
  • Не записывайте тела ответов, содержащие key, в файлы журналов и не коммитьте их в репозиторий
  • Передавайте ключи участникам команды по защищенным каналам, а не в групповых чатах
  • В этом открытом виде отсутствует префикс sk-, поэтому обычные сканеры секретов могут его не обнаружить — не полагайтесь на автоматические проверки, чтобы поймать его за вас
Операционные рекомендации
  • При массовом создании добавляйте небольшую задержку между вызовами, чтобы избежать высокой мгновенной параллельности
  • Давайте каждому ключу понятную name (например, team-alice или prod-webhook), чтобы позже можно было атрибутировать использование по token_name в логах
  • При ротации: создайте новый ключ, переведите трафик, отключите старый ключ, понаблюдайте некоторое время и удаляйте его только после того, как убедитесь, что вызовов больше нет

Связанная документация