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

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

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

Partner API ApiPay

Server-to-server документация для партнёров-интеграторов (CRM, платформы, агрегаторы)

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

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

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

Аутентификация

Все запросы к Partner API — заголовок X-Partner-Key: <ключ>.

Ключ выдаётся командой ApiPay при одобрении заявки. В БД хранится только хеш (sha256) — восстановить невозможно. Сохраните при получении.

ПараметрЗначение
Base URLhttps://bpapi.bazarbay.site
Заголовок аутентификацииX-Partner-Key: pk_your_partner_key
Content-Typeapplication/json
Rate Limit120 req/min (общий), 10 req/min (kaspi-auth)

Поток онбординга мерчанта

Главный кейс Partner API — партнёр онбордит мерчанта в ApiPay без ручной регистрации. Авторизация основана на Kaspi-SMS: мерчант сообщает партнёру код из SMS.

  1. POST /api/partner/organizations — создать организацию мерчанта
  2. POST /api/partner/organizations/{id}/kaspi-auth/init — начать авторизацию кассира
  3. POST /api/partner/organizations/{id}/kaspi-auth/send-phone — Kaspi шлёт SMS кассиру
  4. POST /api/partner/organizations/{id}/kaspi-auth/verify-otp — подтвердить код из SMS
  5. POST /api/partner/organizations/{id}/api-key — получить X-API-Key + webhook
Важно: process_id живёт 10 минут. Шаги send-phone и verify-otp нужно выполнить в этом окне.

Эндпоинты

POST /api/partner/organizations

Создать организацию мерчанта. Идемпотентно по external_id — повторный запрос вернёт существующую организацию.

Body: { "has_catalog": false, "external_id": "crm-client-42" } (оба поля опциональны)

Ответ 201 / 200: { "success": true, "organization": <card> }

GET /api/partner/organizations

Список организаций партнёра с пагинацией.

Query: per_page (1–100, default 25), page (default 1)

Ответ: { "success": true, "organizations": [...], "current_page": 1, "total": 42 }

GET /api/partner/organizations/{id}

Карточка организации.

Ответ: { "success": true, "organization": <card> }

DELETE /api/partner/organizations/{id}

Отвязать организацию: деактивирует все API-ключи, soft-delete.

Ответ: { "success": true }

POST /api/partner/organizations/{id}/kaspi-auth/init

Шаг 1 онбординга. Инициировать авторизацию кассира Kaspi.

Ответ: { "success": true, "process_id": "..." } — живёт 10 минут

POST /api/partner/organizations/{id}/kaspi-auth/send-phone

Шаг 2 онбординга. Kaspi отправляет SMS на номер кассира.

Body: { "cashier_phone": "77001234567" } (формат 7XXXXXXXXXX)

Ошибки: invalid_phone (422), not_cashier (422), no_process (409), sms_failed (502)

POST /api/partner/organizations/{id}/kaspi-auth/verify-otp

Шаг 3 онбординга. Подтвердить код из SMS (4–6 цифр).

Body: { "otp": "1234" }

Успех: { "success": true, "mode": "self", "organization": <card> }
Неверный код: { "success": false, "error": "invalid_otp" } — сессия не сбрасывается, повтор возможен

GET /api/partner/organizations/{id}/kaspi-auth/status

Статус авторизации кассира.

Ответ: { "success": true, "status": "pending|active|...", "kaspi_connected": bool, "expires_at": "..." }

POST /api/partner/organizations/{id}/api-key

Создать или перегенерировать X-API-Key + webhook для организации мерчанта. Идемпотентно — повторный вызов перегенерирует ключ той же записи.

Body:

{
  "name": "CRM key",
  "webhook_url": "https://your-crm.example.com/webhooks/kaspi",
  "webhook_secret": "optional_custom_secret"
}

webhook_url проходит SSRF-валидацию (приватные IP отклоняются, 422).

{
  "success": true,
  "key": "<plaintext, показывается ОДИН РАЗ>",
  "key_id": 200,
  "webhook_url": "https://your-crm.example.com/webhooks/kaspi",
  "webhook_secret": "<plaintext>",
  "is_org_default": true,
  "regenerated": false
}

Формат карточки организации

{
  "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"
}

Примеры кода

Полный поток онбординга (JavaScript)

// 1. Создать организацию мерчанта
const orgRes = await fetch('https://bpapi.bazarbay.site/api/partner/organizations', {
  method: 'POST',
  headers: {
    'X-Partner-Key': 'pk_your_partner_key_here',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ external_id: 'crm-client-42' }),
})
const { organization } = await orgRes.json()
const orgId = organization.id

// 2. Инициировать авторизацию кассира
await fetch(`https://bpapi.bazarbay.site/api/partner/organizations/${orgId}/kaspi-auth/init`, {
  method: 'POST',
  headers: { 'X-Partner-Key': 'pk_your_partner_key_here' },
})

// 3. Передать номер кассира — Kaspi пришлёт SMS
await fetch(`https://bpapi.bazarbay.site/api/partner/organizations/${orgId}/kaspi-auth/send-phone`, {
  method: 'POST',
  headers: {
    'X-Partner-Key': 'pk_your_partner_key_here',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ cashier_phone: '77001234567' }),
})

// 4. Подтвердить OTP из SMS
const verifyRes = await fetch(`https://bpapi.bazarbay.site/api/partner/organizations/${orgId}/kaspi-auth/verify-otp`, {
  method: 'POST',
  headers: {
    'X-Partner-Key': 'pk_your_partner_key_here',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ otp: '1234' }),
})
// { "success": true, "mode": "self", "organization": { "status": "verified", ... } }

// 5. Получить X-API-Key для мерчанта (один раз!)
const keyRes = await fetch(`https://bpapi.bazarbay.site/api/partner/organizations/${orgId}/api-key`, {
  method: 'POST',
  headers: {
    'X-Partner-Key': 'pk_your_partner_key_here',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'CRM key',
    webhook_url: 'https://your-crm.example.com/webhooks/kaspi',
  }),
})
const { key, webhook_secret } = await keyRes.json()
// key — сохраните в вашем хранилище, больше не показывается

Создание счёта от имени мерчанта

// После онбординга используйте X-API-Key мерчанта
const invoiceRes = await fetch('https://bpapi.bazarbay.site/api/v1/invoices', {
  method: 'POST',
  headers: {
    'X-API-Key': 'merchant_api_key_obtained_during_onboarding',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    amount: 15000,
    phone_number: '87001234567',
    description: 'Оплата заказа #123',
    external_order_id: 'order_123',
  }),
})
const { id, status } = await invoiceRes.json()

Список организаций (cURL)

curl -X GET 'https://bpapi.bazarbay.site/api/partner/organizations?per_page=25&page=1' \
  -H 'X-Partner-Key: pk_your_partner_key_here'

Rate Limits

ГруппаЛимит
partner-api (вся группа)120 req/min на партнёра
partner-kaspi-auth (send-phone, verify-otp)10 req/min на партнёра + организацию

Коды ошибок

КодОписание
401Неверный или отсутствующий X-Partner-Key
403Нет доступа к ресурсу
409Конфликт: no_process, already_exists
422Ошибка валидации: invalid_phone, not_cashier, SSRF в webhook_url
502Kaspi API недоступен: sms_failed

Формат ошибки

{
  "success": false,
  "error": "error_code"
}
// или для ошибок валидации:
{
  "success": false,
  "errors": {
    "field_name": ["описание ошибки"]
  }
}

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

Оформите партнёрский статус на сайте и получите X-Partner-Key. После одобрения вы сможете онбордить мерчантов программно через этот API.

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

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

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

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