Idempotent by request ID
Send a fresh UUID v4 as X-Request-ID per logical request. A replay inside 10 minutes returns HTTP 409 instead of moving money twice.
LiteBanking API · v1
Payouts, UPI collection, money transfer, AePS, bill payments, recharge and verification — one signed REST API, one set of keys, one webhook stream.
https://litebanking.com/api/v1
# sign METHOD|PATH|TIMESTAMP|BODY with your secret
curl -X POST https://litebanking.com/api/v1/payout/initiate \
-H "X-Client-ID: $CLIENT_ID" \
-H "X-Timestamp: $TS" \
-H "X-Request-ID: $(uuidgen)" \
-H "X-Signature: $SIG" \
-d '{"amount":2500,"mode":"IMPS", ...}'
{
"success": true,
"data": {
"transaction_id": "PO1738291045ABCD",
"status": "pending",
"amount": 2500
}
}
Every family shares the same authentication, envelope and webhook model — learn it once, use it everywhere.
The same four steps work for every family. Pick your language once; every sample on this page follows it.
Every call is signed with HMAC-SHA256 using your secret. The server rebuilds the same string and rejects anything that does not match.
Select a field to see exactly what goes into it.
X-Client-ID | Your client identifier, issued from the dashboard. |
X-Timestamp | Unix epoch seconds. Rejected outside a 300 second window. |
X-Request-ID | UUID v4, unique per request. A repeat within 10 minutes returns HTTP 409. |
X-Signature | Lowercase hex HMAC-SHA256 of the canonical string, keyed with your secret. |
X-Timestamp are rejected.X-Request-ID returns HTTP 409.Paste a request and watch the canonical string and signature build live. Everything runs in your browser — your secret never leaves this page.
———
109 endpoints across 12 families. Pick a family, then open any endpoint for its headers, parameters and example payloads.
Long-form walkthroughs for each family, from sandbox to go-live. Opens in a reader without leaving the page.
Status changes are pushed to your endpoint as signed JSON. Treat the webhook as the source of truth, and make your handler idempotent.
X-Webhook-Signature | Lowercase hex HMAC-SHA256 of the JSON body, keyed with your webhook secret. |
X-Webhook-Event | The event name, e.g. payout.success. |
X-Webhook-Delivery-ID | Unique per delivery — use it to de-duplicate retries. |
$expected = hash_hmac('sha256', $rawBody, $webhookSecret);
if (! hash_equals($expected, $request->header('X-Webhook-Signature'))) {
abort(401);
}
// respond 2xx fast, process asynchronouslyEvery failure returns success: false with a stable error.code. Branch on the code, never on the message text.
Money-moving calls must be safe to retry. These are the guarantees to build on.
Send a fresh UUID v4 as X-Request-ID per logical request. A replay inside 10 minutes returns HTTP 409 instead of moving money twice.
Bank rails settle asynchronously. Treat pending as in-flight, wait for the webhook, and poll the status endpoint only as a fallback.
Limits are applied per client. When exceeded you receive HTTP 429 with a Retry-After header — back off, do not hammer.
Keep servers NTP-synced. X-Timestamp outside the 300-second window is rejected before the signature is checked.
What changed in the API contract, newest first.
Machine-readable contracts for code generation, testing and monitoring.
Point any OpenAPI generator at the spec to get a client in your language.
npx @openapitools/openapi-generator-cli generate \
-i https://litebanking.com/developer/openapi.yaml \
-g php -o ./litebanking-client
Create a partner account, finish KYC once, and request production keys from your dashboard.