Для AI-агентов: markdown этой страницы — /docs-content/entities/currencies/aggregate.md индекс документации — /llms.txt
Агрегация валют
POST /v1/currencies/aggregate
Подсчёт числа валют и числовые агрегации по курсам обмена и другим числовым полям справочника.
Поддерживает функцию count и числовые функции sum, avg, min, max по полям amount, amountCnt, sort, decimals. Группировка groupBy для валют недоступна — у справочника нет полей, разрешённых для группировки, поэтому любой groupBy возвращает 400 INVALID_PARAMS.
Поля запроса (body)
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
aggregate |
array | нет | Массив агрегаций. Подсчёт — { "field": "*", "function": "count" }. Числовые функции — { "field": "<поле>", "function": "sum" | "avg" | "min" | "max" } по полям amount, amountCnt, sort, decimals. Без параметра возвращается только count |
groupBy |
string | array | нет | Не поддерживается для валют — возвращает 400 INVALID_PARAMS. У справочника нет полей, разрешённых для группировки |
filter |
object | нет | Не поддерживается для валют — любой ключ возвращает 400 UNSUPPORTED_FILTER |
Примеры
curl — личный ключ
curl -X POST "https://vibecode.bitrix24.tech/v1/currencies/aggregate" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"aggregate": [
{ "field": "amount", "function": "sum" },
{ "field": "amount", "function": "avg" }
]
}'
curl — OAuth-приложение
curl -X POST "https://vibecode.bitrix24.tech/v1/currencies/aggregate" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"aggregate": [
{ "field": "amount", "function": "sum" },
{ "field": "amount", "function": "avg" }
]
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/currencies/aggregate', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
aggregate: [
{ field: 'amount', function: 'sum' },
{ field: 'amount', function: 'avg' },
],
}),
})
const { success, data } = await res.json()
console.log('Сумма курсов:', data.aggregates.amount.sum)
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/currencies/aggregate', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
aggregate: [
{ field: 'amount', function: 'sum' },
{ field: 'amount', function: 'avg' },
],
}),
})
const { success, data } = await res.json()
Другие сценарии
Общее количество валют в портале — самый быстрый запрос, без выгрузки записей:
{}
Минимальный и максимальный курс обмена:
{ "aggregate": [{ "field": "amount", "function": "min" }, { "field": "amount", "function": "max" }] }
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data.count |
number | Количество валют, соответствующих запросу |
data.aggregates |
object | Результаты числовых функций, сгруппированные по имени поля: data.aggregates.amount.sum и так далее. Пустой объект, если массив aggregate не передан |
data.meta.totalRecords |
number | Общее количество валют |
data.meta.recordsProcessed |
number | Сколько записей обработано для числовых функций. 0 для запроса только с count |
data.meta.truncated |
boolean | true, если числа посчитаны не по всем записям под фильтр: прочитано меньше записей, чем обещал data.count — в том числе когда под фильтр попало больше 5000, — либо срез оборвался ошибкой подстраницы. Размер нехватки приходит в data.meta.recordsShortfall, оборванный срез — в data.meta.pageErrorSample. Присутствует всегда, на полном ответе равен false. Если в запросе нет ни groupBy, ни числовых функций, записи не выгружаются и флаг всегда false |
Пример ответа
{
"success": true,
"data": {
"count": 7,
"aggregates": {
"amount": { "sum": 59, "avg": 8.428571428571429 }
},
"meta": {
"totalRecords": 7,
"recordsProcessed": 7,
"truncated": false
}
}
}
Без массива aggregate поле data.aggregates — пустой объект, а data.meta.recordsProcessed равен 0.
Пример ответа при ошибке
400 — поле недоступно для агрегации:
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "Field 'nope' not found. Available numeric fields: amount, amountCnt, sort, decimals."
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | INVALID_PARAMS |
Неизвестное поле в aggregate — сообщение перечисляет доступные числовые поля |
| 400 | INVALID_PARAMS |
Нечисловое поле в sum, avg, min, max — сообщение называет тип поля |
| 400 | INVALID_PARAMS |
Неизвестная функция агрегации — поддерживаются count, sum, avg, min, max |
| 400 | INVALID_PARAMS |
Передан groupBy — для валют группировка недоступна |
| 400 | UNSUPPORTED_FILTER |
Передан filter — валюты не фильтруются на стороне сервера |
| 403 | SCOPE_DENIED |
API-ключ не имеет скоупа crm |
| 401 | TOKEN_MISSING |
Не передан API-ключ |
Полный список общих ошибок API — Ошибки.
Известные особенности
count не выгружает записи, числовые функции — выгружают. count считается одним запросом на любом объёме, поэтому data.meta.recordsProcessed равен 0. Функции sum, avg, min, max выгружают записи и считают на стороне Вайбкод, поэтому data.meta.recordsProcessed равен числу обработанных валют. Справочник валют содержит единицы записей, поэтому потолок в 5000 записей для него не достигается.
Признак усечения приходит рядом с самим числом. Когда ответ приходит с meta.truncated: true, пометка truncated: true стоит внутри объекта каждого поля в data.aggregates, у каждого элемента data.groups, а в data.meta.warnings добавляется предупреждение с кодом AGGREGATE_TRUNCATED. Так клиент, который читает только само число, видит, что оно посчитано по части записей. На полном ответе ни одной из этих пометок нет. Полный разбор — Агрегация POST — потолок 5000 записей.