Это Partner API ApiPay — для платформ и CRM, подключающих СВОИХ клиентов.

Если вы мерчант и хотите принимать платежи через Kaspi Pay в своём бизнесе — вам нужна обычная документация:

Partner API использует X-Partner-Key и предназначен для server-to-server интеграций, когда вы онбордите сторонних мерчантов в ApiPay от своего имени.

Partner API ApiPay

Server-to-server API для партнёров-интеграторов (CRM, маркетплейсы, white-label-кассы). Партнёр онбордит своих мерчантов, авторизует их Kaspi-кассы и выдаёт им платёжный ключ X-API-Key — всё программно, из своей системы.

Платёжные операции, webhook-события и проверка HMAC живут в документации для мерчантов (/docs) и здесь не дублируются. Привязку кассира перед боевым подключением можно прогнать в песочнице партнёра — детерминированно, без единого реального вызова Kaspi и без SMS.

Для разработчиков CRM и платформ

Если вы разрабатываете CRM-систему, платёжную платформу, агрегатор или white-label-кассу и хотите подключать своих клиентов к приёму Kaspi Pay-платежей — Partner API ApiPay создан именно для этого. Вы получаете единый X-Partner-Key → создаёте организацию мерчанта → авторизуете кассира через Kaspi-SMS → выпускаете её X-API-Key. Дальше мерчант создаёт счета по документации для мерчантов /docs.

Оформить партнёрский статус →

1. Базовые URL

ПоверхностьБазовый URL
Partner API (онбординг, выдача X-API-Key)https://apipay.kz/api/partner
Платёжный API мерчанта (счета, lookup, webhooks) — см. /docshttps://bpapi.bazarbay.site/api/v1

2. Ключи аутентификации

Релевантны API ровно два ключа.

Ключ / заголовокКто владеетДля чего
X-Partner-Key партнёр server-to-server: создание организаций мерчантов, авторизация кассира, мониторинг своих организаций, выдача X-API-Key мерчанту. Берётся в партнёрском кабинете.
X-API-Key конкретный мерчант (вы выдаёте ключ через Partner API) платёжные операции от имени мерчанта (счета, статусы, возвраты, lookup) — описаны в документации для мерчантов /docs, здесь не дублируются.

X-Partner-Key выдаётся в партнёрском кабинете; ротация ключа и переключение sandbox/production — тоже в кабинете (фронт), не через API.

3. Partner API (X-Partner-Key)

Префикс /api/partner. Лимит группы — 120 req/min на партнёра. Server-to-server: создавайте организации мерчантов, авторизуйте кассира, мониторьте свои организации и выдавайте X-API-Key мерчанту.

POST /api/partner/organizations — создать организацию мерчанта

Идемпотентно по external_id — повторный POST вернёт существующую org. Лимит 10/min. Ответ 201 (создана) / 200 (идемпотентный повтор).

ПолеТипОбязательноеОписание
has_catalogbooleanнетСоздать организацию с каталогом товаров
external_idstringнетВаш идентификатор клиента в CRM (ключ идемпотентности)
curl -X POST https://apipay.kz/api/partner/organizations \
  -H 'X-Partner-Key: <X-Partner-Key>' -H 'Content-Type: application/json' \
  -d '{"has_catalog":false,"external_id":"crm-client-42"}'
{ "success": true, "organization": {
  "id": 50, "name": "ТОО Example", "idn": "123456789012",
  "status": "verified", "sandbox_mode": true, "has_catalog": false,
  "kaspi_connected": true, "session_mode": "self", "external_id": "crm-client-42",
  "payment_status": "active", "has_active_payment": true,
  "created_at": "2026-05-16T10:00:00+00:00" } }

GET /api/partner/organizations — список организаций (мониторинг)

Мониторинг своих организаций: список с пагинацией. Query: per_page (1–100, def 25), page (def 1).

{ "success": true, "organizations": ["<card>"], "current_page": 1,
  "per_page": 25, "total": 42, "last_page": 2 }

GET /api/partner/organizations/{id} — карточка организации

Получить карточку конкретной организации. → { "success": true, "organization": <card> }

DELETE /api/partner/organizations/{id} — отвязать организацию

Деактивирует все API-ключи org и делает soft-delete. → { "success": true }

POST /api/partner/organizations/{id}/api-key — выдать X-API-Key мерчанту

Создать/перегенерировать ключ мерчанта + webhook. webhook_url проходит SSRF-валидацию (приватные IP → 422). Идемпотентно (повтор = перегенерация). Дальше мерчант работает этим ключом по документации для мерчантов (/docs).

ПолеТипОбязательноеОписание
namestringнетПроизвольное название ключа
webhook_urlstringдаURL для webhook-уведомлений мерчанта
webhook_secretstringнетСекрет подписи (генерируется, если не указан)
key и webhook_secret показываются ОДИН раз — сохраните их при получении.
curl -X POST https://apipay.kz/api/partner/organizations/501/api-key \
  -H 'X-Partner-Key: <X-Partner-Key>' -H 'Content-Type: application/json' \
  -d '{"name":"CRM key","webhook_url":"https://crm.example.kz/sub/501/webhook"}'
{ "success": true, "key": "<X-API-Key, один раз>", "key_id": 900,
  "webhook_url": "https://crm.example.kz/sub/501/webhook",
  "webhook_secret": "whsec_yyyy", "is_org_default": true, "regenerated": false }

Авторизация кассира Kaspi (3 шага)

Префикс /api/partner/organizations/{id}/kaspi-auth. process_id живёт 10 минут — шаги send-phone и verify-otp нужно выполнить в этом окне. Боевая org доступна только production-партнёру (иначе 403 production_access_required); тестовая org всегда идёт мок-путём.

POST .../kaspi-auth/init — Шаг 1

Инициировать авторизацию кассира Kaspi. Body {}.

{ "success": true, "process_id": "SANDBOX-<uuid>" }

POST .../kaspi-auth/send-phone — Шаг 2

Body { "cashier_phone": "7XXXXXXXXXX" }. Kaspi отправляет SMS на номер кассира. Успех → { "success": true }.

Ошибки: invalid_phone (422 — неверный формат), not_cashier (422 — номер не кассир Kaspi), no_process (409 — нет активного процесса: вызовите init / он истёк), sms_failed (502), org_claim_conflict (409 — касса уже привязана к другому владельцу). В sandbox not_cashier и sms_failed эмулируются магическими номерами (см. раздел Sandbox).

POST .../kaspi-auth/verify-otp — Шаг 3

Body { "otp": "0000" } (4–6 цифр). Подтвердить код из SMS.

GET .../kaspi-auth/status — статус

Текущий статус авторизации кассира. status: pending (процесс идёт) | active (касса привязана).

{ "success": true, "status": "active", "kaspi_connected": true, "expires_at": "..." }

4. Карточка организации <card>

ПолеТипОписание
idnumberID организации
namestringНазвание
idnstringБИН/ИИН
statusstringpending | verified | suspended
sandbox_modebooleanРежим песочницы
has_catalogbooleanЕсть каталог
kaspi_connectedbooleanКасса Kaspi подключена
session_modestringРежим привязки (self)
external_idstringВаш CRM-идентификатор
payment_statusstringnone | active | expired
payment_expires_atstring|nullКогда истекает тариф
has_active_paymentbooleanАктивная оплата
created_atstringДата создания
{
  "id": 50, "name": "ТОО Example", "idn": "123456789012",
  "status": "pending|verified|suspended",
  "sandbox_mode": false, "has_catalog": false, "kaspi_connected": true,
  "session_mode": "self", "external_id": "crm-client-42",
  "payment_status": "none|active|expired",
  "payment_expires_at": "2026-06-16T00:00:00+00:00",
  "has_active_payment": false, "created_at": "2026-05-16T10:00:00+00:00"
}

5. Sandbox — отладка привязки кассира

Песочница партнёра детерминированно эмулирует привязку кассира: ни одного реального вызова Kaspi, ни одной SMS. Магические номера на send-phone подменяют ответ Kaspi на фиксированный; любой другой валидный номер 7XXXXXXXXXX трактуется как «обычный» (success). Тестовая организация архитектурно не может стать боевой.

Не путайте песочницу партнёра и песочницу мерчанта. Здесь — только онбординг и привязка кассира. Тестирование счетов, возвратов и webhook-событий (например, через simulate-status) — это песочница мерчанта, отдельная система: см. документацию для мерчантов /docs.

Магические значения (только привязка кассира):

Шаг / магическое значениеРезультатHTTP
kaspi-auth/initprocess_id = "SANDBOX-<uuid>"200
send-phone 77770000010success (касса привязывается)200
send-phone 77770000011not_cashier — номер не кассир Kaspi422
send-phone 77770000012sms_failed — Kaspi не смог отправить SMS502
send-phone прочий валидный 7…success200
verify-otp 0000success → org status: verified (sandbox_mode остаётся true)200
verify-otp любой другой кодinvalid_otp (повторяемо, сессия жива)200

Сценарии тестирования

Сценарий 1 — успешная привязка (happy path)

Сценарий 2 — номер не кассир

Сценарий 3 — сбой отправки SMS

Сценарий 4 — неверный код из SMS

6. Лимиты

ЛимитЗначениеПревышение
Тестовых организаций на партнёра20429 test_org_limit
Создание организаций10 req/minthrottle
kaspi-auth (тестовая org)60 req/minthrottle (на партнёра+org)
kaspi-auth (боевая org)10 req/minthrottle (на партнёра+org)
Вся группа Partner API120 req/minthrottle (на партнёра)

7. Полный E2E (sandbox)

Партнёрский онбординг до выдачи X-API-Key:

  1. Получите X-Partner-Key в партнёрском кабинете (фронт).
  2. POST /api/partner/organizations {external_id}org.id
  3. POST .../{id}/kaspi-auth/initprocess_id
  4. POST .../{id}/kaspi-auth/send-phone {"cashier_phone":"77770000010"} → success
  5. POST .../{id}/kaspi-auth/verify-otp {"otp":"0000"} → org status: verified
  6. POST .../{id}/api-keyX-API-Key мерчанта + webhook_secret
  7. Мерчант создаёт счета этим X-API-Key — по документации для мерчантов (/docs).
  8. Мониторьте свои организации: GET /api/partner/organizations.

8. Webhooks и HMAC

Партнёр задаёт webhook_url при выдаче X-API-Key. Формат событий и проверка HMAC-подписи описаны в документации для мерчантов (/docs) — здесь не дублируются.

9. FAQ

Как получить доступ?

X-Partner-Key выдаётся в партнёрском кабинете (фронт). Sandbox — сразу self-service. Production (реальный Kaspi-auth и mode=production) — после ручного одобрения админом; переключение режима тоже в кабинете.

Что покрывает песочница партнёра?

Онбординг мерчанта и привязку кассира — детерминированно, без реального Kaspi и SMS (магические номера). Тестирование счетов/возвратов/webhooks — это отдельная песочница мерчанта, см. /docs.

Где платёжные операции и webhooks?

В документации для мерчантов /docs. Партнёр задаёт webhook_url при выдаче X-API-Key, а формат событий и проверку HMAC мерчант (и ваш сервер) берёт из /docs.


Готовы интегрировать ApiPay в вашу CRM или платформу?

Оформите партнёрский статус на сайте — sandbox-доступ и X-Partner-Key выдаются в партнёрском кабинете. Прогоните привязку кассира без единого реального вызова Kaspi, затем запросите production-доступ у админа.

Подать заявку на партнёрство →

Поддержка: WhatsApp +7 708 516 74 89

Связанные страницы

Документация REST APIПолный справочник эндпоинтов Интеграция с n8nАвтоматизация платежей без кода Kaspi Pay REST APIОбзор возможностей API приёма платежей Интеграция Kaspi PayПошаговое подключение к сайту