Разработчикам

API, с которым вашей команде действительно приятно работать

Предсказуемый REST, ключи идемпотентности, подписанные вебхуки и песочница с симуляцией каналов: интегрируйтесь от начала до конца, не сдвинув ни единого франка.

Создать аккаунт
Создано для разработчиков

Первый принятый платёж за один запрос

Чистый REST, предсказуемый JSON-конверт и request id в каждом ответе. Песочница зеркалит продакшен: тот же API, те же статусы, те же вебхуки.

  • Ключи песочницы и продакшена, с областью действия на приложение
  • Вебхуки с HMAC-подписью и защитой от повторов
  • Ключи идемпотентности на каждом вызове, перемещающем деньги
  • Типизированные ошибки, которые точно говорят, что исправить
  • Спецификация OpenAPI, коллекция Postman и llms.txt, все опубликованы
  • Размещённые сессии оплаты и плоские колбэки для коннекторов CRM, ERP и магазинов
POST /v1/collections
curl https://api.capayglobal.com/v1/collections \
  -H "Authorization: Bearer sk_test_..." \
  -H "Idempotency-Key: 9f1c-collect-01" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "2500",
    "currency": "XAF",
    "country": "CM",
    "method": "mobile_money",
    "msisdn": "2376XXXXXXXX",
    "merchant_reference": "order-1042"
  }'
201 Created
{
  "status": "success",
  "data": {
    "id": "col_9xKQ2mD41Vb8",
    "object": "collection",
    "status": "pending",
    "amount": "2500",
    "currency": "XAF",
    "country": "CM",
    "method": "mobile_money",
    "merchant_reference": "order-1042",
    "fees": {
      "platform_fee": "50",
      "provider_fee": "0",
      "total_fee": "50",
      "bearer": "merchant"
    },
    "net_amount": null,
    "livemode": false,
    "created_at": "2026-08-30T12:04:11Z"
  },
  "request_id": "req_b0f3d2c1"
}

Ваш первый прием платежа

Один запрос создает намерение платежа, возвращает идентификатор запроса и, для мобильных денег, отправляет запрос на телефон плательщика. Песочница ведет себя точно так же, как продакшен.

Получить тестовые ключиСоздайте аккаунт, и ключи песочницы сразу появятся на странице разработчика. Ключи продакшена открываются после проверки компании.
POST /v1/collections
curl -X POST https://api.capayglobal.com/v1/collections \
  -H "Authorization: Bearer sk_test_XXXXXXXXXXXX" \
  -H "Idempotency-Key: col-order-10482-a1b2c3" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "5000",
    "currency": "XAF",
    "country": "CM",
    "method": "mobile_money",
    "msisdn": "+237650000001",
    "merchant_reference": "order-10482"
  }'
Ответ
{
  "status": "success",
  "data": {
    "id": "col_7Qm3k1Xa9Zr4",
    "object": "collection",
    "status": "pending",
    "amount": "5000",
    "currency": "XAF",
    "auth_model": "STK_PROMPT",
    "livemode": false
  },
  "request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
201 Created
Суммы это десятичные строки на границе API и минимальные единицы в книге, поэтому ничего не теряется на плавающей точке. Каждый вызов, двигающий деньги, принимает ключ идемпотентности, и каждый ответ несет идентификатор запроса, который можно назвать поддержке.

Серверные SDK

Тонкие типизированные обертки над тем же REST API, с идемпотентностью и проверкой подписи внутри.

TypeScript and NodeСкоро опубликуем@capay/sdk
Импорт
import { Capay } from '@capay/sdk';

Пока не в npm. Строка импорта выше окончательная, поэтому ваша интеграция не изменится после публикации.

Читать руководство
PythonСкоро опубликуемcapay
Импорт
from capay import Capay

Пока не в PyPI. Строка импорта выше окончательная, поэтому ваша интеграция не изменится после публикации.

Читать руководство
PHPСкоро опубликуемcapay/capay-php
Импорт
use Capay\CapayClient;

Пока не в Packagist. Строка импорта выше окончательная, поэтому ваша интеграция не изменится после публикации.

Читать руководство

Проверяйте каждый вебхук

Подписи считаются по сырому телу и сравниваются за постоянное время, а отметка времени старше 300 секунд отклоняется. Никогда не доверяйте вебхуку, который вы не проверили.

X-Capay-Signature
# T is the t= value from X-Capay-Signature; delivery.json is the raw body as received.
T=1767225600
SECRET=whsec_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

{ printf '%s.' "$T"; cat delivery.json; } \
  | openssl dgst -sha256 -hmac "$SECRET" -r | cut -d' ' -f1
# Compare the printed hex with each v1= value in the header (either may match
# during a secret rotation), and reject the delivery if |now - T| > 300 s.
Заголовок подписи
X-Capay-Signature: t=1767225600,v1=6f8b4c2d9e0a1b3c5d7e9f0a2b4c6d8e0f1a3b5c7d9e1f0a2b4c6d8e0f1a3b5c
X-Capay-Event-Id: evt_2n4Kq8Zr41Xa
X-Capay-Event-Type: collection.completed
Доставка и повторы

Неудачная доставка повторяется по фиксированному расписанию: 1m, 5m, 30m, 2h, 6h, 12h, 24h, 24h. Точка, которая падает 8 раз подряд, отключается и вам сообщают, чтобы мертвая точка никогда молча не съедала события.

Два секрета подписи могут быть активны одновременно, поэтому ротацию можно сделать, не потеряв ни одного события. Отклоняйте все за пределами окна в 300 секунд и сохраняйте идентификатор события, чтобы повторы были безвредны.

Остальной инструментарий

Машиночитаемые спецификации, коллекция для импорта и инструменты, которые их читают.

llms.txtВся документация в плоском виде для помощников по коду, чтобы ваш ИИ отвечал о нашем API нашим же текстом.Спецификация OpenAPIПолный контракт, сгенерированный из API. Импортируйте его, чтобы собрать клиент на любом языке.Коллекция PostmanКаждый эндпойнт с примерами тел и переменными окружения, готов к запуску по песочнице.
Командная строкаСкороСоздавайте тестовые платежи, следите за событиями и проигрывайте вебхук на свою машину.@capay/cli
Сервер MCPСкороДайте помощнику по коду доступ на чтение к вашей песочнице, чтобы он отвечал вашими реальными данными.@capay/mcp
Скрипт оплатыСкороОткрывайте страницу оплаты в окне поверх вашей страницы вместо перенаправления.https://pay.capayglobal.com/capay.js

Начните принимать платежи по всей Африке уже сегодня

Создайте бесплатный аккаунт, интегрируйтесь в песочнице и запускайтесь после верификации.

Создать аккаунт

Расскажите нам о ваших коридорах и объёмах в любое время.