Qut Pay Сайт Кабинет База знаний Инструкции Документация API ҚАЗРУС
ГлавнаяБаза знаний → Решение проблем

Сумма неверная или теряются тиыны

Обновлено: 2026-09-14 · Версия в Markdown

Коротко

Всё объясняют два правила. Счёт по телефону (kind: "phone") принимает только целые тенге — отправите тиыны, получите ошибку amount_must_be_whole_tenge. QR-счёт принимает не более двух знаков после запятой. Валюта всегда KZT, другой нет.

Отсюда следует: округлять нужно на своей стороне, до создания счёта. Тогда вы сами знаете, какая сумма посчитана, и можете показать её покупателю. Если оставить округление нам, сумма в вашей базе и реально оплаченная сумма могут разойтись.

Причина по симптому

СимптомПричинаРешение
amount_must_be_whole_tengeВ счёт по телефону отправлены тиыныОкруглите до целых тенге
invalid_amountСумма отсутствует, равна нулю, отрицательна или не числоПередайте положительное число
amount_too_smallМеньше минимумаУвеличьте сумму
amount_too_largeБольше максимумаУменьшите или разбейте на несколько счетов
Покупатель видит другую суммуСумма отправлена строкой, разделитель разобран неверноПередавайте числом
Потерялись тиыныQR принимает два знака, остальное отсекаетсяОкругляйте у себя

Как передаётся сумма

Поле amountчисло в тенге. Не в тиынах: чтобы выставить 1 000 ₸, пишете 1000, а не 100000.

curl -X POST https://api.qut.kz/api/v1/invoices \
  -H "X-API-Key: qp_live_ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"amount":1000,"kind":"qr","description":"Заказ №1042"}'

Счёт по телефону:

curl -X POST https://api.qut.kz/api/v1/invoices \
  -H "X-API-Key: qp_live_ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"amount":1000,"kind":"phone","customer":{"phone":"77771234567"},"description":"Заказ №1042"}'

Отправите здесь 1000.50 — вернётся amount_must_be_whole_tenge.

Округляйте на своей стороне

Самая частая картина: в корзине 3 333,33 ₸, а покупатель платит 3 333 ₸. Разница копеечная, но при сверке в конце месяца она вся вылезет наружу.

Стройте порядок так:

// 1. Округляем сумму у себя
const total = Math.round(cart.total);   // 3333.33 → 3333

// 2. Записываем именно её в свою базу
await orders.update(orderId, { chargedAmount: total });

// 3. Отправляем ровно эту же сумму
await createInvoice({ amount: total, kind: 'phone', ... });

Три принципа:

Math.round округляет вверх на 0.5. Если вы хотите всегда вниз, используйте Math.floor — но выбранное правило должно быть одним для всей системы.

Работа с сотыми долями

Если в вашей системе цены хранятся в тиынах (например 333333 = 3 333,33 ₸), делайте перевод в одном месте:

const tenge = Math.round(priceInTiyn / 100);

Осторожнее с числами с плавающей точкой: 0.1 + 0.2 во многих языках даёт 0.30000000000000004. Надёжнее хранить цены целыми числами (в тиынах) и переводить в тенге только на последнем шаге.

Разница между двумя типами счёта

ЧтоQR-счёт (qr)Счёт по телефону (phone)
СуммаНе более 2 знаков после запятойТолько целые тенге
ОписаниеДо 100 символовДо 60 символов
Номер покупателяНе нуженОбязателен, 7XXXXXXXXXX
Как выглядитQR, ссылка, deep linkУведомление в Kaspi покупателя

На практике удобнее отправлять целые тенге в обоих случаях: тогда при смене типа счёта логику переписывать не придётся.

Ограничения по сумме

Минимум и максимум существуют, и ограничивает их не только наша сторона, но и Kaspi. При выходе за границы придёт amount_too_small или amount_too_large.

Если вы работаете с крупными суммами (например, опт), учтите две вещи:

Кроме того, amount_too_large нередко приходит из-за ошибки в коде: переменная передана в тиынах, и сумма выросла в сто раз. Такое число обычно видно невооружённым глазом.

Валюта

Валюта только KZT. Отправить другую нельзя, поля currency искать не нужно.

Если сайт показывает цены в нескольких валютах, пересчёт делайте у себя, до создания счёта. В Kaspi покупатель всегда платит в тенге.

Порядок проверки

  1. Прочитайте текст ошибки: amount_must_be_whole_tenge или invalid_amount
  2. Проверьте тип отправляемого значения: число или строка
  3. Для счёта по телефону — посмотрите, нет ли тиынов
  4. Сверьте сумму в своей базе и отправленную сумму
  5. Убедитесь, что округление в коде происходит в одном месте

Если сумма верна, а денег не видно, дело в другом: Счёт оплачен, а денег нет.

Вопросы и ответы

Можно ли отправлять тиыны в QR-счёт? До двух знаков после запятой — можно. Но на практике целые тенге проще и безопаснее.

Может ли покупатель сам изменить сумму? В обычном счёте нет, сумма зафиксирована. В ссылке с открытой суммой покупатель вводит её сам.

Что будет, если отправить сумму строкой? В одних случаях она примется, в других вернётся invalid_amount. Всегда передавайте числом.

Кто платит разницу при округлении? Это ваше решение. Многие округляют вниз и берут несколько тиынов на себя — объясняться с покупателем сложнее.

Счёт уже создан, можно ли изменить сумму? Нет. Нужно отменить счёт и создать новый.

Связанные статьи

API отвечает 401 — ключ не принимается401 unauthorized означает, что в запросе нет действующего API-ключа. Причины, порядок проверки и рабочий пример curl. Чаще всего виноват заголовок или префикс Bearer.Счёт оплачен, а денег нетПричин три: включён тестовый режим, деньги ищут не там, или кассир принадлежит другой организации Kaspi. Как проверить каждую и что делать дальше.Что такое Qut Pay и как он устроенQut Pay — независимый сервис поверх Kaspi Pay: API и кабинет для приёма Kaspi QR через роль «Кассир». Деньги приходят напрямую на ваш счёт в Kaspi и никогда не попадают к нам.

Остались вопросы? WhatsApp +77788813333 · kazprose@gmail.com
Написать можно и из кабинета: Поддержка.

Qut Pay — независимый сервис, не аффилирован с АО «Kaspi Bank». Kaspi и Kaspi Pay — товарные знаки их правообладателя.