Fintech APIs & Platform for KYC, Verification & Transactions in India | Eko Platform ServicesAI Coding Agent Integration for Fintech APIs | EPS MCP Server
Eko Platform Services Logo
AI-ready Fintech API Platform

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.

AI Vibe Coding
Quick start

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. 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. 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. 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:

The problem

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.

Why agents get it right

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.

Install

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

MCP
Context pack
Install the plugin · skills + /eps
Step 1 — add the marketplace
/plugin marketplace add ekoindia/eps-platform
Step 2 — install the plugin
/plugin install eps@ekoindia

Run 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.

MCP install command
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).

Context pack
CLAUDE.md./CLAUDE.md
The toolkit

Everything 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@latest

HMAC-signed SDKs

Backend-only SDKs with HMAC signing baked in. Keep your access_key server-side.

npm i @ekoindia/eps-sdk
composer require ekoindia/eps-sdk

Offline 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-server

OpenAPI 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, …).

Multi-step recipes

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.

  1. 1
    dmt-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.
  2. 2
    dmt-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.
  3. 3
    dmt-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.

  4. 4
    dmt-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.

  5. 5
    dmt-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`.
  6. 6
    dmt-add-recipient

    Add the beneficiary the sender wants to transfer to; returns the `recipient_id` used by the two transaction steps.

  7. 7
    dmt-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.

  8. 8
    dmt-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.

  1. 1
    activate-aeps-fingpay

    One-time activation of AePS Fingpay for the agent.

  2. 2
    aeps-fingpay-send-otp-kyc

    One-time eKYC step 1 (agent onboarding, not per transaction): OTP to the agent's Aadhaar-linked mobile.

  3. 3
    aeps-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.

  4. 4
    aeps-fingpay-biometric-ekyc

    One-time eKYC step 3 (agent onboarding): the agent's biometric PID completes eKYC.

  5. 5
    aeps-fingpay-daily-auth

    Daily KYC — biometric-only, repeated once per calendar day before the agent's first transaction.

  6. 6
    aeps-fingpay-cash-withdrawal

    Perform the biometric Aadhaar-enabled cash withdrawal.

    0 complete

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.

  1. 1
    bbps-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.
  2. 2
    bbps-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.
  3. 3
    bbps-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.

  4. 4
    bbps-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.
  5. 5
    bbps-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.
  6. 6
    transaction-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.

  1. 1
    bbps-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`.

  2. 2
    bbps-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.

  3. 3
    bbps-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.
  4. 4
    bbps-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.