Most teams run payouts through a patchwork of bank portals, spreadsheets and scripts nobody fully owns. milanj.money replaces all of it with one platform for payouts, a double‑entry ledger and reconciliation that closes every day.
Every payout is idempotent, every webhook is signed, and every number traces back to a transaction.
Four steps from your API key to live, tracked payouts.
Connect through our REST API and authenticate with your key. Start building in the sandbox straight away.
Add funds to your milanj.money wallet over NEFT or RTGS. Check the balance anytime through the balance API.
Trigger single or bulk payouts via API. Set the beneficiary, amount and rail, and smart routing handles the rest.
Get real-time status updates through signed webhooks. Query the status API anytime for any transaction.
Built for teams that need to explain every rupee — to an auditor, a regulator or a customer — without opening a spreadsheet.
IMPS, NEFT, RTGS and UPI chosen per transaction on amount, cutoff and bank health. Automatic failover to a second sponsor bank.
Every movement is a balanced journal entry. Wallet, fees, reversals and chargebacks all trace back to a transaction id.
Bank statements matched against the ledger every morning. Breaks are surfaced with a reason code, not a mystery.
Retry any request with the same key and get the same payout back. No duplicate credits during an incident.
Maker-checker on bulk files, per-user limits, IP allowlists and a full audit trail your risk team can read.
HMAC-signed events with replay protection and at-least-once delivery, plus a status API for reconciliation.
Predictable REST, typed SDKs, an idempotency key on every write and a sandbox that mirrors production behaviour — including failures you actually need to test.
curl https://api.milanj.money/v1/payouts \ -H "Authorization: Bearer $MILANJ_KEY" \ -H "Idempotency-Key: po_7fa31c" \ -d amount=2500000 \ -d currency=INR \ -d rail=auto \ -d beneficiary[name]="Anika Raut" \ -d beneficiary[account]="0042915566731" \ -d beneficiary[ifsc]="HDFC0000123"
const payout = await milanj.payouts.create({
amount: 2_500_000, // paise
currency: "INR",
rail: "auto", // imps | neft | rtgs | upi
beneficiary: {
name: "Anika Raut",
account: "0042915566731",
ifsc: "HDFC0000123"
}
}, { idempotencyKey: "po_7fa31c" });
console.log(payout.status); // "processing"payout = milanj.payouts.create(
amount=2_500_000, # paise
currency="INR",
rail="auto",
beneficiary={
"name": "Anika Raut",
"account": "0042915566731",
"ifsc": "HDFC0000123",
},
idempotency_key="po_7fa31c",
)
print(payout.status) # processingBalances, breaks, approvals and every payout your API created — no export, no reconciliation spreadsheet.

Funds move through regulated sponsor banks. Data stays in India. Access is scoped, logged and reviewable — and the ledger is immutable.
Sandbox is free forever. GST applies on all plans.
For teams going live on one rail with volume under 25k payouts a month.
Multi-bank routing and failover for teams past 25k payouts a month.
Dedicated sponsor bank arrangements, custom SLAs and on-site audit support.
Two to four weeks from the kickoff call to your first live payout, most of which is sponsor bank paperwork. Sandbox access is same day.
IMPS, NEFT, RTGS and UPI for payouts, plus eNACH for mandates. Set rail: auto and the router picks based on amount, cutoff time and live bank health.
Pending items are re-queued and routed to a second sponsor bank. Because every write is idempotent, retries cannot double-credit a beneficiary.
Yes — journal-level exports to Tally, Zoho Books, NetSuite and SAP, or pull the same entries from the ledger API.
Tell us your volume and rails and we will come back with an integration plan, not a brochure. Replies within one business day.
Sandbox keys are instant. Bring your finance lead to the kickoff call — they will have fewer questions than you expect.