Integrate Indian fintech APIs faster with AI coding agents
Connect Claude Code, Cursor, Codex, Copilot, or any MCP-compatible agent to Eko Platform Services. Your agent gets the right API context, HMAC signing logic, sandbox flows, and multi-step payment and verification recipes — without digging through docs.

How to build with AI?
Three steps. You describe what you want in plain English — your AI agent finds the right API, writes the code, and tests it.
- 1
Get an AI coding agent
An AI coding agent is a tool that writes and runs code for you when you ask in plain English. Already using one? Skip to step 2. If not, choose one of these first:
Claude CodeCodexCursorAntigravityGitHub CopilotOpenCodeKiroZedAiderJetBrains AI - 2
Add EPS to your agent — one-time setup
A one-time install that teaches your agent every EPS API, correct request signing, and safe sandbox testing. The exact steps differ slightly per tool — find yours below.
Install steps for your agent - 3
Ask your agent in plain English
That’s it — describe what you need in your own words, or copy a prompt below to start:
API integrations break when agents don’t understand the real workflow
Generic API specs help with endpoints. Real fintech integrations need more: HMAC signing, access-key handling, sandbox headers, multi-step flows, OTP steps, sender/recipient state, and error-specific next actions.
Auth mistakes
HMAC signatures, timestamps, and secret-key handling are easy to get wrong.
Broken flows
Payment and banking APIs often require multiple dependent calls, not one endpoint.
Context overload
Dumping full API docs into an LLM wastes tokens and still misses the right flow.
EPS gives your agent integration-grade context
The EPS MCP server exposes only the context your agent needs at each step: endpoint discovery, request schemas, signing snippets, SDK examples, sandbox flows, and recipe-aware error handling.
Generate signed requests correctly
EPS requests are HMAC-signed with your secret-key — the exact step generic OpenAPI tooling gets wrong. Our context teaches your agent the signing scheme, so it works on the first call instead of the fifth.
Smaller context, better answers
A lazy, tiered MCP: your agent lists endpoints, then drills into just the one it needs. It never dumps the whole spec into the context window, so you keep tokens for the actual task.
Works with your coding agent
Use EPS with Claude Code, Cursor, Codex, GitHub Copilot, OpenCode, Aider, Zed, JetBrains AI, and other MCP-compatible tools.
Connect EPS to your coding agent
Install the EPS MCP server and skills into your coding agent. Claude Code and Codex have a two-step native plugin install; every other agent wires the MCP directly. Pick your tool below.
Install for your agent — Claude Code, Codex, Cursor, Copilot, Antigravity, Zed, Kiro, Aider, JetBrains…
Claude Code
/plugin marketplace add ekoindia/eps-platform/plugin install eps@ekoindiaRun both inside the Claude Code prompt. Installs the skills and the /eps command, and wires the eps MCP automatically. The manual MCP command below is only needed if you skip the plugin.
claude mcp add eps --scope project -- npx -y @ekoindia/eps-context-mcp@latest`--scope project` writes a shared `.mcp.json` committed with the repo. Use `--scope user` for every project on this machine, or drop the flag for local scope (private to this checkout, not shared).
./CLAUDE.mdEverything your agent needs
Generated from one API source of truth, so every artifact stays in lock-step with the live platform.
Local EPS MCP server
Your coding agent integrates and tests EPS APIs end-to-end on its own — discovering endpoints, wiring correct HMAC auth, and running signed sandbox calls. Zero hosting, zero secrets; the tiered context server it talks to.
npx -y @ekoindia/eps-context-mcp@latestHMAC-signed SDKs
Backend-only SDKs with HMAC signing baked in. Keep your access_key server-side.
npm i @ekoindia/eps-sdkOffline fintech API mock server
Pairs with the MCP for offline testing — replays golden sample responses with recipe-aware error branching, so your agent develops and tests without ever touching the live API.
npx -y @ekoindia/eps-mock-serverOpenAPI 3.1 spec
Canonical OpenAPI v3.1 specification of all EPS APIs in JSON format — useful for API clients, code generators, validation tools, and other OpenAPI-compatible workflows.
Postman sandbox collection
Every EPS endpoint, ready to import and run against the sandbox.
EPS context pack (fallback)
An EPS section to append to your existing AGENTS.md — for agents without MCP or skills support (Aider, JetBrains AI, …).
Real flows, not just endpoints
EPS encodes the conditional, multi-call runbooks an integration actually needs — including the error branches.
DMT (Fino) — Send Money
Full Fino DMT money-transfer flow: look up the sender, onboard and biometric-eKYC them if new, pick or add the recipient, then send an OTP-verified transfer.
- 1dmt-get-sender
Check whether the customer is already a registered DMT sender, and which stage of onboarding they are at. The `response_type_id` decides where the flow enters.
308 → dmt-onboard-sender · Sender not found — onboard them before continuing.2134 → dmt-fino-sender-ekyc · Sender found but biometric eKYC is pending — capture their fingerprint.2129 → dmt-fino-validate-ekyc-otp · Sender found mid-eKYC — only the OTP validation is left.309 → dmt-get-recipients · Sender found and KYC complete — skip onboarding and go straight to recipients. - 2dmt-onboard-sender
Register a new sender with name, date of birth and residence address. This opens the sender on Eko but leaves KYC pending on Fino (`response_type_id=2134`) — they cannot transact yet.
309 → dmt-get-recipients · Already onboarded on Fino externally, KYC complete — no eKYC needed. - 3dmt-fino-sender-ekyc
Biometric Aadhaar eKYC — one-time per sender. Capture the PID block from an RD-service fingerprint scanner and submit it with the sender's Aadhaar number; the response returns the `kyc_request_id` and `otp_ref_id` the next step needs. Completing eKYC raises the sender's monthly limit from ₹5,000 to ₹25,000.
- 4dmt-fino-validate-ekyc-otp
Confirm the eKYC by submitting the OTP sent to the sender's Aadhaar-linked mobile, along with the `kyc_request_id` and `otp_ref_id` from the biometric step. The sender is fully KYC-verified on success.
- 5dmt-get-recipients
List the sender's saved beneficiaries. If the one they want is already there, reuse its `recipient_id` and skip Add Recipient.
22 → dmt-add-recipient · No recipients saved yet — add one before transacting.23 → dmt-send-otp · Recipient already saved — reuse its `recipient_id`. - 6dmt-add-recipient
Add the beneficiary the sender wants to transfer to; returns the `recipient_id` used by the two transaction steps.
- 7dmt-send-otp
Pre-authorise the transfer: sends an OTP to the sender's registered mobile and returns the `otp_ref_id`. Required before every transfer — request a fresh one per attempt.
- 8dmt-initiate-transfer
Submit the transfer with the customer-entered OTP, its `otp_ref_id`, and a `client_ref_id` unique to this attempt. The only money-debit step — persist `tid` and `bank_ref_num` and reconcile before any retry.
0 → complete
AePS (Fingpay) — Cash Withdrawal
Aadhaar-enabled cash withdrawal: one-time agent activation and eKYC, daily KYC, then the biometric withdrawal.
- 1activate-aeps-fingpay
One-time activation of AePS Fingpay for the agent.
- 2aeps-fingpay-send-otp-kyc
One-time eKYC step 1 (agent onboarding, not per transaction): OTP to the agent's Aadhaar-linked mobile.
- 3aeps-fingpay-verify-otp-kyc
One-time eKYC step 2 (agent onboarding): verify the OTP with the otp_ref_id and reference_tid from step 1.
- 4aeps-fingpay-biometric-ekyc
One-time eKYC step 3 (agent onboarding): the agent's biometric PID completes eKYC.
- 5aeps-fingpay-daily-auth
Daily KYC — biometric-only, repeated once per calendar day before the agent's first transaction.
- 6
BBPS — Pay a Utility Bill
Pick a biller by category, read the fields it requires, fetch the live bill, then pay the exact amount. Get Locations is an optional extra filter on the biller list, and UPPCL (operator 190) additionally needs a district_discome from Get District Discome — neither is a step here because neither applies to every biller.
- 1bbps-get-categories
List the biller categories and let the agent pick one. The `operator_category_id` chosen here filters the biller list, and is also the `category` param on Fetch Bill and Pay Bill. Do not hard-code these ids — the live list is authoritative.
2457 → bbps-get-operators · Categories returned — list the billers in the chosen category. - 2bbps-get-operators
List the billers, filtered by the chosen `category` (and optionally by `location` from Get Locations). Note the rename: the `operator_id` returned here is sent as `phone_operator_code` to Fetch Bill and Pay Bill.
2461 → bbps-get-operator-parameters · Billers returned — read the chosen operator's input fields. - 3bbps-get-operator-parameters
Read the fields this operator requires and render the bill-entry form from them. `list_elements` is the source of truth: every `param_name` it returns must be sent to BOTH the next step and Pay Bill, with identical values. For operator 190 (UPPCL) only, also resolve `district_discome` via Get District Discome before continuing.
- 4bbps-fetch-bill
Fetch the live bill and show the customer the amount and due date. Carry `amount` and `utilitycustomername` into the payment, and reuse this call's `client_ref_id` for it. `response_status_id` is `-1` on success here — branch on `response_type_id`, not on it. On `1468` the bill could not be fetched: verify the account details, retry later, and do not pay.
1052 → bbps-pay-bill · Bill fetched — pay the exact amount returned. - 5bbps-pay-bill
Pay the exact amount returned by Fetch Bill, echoing back `utilitycustomername`. The only money-debit step — persist `tid` and your `client_ref_id` before any retry. A `208` means the amount did not match: re-fetch the bill and retry with a FRESH `client_ref_id` (one reference identifies one payment attempt and must never be reused across retries); a `tid` is returned even on `208`, so store it first.
0 → complete208 → bbps-fetch-bill · Amount mismatch — re-fetch the bill and retry with a fresh client_ref_id. - 6transaction-inquiry
Reconciliation only, not a mandatory leg — the previous step already completes the flow on success. This is the generic Transaction Inquiry endpoint, shared across every product. Use it when the Pay Bill response timed out or came back awaited: inquire by `tid`, or by your `client_ref_id` if you never received the `tid`. A timeout is never an automatic failure.
0 → complete
BBPS — Prepaid Mobile / DTH Recharge
Detect the operator and circle from the customer's mobile number, read the operator's input fields, list the available plans, then submit the chosen plan as a payment.
- 1bbps-operator-code-circle
Detect the telecom operator and circle from the customer's mobile number. Both come back as name/value pairs under `dependent_params` at the top level of the response, not under `data`.
- 2bbps-get-operator-parameters
Read the recharge fields this operator requires, using the `phone_operator_code` from the previous step as `operator_id`. Prepaid operators typically expose `utility_acc_no` labelled "Mobile Number" plus a "Recharge Type" list — send every returned `param_name` to the payment step.
- 3bbps-recharge-plans
List the plans for this operator and circle, and let the customer choose one. Mind the rename: pass the previous `circle_area` value as `circleid` here. Plans arrive under `dependent_params` → the `req_list` entry's `value` array.
1805 → bbps-pay-bill · Plans unavailable (status is still 0) — take the amount from the customer and continue. - 4bbps-pay-bill
Submit the recharge. Map the fields: `phone_operator_code` from step 1, `utility_acc_no` = the customer's mobile number, `category` = the Mobile Prepaid / DTH id from Get Categories, and `amount` = the chosen plan's `amount` (or the agent-entered amount when plans were unavailable). `confirmation_mobile_no` and `sender_name` come from agent-entered customer detail. Omit `utilitycustomername` — it is optional, and only applies to bill payments where Bill Fetch supplied it. Persist `tid` and `client_ref_id`.
0 → complete
Start building with EPS in your AI coding agent
Wire EPS into your coding agent — ship your first signed EPS call today.