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.
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:
| Role | Who | What they do |
|---|---|---|
| FIP | Banks, NBFCs, insurers, depositories, GSTN, NPS record-keepers, CCIL | Holds the customer's data. |
| AA | An RBI-licensed NBFC | Moves the data. Cannot read it. |
| FIU | You | Consumes 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.
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
| # | Step | In plain words |
|---|---|---|
| 1 | Can you even be an FIU? | You must be regulated by RBI, SEBI, IRDAI or PFRDA. Most startups cannot. |
| 2 | Scope both modules | Fetching and serving. This is the half everyone forgets. |
| 3 | Pick your AA, or several | Coverage and consent success rate, not price. |
| 4 | Write the consent request | Purpose, scope, duration, frequency. This is a legal document in JSON. |
| 5 | Hand over to the AA | The customer consents in the AA's app, not yours. Design for the handoff. |
| 6 | Fetch and decrypt | The part that is genuinely just engineering. |
| 7 | Use it — only for what you said | Purpose limitation is not a suggestion. |
| 8 | Revocation and expiry | What you delete, and when, and how you prove it. |
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.
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.
| Route | What it means |
|---|---|
| Get regulated | NBFC, investment adviser, insurer, whatever fits the business. Months, and a permanent compliance function. |
| Partner with a regulated entity | They are the FIU; you build the product layer. Fast, and the data-use decisions are theirs. |
| Become an AA yourself | An 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. |
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.
| Module | What it does | Usually estimated? |
|---|---|---|
| FIU side | Request consent, fetch, decrypt, use. | Yes. This is what people mean by “AA integration”. |
| FIP side | Receive 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.
| Measure | Why it decides the product |
|---|---|
| FIP coverage | Which banks your actual customers use. A 95% coverage figure is meaningless if the missing 5% is where your segment banks. |
| Consent success rate | The 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 uptime | An 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. |
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
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
# 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.
| Event | What must happen |
|---|---|
| Revoked | Stop fetching immediately. Existing data is governed by DataLife, not deleted on the spot — but no new fetches, ever, under that consent. |
| Consent expired | Same. Fetching on an expired consent is the clearest possible breach. |
| DataLife expired | Delete. Including from backups, derived tables and any model training set it reached. |
“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 2026The 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.
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.
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 wrong | Why | Fix |
|---|---|---|
| The estimate is half the work | Only the FIU module was scoped. | FIP module from day one. |
| Consent success rate is poor | The 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 DataLife | Only consent expiry was modelled. | Two independent clocks. |
| Deletion misses the warehouse | The retention job deletes the primary record only. | A written destination list, enforced. |
| A score outlives its consent | Derived data was not treated as AA data. | Derived inherits purpose and retention. |
| Coverage gap for your segment | A headline coverage number was accepted. | Test with your own customers' banks. |
| One consent bundles several purposes | It seemed efficient. | One consent per purpose. |
Where to go next
Credit & Underwriting
What you do with the bank statements once they arrive, and the hybrid architecture around the model.
BNPL Checkout
Where an AA fetch runs at checkout latency, on every transaction rather than every application.
Wealth & Advisory
AA as the route to a real fact find, rather than a self-reported one.
Infrastructure
Residency, key management, and why derived data inherits the restrictions of its source.
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.
- 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
- 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
- officialReBIT technical specifications — the consent artefact structure, the API sequence and the encryption scheme every party implements. api.rebit.org.in
- 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
- officialDPDP Act, 2023 — consent, purpose limitation and erasure obligations that sit alongside the AA framework rather than replacing it. www.meity.gov.in
- 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.