Сумма покупок клиентов
const url = 'https://api-admin.billz.ai/v1/customer/bulk?Billz-Response-Channel=HTTP';const options = { method: 'PATCH', headers: { 'platform-id': '7d4a4c38-dd84-4902-b744-0488b80a4c01', 'Billz-Response-Channel': 'HTTP', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"customers":[{"customer_id":"0c4bacfa-5a20-4ee0-befb-e2c27da19d0c","purchase_amount":2100000},{"customer_id":"2be17079-dead-45a2-9b27-c7a7ceaf1476","purchase_amount":650000}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url 'https://api-admin.billz.ai/v1/customer/bulk?Billz-Response-Channel=HTTP' \ --header 'Authorization: Bearer <token>' \ --header 'Billz-Response-Channel: HTTP' \ --header 'Content-Type: application/json' \ --header 'platform-id: 7d4a4c38-dd84-4902-b744-0488b80a4c01' \ --data '{ "customers": [ { "customer_id": "0c4bacfa-5a20-4ee0-befb-e2c27da19d0c", "purchase_amount": 2100000 }, { "customer_id": "2be17079-dead-45a2-9b27-c7a7ceaf1476", "purchase_amount": 650000 } ] }'Асинхронный метод. Чтобы получить результат синхронно по HTTP, передайте заголовок Billz-Response-Channel: HTTP — иначе ответ будет 200 {"message": "<correlation_id>"}. Максимальное ожидание — 600 секунд, далее 408 с error.code = TIMEOUT.
Устанавливает итоговую сумму покупок клиентов: новое значение заменяет текущее, а не прибавляется к нему. За один запрос — до 1000 клиентов, тело запроса — не больше 1 МБ.
Всё или ничего: если хотя бы один клиент не найден в компании, не обновляется никто, а в ответе 404 — список ненайденных.
Ноль и отрицательные суммы допустимы. Удалённые и архивные клиенты тоже обновляются.
Коды ошибок: 408 — таймаут ожидания асинхронного ответа; 401, 403, 429, 500 — общие для всех методов. Форматы тела и семантика — Коды ответов и ошибки.
Authorizations
Заголовок раздела «Authorizations»Parameters
Заголовок раздела «Parameters»Header Parameters
Заголовок раздела «Header Parameters»Идентификатор платформы. Для интеграций используется статичное значение.
HTTP — дождаться результата обработки события и вернуть его в HTTP-ответе. Без заголовка метод вернёт только correlation_id опубликованного события.
Query Parameters
Заголовок раздела «Query Parameters»То же, что заголовок Billz-Response-Channel, — для клиентов, которые не могут передать свой заголовок. Если переданы оба, действует заголовок.
Request Bodyrequired
Заголовок раздела «Request Bodyrequired»object
Клиенты и их новые суммы покупок; клиент не должен повторяться
object
ID клиента
Итоговая сумма покупок; заменяет текущую
Example
{ "customers": [ { "customer_id": "0c4bacfa-5a20-4ee0-befb-e2c27da19d0c", "purchase_amount": 2100000 }, { "customer_id": "2be17079-dead-45a2-9b27-c7a7ceaf1476", "purchase_amount": 650000 } ]}Responses
Заголовок раздела «Responses»Успех. С заголовком Billz-Response-Channel: HTTP — конверт асинхронного ответа, без него — {"message": "<correlation_id>"}.
object
Идентификатор сессии клиента
Итоговый HTTP-код, 200
Идентификатор запроса
Тип ответного события, например <event_type>.success
object
Сколько клиентов обновлено
Ответ асинхронного метода без заголовка Billz-Response-Channel — событие опубликовано.
object
Correlation_id опубликованного события
Example
{ "session_id": "7c2a0f3e-3c52-4a4a-9d0e-5d3a8f1b2c11", "status_code": 200, "topic": "v1.user_service.customer.bulk_patch.success", "data": { "updated": 2 }}Запрос не принят, никто не обновлён. С неизвестным полем в теле, с неверным JSON или с телом больше 1 МБ — 400 сразу, без конверта. Остальные причины приходят в конверте, код — в data.error_code:
1007— списокcustomersпуст;1008— больше 1000 клиентов;1009—customer_idне UUID;1010— клиент повторяется в запросе;1011— у клиента не переданpurchase_amount.
Проверка останавливается на первой ошибке; для 1009–1011 в data.data — строкой customer_id этого клиента.
Тело ошибки. В API сосуществует несколько форматов тела ошибки; все форматы и коды описаны в разделе «Коды ответов и ошибки».
Конверт асинхронного ответа. Возвращается, когда передан заголовок Billz-Response-Channel: HTTP. Итоговый HTTP-код запроса берётся из поля status_code.
object
Идентификатор сессии клиента
Статус обработки события (он же итоговый HTTP-код ответа)
object
Код ошибки, пустая строка если ошибки нет
Текст ошибки, пустая строка если ошибки нет
Идентификатор запроса, совпадает с ID опубликованного события
Тип ответного события, например <event_type>.success
Результат операции, если метод его возвращает
object
Examplegenerated
{ "code": 1, "message": "example", "error": { "code": "example", "message": "example" }, "data": {}}Хотя бы один клиент не найден в компании, никто не обновлён. data.error_code = 1012, в data.data — missing_customer_ids (не больше 100) и missing_total — сколько всего не найдено.
Тело ошибки. В API сосуществует несколько форматов тела ошибки; все форматы и коды описаны в разделе «Коды ответов и ошибки».
Конверт асинхронного ответа. Возвращается, когда передан заголовок Billz-Response-Channel: HTTP. Итоговый HTTP-код запроса берётся из поля status_code.
object
Идентификатор сессии клиента
Статус обработки события (он же итоговый HTTP-код ответа)
object
Код ошибки, пустая строка если ошибки нет
Текст ошибки, пустая строка если ошибки нет
Идентификатор запроса, совпадает с ID опубликованного события
Тип ответного события, например <event_type>.success
Результат операции, если метод его возвращает
object
Example
{ "session_id": "7c2a0f3e-3c52-4a4a-9d0e-5d3a8f1b2c11", "status_code": 404, "topic": "v1.user_service.customer.bulk_patch.failed", "data": { "error_code": 1012, "message": "customers not found, nothing was updated", "data": { "missing_customer_ids": [ "2be17079-dead-45a2-9b27-c7a7ceaf1476" ], "missing_total": 1 } }}