Справочник API
REST API на JSON. Все запросы — по HTTPS на https://pay.sezgir.com/api/v1 с секретным ключом в заголовке Authorization: Bearer sk_….
Запросы и ответы
| Аутентификация | Заголовок Authorization: Bearer sk_… или X-API-Key — см. Аутентификация. |
| Тело запроса | JSON с заголовком Content-Type: application/json, до 256 КБ. Для POST без тела не передавайте этот заголовок: пустое тело с ним — ошибка 400. |
| Ответ | Всегда JSON. Ответы не кэшируются (Cache-Control: no-store). |
| Идемпотентность | Заголовок Idempotency-Key у POST /payments и POST /payments/:id/refunds — см. Идемпотентность. |
| Ошибки | Объект { "error": { type, code, message, param } } — см. Ошибки. |
| Лимит | 300 запросов в минуту на ключ. |
Пагинация
Списки возвращаются объектом list и упорядочены от новых к старым. Размер страницы задаёт limit (1–100, по умолчанию 20). Если has_more равно true, запросите следующую страницу с starting_after равным id последнего объекта текущей.
async function* allPayments(params = {}) {
let startingAfter;
while (true) {
const qs = new URLSearchParams({ limit: '100', ...params });
if (startingAfter) qs.set('starting_after', startingAfter);
const res = await fetch(`https://pay.sezgir.com/api/v1/payments?${qs}`, {
headers: { Authorization: `Bearer ${process.env.SEZGIR_API_KEY}` },
});
const page = await res.json();
yield* page.data;
if (!page.has_more) return;
startingAfter = page.data.at(-1).id;
}
}
for await (const p of allPayments({ status: 'succeeded' })) console.log(p.id, p.amount);{
"object": "list",
"data": [
{
"id": "pay_2Nf8kQ1xYbV7cR4tLm9Pa3Ws",
"object": "payment",
"…": "…"
}
],
"has_more": true
}Объект Payment
Платёж — запрос денег у покупателя. Создаётся через API или кабинет, меняет статус по мере оплаты.
idstring- Идентификатор платежа:
pay_и 24 символа. objectstring- Всегда
"payment". livemodebooleantrue— боевой платёж,false— тестовый.project_idstring- Сервис, которому принадлежит платёж,
prj_…. typeenumlink,qrилиinvoice— см. типы платежей.statusenumpending,succeeded,failed,expired,canceled,refunded,partially_refunded. См. жизненный цикл.amountinteger- Сумма в целых тенге.
amount_refundedinteger- Сумма успешных возвратов. Возвраты в обработке не учитываются.
currencystring- Всегда
"KZT". descriptionstring | null- Описание, которое видит покупатель.
phonestring | null- Телефон покупателя в формате
7XXXXXXXXXX. Дляinvoiceзаполнен всегда; для других типов — если вы передали корректный номер. external_idstring | null- Ваш идентификатор заказа.
metadataobject- Ваши данные;
{}, если не переданы. checkout_urlstring- Страница оплаты для покупателя — см. Страница оплаты.
providerobject- Текущая операция у платёжного провайдера. У ссылки меняется с каждой новой попыткой оплаты.
name—"kaspi"или"test";operation_id— номер операции в Kaspi илиnull, пока операции нет;kind—"qr","invoice"илиnull;status— исходный статус операции в Kaspi, только для справки: опирайтесь наstatusплатежа;qr_url— ссылка для QR (https://pay.kaspi.kz/pay/…; в тестовом режиме — страница оплаты);qr_expires_at— когда истекает текущий QR. failure_reasonstring | null- Почему платёж не прошёл, истёк или отменён; для ссылки — причина последней неудачной попытки; при requires_review — что нужно проверить.
requires_reviewboolean- Kaspi не подтвердил исход операции, нужна ручная проверка — см. requires_review.
expires_atstring- Срок оплаты, ISO 8601.
paid_atstring | null- Когда Kaspi подтвердил оплату.
canceled_atstring | null- Когда платёж отменён вами или покупателем.
created_atstring- Когда платёж создан.
{
"id": "pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"object": "payment",
"livemode": true,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"type": "qr",
"status": "succeeded",
"amount": 2500,
"amount_refunded": 0,
"currency": "KZT",
"description": "Кофе и круассан",
"phone": null,
"external_id": "pos-77-1029",
"metadata": {},
"checkout_url": "https://pay.sezgir.com/pay/pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"provider": {
"name": "kaspi",
"operation_id": "18734512",
"kind": "qr",
"status": "Processed",
"qr_url": "https://pay.kaspi.kz/pay/fT9kq2Lx7mWc",
"qr_expires_at": "2026-10-25T10:05:41.000Z"
},
"failure_reason": null,
"requires_review": false,
"expires_at": "2026-10-25T10:06:41.000Z",
"paid_at": "2026-10-25T10:03:12.881Z",
"canceled_at": null,
"created_at": "2026-10-25T10:02:41.204Z"
}Объект Refund
Возврат части или всей суммы оплаченного платежа.
idstring- Идентификатор возврата:
re_и 24 символа. objectstring- Всегда
"refund". payment_idstring- Платёж, по которому сделан возврат.
amountinteger- Сумма возврата в целых тенге.
statusenumpending— результат ещё неизвестен,succeeded— деньги возвращены,failed— возврат не выполнен.requires_actionboolean- Kaspi не ответил, администратор должен подтвердить результат — см. ответ 202.
reasonstring | null- Причина возврата, которую вы передали.
failure_reasonstring | null- Почему возврат не выполнен или что нужно проверить.
created_atstring- Когда возврат создан.
{
"id": "re_5KdW2pQ9sXbN7mT1vLc8Rf4Z",
"object": "refund",
"payment_id": "pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"amount": 1000,
"status": "succeeded",
"requires_action": false,
"reason": "Нет круассанов",
"failure_reason": null,
"created_at": "2026-10-25T12:40:19.007Z"
}Объект Event
Событие — запись о том, что произошло с платежом или возвратом. Те же объекты приходят в вебхуках.
idstring- Идентификатор события:
evt_и 24 символа. Используйте для дедупликации. objectstring- Всегда
"event". typestring- Тип события — см. список.
livemodeboolean- Режим, в котором произошло событие.
project_idstring- Сервис.
createdinteger- Время события, Unix-секунды.
data.objectobject- Снимок платежа или возврата на момент события. Актуальное состояние может отличаться.
{
"id": "evt_3Lm8Qz1VbN6cX2wR9tKp4HsD",
"object": "event",
"type": "payment.succeeded",
"livemode": true,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"created": 1792922592,
"data": {
"object": {
"id": "pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"object": "payment",
"livemode": true,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"type": "qr",
"status": "succeeded",
"amount": 2500,
"amount_refunded": 0,
"currency": "KZT",
"description": "Кофе и круассан",
"phone": null,
"external_id": "pos-77-1029",
"metadata": {},
"checkout_url": "https://pay.sezgir.com/pay/pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"provider": {
"name": "kaspi",
"operation_id": "18734512",
"kind": "qr",
"status": "Processed",
"qr_url": "https://pay.kaspi.kz/pay/fT9kq2Lx7mWc",
"qr_expires_at": "2026-10-25T10:05:41.000Z"
},
"failure_reason": null,
"requires_review": false,
"expires_at": "2026-10-25T10:06:41.000Z",
"paid_at": "2026-10-25T10:03:12.881Z",
"canceled_at": null,
"created_at": "2026-10-25T10:02:41.204Z"
}
}
}Проверить ключ
/meПроверяет ключ и показывает, к какому сервису и кассиру он относится. Удобно вызывать при старте приложения.
api_key: режим ключа (livemode), сервис (project) и кассир Kaspi, назначенный сервису (kaspi_cashier: name, organization, status — active, needs_reauth или disconnected; null, если кассир не назначен или ключ тестовый).curl "https://pay.sezgir.com/api/v1/me" \
-H "Authorization: Bearer $SEZGIR_API_KEY"{
"object": "api_key",
"livemode": true,
"project": {
"id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"name": "Интернет-магазин",
"icon": "🛍️"
},
"kaspi_cashier": {
"name": "Основная касса",
"organization": "ТОО «Пример»",
"status": "active"
}
}Создать платёж
/paymentsСоздаёт платёж и, для qr и invoice, сразу операцию в Kaspi. Поддерживает Idempotency-Key.
requires_review: true — счёт мог дойти до покупателя. Не выставляйте второй.typeenumобязательныйlink— платёжная ссылка,qr— QR-код Kaspi,invoice— счёт в Kaspi.kz по телефону.amountintegerобязательный- Сумма в целых тенге, от 1 до 50 000 000.
phonestringобязателен для invoice- Номер покупателя в Kaspi, до 30 символов, любой казахстанский формат:
+7 701 234 56 78,87012345678,7012345678. descriptionstring- Описание для покупателя, до 500 символов. Для счёта передаётся в Kaspi как комментарий.
external_idstring- Ваш идентификатор заказа, до 200 символов. Не обязан быть уникальным.
metadataobject- До 50 ключей длиной до 40 символов; значения — строки до 500 символов, числа или boolean. Покупателю не показываются.
expires_inintegerтолько link- Срок жизни ссылки в секундах: от
300до2592000(30 дней). По умолчанию604800(7 дней). Счёт живёт 24 часа, QR — срок, заданный Kaspi.
201 и объект Payment в статусе pending. Для qr в ответе уже есть provider.qr_url; для invoice счёт уже отправлен покупателю. Ошибки: 400 — неверные параметры (для счёта без телефона — param: "phone"); 503 provider_unavailable — боевому сервису не назначен кассир или Kaspi недоступен; 502 — Kaspi отказал.curl "https://pay.sezgir.com/api/v1/payments" \
-H "Authorization: Bearer $SEZGIR_API_KEY" \
-H "Idempotency-Key: 9f1c2a4e-7b3d-4e8a-a1f0-5c6d7e8f9a0b" \
-H "Content-Type: application/json" \
-d '{
"type": "link",
"amount": 15000,
"description": "Заказ №1042",
"external_id": "order_1042",
"metadata": {
"order_id": 1042,
"channel": "web"
}
}'{
"id": "pay_2Nf8kQ1xYbV7cR4tLm9Pa3Ws",
"object": "payment",
"livemode": false,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"type": "link",
"status": "pending",
"amount": 15000,
"amount_refunded": 0,
"currency": "KZT",
"description": "Заказ №1042",
"phone": null,
"external_id": "order_1042",
"metadata": {
"order_id": 1042,
"channel": "web"
},
"checkout_url": "https://pay.sezgir.com/pay/pay_2Nf8kQ1xYbV7cR4tLm9Pa3Ws",
"provider": {
"name": "test",
"operation_id": null,
"kind": null,
"status": null,
"qr_url": null,
"qr_expires_at": null
},
"failure_reason": null,
"requires_review": false,
"expires_at": "2026-11-01T09:14:03.512Z",
"paid_at": null,
"canceled_at": null,
"created_at": "2026-10-25T09:14:03.512Z"
}Получить платёж
/payments/:idВозвращает текущее состояние платежа.
idstringобязательныйв пути- Идентификатор платежа,
pay_….
404, если платёж не найден в этом сервисе и режиме.curl "https://pay.sezgir.com/api/v1/payments/pay_4Vb9Kq2Lm7Xc1Zt8Rn5Ws3Pd" \
-H "Authorization: Bearer $SEZGIR_API_KEY"{
"id": "pay_4Vb9Kq2Lm7Xc1Zt8Rn5Ws3Pd",
"object": "payment",
"livemode": true,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"type": "invoice",
"status": "pending",
"amount": 48900,
"amount_refunded": 0,
"currency": "KZT",
"description": "Доставка, заказ 5521",
"phone": "77012345678",
"external_id": "order_5521",
"metadata": {
"courier": "Алматы-3"
},
"checkout_url": "https://pay.sezgir.com/pay/pay_4Vb9Kq2Lm7Xc1Zt8Rn5Ws3Pd",
"provider": {
"name": "kaspi",
"operation_id": "55120934",
"kind": "invoice",
"status": "RemotePaymentCreated",
"qr_url": null,
"qr_expires_at": null
},
"failure_reason": null,
"requires_review": false,
"expires_at": "2026-10-26T11:20:00.000Z",
"paid_at": null,
"canceled_at": null,
"created_at": "2026-10-25T11:20:00.000Z"
}Список платежей
/paymentsВозвращает платежи сервиса в режиме ключа. Фильтры можно сочетать.
limitinteger- Сколько объектов вернуть: от 1 до 100. По умолчанию 20.
starting_afterstring- Курсор:
idпоследнего объекта предыдущей страницы. Вернутся объекты, созданные раньше него. Неизвестный id или id из другого сервиса либо режима — ошибка400сparam: "starting_after". statusenum- Только платежи с этим статусом:
pending,succeeded,failed,expired,canceled,refunded,partially_refunded. typeenum- Только
link,qrилиinvoice. external_idstring- Только платежи с этим external_id (точное совпадение).
list с платежами от новых к старым — см. Пагинация.curl "https://pay.sezgir.com/api/v1/payments?status=succeeded&limit=2" \
-H "Authorization: Bearer $SEZGIR_API_KEY"{
"object": "list",
"data": [
{
"id": "pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"object": "payment",
"livemode": true,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"type": "qr",
"status": "succeeded",
"amount": 2500,
"amount_refunded": 0,
"currency": "KZT",
"description": "Кофе и круассан",
"phone": null,
"external_id": "pos-77-1029",
"metadata": {},
"checkout_url": "https://pay.sezgir.com/pay/pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"provider": {
"name": "kaspi",
"operation_id": "18734512",
"kind": "qr",
"status": "Processed",
"qr_url": "https://pay.kaspi.kz/pay/fT9kq2Lx7mWc",
"qr_expires_at": "2026-10-25T10:05:41.000Z"
},
"failure_reason": null,
"requires_review": false,
"expires_at": "2026-10-25T10:06:41.000Z",
"paid_at": "2026-10-25T10:03:12.881Z",
"canceled_at": null,
"created_at": "2026-10-25T10:02:41.204Z"
},
{
"id": "pay_2Nf8kQ1xYbV7cR4tLm9Pa3Ws",
"object": "payment",
"livemode": false,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"type": "link",
"status": "succeeded",
"amount": 15000,
"amount_refunded": 0,
"currency": "KZT",
"description": "Заказ №1042",
"phone": null,
"external_id": "order_1042",
"metadata": {
"order_id": 1042,
"channel": "web"
},
"checkout_url": "https://pay.sezgir.com/pay/pay_2Nf8kQ1xYbV7cR4tLm9Pa3Ws",
"provider": {
"name": "test",
"operation_id": null,
"kind": null,
"status": null,
"qr_url": null,
"qr_expires_at": null
},
"failure_reason": null,
"requires_review": false,
"expires_at": "2026-11-01T09:14:03.512Z",
"paid_at": "2026-10-25T09:16:47.020Z",
"canceled_at": null,
"created_at": "2026-10-25T09:14:03.512Z"
}
],
"has_more": true
}Отменить платёж
/payments/:id/cancelОтменяет ожидающий оплаты платёж. Счёт отменяется и в Kaspi. Выданный QR отозвать в Kaspi нельзя: если покупатель всё же оплатит его, платёж станет succeeded — см. поздняя оплата.
idstringобязательныйв пути- Идентификатор платежа,
pay_….
409 payment_not_pending — платёж уже не в статусе pending; 503 provider_unavailable — Kaspi недоступен при отмене счёта (платёж остаётся pending).curl -X POST "https://pay.sezgir.com/api/v1/payments/pay_2Nf8kQ1xYbV7cR4tLm9Pa3Ws/cancel" \
-H "Authorization: Bearer $SEZGIR_API_KEY"{
"id": "pay_2Nf8kQ1xYbV7cR4tLm9Pa3Ws",
"object": "payment",
"livemode": false,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"type": "link",
"status": "canceled",
"amount": 15000,
"amount_refunded": 0,
"currency": "KZT",
"description": "Заказ №1042",
"phone": null,
"external_id": "order_1042",
"metadata": {
"order_id": 1042,
"channel": "web"
},
"checkout_url": "https://pay.sezgir.com/pay/pay_2Nf8kQ1xYbV7cR4tLm9Pa3Ws",
"provider": {
"name": "test",
"operation_id": null,
"kind": null,
"status": null,
"qr_url": null,
"qr_expires_at": null
},
"failure_reason": "Отменён продавцом",
"requires_review": false,
"expires_at": "2026-11-01T09:14:03.512Z",
"paid_at": null,
"canceled_at": "2026-10-25T09:40:11.385Z",
"created_at": "2026-10-25T09:14:03.512Z"
}Создать возврат
/payments/:id/refundsВозвращает покупателю всю сумму или её часть. Платёж должен быть в статусе succeeded или partially_refunded. Поддерживает Idempotency-Key — передавайте его обязательно.
{
"id": "re_5KdW2pQ9sXbN7mT1vLc8Rf4Z",
"object": "refund",
"payment_id": "pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"amount": 1000,
"status": "pending",
"requires_action": true,
"reason": "Нет круассанов",
"failure_reason": "Kaspi не ответил — проверьте возврат в Kaspi Pay и подтвердите результат",
"created_at": "2026-10-25T12:40:19.007Z"
}idstringобязательныйв пути- Идентификатор платежа,
pay_…. amountinteger- Сумма возврата в целых тенге, не больше остатка (amount − amount_refunded − суммы возвратов в обработке). По умолчанию — весь остаток.
reasonstring- Причина возврата, до 500 символов.
201 и Refund со статусом succeeded — возврат выполнен. 202 и Refund со статусом pending и requires_action: true — Kaspi не ответил или результат не удалось подтвердить, итог придёт вебхуком. Ошибки: 400 — сумма вне допустимого диапазона; 409 payment_not_refundable, 409 already_refunded; 502 с code kaspi_… — Kaspi отказал; 503 provider_unavailable.curl "https://pay.sezgir.com/api/v1/payments/pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s/refunds" \
-H "Authorization: Bearer $SEZGIR_API_KEY" \
-H "Idempotency-Key: refund-pos-77-1029-1" \
-H "Content-Type: application/json" \
-d '{
"amount": 1000,
"reason": "Нет круассанов"
}'{
"id": "re_5KdW2pQ9sXbN7mT1vLc8Rf4Z",
"object": "refund",
"payment_id": "pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"amount": 1000,
"status": "succeeded",
"requires_action": false,
"reason": "Нет круассанов",
"failure_reason": null,
"created_at": "2026-10-25T12:40:19.007Z"
}Возвраты платежа
/payments/:id/refundsВозвращает все возвраты одного платежа, включая неуспешные и ожидающие подтверждения.
idstringобязательныйв пути- Идентификатор платежа,
pay_….
list со всеми возвратами платежа от новых к старым, без пагинации (has_more всегда false). 404, если платёж не найден.curl "https://pay.sezgir.com/api/v1/payments/pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s/refunds" \
-H "Authorization: Bearer $SEZGIR_API_KEY"{
"object": "list",
"data": [
{
"id": "re_5KdW2pQ9sXbN7mT1vLc8Rf4Z",
"object": "refund",
"payment_id": "pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"amount": 1000,
"status": "succeeded",
"requires_action": false,
"reason": "Нет круассанов",
"failure_reason": null,
"created_at": "2026-10-25T12:40:19.007Z"
}
],
"has_more": false
}Получить возврат
/refunds/:idВозвращает текущее состояние возврата — например, чтобы проверить исход возврата после ответа 202.
idstringобязательныйв пути- Идентификатор возврата,
re_….
404, если возврат не найден в этом сервисе и режиме.curl "https://pay.sezgir.com/api/v1/refunds/re_5KdW2pQ9sXbN7mT1vLc8Rf4Z" \
-H "Authorization: Bearer $SEZGIR_API_KEY"{
"id": "re_5KdW2pQ9sXbN7mT1vLc8Rf4Z",
"object": "refund",
"payment_id": "pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"amount": 1000,
"status": "succeeded",
"requires_action": false,
"reason": "Нет круассанов",
"failure_reason": null,
"created_at": "2026-10-25T12:40:19.007Z"
}Список событий
/eventsВозвращает события сервиса в режиме ключа — включая те, что не удалось доставить вебхуком. Используйте для сверки.
limitinteger- Сколько объектов вернуть: от 1 до 100. По умолчанию 20.
starting_afterstring- Курсор:
idпоследнего объекта предыдущей страницы. Вернутся объекты, созданные раньше него. Неизвестный id или id из другого сервиса либо режима — ошибка400сparam: "starting_after". typestring- Только события этого типа, например
payment.succeeded(точное совпадение).
list с событиями от новых к старым — см. Пагинация.curl "https://pay.sezgir.com/api/v1/events?type=payment.succeeded&limit=1" \
-H "Authorization: Bearer $SEZGIR_API_KEY"{
"object": "list",
"data": [
{
"id": "evt_3Lm8Qz1VbN6cX2wR9tKp4HsD",
"object": "event",
"type": "payment.succeeded",
"livemode": true,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"created": 1792922592,
"data": {
"object": {
"id": "pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"object": "payment",
"livemode": true,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"type": "qr",
"status": "succeeded",
"amount": 2500,
"amount_refunded": 0,
"currency": "KZT",
"description": "Кофе и круассан",
"phone": null,
"external_id": "pos-77-1029",
"metadata": {},
"checkout_url": "https://pay.sezgir.com/pay/pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"provider": {
"name": "kaspi",
"operation_id": "18734512",
"kind": "qr",
"status": "Processed",
"qr_url": "https://pay.kaspi.kz/pay/fT9kq2Lx7mWc",
"qr_expires_at": "2026-10-25T10:05:41.000Z"
},
"failure_reason": null,
"requires_review": false,
"expires_at": "2026-10-25T10:06:41.000Z",
"paid_at": "2026-10-25T10:03:12.881Z",
"canceled_at": null,
"created_at": "2026-10-25T10:02:41.204Z"
}
}
}
],
"has_more": true
}Получить событие
/events/:idВозвращает одно событие. Удобно, чтобы перепроверить вебхук по Sezgir-Event-Id, — хотя проверка подписи надёжнее и быстрее.
idstringобязательныйв пути- Идентификатор события,
evt_….
404, если событие не найдено.curl "https://pay.sezgir.com/api/v1/events/evt_3Lm8Qz1VbN6cX2wR9tKp4HsD" \
-H "Authorization: Bearer $SEZGIR_API_KEY"{
"id": "evt_3Lm8Qz1VbN6cX2wR9tKp4HsD",
"object": "event",
"type": "payment.succeeded",
"livemode": true,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"created": 1792922592,
"data": {
"object": {
"id": "pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"object": "payment",
"livemode": true,
"project_id": "prj_7HcTq2LwZ9mRk4VbN1sXe8Dy",
"type": "qr",
"status": "succeeded",
"amount": 2500,
"amount_refunded": 0,
"currency": "KZT",
"description": "Кофе и круассан",
"phone": null,
"external_id": "pos-77-1029",
"metadata": {},
"checkout_url": "https://pay.sezgir.com/pay/pay_8Rt2XvL5nQ1mZ7cK4wB9pJ3s",
"provider": {
"name": "kaspi",
"operation_id": "18734512",
"kind": "qr",
"status": "Processed",
"qr_url": "https://pay.kaspi.kz/pay/fT9kq2Lx7mWc",
"qr_expires_at": "2026-10-25T10:05:41.000Z"
},
"failure_reason": null,
"requires_review": false,
"expires_at": "2026-10-25T10:06:41.000Z",
"paid_at": "2026-10-25T10:03:12.881Z",
"canceled_at": null,
"created_at": "2026-10-25T10:02:41.204Z"
}
}
}Не нашли нужного? Создание вебхуков, ключей и управление кассирами Kaspi доступны только в кабинете. Публичный API работает с платежами, возвратами и событиями.