Een API waar je team echt blij van wordt
Voorspelbare REST, idempotency keys, ondertekende webhooks en een sandbox met gesimuleerde rails, zodat je end-to-end kunt integreren voordat er ook maar een frank beweegt.
Je eerste inning in één request
Schone REST, een voorspelbare JSON-envelop en een request-id bij elk antwoord. De sandbox spiegelt productie: dezelfde API, dezelfde statussen, dezelfde webhooks.
- Sandbox- en productiesleutels, met een scope per app
- HMAC-ondertekende webhooks met replay-bescherming
- Idempotency keys op elke call die geld verplaatst
- Getypeerde fouten die je precies vertellen wat je moet oplossen
- OpenAPI-specificatie, Postman-collectie en llms.txt, allemaal gepubliceerd
- Gehoste checkout-sessies en platte callbacks voor CRM-, ERP- en shopconnectors
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"
}Je eerste incasso
Een verzoek maakt een betaalintentie, geeft een request id terug en stuurt bij mobiel geld de prompt naar het toestel van de betaler. De sandbox gedraagt zich precies als productie.
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"
}Server-SDKs
Dunne, getypeerde omhulsels om dezelfde REST-API, met idempotentie en handtekeningcontrole ingebouwd.
import { Capay } from '@capay/sdk';Nog niet op npm. De importregel hierboven is definitief, dus je integratie verandert niet zodra het gepubliceerd wordt.
Lees de gidsfrom capay import CapayNog niet op PyPI. De importregel hierboven is definitief, dus je integratie verandert niet zodra het gepubliceerd wordt.
Lees de gidsuse Capay\CapayClient;Nog niet op Packagist. De importregel hierboven is definitief, dus je integratie verandert niet zodra het gepubliceerd wordt.
Lees de gidsControleer elke webhook
Handtekeningen worden over de ruwe body berekend en in constante tijd vergeleken, en een tijdstempel ouder dan 300 seconden wordt geweigerd. Vertrouw nooit een webhook die je niet hebt gecontroleerd.
# 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.completedEen mislukte aflevering wordt volgens een vast schema herhaald: 1m, 5m, 30m, 2h, 6h, 12h, 24h, 24h. Een endpoint dat 8 keer op rij faalt wordt uitgeschakeld en je krijgt bericht, zodat een dood endpoint nooit stilletjes gebeurtenissen opslokt.
Twee ondertekeningsgeheimen kunnen tegelijk actief zijn, dus je kunt roteren zonder een gebeurtenis te missen. Weiger alles buiten het venster van 300 seconden en bewaar het event id zodat herhalingen onschadelijk zijn.
De rest van de kit
Machineleesbare specificaties, een collectie die je kunt importeren, en de tools die ze lezen.
Begin vandaag met betalingen innen in heel Afrika
Maak een gratis account aan, bouw tegen de sandbox en ga live na verificatie.
Vertel ons op elk moment over je corridors en volumes.