Qut Pay Сайт Кабинет Білім базасы Нұсқаулықтар API құжаттамасы ҚАЗРУС
Басты бетБілім базасы → Анықтамалық

Счёт жасау: барлық өрістер

Жаңартылды: 2026-09-14 · Markdown нұсқасы

Қысқаша

Счёт жасау — бір ғана сұрау:

POST https://api.qut.kz/api/v1/invoices
X-API-Key: qp_live_…
Content-Type: application/json

Жауапта 201 күйі және payUrl келеді — клиентті сол адреске жіберіңіз. Міндетті өріс біреу ғана: amount.

Ескі жол POST /api/v1/orders да қабылданады, ол дәл осы эндпоинттің alias-ы.

Сұраудың өрістері

ӨрісТипМіндеттіСипаттама
amountnumberТеңге. QR счётта ең көбі 2 ондық, телефонға счётта бүтін сан
kindqr \phoneqr — әдепкі: QR код және сілтеме. phone — клиенттің Kaspi қосымшасына push
descriptionstringКлиент көреді. QR — 100 таңба, phone — 60 таңба
externalOrderIdstringСіздің тапсырыс нөміріңіз. Webhook-та қайта келеді
customer.namestringКлиенттің аты
customer.phonestringkind: phone үшін ✅7XXXXXXXXXX пішімінде, 11 сан
customer.emailstringБерілсе клиентке чек хаты кетуі мүмкін
successUrlurlТөлем сәтті өткенде клиент қайтатын адрес. Тек http(s)
failUrlurlТөлем өтпегенде қайтатын адрес. Тек http(s)
metadataobjectКез келген JSON. Өзгертілмей сақталады және webhook-та қайта келеді

Тақырыптар:

ТақырыпМіндеттіНе үшін
X-API-Keyqp_live_… немесе qp_test_…
Content-Type: application/jsonДене JSON
Idempotency-KeyҚайталаудан қорғайды, төменде

Idempotency-Key жіберсеңіз, сол кілтпен екінші рет сұрау жаңа счёт жасамайды: бұрынғысы қайтады, HTTP 200 және жауапта idempotentReplay: true болады. Толығырақ: Идемпоттылық.

qr мен phone айырмашылығы

qrphone
Клиент не көредіQR код немесе төлем сілтемесіKaspi қосымшасындағы push-счёт
customer.phoneМіндетті емесМіндетті
Сома2 ондыққа дейінТек бүтін теңге
description100 таңба60 таңба
Қашан ыңғайлыСайт, офлайн нүкте, экранТелефон арқылы сату, қашықтан

Толық салыстыру: QR счёт пен телефонға счёт.

Жауап

HTTP 201 және мынандай дене:

ӨрісНе
idСчёттың идентификаторы, inv_…
statusЖасалғанда pending
payUrlТөлем беті, клиентті осында жіберіңіз
qrUrlQR-дың мазмұны
deepLinkKaspi қосымшасын ашатын сілтеме
qrImageUrlQR суреті, өз бетіңізге қоюға болады
expiresAtОсы уақыттан кейін счёт жарамсыз

QR-дың сканерлеу терезесі шамамен үш минут, оны Kaspi белгілейді. Оны кодыңызда тұрақты сан деп жазбаңыз — әрқашан expiresAt өрісінен алыңыз.

curl мысалы

curl -X POST https://api.qut.kz/api/v1/invoices \
  -H 'X-API-Key: qp_live_…' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: order-1001' \
  -d '{
    "amount": 2500,
    "kind": "qr",
    "description": "Тапсырыс №1001",
    "externalOrderId": "1001",
    "customer": { "name": "Айгүл", "phone": "77010000000" },
    "successUrl": "https://site.kz/ok",
    "failUrl": "https://site.kz/fail",
    "metadata": { "branch": "almaty-1", "cart": 17 }
  }'

Node мысалы

const res = await fetch('https://api.qut.kz/api/v1/invoices', {
  method: 'POST',
  headers: {
    'X-API-Key': process.env.QUTPAY_API_KEY,
    'Content-Type': 'application/json',
    'Idempotency-Key': `order-${order.id}`,
  },
  body: JSON.stringify({
    amount: order.total,
    kind: 'qr',
    description: `Тапсырыс №${order.id}`,
    externalOrderId: String(order.id),
    successUrl: 'https://site.kz/ok',
    metadata: { orderId: order.id },
  }),
});

if (!res.ok) {
  const err = await res.json();
  console.error('qutpay', res.status, err.error, err.message);
  throw new Error(err.error);
}

const invoice = await res.json();
redirect(invoice.payUrl);

Қате болғанда error кодына қараңыз, message мәтініне емес: мәтін өзгеруі мүмкін, код өзгермейді.

/orders alias

Ескі интеграциялар үшін POST /api/v1/orders жолы сақталған. Онда merchantRef (яғни externalOrderId) және method: "invoice" өрістері де қабылданады. Жаңа код жазып жатсаңыз, /api/v1/invoices қолданыңыз.

Жиі кездесетін қателер

КодHTTPНе болдыШешімі
invalid_amount422Сома жоқ немесе сан емесОң сан жіберіңіз
amount_must_be_whole_tenge422Тиын жіберілгенБүтін теңге жіберіңіз
amount_too_small / amount_too_large422Сома шектен тысСоманы түзетіңіз
invalid_phone422Телефон пішімі бөлек7XXXXXXXXXX, 11 сан, + және бос орынсыз
phone_required422kind: phone, бірақ телефон жоқcustomer.phone қосыңыз
invalid_kind422Белгісіз түрqr немесе phone
invalid_url422successUrl/failUrl дұрыс емесТолық http(s) адрес жазыңыз
unauthorized401Кілт жоқ немесе жарамсызX-API-Key тақырыбын тексеріңіз
insufficient_scope403Кілтте invoices:write жоқКабинеттен scope қосыңыз
kaspi_session_expired409Кассир байланысы үзілгенҚайта байланыстырыңыз
tariff_limit_reached429Айлық лимит біттіТарифтер және лимиттер
invoice_create_failed502Kaspi счётты қабылдамадыӨсіп отыратын кідіріспен қайталаңыз

Толық тізім: Қателер каталогы.

Шекті жағдайлар

Жиі қойылатын сұрақтар

payUrl мен deepLink айырмашылығы неде? payUrl — браузерде ашылатын төлем беті, кез келген құрылғыда жұмыс істейді. deepLink — Kaspi қосымшасын тікелей ашады, телефонда ыңғайлы.

Счёттың күйін қалай білемін? Webhook арқылы немесе GET /api/v1/invoices/{id} сұрауымен. Қайсысын қашан: Webhook пен күйді сұрау.

metadata ішіне не жазуға болады? Кез келген JSON: нүкте нөмірі, себет идентификаторы, ұяшық нөмірі. Ол webhook-та да, күй сұрауында да сол күйінде қайтады.

Счёт жасалғаннан кейін сомасын өзгертуге бола ма? Жоқ. Счётты болдырып, жаңасын жасаңыз.

Sandbox-та да осы өрістер жүре ме? Иә, бірдей. Айырмашылығы — Kaspi шақырылмайды, төлемді өзіңіз симуляциялайсыз.

Байланысты мақалалар

QR счёт пен телефонға счёт — қайсысын таңдау керекЕкі счёт түрінің толық салыстыруы: kind мәні, клиент не істейді, нөмір керек пе, сипаттама мен сома шектеулері, мерзімі және қай сценарийге қайсысы келеді.Идемпоттылық: қайталаудан қорғануIdempotency-Key тақырыбы қалай жұмыс істейді, кілтті қалай құру керек, externalOrderId-дің рөлі неде, webhook өңдеуде және қайтаруда қайталанудан қалай сақтану керек.Счёттың өмірлік цикліСчёттың барлық күйлері мен ауысулары, қай күйде қандай webhook оқиғасы келеді, қайсысы ашық және қайсысы төленген деп есептеледі, кеш келген төлемді қалай өңдеу керек.Топтап счёт жасау — бір сұрауда 100 счётқа дейінPOST /api/v1/invoices/bulk әдісі: бір сұрауда 1-100 счёт, әр элемент бөлек тексеріледі, жауап құрылымы, қателерді элемент бойынша өңдеу, идемпоттылық және тариф лимитіне әсері.Қателер каталогы — API не қайтарады және не істеу керекQut Pay API-інің барлық негізгі қате кодтары топтап берілген: авторизация, Kaspi байланысы, счёт, қайтару, тариф лимиті, webhook, жазылым. Әрқайсысының себебі және шешімі.

Сұрағыңыз қалды ма? WhatsApp +77788813333 · kazprose@gmail.com
Кабинеттен де жазуға болады: Қолдау.

Qut Pay — тәуелсіз сервис, «Kaspi Bank» АҚ-мен аффилирленбеген. Kaspi және Kaspi Pay — құқық иесінің тауар белгілері.