Skip to main content

Обзор API

API журнала запросов возвращает подробную запись о каждом API-вызове, выполненном в вашей учетной записи, включая использованную модель, фактически списанную сумму, задержку, был ли вызов выполнен с потоковой передачей, а также код ошибки, если вызов завершается сбоем. Он дополняет API запроса баланса: запрос баланса показывает, сколько кредита осталось, а запрос журнала показывает, куда он ушел. Три типичных сценария использования:

Автоматическая сверка

Агрегируйте фактические расходы по временному диапазону или по модели и сверяйте их с вашей собственной тарификацией

Самостоятельное устранение неполадок

Анализируйте коды ошибок в неудачных запросах, чтобы отличать проблемы с параметрами от проблем на стороне upstream

Обращения в службу поддержки

Предоставьте request_id службе поддержки, чтобы они могли точно определить конкретный вызов
Журналы также доступны для просмотра в консоли на странице журналов. Этот API — программная точка входа к тем же данным, предназначенная для автоматической сверки, плановых экспортов или передачи в вашу систему мониторинга. Для ручной проверки используйте консоль — см. Как посмотреть мои записи вызовов.

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

API для запросов журнала аутентифицируется с помощью System Token, который не является тем же самым, что и API-ключ (см. Важные примечания в конце этой страницы).
1

Доступ к консоли

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

Найдите System Token

Найдите раздел «Account Options - System Token» внизу страницы
3

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

Введите пароль своего аккаунта, чтобы получить AccessToken, который можно использовать для последующих API-запросов
Получить System Token

Информация об API

Детали запроса

Заголовки запроса

Параметры запроса

Фактический лимит на page_size составляет 10. Передача page_size=100 все равно возвращает только 10 записей — это не ошибка, и это легко неверно прочитать как «я сделал только 10 вызовов за этот период». Для любого значимого временного диапазона требуется пагинация, с повторением цикла, пока ответ не вернет пустой массив. Примеры на Python и Node.js ниже уже это обрабатывают.

Типы логов

Всегда передавайте type=2 при расчете расходов. Без него также возвращаются записи о пополнении и системном начислении. Их quota равен 0, но model_name и token_name тоже пусты, поэтому наивное суммирование или группировка по модели дадут неверные результаты.

Детали ответа

Пример успешного ответа

Ключевые поля ответа

Поле other содержит JSON строку, а не вложенный объект, поэтому требуется второй раз выполнить парсинг (json.loads() в Python, JSON.parse() в JavaScript). Оно содержит billing_type, request_path (фактически вызванный endpoint), group_ratio, model_ratio и usage.

Преобразование квоты

Правило преобразования

500,000 квота = $1.00 USD
Формула: сумма в USD = quota ÷ 500,000 Примеры:
  • quota: 7500 → $0.015 USD
  • quota: 22500 → $0.045 USD
  • quota: 18 → $0.000036 USD
Это тот же пересчет, который используется в API запроса баланса, поэтому значения совпадают напрямую.

Ответы с ошибкой

HTTP 401 - Ошибка аутентификации

Причина: system token недействителен или срок его действия истек, либо API key (начинающийся с sk-) был по ошибке использован как system token. Решение: Сгенерируйте system token заново в консоли и убедитесь, что Authorization содержит сырое значение без префикса Bearer.

Примеры кода

Пример cURL (одна страница, быстрая проверка)

Параметр --compressed обязателен, потому что API возвращает сжатый gzip контент. Без него вы получите искаженный вывод.
Эта команда возвращает не более 10 записей. Для реальной сверки используйте приведенную ниже версию с пагинацией.

Пример Python (с пагинацией, готов к запуску)

Пример вывода:

Пример Node.js (с пагинацией)

И библиотека Python requests, и fetch API Node.js автоматически распаковывают gzip, так что дополнительная настройка там не требуется. Только curl требует явный флаг --compressed.

Распространенные сценарии

Расчет расходов за период времени

Используйте пример на Python выше. Два важных момента: передать type=2 и разделить сумму quota на 500 000. Чтобы ограничить это одной моделью, добавьте параметр model_name.

Поиск неудачных вызовов

Запросы, отклоненные шлюзом (недопустимые параметры и тому подобное), имеют quota равный 0 и не тарифицируются. error_code в журнале позволяет вам отличить «вызов завершился сбоем» от «вызов завершился успешно, но мне не понравился результат».

Предоставление идентификатора запроса для поддержки

Найдите проблемный вызов в журналах и передайте службе поддержки request_id. Это позволяет однозначно идентифицировать точный запрос от начала до конца, что намного эффективнее, чем описывать «вызов к какой-то модели завершился сбоем примерно в определенное время».

Частые вопросы

Серверный лимит на page_size равен 10. Более высокие значения не приводят к ошибке, но и не начинают действовать. Чтобы получить больше данных, нужно выполнять пагинацию (p=0, p=1, p=2 и так далее), пока ответ не вернет пустой массив. Примеры на Python и Node.js выше уже это учитывают.
Да. Некоторые поля содержат внутреннюю информацию платформы и с точки зрения обычной учетной записи пусты или равны нулю. Это ожидаемо и не влияет на поля, которые нужны вам для сверки или устранения неполадок — quota, model_name, error_code и request_id полностью заполнены.
API возвращает идентификатор группы, а консоль отображает метку группы. Они могут отличаться — например, API возвращает default, а консоль показывает Default.Полное сопоставление доступно в публичном эндпоинте https://api.apiyi.com/api/pricing в поле usable_group, которое сопоставляет идентификатор с меткой. Если вы хотите, чтобы ваши отчеты совпадали с консолью, примените это сопоставление самостоятельно.
Используйте quota. Это сумма, которая фактически списывается за вызов, и единственное поле, подходящее для сверки. Для моделей с оплатой за вызов, таких как генерация изображений и генерация видео, счетчики token в ответе могут быть значениями-заглушками, которые не участвуют в тарификации — такие модели возвращают by_count в other.billing_type.
Укажите любой диапазон с помощью start_timestamp и end_timestamp. За точным сроком хранения исторических данных обратитесь в поддержку. Мы рекомендуем периодически экспортировать данные для сверки, а не полагаться на API для долгосрочного просмотра истории.
Причина: API возвращает сжатое gzip-содержимое (Content-Encoding: gzip), а curl не распаковывает его.Решение: добавьте флаг --compressed:
Библиотека Python requests и Node.js fetch API распаковывают данные автоматически.
Нет. Эндпоинт запроса журналов не расходует никакую квоту.

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

System token — это не API key, и они не взаимозаменяемы
  • API key (начинается с sk-) предназначен для /v1/* inference-эндпоинтов. Если использовать его для /api/log/self, будет возвращён ответ 401.
  • System token (обычная строка без префикса) предназначен для /api/* management-эндпоинтов. Если использовать его для /v1/chat/completions, будет возвращена ошибка invalid-token.
Область действия system token охватывает всю вашу учётную запись, поэтому относитесь к нему как к паролю от вашей учётной записи: храните его в secret manager, а не в коде, никогда не коммитьте его в репозиторий и периодически обновляйте его.
Ответы логов содержат ваши собственные API key в открытом видеКаждая запись лога содержит информацию о token, который выполнил вызов. Не вставляйте необработанные ответы логов в публичные места, не делитесь их скриншотами и не передавайте их третьим лицам — перед экспортом удаляйте чувствительные поля.Обратите внимание, что в этом открытом тексте отсутствует префикс sk-, поэтому обычные сканеры секретов могут его не обнаружить. Не полагайтесь на автоматические проверки, чтобы они нашли его за вас.
Лимиты запросов
  • Оставляйте не менее 1 секунды между запросами, чтобы избежать лимита запросов
  • Установите разумный тайм-аут запроса (рекомендуется 30 секунд)
  • Для широких диапазонов времени реализуйте пагинацию и обработку повторных попыток

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