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

Жазылым API — кестеге сай счёт шығару

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

Қысқаша

Жазылым — бұл счётты кестеге сай автоматты шығару. Ақша клиенттің шотынан өздігінен алынбайды: әр кезеңде жаңа счёт жасалады, ол клиентке барады, ал клиент әр төлемді өзі растайды. Сіз үшін автоматтандырылатыны — счётты уақытында шығару және сәтсіз әрекеттерді қайталау.

Ең қысқа мысал:

POST /api/v1/subscriptions
X-API-Key: qp_live_…
Content-Type: application/json

{
  "amount": 9900,
  "interval": "month",
  "every": 1,
  "kind": "phone",
  "customer": { "phone": "77011234567", "name": "Айдана" }
}

Кілтте subscriptions:manage құқығы болуы керек.

Не автоматтандырылады, не автоматтандырылмайды

АвтоматтыҚолмен / клиент арқылы
Счётты кестеге сай жасауКлиент әр счётты өзі төлейді
Сәтсіз әрекетті қайталауСоманы өзгерту — жазылымды өңдеу арқылы
Өткізіп алған кезекті өңдеуТоқтату туралы шешім
Оқиға жіберу (webhook)Ақшаны қайтару

Сондықтан жазылым — есте сақтайтын және уақытында счёт шығаратын кесте, ақша шешіп алатын механизм емес.

Жасау: барлық өрістер

ӨрісТипСипаттама
amountnumber, міндеттіБір кезеңнің сомасы, теңге
intervalday \week \monthАралық бірлігі
everyintegerКратность: interval: month, every: 3 — тоқсан сайын
kindqr \phoneСчёт түрі. phone — клиенттің Kaspi қосымшасына
customer.phone / .name / .emailstringkind: phone болса телефон міндетті
dayOfMonthintegerАйдың қай күні счёт шығады
startAtdate-timeБірінші кезек қашан
maxRunsintegerЕң көп орындалу саны. Жеткенде жазылым жабылады
retryDelaysMinnumber[]Қайталау сатысы, минут. Әдепкі [15, 60, 360], ең көбі 5 мән
misfirePolicyrun_once \skipӨткізіп алған кезекпен не істеу. Әдепкі run_once
misfireAfterMinintegerҚанша минуттан кейін кезек «өткізіп алынды» саналады. Әдепкі 1440
descriptionstringКлиент счётта көреді
metadataobjectКез келген JSON, счётқа көшеді

Жасалған әр счёт metadata.subscriptionId және metadata.run өрістерін алып жүреді — есепте қай жазылымның қай кезегі екенін осыдан білесіз.

Қайталау сатысы

Счёт шығару сәтсіз болуы мүмкін: Kaspi жауап бермеді, кассир байланысы үзілді, тариф лимиті бітті. Ондайда жазылым retryDelaysMin сатысы бойынша қайталайды.

Әдепкі саты [15, 60, 360] — 15 минуттан кейін, сосын 1 сағаттан кейін, сосын 6 сағаттан кейін.

МәнНе болады
[15, 60, 360]Үш қайталау: 15 мин, 1 сағ, 6 сағ
[5, 5, 5, 5, 5]Бес қайталау, әрқайсысы 5 минут сайын (ең көп мән саны — 5)
[]Қайталау жоқ, бірінші сәтсіздікте кезек тасталады

Саты біткенде сол кезек тасталады, бірақ жазылым жабылмайды — кесте келесі кезеңмен жалғаса береді. Сәтсіздік туралы Telegram немесе email хабарламасы келеді.

Өткізіп алу саясаты

Кезек уақытында орындалмай қалуы мүмкін (жазылым тоқтатылып тұрды, ұзақ үзіліс болды). Сонда не істеу керегін misfirePolicy шешеді:

МәнМінезі
run_once (әдепкі)Кешіккен кезек бір рет орындалады, бірнеше өткізілген кезек біреуге жиналады
skipmisfireAfterMin-нен (әдепкі 1440 минут = 1 тәулік) кеш болса, кезек өткізіледі, кесте келесіге көшеді

Клиенттен кешіккен төлемді сұрағыңыз келсе — run_once. Ескірген счёт клиентті шатастырады десеңіз — skip.

Басқару әдістері

ӘдісНе істейді
POST /api/v1/subscriptionsЖаңа жазылым жасайды
GET /api/v1/subscriptionsТізім
GET /api/v1/subscriptions/{id}Біреуі, толық күйімен
PATCH /api/v1/subscriptions/{id}Сома, аралық, саясат сияқты өрістерді өзгертеді
POST /api/v1/subscriptions/{id}/pauseКестені тоқтатады
POST /api/v1/subscriptions/{id}/resumeҚайта қосады
POST /api/v1/subscriptions/{id}/cancelБіржола жабады
POST /api/v1/subscriptions/{id}/runКезектен тыс бір счёт шығарады

resume әдісінің бір нюансы бар:

POST /api/v1/subscriptions/sub_9Qp1/resume
{ "catchUp": true }

catchUp: true десеңіз, тоқтап тұрған кезде өткізіп алған кезек бірден орындалады. Әдепкіде (catchUp жоқ немесе false) кесте жай ғана келесі жоспарлы күннен жалғасады.

Күй өрістері

GET /api/v1/subscriptions/{id} жауабында жазылымның қазіргі жағдайы көрінеді:

ӨрісМағынасы
nextRunAtКелесі счёт қашан шығады
runsҚанша кезек орындалды
failedRunsҚанша кезек сәтсіз аяқталды
retryAttemptАғымдағы кезек бойынша нешінші қайталау жүріп жатыр
lastRunStatusok \retrying \failed \skipped
lastErrorСоңғы қатенің коды
lastInvoiceIdСоңғы жасалған счёт

Жазылым бойынша счёт шықпай жатса, диагностиканы осы өрістерден бастаңыз: lastRunStatus пен lastError себебін бірден көрсетеді. Толығырақ реті: Жазылым бойынша счёт шықпай жатыр.

Кассир

Жазылым қай кассир арқылы жасалғанын есте сақтайды және кейін де сол кассир арқылы счёт шығарады. Осыдан екі салдар шығады:

Қате кодтары

КодHTTPНе болды
invalid_interval422interval day, week немесе month емес
invalid_every422every оң бүтін сан емес
invalid_retry422retryDelaysMin дұрыс емес: 5 мәннен көп немесе теріс сан
invalid_misfire422misfirePolicy run_once не skip емес
invalid_max_runs422maxRuns дұрыс емес
subscription_closed409Жазылым аяқталған немесе тоқтатылған
subscription_not_found404Идентификатор табылмады
insufficient_scope403Кілтте subscriptions:manage жоқ

Оқиғалар

subscription.created — жазылым жасалды, subscription.status — күйі өзгерді. Одан бөлек, жазылым шығарған әр счёт бойынша әдеттегі invoice.created, invoice.paid және басқа оқиғалар келеді. Клиенттің төлегенін invoice.paid арқылы біліп, metadata.subscriptionId бойынша қай жазылымға тиесілі екенін анықтайсыз.

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

Клиент төлемей қойса не болады? Счёт жай ғана төленбей қалады, ол expired күйіне өтеді. Жазылым келесі кезеңде жаңа счёт шығара береді. Қызметке қол жеткізуді тоқтату туралы шешімді өзіңіз қабылдайсыз.

Соманы өзгертуге бола ма? Иә, PATCH арқылы. Жаңа сома келесі кезектен бастап қолданылады.

QR ма, phone ба — қайсысын таңдаған жөн? Жазылымға көбіне phone ыңғайлы: счёт клиенттің Kaspi қосымшасына келеді. Айырмашылығы: QR счёт пен телефонға счёт.

Жазылым бойынша ақшаны қайтаруға бола ма? Иә, әдеттегідей — қайтару жеке счёт бойынша жасалады: Қайтару API.

Sandbox-та сынауға бола ма? Иә. Жазылым жасап, run арқылы кезектен тыс счёт шығарып, төлемді симуляциялап көріңіз.

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

Жазылым бойынша счёт шықпай жатырЖазылым кестеге сай счёт шығармаса, тексеретін алты нәрсе бар: күйі, келесі кезек уақыты, қайталау сатысы, өткізіп алу саясаты, кассир және тариф лимиті. lastRunStatus пен lastError қайдан оқылады.Қателер каталогы — API не қайтарады және не істеу керекQut Pay API-інің барлық негізгі қате кодтары топтап берілген: авторизация, Kaspi байланысы, счёт, қайтару, тариф лимиті, webhook, жазылым. Әрқайсысының себебі және шешімі.Құқықтар (scopes) — кілт нені істей аладыАлты scope-тың толық кестесі: invoices:read, invoices:write, refunds:write, subscriptions:manage, webhooks:manage, partner:manage. Әрқайсысы қай әдістерді ашады, ең аз құқық принципі және insufficient_scope қатесі.QR счёт пен телефонға счёт — қайсысын таңдау керекЕкі счёт түрінің толық салыстыруы: kind мәні, клиент не істейді, нөмір керек пе, сипаттама мен сома шектеулері, мерзімі және қай сценарийге қайсысы келеді.Қайтару API — толық және ішінара қайтаруPOST /invoices/{id}/refund әдісінің толық анықтамасы: сұрау өрістері, толық және ішінара қайтару, сома шектеуі, барлық қате коды, refund_unknown келгенде не істеу керек және қандай оқиғалар жіберіледі.

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

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