ProxyAPI записывает информацию о каждом запросе к API в виде транзакций — видно модель, количество токенов и списанную сумму. Однако этих данных недостаточно для полноценной отладки: нет статус-кодов, задержек, ошибок конечного сервиса и, главное, — содержимого запросов и ответов.
Логирование запросов решает эту проблему. При включении сервис записывает полные данные о каждом обращении к API: метаданные (статус, задержка, модель, ключ), потребление (токены с разбивкой по типам), а также полное содержимое запросов и ответов — включая промпты, ответы модели и сообщения об ошибках.
Логируются не только успешные запросы, но и отклонённые на уровне прокси — превышение лимита, недостаточный баланс, превышение бюджета ключа. Это позволяет увидеть полную картину: почему часть запросов не доходит до конечного сервиса.
- Перейти в раздел «Логи» в боковом меню личного кабинета
- Нажать «Включить логирование»
- Выбрать период хранения (3, 7, 30 или 365 дней)
- Подтвердить активацию
Логирование действует на уровне аккаунта — записываются запросы по всем API-ключам. Новые запросы начнут логироваться сразу после активации.
Историческая информация после активации не переносится в логи — записи накапливаются с момента включения.
Каждый запрос к API ProxyAPI возвращает заголовок X-Request-ID с уникальным идентификатором (UUID):
X-Request-ID: 550e8400-e29b-41d4-a716-446655440000
Этот идентификатор можно использовать для:
- Поиска в логах — в фильтрах на странице «Логи» есть поле «Request ID»
- Обращения в поддержку — по Request ID запрос находится быстрее всего
К каждому запросу можно прикрепить произвольные метаданные с помощью HTTP-заголовков с префиксом X-Log-. Метаданные сохраняются в логе и доступны в детальном просмотре и экспорте.
Префикс X-Log- удаляется, остаток приводится к нижнему регистру:
X-Log-Session: abc123 → session: abc123 X-Log-Environment: staging → environment: staging X-Log-Tag: experiment-42 → tag: experiment-42
Пример запроса с метаданными:
curl "https://api.proxyapi.ru/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <КЛЮЧ>" \ -H "X-Log-Session: abc123" \ -H "X-Log-Environment: production" \ -d '{ "model": "openai/gpt-5-mini", "messages": [{"role": "user", "content": "Привет"}] }'
- Не более 10 заголовков
X-Log-*на запрос - Длина ключа (после удаления префикса) — не более 64 символов
- Длина значения — не более 256 символов
Заголовки, превышающие лимиты, молча игнорируются — запрос никогда не отклоняется из-за метаданных.
Фильтрация по метаданным пока не поддерживается — они доступны только при просмотре отдельной записи и в экспорте.
Каждая запись в логах имеет один из четырёх статусов:
| Статус | Описание |
|---|---|
success | Запрос отправлен конечному сервису, получен успешный ответ |
provider_error | Запрос отправлен конечному сервису, получена ошибка (4xx/5xx) |
provider_timeout | Запрос отправлен конечному сервису, соединение оборвалось или истекло время ожидания |
proxy_error | Запрос отклонён на стороне ProxyAPI (rate limit, недостаточный баланс, превышение бюджета и т.д.) |
- Идентификация: API-ключ (название и маскированный), модель, вендор, endpoint, IP-адрес клиента
- Производительность: HTTP-код ответа, общая задержка (мс), время до первого токена (для стриминга), флаг стриминга
- Потребление: разбивка по типам токенов (ввод, вывод, размышления, кэш и др.), размер запроса и ответа в байтах
- Биллинг: списанная сумма (для отклонённых запросов — пусто, так как списания не происходит)
- Ошибки: тип и текст ошибки (от конечного сервиса или от ProxyAPI)
- Содержимое запросов и ответов: промпт, ответ модели или сообщение об ошибке
- Пользовательские метаданные: произвольные данные, переданные через заголовки
X-Log-*
Для запросов, отклонённых на уровне ProxyAPI (proxy_error): нет ответа от конечного сервиса, нет потребления токенов, задержка отражает время обработки на стороне ProxyAPI. Содержимое ответа — сообщение об ошибке от ProxyAPI.
Стоимость логирования зависит от выбранного периода хранения:
| Период хранения | Стоимость за 1 000 запросов | Бесплатный лимит |
|---|---|---|
| 3 дня | 8 ₽ | 10 000 запросов/мес |
| 7 дней | 10 ₽ | — |
| 30 дней | 12 ₽ | — |
| 365 дней | 15 ₽ | — |
На тарифе с хранением 3 дня первые 10 000 запросов в месяц — бесплатно. После исчерпания лимита запросы продолжают логироваться и оплачиваются по стандартной ставке 8 ₽ за 1 000 запросов. Счётчик обнуляется в начале каждого месяца.
При переходе на любой другой период хранения (7, 30, 365 дней) оплата начинается с первого запроса.
- Списание происходит с баланса ProxyAPI — того же, с которого оплачиваются запросы к моделям
- Биллинг ежедневный: каждую ночь в 04:00 МСК начисляется оплата за запросы предыдущего дня по текущему тарифу
- Смена тарифа влияет только на будущие списания — пересчёта за прошлые дни не происходит
Период хранения — это скользящее окно: хранятся все логи за последние N дней. Очистка устаревших записей выполняется автоматически каждую ночь.
При увеличении периода хранения существующие логи будут храниться дольше.
При уменьшении периода хранения записи за пределами нового окна будут удалены в ближайшую ночную очистку (04:00 МСК). До этого момента изменение можно отменить.
При отключении логирования:
- Новые запросы сразу перестают логироваться
- Существующие логи остаются доступны до 04:00 МСК — этого времени достаточно, чтобы экспортировать данные
- В 04:00 МСК: начисляется оплата за последние запросы, затем все логи удаляются
Если решение изменилось — включите логирование обратно до 04:00 МСК, и все существующие логи сохранятся, запись возобновится.
Экспорт позволяет скачать логи в машиночитаемом формате для внешнего анализа или архивирования.
- На странице «Логи» нажать кнопку экспорта (иконка скачивания)
- Выбрать вариант включения содержимого запросов и ответов (см. ниже)
- Нажать «Экспортировать»
- Ссылка на скачивание придёт на почту аккаунта (действует 24 часа)
Экспорт выгружает все логи за выбранный на странице диапазон дат и времени (или за всё время, если диапазон не указан).
| Вариант | Описание |
|---|---|
| Без содержимого | Только метаданные — самый быстрый и компактный |
| С содержимым (без крупного) | Включает содержимое запросов и ответов до 128 КБ; крупное содержимое (изображения, аудио) — пропускается |
| С содержимым (все) | Всё содержимое, включая крупное — оно помещается в папку payloads/ внутри архива |
Экспорт — zip-архив, содержащий:
logs.ndjson— по одной JSON-строке на каждую записьpayloads/— папка с крупным содержимым запросов и ответов. Появляется только при варианте «все» и только если крупное содержимое действительно было
- Не более 10 экспортов в сутки
- Только один экспорт одновременно — нужно дождаться завершения текущего
Каждая строка в файле logs.ndjson — это JSON-объект со следующими полями:
| Поле | Тип | Описание |
|---|---|---|
id | string (UUID) | Уникальный идентификатор запроса. Совпадает со значением заголовка X-Request-ID |
created_at | string (ISO 8601) | Время получения запроса |
client_ip | string | IP-адрес клиента, отправившего запрос |
model | string | Название модели без приставки вендора (например, gpt-5-mini) |
vendor | string | Вендор модели (например, openai). Пустая строка у записей, сделанных до появления этого поля |
snapshot | string | Точная версия модели, использованная конечным сервисом (например, gpt-5-mini-2025-08-07) |
endpoint | string | Путь запроса, включая query-параметры (например, /v1/chat/completions) |
api_key_name | string | Название API-ключа |
api_key_masked | string | Маскированный API-ключ (например, sk-...a1b2) |
status | string | Статус: success, provider_error, provider_timeout, proxy_error |
status_code | integer | HTTP-код ответа, возвращённый клиенту (включая коды ProxyAPI: 429, 402, 400) |
latency_ms | integer | Общая задержка в миллисекундах |
ttft_ms | integer / null | Время до первого токена в миллисекундах. Только для стриминговых запросов, иначе null |
is_streaming | boolean | Был ли запрос стриминговым |
request_bytes | integer | Размер содержимого запроса в байтах |
response_bytes | integer | Размер содержимого ответа в байтах |
amount | number / null | Списанная сумма в рублях. null для запросов, отклонённых на стороне ProxyAPI |
vat | integer | Процент НДС, включённый в сумму |
error_type | string | Тип ошибки. Пустая строка при успешном запросе |
error_message | string | Текст ошибки. Пустая строка при успешном запросе |
usage_breakdown | array | Разбивка потребления (см. ниже) |
meta | object | Метаданные записи: custom — пользовательские метаданные из заголовков X-Log-*, request_content_type — тип содержимого запроса, masked_entity_types — типы данных, найденные маскированием |
request_body | string / null | Содержимое запроса (JSON-строка). Присутствует при выборе варианта «с содержимым». null для крупного содержимого при варианте «без крупного» |
response_body | string / null | Содержимое ответа (JSON-строка). Присутствует при выборе варианта «с содержимым». null для крупного содержимого при варианте «без крупного» |
request_body_file | string / null | Путь к файлу содержимого запроса внутри архива (например, payloads/550e8400_req.json). Только для крупного содержимого при варианте «все» |
response_body_file | string / null | Путь к файлу содержимого ответа внутри архива. Только для крупного содержимого при варианте «все» |
Массив объектов, описывающих потребление ресурсов в рамках запроса. Один запрос может содержать несколько элементов — например, при использовании модели с поиском в интернете будет отдельная запись на потребление модели и отдельная на поиск.
Каждый элемент имеет четыре поля:
type— тип продукта:MODEL_TEXT,MODEL_IMAGE,MODEL_VIDEO,MODEL_TTS,MODEL_STT,MODEL_EMBEDDING,SERVICEvendor— вендор продуктаproduct— строка видапродукт/снапшот(например,gpt-5-mini/gpt-5-mini-2025-08-07) или простопродуктдля сервисных продуктов (например,web-search)breakdown— объект с парами «тип потребления → количество»
Пример:
[ { "type": "MODEL_TEXT", "vendor": "openai", "product": "gpt-5-mini/gpt-5-mini-2025-08-07", "breakdown": { "input_tokens": 150, "output_tokens": 420, "reasoning_tokens": 100 } }, { "type": "SERVICE", "vendor": "openai", "product": "web-search", "breakdown": { "search": 1 } } ]
| Ключ | Описание |
|---|---|
input_tokens | Токены ввода (промпт, контекст) |
output_tokens | Токены вывода (ответ модели) |
reasoning_tokens | Токены размышлений (когда тарифицируются отдельно от токенов вывода) |
cache_read_input_tokens | Токены, прочитанные из кэша |
cache_write_input_tokens | Токены, записанные в кэш |
audio_input_tokens | Аудио-токены ввода |
audio_output_tokens | Аудио-токены вывода |
image_input_tokens | Токены изображений на входе |
input_images | Количество изображений |
input_characters | Количество символов (синтез речи) |
input_seconds | Длительность записи в секундах (распознавание речи) |
video_seconds | Длительность видео в секундах; у разных разрешений свои ключи |
search | Количество поисковых запросов |
sessions | Количество сессий |
Ключи с приставкой batch_ — то же потребление в пакетной обработке, с приставкой extended_ — в расширенном контексте. Тарифицируются они по своим ценам.
На данный момент не логируются:
- Некоторые клиентские ошибки валидации (неизвестная модель, некорректное содержимое запроса), которые отклоняются до начала обработки запроса — такие ошибки не попадают в логи
- Повторные попытки: если запрос был перенаправлен после отказа конечного сервиса, в логи попадает только итоговая попытка
Логирование действует на уровне аккаунта. Включение логирования для отдельных API-ключей пока не поддерживается.
Частые вопросы
Попадут ли в логи запросы, сделанные до включения логирования?
Нет. Записи накапливаются с момента активации, историческая информация не переносится.
Что будет с логами после отключения логирования?
Они остаются доступны до 04:00 МСК, и за это время их можно экспортировать. В 04:00 начисляется оплата за последние запросы, после чего логи удаляются. Если включить логирование обратно до 04:00, всё сохранится.
Можно ли включить логирование только для одного ключа?
Пока нет. Логирование действует на уровне аккаунта и записывает запросы по всем ключам.
Как найти в логах конкретный запрос?
По значению заголовка X-Request-ID, который возвращается с каждым ответом: на странице «Логи» для него есть отдельный фильтр. Его же стоит передавать в поддержку.
Логируется ли содержимое запросов, если включено маскирование?
Да, но в маскированном виде: в логи попадают синтетические значения, а оригинальные персональные данные не сохраняются ни в какой форме.
Последняя редакция: 3 сентября 2026 г.