Аудит использования API Caila
Caila предоставляет возможность выгрузить информацию о запросах к API для анализа и контроля. История включает все запросы к ML-сервисам, в том числе через адаптеры.
Для каждого запроса хранится следующая информация:
- Источник запроса: IP-адрес, идентификатор аккаунта и пользователя.
- Данные запроса: протокол (HTTP или gRPC), путь, вызываемый ML-сервис, имя API-ключа, временная метка, размер запроса.
- Результат запроса: успех или ошибка, время обработки, размер ответа.
Если для сервиса включено архивирование истории запросов и ответов, дополнительно сохраняются:
- Метаданные: стоимость обработки запроса, название провайдера и модели. Хранятся 180 дней.
- Контент: заголовки и тело запроса и ответа. Хранятся 30 дней.
В облачной версии Caila архивирование включено для всех GPT-моделей и некоторых других сервисов. В случае установки Caila в инфраструктуре вашей компании архивирование настраивает администратор платформы.
ID запросов
Caila присваивает каждому запросу к API уникальный идентификатор requestId, который возвращается в заголовке ответа X-Request-Id.
Если ответ модели содержит идентификатор, он сохраняется как llmResponseId.
Примеры идентификаторов ответа:
- OpenAI:
chatcmpl-B9MBs8CjcvOU2jLn4n570S5qMJKcT - Anthropic:
msg_01XFDUDYJgAACzvnptvVoYEL
Для получения детальной информации о запросе можно использовать любой из этих идентификаторов.
Получение информации о запросах по ID
Если известны идентификаторы запросов Caila (requestId) или ответов модели (llmResponseId), можно п олучить детальную информацию о запросах.
Метаданные запросов
Получение метаданных (без тела запроса и ответа) для списка ID:
curl --location 'https://caila.io/api/requests/metadata' \
--header 'Content-Type: application/json' \
--header 'MLP-API-KEY: {apiKey}' \
--data '{
"requestIds": ["ebc21c22-570c-4981-89b6-315a65e55820", "chatcmpl-D7yfOab3JvcF4JOLHP09EFdS81GA4"]
}'
Параметры:
requestIds— массив идентификаторов запросов (до 10000). Можно указывать какrequestId, так иllmResponseId.
Пример ответа:
{
"items": [
{
"requestId": "ebc21c22-570c-4981-89b6-315a65e55820",
"callerId": 1000165815,
"serviceId": 30021,
"service": null,
"apiTokenName": null,
"callerIpAddress": "92.53.100.65",
"requestEndpoint": "POST /api/mlpgateway/account/1000062767/model/30021/predict",
"llmProvider": null,
"llmModelName": "gpt-5.2-2025-12-11",
"llmResponseId": "chatcmpl-D7yfOab3JvcF4JOLHP09EFdS81GA4",
"isStream": false,
"requestSentAt": "2026-02-11T07:11:09.881",
"responseReceivedAt": "2026-02-11T07:11:11.061",
"responseTimeMs": 1179,
"timeToFirstTokenMs": 1179,
"billingUnits": {
"INPUT_TEXT_TOKENS": 0,
"OUTPUT_TEXT_TOKENS": 0,
"CACHED_INPUT_TEXT_TOKENS": 0
},
"cost": {
"totalCost": 0.02541,
"currency": "RUB"
}
}
],
"notFoundRequestIds": []
}```
Поля ответа:
- `items` — массив найденных записей.
- `notFoundRequestIds` — массив ID, для которых записи не найдены или недоступны.
- `requestId` — внутренний идентификатор запроса Caila.
- `llmResponseId` — идентификатор из ответа модели (если применимо).
- `llmProvider` — название провайдера: `openai`, `anthropic` и т. д.
- `llmModelName` — название модели.
- `cost` — фактическая стоимость обработки запроса.
### Контент запросов \{#content-by-ids}
Получение полного содержимого запросов и ответов:
```bash
curl --location 'https://caila.io/api/requests/content' \
--header 'Content-Type: application/json' \
--header 'MLP-API-KEY: {apiKey}' \
--data '{
"requestIds": ["95d653d5-28dd-438c-94da-e059bf2041be"]
}'
Параметры:
requestIds— массив идентификаторов запросов (до 500).
Пример ответа:
{
"found": [
{
"requestId": "95d653d5-28dd-438c-94da-e059bf2041be",
"llmResponseId": "chatcmpl-B9MBs8CjcvOU2jLn4n570S5qMJKcT",
"timestamp": "2025-07-10T12:14:39.436Z",
"requestJson": "{\"model\":\"gpt-4o\",\"messages\":[{\"role\":\"user\",\"content\":\"Hello\"}]}",
"responseJson": "{\"id\":\"chatcmpl-...\",\"choices\":[...]}",
"requestHeaders": {"Content-Type": "application/json"},
"responseHeaders": {"X-Request-Id": "95d653d5-..."}
}
],
"notFound": []
}
Получение информации о запросах к ML‑сервисам за период
Метаданные запросов
curl --location 'https://caila.io/api/requests/metadata/search?from={from}&to={to}&offset={offset}&limit={limit}' \
--header 'MLP-API-KEY: {apiKey}'
Параметры:
from,to— начало и окончание периода в форматеYYYY-MM-DDThh:mm:ssZ(согласно ISO 8601, UTC). Максимальный период — 180 дней.offset— смещение для пагинации, по умолчанию 0.limit— количество записей, по умолчанию 100, максимум 10000.sourceAccountId— фильтр по аккаунту-источнику запроса (только для администраторов платформы).
Пример запроса:
curl --location 'https://caila.io/api/requests/metadata/search?from=2026-02-01T00:00:00Z&to=2026-02-31T23:59:59Z&offset=0&limit=100' \
--header 'MLP-API-KEY: 1010101.0f0f0f0f0f0f0f0f0f0f0f0f'
Пример ответа:
{
"items": [
{
"requestId": "0b2db346-d948-4c37-a81b-70d32672a657",
"callerId": 1000165815,
"serviceId": 73198,
"service": "claude-sonnet-4-5",
"apiTokenName": null,
"callerIpAddress": "92.53.100.65",
"requestEndpoint": "POST /api/mlpgateway/account/1000062767/model/73198/predict",
"llmProvider": null,
"llmModelName": "claude-sonnet-4-5-20250929",
"llmResponseId": null,
"isStream": false,
"requestSentAt": "2026-02-11T06:12:10.232",
"responseReceivedAt": "2026-02-11T06:12:11.928",
"responseTimeMs": 1696,
"timeToFirstTokenMs": 1696,
"billingUnits": {
"INPUT_TEXT_TOKENS": 0,
"OUTPUT_TEXT_TOKENS": 0,
"CACHED_INPUT_TEXT_TOKENS": 0
},
"cost": {
"totalCost": 0.066825,
"currency": "RUB"
}
}
],
"offset": 0,
"limit": 100,
"total": 1
}
Контент запросов
curl --location 'https://caila.io/api/requests/content/search?from={from}&to={to}&offset={offset}&limit={limit}' \
--header 'MLP-API-KEY: {apiKey}'
Параметры аналогичны поиску метаданных, но максимальный limit — 500.
Выгрузка полной истории запросов
Метод выгрузки полной истории возвращает данные обо всех запросах к ML-сервисам через API, а не только к сервисам с включенным архивированием.
Формат ответа также отличается.
Чтобы получить доступ к истории запросов к API, свяжитесь со своим аккаунт-менеджером или напишите нам на support@just-ai.com.
curl --location 'https://caila.io/api/mlparchive/account/{accountId}/audit?page={page}&size={size}&dateFrom={dateFrom}&dateTo={dateFrom}' \
--header 'MLP-API-KEY: {apiKey}'
Параметры запроса:
{accountId}— идентификатор вашего аккаунта. Его можно найти на странице Акк аунты в Conversational Cloud.page— порядковый номер страницы для постраничной выборки, по умолчанию 0.size— количество записей на странице, по умолчанию 100.dateFrom,dateTo— начало и окончание периода в форматеYYYY-MM-DDThh:mm:ssZ(согласно ISO 8601, UTC).
Пример запроса:
curl --location 'https://caila.io/api/mlparchive/account/1010101/audit?page=0&size=100&dateFrom=2025-07-10T12%3A11%3A39.436Z&dateTo=2025-07-10T12%3A14%3A39.436Z' \
--header 'MLP-API-KEY: 1010101.0f0f0f0f0f0f0f0f0f0f0f0f'
Пример ответа:
{
"paging": {
"totalElements": 868,
"totalPages": 9,
"pageNumber": 0,
"pageSize": 100
},
"records": [
{
"client": {
"ipAddress": "92.55.100.77",
"accountId": 1010101,
"userId": 0
},
"request": {
"apiClient": "HTTP",
"path": "/api/mlpgateway/account/1010101/model/75557/predict",
"apiTokenName": "general",
"model": {
"id": model,
"accountId": 1022222
},
"requestId": "95d653d5-28dd-438c-94da-e059bf2041be",
"timestamp": "2025-07-10T12:14:39.436Z",
"sizeBytes": 91
},
"response": {
"success": true,
"processingTimeMs": 3377,
"sizeBytes": 1016
}
}
]
}
Права доступа
- Пользователь имеет доступ только к запросам своего аккаунта.
- Администратор платформы имеет доступ к запросам всех аккаунтов.