Idempotency-Key
Same key, same intent. Kenya does not get charged twice because a mobile retry fired.
Home · Developers
Developer platform · §40–43
First sandbox payment should take under ten minutes. Idempotency on every create. Amounts are integer minor units inside Oda. Retail still posts major-unit KES on the frozen checkout contract.
POST http://localhost:4020/v1/payment-intents
Idempotency-Key: order-99181
{
"amount": 245000,
"currency": "KES",
"destination": {
"type": "oda_handle",
"value": "javahouse@oda"
},
"reference": "ORDER-99181"
}Same key, same intent. Kenya does not get charged twice because a mobile retry fired.
Timeout ≠ FAILED. Do not auto-reroute. Do not invent a decline for a pretty dashboard.
Connect, payroll, later products stay flags. Interfaces only. Demo key: oda_sk_demo.
GET /health → service oda-pay-checkout. POST/GET /v1/checkout/intents. Confirm. Major-unit KES 320 in becomes 32000 minor units. That contract does not thrash every sprint.
npm install @odapay/sdk-node · base http://localhost:4020/v1
This page is /developers on odapay.odaflow.com. The explorer is :4031 until a developers host points at it.