Kaspi Pay REST API арқылы — сайттар мен SaaS үшін интеграция

Үш HTTP-сұраныс: шот жасау, webhook алу, ақшаны қайтару. Сатудан пайыз жоқ, ақша сіздің Kaspi Business-ке.

API не істейді

Біздің сервис Kaspi POS құжатталмаған протоколын таза REST API-ға айналдырады. Сіздің сервер үш типті сұраныс жібереді: POST /invoices — шот жасау, webhook қабылдау — статус алу, POST /refunds — ақшаны қайтару. Қалғаны — кезектер, ретрайлар, шифрлеу, RSA/ECDH қолтаңбалары — біздің жақта автоматты жұмыс істейді.

Ол қалай жұмыс істейді — POST-тан PAID-ке дейін 15 секунд

Сіздің сервер клиенттің сомасы мен телефон нөмірімен POST /api/v1/invoices шақырады. Біз сұранысты қолтаңбалап, Kaspi-ға жібереміз. Клиент Kaspi.kz қосымшасында push алады — бір «Төлеу» түймесі. Ақша тікелей сіздің Kaspi Business шотыңызға түседі. Сіздің сервер соңғы paid статусымен HMAC-қолтаңбаланған invoice.status_changed webhook-ын алады.

Неге сатудан пайыз жоқ

Біз банк-эквайер емеспіз. Ақша тікелей клиенттен сіздің Kaspi Business шотыңызға түседі — біз тек протоколды автоматтандырамыз. Біздің табыс — айына 10 000 ₸-ден бастап тіркелген жазылым. Айналым 10 млн ₸ немесе 1 млн — тариф өзгермейді. Бұл орташа және жоғары чек кезінде классикалық эквайрингтен түбегейлі арзан.

Нақты транзакциясыз Sandbox

Тестілік kpa_test_* кілттері нақты Kaspi-төлемдерін жүргізбейді — бірақ API жауаптарының құрылымы продакшенге сәйкес келеді, ал webhook-тар сіздің sandbox URL-ыңызға түседі. CI, интеграциялық тесттер және нақты клиенттерге қауіп келтірмей жергілікті әзірлеу үшін керемет.

Webhooks: HMAC-SHA256, ретрайлар, dead-letter

Әр хабарлама raw body үстінде HMAC-SHA256 арқылы қолтаңбаланған. X-Webhook-Signature: sha256=<hex> тақырыбы. 2xx алмасаңыз — біз экспоненциалды backoff-пен (0, 5, 30 сек, 2, 10, 30 мин) қайталаймыз. 6 талпыныстан кейін — dead-letter, дашбордта қолжетімді. Секретті өзіңіз орнатасыз және даунтаймсыз ротациялай аласыз.

Код мысалдары

Мысал: шот жасау (curl)

curl -X POST https://pos.satushi.me/api/v1/invoices \
  -H 'X-API-Key: kpa_live_...' \
  -H 'Content-Type: application/json' \
  -d '{
    "amount": 15000,
    "phone_number": "87001234567",
    "comment": "Тапсырыс #42"
  }'

Мысал: Node.js

const res = await fetch('https://pos.satushi.me/api/v1/invoices', {
  method: 'POST',
  headers: {
    'X-API-Key': process.env.KPA_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    amount: 15000,
    phone_number: '87001234567',
  }),
});
const invoice = await res.json();

Мысал: Python

import requests

res = requests.post(
    'https://pos.satushi.me/api/v1/invoices',
    headers={'X-API-Key': KPA_KEY},
    json={'amount': 15000, 'phone_number': '87001234567'},
)
invoice = res.json()

API-интеграциялар үшін тарифтер

Үш тариф: Старт 10 000 ₸/ай (күніне 30 шотқа дейін), Бизнес 25 000 ₸/ай, Про 100 000 ₸/ай. Алғашқы 7 күн тегін, картаны байланыстырусыз.

Тарифтерді қарау

Әзірлеуші сұрақтары

Қандай rate limit?
Шектеу — күніне жасалатын шоттар саны бойынша (тарифпен белгіленеді). Дереу HTTP rate-limit жоқ — API burst-сұраныстарды бөгемейді. Шығыс webhook үшін бөлек ретрай кестесі: 43 минут ішінде 6 талпыныс, содан кейін dead-letter.
SLA бар ма?
Про тарифінде — 99.5% uptime SLA және жұмыс уақытында (10:00–19:00 Астана) жауап беру уақыты. Старт пен Бизнесте — best-effort, формалды кепілдіксіз.
Инвойстың қандай статустары бар?
pending, cancelling, paid, cancelled, expired, partially_refunded, refunded. Толық статус ромбы OpenAPI 3.0-де (/docs/openapi.yaml) сипатталған.
API-кілттер қалай сақталады?
API-кілттер (kpa_live_*, kpa_test_*) жасау кезінде бір рет көрсетіледі — оларды өзіңіз сақтауыңыз керек. Біз тек SHA-256 хеш сақтаймыз. Kaspi-сессия TOKEN_SECRET_KEY кілтімен AES-256-GCM арқылы шифрланады және тек сервер жадында тіршілік етеді.
Подпискаларды қабылдай ала ма?
Иә. Кезеңмен POST /api/v1/subscriptions (daily, weekly, biweekly, monthly, quarterly, yearly). Біз кесте бойынша автоматты түрде шоттарды шығарамыз және нәтижемен webhook жібереміз.
Kaspi Business-ті кім иеленеді?
Сіз. Біз сіздің Kaspi-аккаунтыңызға SMS-растау арқылы «Кассир» ретінде қосыламыз. Клиенттердің ақшасы сізге тікелей түседі — бізде оған қол жетімді емес және оны қайта бағыттай алмаймыз.