Un'API che il tuo team userà davvero con piacere
REST prevedibile, chiavi di idempotenza, webhook firmati e una sandbox con circuiti simulati, per integrare tutto end to end prima di muovere un solo franco.
Il tuo primo incasso in una sola richiesta
REST pulita, un envelope JSON prevedibile e un request id su ogni risposta. La sandbox rispecchia la produzione: stessa API, stessi stati, stessi webhook.
- Chiavi sandbox e di produzione, con permessi per singola app
- Webhook firmati HMAC con protezione dai replay
- Chiavi di idempotenza su ogni chiamata che muove denaro
- Errori tipizzati che ti dicono esattamente cosa correggere
- Specifica OpenAPI, raccolta Postman e llms.txt, tutte pubblicate
- Sessioni di checkout ospitate e callback piatti per connettori CRM, ERP e shop
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"
}Il tuo primo incasso
Una richiesta crea una intenzione di pagamento, restituisce un identificativo di richiesta e, per il mobile money, invia la richiesta al telefono del pagatore. La sandbox si comporta esattamente come la produzione.
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 server
Involucri sottili e tipizzati sulla stessa API REST, con idempotenza e verifica della firma gia incluse.
import { Capay } from '@capay/sdk';Non è ancora su npm. La riga di import qui sopra è definitiva, quindi la tua integrazione non cambia quando verrà pubblicato.
Leggi la guidafrom capay import CapayNon è ancora su PyPI. La riga di import qui sopra è definitiva, quindi la tua integrazione non cambia quando verrà pubblicato.
Leggi la guidause Capay\CapayClient;Non è ancora su Packagist. La riga di import qui sopra è definitiva, quindi la tua integrazione non cambia quando verrà pubblicato.
Leggi la guidaVerifica ogni webhook
Le firme si calcolano sul corpo grezzo e si confrontano a tempo costante, e una marca temporale piu vecchia di 300 secondi viene rifiutata. Non fidarti mai di un webhook che non hai verificato.
# 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.completedUna consegna fallita viene ritentata su un calendario fisso: 1m, 5m, 30m, 2h, 6h, 12h, 24h, 24h. Un endpoint che fallisce 8 volte di fila viene disattivato e ti avvisiamo, cosi un endpoint morto non ingoia mai eventi in silenzio.
Due segreti di firma possono essere attivi insieme, quindi puoi ruotarli senza perdere un evento. Rifiuta tutto cio che esce dalla finestra di 300 secondi e memorizza l'identificativo dell'evento perche i rinvii siano innocui.
Il resto del kit
Specifiche leggibili dalle macchine, una raccolta importabile e gli strumenti che le leggono.
Inizia oggi a incassare pagamenti in tutta l'Africa
Crea un account gratuito, sviluppa nella sandbox e vai in produzione dopo la verifica.
Raccontaci dei tuoi corridoi e dei tuoi volumi in qualsiasi momento.