API, с которым вашей команде действительно приятно работать
Предсказуемый REST, ключи идемпотентности, подписанные вебхуки и песочница с симуляцией каналов: интегрируйтесь от начала до конца, не сдвинув ни единого франка.
Первый принятый платёж за один запрос
Чистый REST, предсказуемый JSON-конверт и request id в каждом ответе. Песочница зеркалит продакшен: тот же API, те же статусы, те же вебхуки.
- Ключи песочницы и продакшена, с областью действия на приложение
- Вебхуки с HMAC-подписью и защитой от повторов
- Ключи идемпотентности на каждом вызове, перемещающем деньги
- Типизированные ошибки, которые точно говорят, что исправить
- Спецификация OpenAPI, коллекция Postman и llms.txt, все опубликованы
- Размещённые сессии оплаты и плоские колбэки для коннекторов CRM, ERP и магазинов
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"
}'{
"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"
}Ваш первый прием платежа
Один запрос создает намерение платежа, возвращает идентификатор запроса и, для мобильных денег, отправляет запрос на телефон плательщика. Песочница ведет себя точно так же, как продакшен.
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"
}Серверные SDK
Тонкие типизированные обертки над тем же REST API, с идемпотентностью и проверкой подписи внутри.
import { Capay } from '@capay/sdk';Пока не в npm. Строка импорта выше окончательная, поэтому ваша интеграция не изменится после публикации.
Читать руководствоfrom capay import CapayПока не в PyPI. Строка импорта выше окончательная, поэтому ваша интеграция не изменится после публикации.
Читать руководствоuse Capay\CapayClient;Пока не в Packagist. Строка импорта выше окончательная, поэтому ваша интеграция не изменится после публикации.
Читать руководствоПроверяйте каждый вебхук
Подписи считаются по сырому телу и сравниваются за постоянное время, а отметка времени старше 300 секунд отклоняется. Никогда не доверяйте вебхуку, который вы не проверили.
# 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 секунд и сохраняйте идентификатор события, чтобы повторы были безвредны.
Остальной инструментарий
Машиночитаемые спецификации, коллекция для импорта и инструменты, которые их читают.
Начните принимать платежи по всей Африке уже сегодня
Создайте бесплатный аккаунт, интегрируйтесь в песочнице и запускайтесь после верификации.
Расскажите нам о ваших коридорах и объёмах в любое время.