Product Guide 04
Fintech AI

Account Aggregator: How to Build It

A step-by-step guide to building an Account Aggregator integration. Eight stages, the options at each one, exactly how each step connects to the next, real costs, and what breaks. Written for someone who has not built this before.

Verified September 2026Free · No signupOfficial sources only
BeginnerStart here. No prior knowledge assumed.

How to use this page

This page walks you through building one product, start to finish. This one is a capability rather than a customer-facing product: it is how you get a customer's financial data, with their permission, from institutions that are not you.

It feeds almost everything else — underwriting, wealth advice, personal finance, income verification.

Watch out

The budget warning first, because it is the single most useful thing on this page. A lender planning a one-directional “pull bank statements for underwriting” integration is actually scoping two modules. Since an RBI circular of October 2023, a regulated entity joining as a data consumer must also join as a data provider if it holds financial information. You will build the side that fetches, and the side that serves your own loan data to competitors who ask with valid consent. Budgets built on the first module alone are wrong by roughly half.

What Account Aggregator actually is

Account Aggregator is India's consented financial data rail. Three roles:

RoleWhoWhat they do
FIPBanks, NBFCs, insurers, depositories, GSTN, NPS record-keepers, CCILHolds the customer's data.
AAAn RBI-licensed NBFCMoves the data. Cannot read it.
FIUYouConsumes the data for a stated purpose.

The design principle that makes the whole thing work: the AA is a data-blind pipe. Data is encrypted end to end between FIP and FIU, and the AA does not hold the decryption key. It brokers consent; it never sees the money.

Note

This matters when you evaluate AAs. Because they are data-blind, they cannot differentiate on the data — every AA delivers the same bytes. They differentiate on consent success rate, FIP coverage and uptime, and those are the only three things worth measuring in a trial.

The scale, as of 31 December 2025: around 2.61 billion accounts enabled for sharing, 252.9 million users with linked accounts, 126 institutions live as both FIP and FIU, and another 50 as FIP only. This is not a pilot.

What it is not:

  • Not screen scraping. No credentials, ever. If your flow asks for a net-banking password, you have built the thing AA exists to replace.
  • Not a data purchase. You get what the customer consented to, for as long as they consented, for the purpose you named.
  • Not open to everyone. See step 1.

The whole journey, in one table

#StepIn plain words
1Can you even be an FIU?You must be regulated by RBI, SEBI, IRDAI or PFRDA. Most startups cannot.
2Scope both modulesFetching and serving. This is the half everyone forgets.
3Pick your AA, or severalCoverage and consent success rate, not price.
4Write the consent requestPurpose, scope, duration, frequency. This is a legal document in JSON.
5Hand over to the AAThe customer consents in the AA's app, not yours. Design for the handoff.
6Fetch and decryptThe part that is genuinely just engineering.
7Use it — only for what you saidPurpose limitation is not a suggestion.
8Revocation and expiryWhat you delete, and when, and how you prove it.
Note

Steps 1, 2 and 8 are where the money and the risk are. Steps 4 to 6 are a solved commodity on the happy path — the ReBIT specification is published, the calls are named, and a competent team gets a fetch working in a fortnight.

IntermediateBuild it. Pipelines, tools and working code.

Steps 1 and 2 — eligibility, and the module everyone forgets

Step 1 — Can you even be an FIU?

You must be registered with and regulated by RBI, SEBI, IRDAI or PFRDA. A fintech with no NBFC licence, no lending licence and no adviser registration cannot be an FIU. There is no partial route.

RouteWhat it means
Get regulatedNBFC, investment adviser, insurer, whatever fits the business. Months, and a permanent compliance function.
Partner with a regulated entityThey are the FIU; you build the product layer. Fast, and the data-use decisions are theirs.
Become an AA yourselfAn RBI-licensed NBFC-AA: ₹2 crore Net Owned Fund before the certificate, no storage or caching of financial data, tested DR and business continuity, three board committees, periodic IS audits.
Watch out

If you are considering the third row: the commonly cited reasons applications stall are incomplete technical documentation, not reaching the ₹2 crore Net Owned Fund before the certificate is issued, a poor consent-revocation interface, and skipped IS audits or DR drills. Three of those four are engineering problems that arrive disguised as paperwork.

Step 2 — Scope both modules

What it does: the part of the project that doubles the estimate.

Since October 2023, a regulated entity joining as an FIU must also join as an FIP if it holds financial information. The rule exists to stop free-riding: you cannot take from the ecosystem without contributing to it.

ModuleWhat it doesUsually estimated?
FIU sideRequest consent, fetch, decrypt, use.Yes. This is what people mean by “AA integration”.
FIP sideReceive consent artefacts, validate their signatures, and serve your data to whoever asks with valid consent — including competitors.No. And it has harder availability requirements, because now you are the dependency.

The FIP side is the more demanding build. As an FIU, a slow response is your problem. As an FIP, a slow response is someone else's customer failing to get a loan, and your uptime becomes an ecosystem metric.

Steps 3 and 4 — choosing an AA and writing the consent

Step 3 — Pick your AA

Because every AA is data-blind, they all deliver identical bytes. There are exactly three things worth measuring, and none of them is the per-fetch price.

MeasureWhy it decides the product
FIP coverageWhich banks your actual customers use. A 95% coverage figure is meaningless if the missing 5% is where your segment banks.
Consent success rateThe share of started journeys that end in delivered data. This is the number. It moves conversion more than anything you control.
Uptime, and FIP-level uptimeAn AA that is up while a major FIP is down is still a failed fetch for your customer. Ask for the breakdown, not the headline.
Note

Use more than one AA. They cost little to run in parallel, coverage differs, and consent success rate differs by AA and by FIP. Routing a customer to the AA with the best success rate for their bank is a real conversion gain and it is invisible if you only integrated one.

Step 4 — Write the consent request

Python — step 4, the consent artefact, which is a legal document in JSON
from datetime import datetime, timedelta, timezone
IST = timezone(timedelta(hours=5, minutes=30))

# Everything you are allowed to do with this data is decided HERE, before the
# customer sees anything. Over-ask and they decline. Under-ask and you go back
# for a second consent, which they will also decline.

def build_consent_request(customer, use_case):
    now = datetime.now(IST)
    return {
        # WHY. Must be a permitted purpose code, and it binds you at step 7.
        "Purpose": {
            "code": use_case["purpose_code"],       # e.g. "101" wealth, "103" lending
            "text": use_case["purpose_text"],       # shown to the customer, in plain words
            "refUri": use_case["policy_url"],
        },
        # WHAT. Narrow it. "All accounts, all history" reads as a fishing trip.
        "fiTypes": use_case["fi_types"],            # ["DEPOSIT"] not everything
        "consentTypes": ["TRANSACTIONS", "PROFILE", "SUMMARY"],

        # HOW FAR BACK. Ask for what your model uses, not what it might use.
        "FIDataRange": {
            "from": (now - timedelta(days=use_case["lookback_days"])).isoformat(),
            "to":   now.isoformat(),
        },
        # HOW LONG, and HOW OFTEN. A one-off underwriting pull is ONE fetch.
        # A monitoring use case is recurring -- and needs saying out loud.
        "consentStart": now.isoformat(),
        "consentExpiry": (now + timedelta(days=use_case["consent_days"])).isoformat(),
        "fetchType": use_case["fetch_type"],        # "ONETIME" | "PERIODIC"
        "Frequency": use_case.get("frequency"),     # only if PERIODIC
        "DataLife":  {"unit": "MONTH", "value": use_case["retain_months"]},
        "DataFilter": use_case.get("filters", []),

        "customerId": customer["aa_handle"],        # name@aa, not your user id
    }

# WHAT TO CHECK
# [ ] ONETIME vs PERIODIC is a product decision, not a default. A periodic
#     consent for a one-off underwriting decision is over-collection and it is
#     the first thing a reviewer will ask about
# [ ] DataLife is how long you may KEEP it, separate from how long the consent
#     runs. Two different clocks, two different obligations
# [ ] lookback_days matches what your model actually consumes. Asking 24 months
#     to use 6 is over-collection you cannot justify
# [ ] purpose_text is written for a human, not copied from the code table. The
#     customer reads this in the AA app and decides there
# [ ] store the SIGNED ARTEFACT you received, not your request. The artefact is
#     the permission; your request was a proposal
# [ ] one consent per purpose. Bundling lending and marketing into one request
#     is how a whole ecosystem loses consent success rate

The gotcha nobody documents: two clocks. consentExpiry is how long your permission to fetch lasts. DataLife is how long you may keep what you already fetched. Teams set one and assume it governs both, then either delete data they were entitled to retain, or — much worse — retain data whose life expired months ago. Model them as two independent timers from the start, because retrofitting a retention clock onto a warehouse is genuinely painful.

Steps 5 and 6 — the handoff and the fetch

Steps 5 and 6 — The handoff and the fetch

Python — steps 5 and 6, the handoff and the fetch
# STEP 5. The customer leaves your app, consents inside the AA's app, and comes
# back. That redirect is where most drop-off happens, and it is the part you can
# actually influence.

def start_consent_journey(consent_request, aa_client, session):
    art = aa_client.create_consent(consent_request)     # returns consentHandle
    return {
        "redirect_url": art["redirectUrl"],
        "consent_handle": art["consentHandle"],
        # Save EVERYTHING you will need when they come back. They may return on
        # a different device, an hour later, or not at all.
        "resume_token": persist_session(session, art["consentHandle"]),
        # Tell them what is about to happen. An unexplained redirect to an
        # unfamiliar brand is the single biggest cause of abandonment here.
        "explain": "You'll approve this with your Account Aggregator, then come "
                   "straight back. We never see your banking password.",
    }

# STEP 6. Poll for the artefact, then fetch, then decrypt.
def fetch_when_ready(consent_handle, aa_client, keys):
    status = aa_client.consent_status(consent_handle)
    if status["status"] == "PENDING":
        return {"state": "waiting"}                     # customer still deciding
    if status["status"] in ("REJECTED", "EXPIRED"):
        return {"state": "no_consent", "reason": status["status"]}

    artefact = aa_client.get_consent(status["consentId"])
    verify_signature(artefact)                          # NOT optional
    store_artefact(artefact)                            # the permission itself

    sess = aa_client.create_fi_request(artefact, keys["public"])
    data = aa_client.fetch_fi(sess["sessionId"])        # encrypted payload
    return {"state": "ready",
            "records": [decrypt(d, keys["private"]) for d in data["FI"]]}

# WHAT TO CHECK
# [ ] VERIFY THE ARTEFACT SIGNATURE. It is the only thing proving the customer
#     actually consented. Skipping it because "it came from the AA" removes the
#     entire security property of the framework
# [ ] the redirect explains itself BEFORE it happens, and names the AA. An
#     unexplained jump to an unknown brand is the main drop-off cause
# [ ] resume works on a different device and after a delay. Consent journeys are
#     abandoned and resumed hours later far more often than teams assume
# [ ] PENDING is normal and can last minutes. Poll with backoff; never block a
#     user-facing request on it
# [ ] private keys live in a KMS or HSM, never in application config. You are
#     holding the only thing standing between an encrypted payload and a breach
# [ ] a failed fetch is reported to the customer in plain words, with a retry.
#     "Something went wrong" after they just approved data sharing reads as a
#     betrayal of the trust they extended thirty seconds ago
# [ ] log every step with the consent handle. Disputes are reconstructed from it

The gotcha nobody documents: the redirect is the product. Everything else on this page is compliance and engineering; the moment a customer leaves your app for an unfamiliar third-party brand is where the conversion actually happens or does not. Explain what is about to occur, name the AA, and say explicitly that you never see their banking password — because a meaningful share of people assume you will, and abandon for exactly that reason.

Steps 7 and 8 — purpose, revocation and deletion

Step 7 — Use it, only for what you said

Purpose limitation is enforceable. You named a purpose in the consent, the customer approved that, and using the data for something else is a breach of the consent and a DPDP problem at the same time.

Three rules that keep this simple:

  • Tag every record with the consent id it arrived under. Then “may we use this for X” is a query, not a meeting.
  • A new purpose needs a new consent. Not a wider one next time — a separate one, for the new thing.
  • Derived data inherits the purpose. A score computed from AA data is AA data. This is the same rule as embeddings inheriting residency in Build Sheet 08, and it is missed for the same reason: the derived artefact does not look like the source.

Step 8 — Revocation and expiry

The customer can revoke at any time. Your system must handle that arriving without warning, for a customer mid-journey, on a Sunday.

EventWhat must happen
RevokedStop fetching immediately. Existing data is governed by DataLife, not deleted on the spot — but no new fetches, ever, under that consent.
Consent expiredSame. Fetching on an expired consent is the clearest possible breach.
DataLife expiredDelete. Including from backups, derived tables and any model training set it reached.
Watch out

“Delete” is the hardest word on this page. Financial data fetched for underwriting typically lands in a warehouse, a feature store, a model training set and a backup within its first hour. A retention clock that only deletes the primary record has deleted almost nothing. Decide, before your first fetch, where AA data is allowed to go — and keep that list short, because every destination is a place you will have to delete from later and prove that you did.

What it costs

Account Aggregator — what it costs

Verified September 2026
Being an FIUdirect
The licence you already hold, or a partnership. The regulatory status is the entry cost, not the integration.
Per fetchdirect
AAs charge per successful data fetch, commercially negotiated and modest at volume. Not the number that decides anything — consent success rate moves your economics far more than per-fetch price.
The FIU moduledirect
Consent, fetch, decrypt, store. Weeks for a competent team. ReBIT specifications are published and the calls are named, so the happy path is a solved commodity.
The FIP moduledirect
The half that is missed. Receive and validate artefacts, serve your own data on demand, with availability that matters to other firms' customers. Budget roughly the same again as the FIU side, plus ongoing uptime obligations.
Becoming an AAdirect
₹2 crore Net Owned Fund before the certificate, three board committees, periodic IS audits, tested DR, and a no-storage architecture. A licensed business, not a feature.
Certification and membershipdirect
Certification by a Sahamati-empanelled auditor, plus ecosystem membership fees by category. Small next to the build, and a gating item on timelines.
Retention and deletiondirect
Quietly the expensive one. Every destination AA data reaches is somewhere you must later delete from and evidence the deletion. This is engineering time, not licence cost.
Where to buy these: Infrastructure Build Sheet names every tool with its unit cost. Getting Access covers which ones you can sign up for today, which need a sales call, and which are licensed.
Note

The number to optimise is consent success rate, and almost nobody instruments it. Measure it per AA, per FIP and per step of the journey — started, redirected, approved, delivered. A 10-point improvement there is worth more than any price negotiation you will have, and it is entirely within your control at the redirect.

AdvancedShip it. Failure modes, thresholds and evidence.

Three versions you could build

The starting version

Build: partner with a regulated entity as FIU → one AA → a single narrow consent for one purpose → a clearly explained redirect → fetch, decrypt, store with the consent id attached → a manual revocation process.

It breaks when: you need a bank the AA does not cover, or a second purpose.

The proper version

Build: everything above, plus — two or three AAs with routing by FIP coverage and success rate → both modules, FIU and FIP, scoped from day one → consent and DataLife as separate enforced timers → every record tagged with its consent id → a written list of permitted destinations for AA data → automated deletion covering warehouse, features and backups → consent success rate instrumented per AA, per FIP, per step.

Trade: the deletion machinery is real work for a benefit nobody sees until it is needed. Build it early anyway, because it is far harder to add once data has spread.

Becoming the AA

Build: an RBI-licensed NBFC-AA. A different business with a different balance sheet, board committees and audit regime.

Use when: consent management is your product. Not because you want better terms on fetches.

Note

If you take one thing from this page: scope the FIP module in your first estimate. It is the half that is forgotten, it is the harder half, and discovering it mid-project is how an eight-week integration becomes a quarter.

What goes wrong

What goes wrongWhyFix
The estimate is half the workOnly the FIU module was scoped.FIP module from day one.
Consent success rate is poorThe redirect is unexplained.Say what happens next and name the AA before you send them.
Signature never verified“It came from the AA, so it is fine.”Verify. It is the whole security property.
Data retained past DataLifeOnly consent expiry was modelled.Two independent clocks.
Deletion misses the warehouseThe retention job deletes the primary record only.A written destination list, enforced.
A score outlives its consentDerived data was not treated as AA data.Derived inherits purpose and retention.
Coverage gap for your segmentA headline coverage number was accepted.Test with your own customers' banks.
One consent bundles several purposesIt seemed efficient.One consent per purpose.

Where to go next

Watch out

This page is a guide, not a specification. The Account Aggregator framework is RBI-regulated and consented financial data carries obligations under both the framework and the DPDP Act. Nothing here is legal advice. Have your consent wording, retention design and deletion process reviewed by qualified counsel before your first real fetch.

Sources

Every figure, rule and date on this page, and where to check it. Entries are typed so you can see which are primary-sourced and which are industry reporting.

  1. officialRBI Master Direction — NBFC-Account Aggregator (2 September 2016, as amended) — the AA licence, the data-blind architecture, the no-storage requirement and the ₹2 crore Net Owned Fund. Amended to add GSTN (2022), NPS record-keepers (2023) and CCIL (2024) as FIPs. www.rbi.org.in
  2. officialRBI circular, October 2023 — the bilateral mandate — a regulated entity joining as an FIU must also join as an FIP if it holds financial information. www.rbi.org.in
  3. officialReBIT technical specifications — the consent artefact structure, the API sequence and the encryption scheme every party implements. api.rebit.org.in
  4. officialSahamati — ecosystem participant lists, the live metrics quoted here, certification and membership categories. RBI recognised Sahamati as the AA self-regulatory organisation on 5 June 2026. sahamati.org.in
  5. officialDPDP Act, 2023 — consent, purpose limitation and erasure obligations that sit alongside the AA framework rather than replacing it. www.meity.gov.in
  6. industryEcosystem scale figures (31 December 2025) — 2.61 billion accounts enabled, 252.9 million users with linked accounts, 126 institutions as both FIP and FIU, 50 FIP-only. Published ecosystem metrics; check the current dashboard before quoting.

Checked September 2026. Ecosystem figures move monthly; the date is part of the claim.

Ask an AI about this page

Opens your assistant with this page as the source, and a question rather than a summary. It will ask what you are building before it answers.

Nothing is sent from here. The link carries only this page’s title and address.