Запрос и экспорт счетов
Выбор периода, просмотр статистики потребления и экспорт Excel.
Статистика агрегирует использование моделей, вызовы и суммы по времени. Excel служит для сохранения и офлайн-сверки.
Подготовить токен доступа
Создайте токен доступа в «Безопасности» профиля и введите его в Try It на странице Статистика счетов или Экспорт счёта.
Выбрать период и фильтры
- Выберите гранулярность, например «День» для суточного итога.
- Введите начало/конец как Unix-время в секундах либо выберите дату справа. Преобразование использует локальный часовой пояс браузера; для полного дня проверьте конечное время.
- Для конкретного Key или модели укажите имя; для всех совпадающих записей оставьте оба поля пустыми.
| Фильтр | Обязателен | Использование |
|---|---|---|
Гранулярность type | Да | 1=минута, 2=час, 3=день, 4=неделя, 5=месяц |
| Начало и конец | Да | startTime, endTime в секундах; конец не раньше начала |
Имя API Key tokenName | Нет | Имя, не секрет и не токен доступа; пропуск отключает фильтр |
Имя модели modelName | Нет | Реальное имя модели; пропуск отключает фильтр |
Получить и просмотреть статистику
Отправьте фильтры в Try It для Статистики счетов. В теле code=200 означает бизнес-успех; data — агрегаты, не журнал отдельных вызовов.
time,timeGroup: время записи и секунды временной группы.callCount,totalUseTime: число вызовов и общая длительность.totalPromptTokens,totalCompletionTokensи поля кэша: входное, выходное и кэшированное использование.totalAmount: сумма потребления. Поля и примеры см. в Reference; число Token не является денежной суммой.
code: 200 и data: [] означают успех без записей для выбранного периода и фильтров.
Необязательные поля могут быть null; не считайте их 0.
Экспортировать Excel
В Try It для Экспорта счёта отправьте те же фильтры. После получения файла:
- Проверьте период экспорта в результате.
- Оставьте имя с периодом или измените «Имя файла»; расширение
.xlsxсохраняется автоматически. - Нажмите «Скачать счёт Excel» для локального сохранения.
Даты имени используют локальный пояс браузера. Содержимое и столбцы создаёт платформа; переименование их не меняет. Для сверки статистики и экспорта используйте одинаковые период, гранулярность и фильтры.
HTTP 200 не гарантирует экспорт: обработайте JSON-ошибку, не сохраняйте её как .xlsx.
Частые вопросы
| Ситуация | Действие |
|---|---|
| Успех без записей | Проверьте единицы времени и даты, затем очистите фильтры имён |
Бизнес-код code: 401, ошибка авторизации | Проверьте токен доступа; если действительный токен не помогает, обратитесь в поддержку |
Экспорт code: 400, ошибка параметров | Проверьте гранулярность, начало и конец |
Экспорт code: 500, ERROR | Проверьте JSON и типы; при корректном вводе обратитесь к администратору |
| Excel не открывает файл | Проверьте Content-Type: не сохранена ли JSON-ошибка как Excel |
Эти бизнес-ошибки могут использовать HTTP 200. Одного HTTP-статуса недостаточно; полные примеры есть в Reference.
Текущие цены доступны на площадке моделей.
Вызов из программы
Bash-пример требует curl и jq: получение авторизации, статистика и сохранение Excel.
Соедините три блока ниже по порядку в один .sh, замените токен и период и запустите через bash; не вставляйте блоки отдельно в интерактивный терминал.
Период примера — 2026-10-10 00:00:00 — 2026-10-20 23:59:59 по Пекину, по дням и без фильтров имён. Замените нужным периодом.
1. Получить авторизацию счетов
Вызовите GET /api/user/self с токеном доступа, извлеките token из data.remark и используйте для счетов того же сайта. Токен доступа нужен для первого Bearer-запроса и не заменяет Header token счетов напрямую.
set -euo pipefail
ACCESS_TOKEN='your-user-token'
BILLING_TOKEN=$(curl --fail --silent --show-error "https://api.agtcloud.cn/api/user/self" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" | \
jq -er '
select(.success == true)
| .data.remark | fromjson | .token
| select(type == "string" or type == "number")
| tostring | select(length > 0)
')2. Запросить статистику
curl --fail-with-body "https://api.agtcloud.cn/bill/stats" \
-X POST \
-H "token: ${BILLING_TOKEN}" \
-H 'Content-Type: application/json' \
-d '{
"type": 3,
"startTime": 1791561600,
"endTime": 1792511999
}'Проверяйте JSON code, а не только код выхода cURL. Корневой timestamp задан в миллисекундах, время запроса — в секундах.
3. Проверить и сохранить Excel
Успех — поток application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, не JSON бизнес-ошибка.
Сначала пишите во временный файл; сохраняйте как bill_export.xlsx лишь при HTTP 200, типе Excel и непустом файле. Существующий файл не перезаписывается.
response_file=$(mktemp './.bill_export.XXXXXX')
[[ "$response_file" == ./.bill_export.* && -f "$response_file" && ! -L "$response_file" ]] || exit 1
trap 'if [[ "$response_file" == ./.bill_export.* && -f "$response_file" && ! -L "$response_file" ]]; then rm -f -- "$response_file"; fi' EXIT
response_meta=$(curl --silent --show-error "https://api.agtcloud.cn/bill/excel" \
-X POST \
-H "token: ${BILLING_TOKEN}" \
-H 'Content-Type: application/json' \
-d '{
"type": 3,
"startTime": 1791561600,
"endTime": 1792511999
}' \
--output "$response_file" \
--write-out '%{http_code}\n%{content_type}')
http_status=${response_meta%%$'\n'*}
content_type=${response_meta#*$'\n'}
if [[ "$http_status" != 200 || "${content_type%%;*}" != application/vnd.openxmlformats-officedocument.spreadsheetml.sheet || ! -s "$response_file" ]]; then
printf 'Export failed: HTTP %s (%s)\n' "$http_status" "$content_type" >&2
if [[ "${content_type%%;*}" == application/json ]]; then
jq '{code, message}' "$response_file" >&2
fi
exit 1
fi
if [[ -e bill_export.xlsx || -L bill_export.xlsx ]]; then
printf 'bill_export.xlsx already exists; choose another filename.\n' >&2
exit 1
fi
mv -n -- "$response_file" bill_export.xlsx
if [[ -e "$response_file" ]]; then
printf 'bill_export.xlsx already exists; choose another filename.\n' >&2
exit 1
fi
printf 'Saved bill_export.xlsx\n'