Хранение запросов и ответов
AITUNNEL может сохранять тело запроса и ответа, чтобы потом открыть их в кабинете: что ушло модели, что она ответила, какие картинки, аудио или видео получились. Всё хранится как есть, байт в байт, вместе со стримом.
X-AITunnel-Log: offПо умолчанию хранение выключено. Включается в кабинете: Логи → Хранение.
Что можно сохранять
Категории включаются по отдельности:
| Категория | Методы |
|---|---|
| Текст | chat/completions, responses, messages, decisions, rerank |
| Изображения | images/generations, images/edits |
| Аудио | audio/transcriptions, audio/speech |
| Видео | videos |
Сюда же входят cursor/chat/completions и systemone (категория «Текст»). Эмбеддинги, модерация и бесплатные служебные методы не сохраняются никогда.
Цены
| За запрос | 1 день | 7 дней | 30 дней |
|---|---|---|---|
| Текст | 0,0039 ₽ | 0,0052 ₽ | 0,0078 ₽ |
| Изображения | 0,013 ₽ | 0,026 ₽ | 0,052 ₽ |
| Аудио | 0,0065 ₽ | 0,013 ₽ | 0,026 ₽ |
| Видео | 0,26 ₽ | 0,52 ₽ | 1,3 ₽ |
| Каждый начатый МБ запроса сверх 1 МБ | +0,0013 ₽ | +0,0026 ₽ | +0,0065 ₽ |
- Плата прибавляется к стоимости запроса:
usage.cost_rubв ответе API уже её включает. - Отдельно она видна полем
log_cost_rubв GET /aitunnel/requests/{id} и GET /aitunnel/usage, строкой «Хранение лога» в окне запроса и столбцомLogCostв CSV. - Скидка аккаунта на плату за хранение не действует.
- Запрос, который не прошёл (ошибка, 4xx, 5xx), не сохраняется, и платы за хранение нет.
- У видео плата резервируется вместе с задачей и списывается, когда задача завершилась. Если задача не удалась, лог удаляется и плата возвращается вместе с резервом.
{
"id": "chat-034pYx9KaOzvCxWdvYoAvp",
"object": "chat.completion",
"usage": {
"prompt_tokens": 12,
"completion_tokens": 48,
"cost_rub": 0.0712
}
}{
"id": "chat-034pYx9KaOzvCxWdvYoAvp",
"object": "request",
"cost_rub": 0.0712,
"tool_cost_rub": null,
"log_cost_rub": 0.02,
"...": "остальные поля — /docs/api/request"
}Срок хранения: аккаунт и ключи
- Аккаунт. Срок по умолчанию для всех ключей и категории, которые сохранять.
- Ключ. У любого ключа можно выбрать свой срок или «Не сохранять» — он важнее настройки аккаунта. Например, хранить запросы продового ключа 30 дней, а тестового — не хранить.
- Лог хранится тот срок, который действовал в момент запроса. Изменение настройки на уже сохранённые логи не влияет.
Как не сохранять один запрос
Передайте заголовок X-AITunnel-Log: off. Запрос не сохранится и не будет стоить дополнительно.
curl -i https://api.aitunnel.ru/v1/chat/completions \
-H "Authorization: Bearer sk-aitunnel-xxx" \
-H "Content-Type: application/json" \
-H "X-AITunnel-Log: off" \
-d '{
"model": "gpt-5-nano",
"messages": [{ "role": "user", "content": "Это не сохранять" }]
}'from openai import OpenAI
client = OpenAI(
base_url="https://api.aitunnel.ru/v1",
api_key="sk-aitunnel-xxx",
)
response = client.chat.completions.create(
model="gpt-5-nano",
messages=[{"role": "user", "content": "Это не сохранять"}],
extra_headers={"X-AITunnel-Log": "off"},
)Сохранённый запрос отмечен в ответе заголовком X-AITunnel-Log со сроком: 1d, 7d или 30d. Без этого заголовка или с off запрос не сохранён.
Размер
- Текст и JSON, включая стримы, — до 64 МБ.
- Файлы в запросе (multipart:
images/edits,audio/transcriptions) и аудио изaudio/speech— до 32 МБ. - Сгенерированное видео — до 500 МБ. Видео копируется, когда задача завершилась.
- Если тело больше лимита, оно не сохраняется — остаётся только его размер. Обрезанных логов не бывает.
Как смотреть
В кабинете: Логи → Запросы, откройте запрос и нажмите «Открыть» в блоке «Сохранённый лог». Кнопка «С логом» над списком оставляет только сохранённые запросы. В окне три вкладки:
- Запрос — сообщения по ролям, картинки, аудио, файлы и параметры (
model,temperature, …). - Ответ — ответ модели; стрим собран в цельный текст, с рассуждениями и вызовами инструментов. Картинки, аудио и видео показываются как есть.
- Raw — тела запроса и ответа без изменений, с кнопкой «Скачать».
Через API
Лог читается тем же API-ключом, которым сделан запрос, — так же, как GET /aitunnel/requests/{id}. Кабинет открывает логи точно так же, вашим ключом.
| Метод | Что отдаёт |
|---|---|
GET /v1/aitunnel/requests/{id}/log/request | тело запроса |
GET /v1/aitunnel/requests/{id}/log/response | тело ответа (стрим — как SSE) |
GET /v1/aitunnel/requests/{id}/log/media | видео из videos; поддерживает Range |
# Тело запроса и ответа — как они прошли через шлюз
curl --compressed https://api.aitunnel.ru/v1/aitunnel/requests/chat-034pYx9KaOzvCxWdvYoAvp/log/request \
-H "Authorization: Bearer sk-aitunnel-xxx"
curl --compressed https://api.aitunnel.ru/v1/aitunnel/requests/chat-034pYx9KaOzvCxWdvYoAvp/log/response \
-H "Authorization: Bearer sk-aitunnel-xxx"
# Видео (только videos): поддерживает Range
curl -o video.mp4 https://api.aitunnel.ru/v1/aitunnel/requests/vid-034pYx9KaOzvCxWdvYoAvp/log/media \
-H "Authorization: Bearer sk-aitunnel-xxx"- Тело отдаётся байт в байт, с исходным
Content-Type. Текст хранится сжатым и приходит сContent-Encoding: gzip— используйтеcurl --compressed(HTTP-библиотеки распаковывают сами). - Заголовки ответа:
X-Log-Raw-Bytes— исходный размер,X-Log-Status— HTTP-статус ответа модели,X-Log-Omitted: 1— тело было больше лимита и не сохранено. 404— запрос сделан другим ключом, не сохранялся или срок хранения истёк.- У видео ID запроса приходит в заголовке
X-Request-Idответа наPOST /v1/videos(это не ID задачиvid_…). Лог открывается, когда задача завершилась. - Ключ должен быть активен: лог запроса, сделанного удалённым или приостановленным ключом, прочитать нельзя.
В GET /aitunnel/requests/{id} у сохранённого запроса есть поле log со ссылками; у несохранённого — null.
{
"id": "chat-034pYx9KaOzvCxWdvYoAvp",
"object": "request",
"...": "...",
"log": {
"days": 7,
"expires_at": "2026-11-15T12:00:00.000Z",
"request": "/v1/aitunnel/requests/chat-034pYx9KaOzvCxWdvYoAvp/log/request",
"response": "/v1/aitunnel/requests/chat-034pYx9KaOzvCxWdvYoAvp/log/response",
"media": null
}
}Удаление
Логи → Хранение → «Удалить все» удаляет все сохранённые логи аккаунта, по всем ключам и срокам. Они сразу перестают открываться; сами файлы удаляются в течение пары минут. Плата за хранение не возвращается. Через API удалить логи нельзя.
Безопасность и данные
- Лог читается только ключом, которым сделан запрос: другой ключ того же аккаунта его не видит.
- По истечении срока лог удаляется и больше недоступен.