Deux appels.Le hors ligne en production.
Émettez un coffre, synchronisez, écoutez les événements. Votre grand livre garde la main.

Émettre une allocation
Votre backend demande à PayVault de signer une allocation pour la clé de l'appareil d'un utilisateur, après avoir bloqué les fonds dans votre grand livre.
Synchroniser les paiements
Les appareils envoient les paiements signés et chaînés dès qu'ils captent le réseau. Vous récupérez les résultats : acceptés, doublons et bifurcations.
Écouter les événements
Les webhooks indiquent à votre grand livre quand régler, recouvrer ou révoquer.
Deux appelspour démarrer
Les formats de requête sont donnés à titre indicatif. Consultez la documentation pour la référence à jour.
POST /api/v1/allowances
Authorization: Bearer pv_<prefix>_<secret>
Content-Type: application/json
{
"devicePublicKey": "02c4f1...e9",
"country": "NG",
"funded": 500000,
"credit": 0,
"externalRef": "cust_8123_vault_1",
"ttlHours": 72
}
// 201 Created
{
"id": "9f2c1e5b7a3d4c08b6e1a2d3f4c5b6a7",
"cert": "AQEAn8sc63...",
"issuerKid": 3,
"currency": "NGN",
"expiresAt": "2026-10-02T09:30:00.000Z"
}POST /api/v1/payments/sync
Authorization: Bearer pv_<prefix>_<secret>
Content-Type: application/json
{
"bundles": ["AQMBAQEAn8sc...", "AQMBAQEAn8sc..."]
}
// 200 OK
{
"results": [
{ "id": "5d0e...c1", "status": "settled", "amount": 250000, "currency": "NGN" },
{ "id": "77ab...09", "status": "flagged" }
]
}{
"id": 1042,
"type": "fraud.detected",
"createdAt": "2026-10-02T11:04:12.000Z",
"data": {
"allowanceId": "9f2c...",
"cases": [{ "kind": "fork", "seq": 3, "paymentIds": ["5d0e...c1", "77ab...09"], "loss": 0 }]
}
}SDK
- SDK WebDisponible
- Android (Kotlin)Prévu
- iOS (Swift)Prévu
- USSD / SIMPrévu
Pensé pourles intégrateurs
- Synchronisation des paiements idempotente : les nouvelles tentatives sont sans danger
- Webhooks signés avec protection contre le rejeu
- Sandbox avec argent de test et la même API
- Montants en entiers, dans la plus petite unité monétaire
