# Sources — verified 2026-09-18

Every endpoint below was probed live on 2026-09-18 from the Zo sandbox and, where
noted, from ThinkPad (IN residential IP). Method column = what the fetcher must do.

## NPCI product statistics (Strapi JSON API behind SPA)

The SPA (www.npci.org.in) is behind an Akamai bot wall for curl (403 on any path,
sandbox AND ThinkPad). But the SPA calls a clean JSON API, and **inside a browser
context the API is fully fetchable** — `fetch()` from an agent-browser session works.
Sandbox browser works; no ThinkPad needed for NPCI.

### API endpoints
- Tabs catalog: `GET https://www.npci.org.in/api/product-statistic/tabs?locale=en`
  → full inventory: products, tab slugs, tab_type (excel/pdf/image/None), year_range[] per tab.
- Tab data: `GET https://www.npci.org.in/api/product-statistic/tab/detail?product_name=<p>&tab_name=<slug>&year_range=<FY>&excel_type=monthly&page_no=1&page_size=<n>&locale=en`
  → `{status:200, data:{table_headers:{headers:[{header_name,header_key,...}]}, totalCount, results:[{month, <header_key>:value, ...}]}}`
  Headers are self-describing (`volume_in_mn`, `value_in_cr`, `no_of_banks_live_on_upi`) → stable schema mapping.

### Verified pull
- `product_name=upi&tab_name=product-statistics-upi&year_range=2016-17` → 12 rows,
  March-2017: 44 banks, 6.37 mn, ₹2,425.14 cr. Full history = iterate FYs 2016-17..2026-27 (11 calls).

### Tab inventory (52 tabs / 9 products, from tabs API 2026-09-18)
| Product | Tab | tab_slug | Notes |
|---|---|---|---|
| Upi | UPI | product-statistics-upi | FY2016-17..2026-27, monthly v/v/banks |
| Upi | Daily Statistics | upi-daily-statistics | excel |
| Upi | Monthly Statistics | upi-monthly-statistics | FY2021-22.. |
| Upi | Uptime | upi-uptime | non-excel tab |
| Upi | Downtime/Incidents | upi-downtime | excel |
| Upi | IPO Mandate Creation / Execution | mandate-creation / mandate-execution | excel |
| IMPS | IMPS Statistics | product-statistics-imps | FY2013-14.. |
| IMPS | Month Wise FIR | month-wise-fir | FY2022-23.. |
| Aeps | AePS Product Statistics | aeps | FY2017-18.. |
| Aeps | BHIM Aadhaar Pay / Cash Withdrawal / Funds Transfer (monthly+daily) | aeps-* | monthly FY2021-22.. |
| Nach | NACH-Credit / NACH-Debit | nach-credit / nach-debit | FY2013-14.. |
| Nach | MMS | mms | FY2017-18.. |
| Nach | APBS monthly/daily | nach-apbs* | |
| CTS | Southern/Western/Northern/National grid + monthly/daily | *-grid, cts-* | |
| NFS | Volume, district-wise, member banks, WLAs, downtime, uptime, monthly/daily | nfs-* | district-wise = interesting geo dataset |
| NETC | FASTag statistics, daily/monthly, uptime | netc-* | FY2016-17.. |
| Bhim | Monthly Statistics | product-statistics-bhim | FY2016-17.. |
| e-RUPI | e-rupi | e-rupi | excel |

### Ecosystem statistics page = links hub → RBI sources
`https://www.npci.org.in/product/upi/ecosystem-statistics` renders links to:
- Bankwise Data of Volumes → `https://rbi.org.in/scripts/NEFTView.aspx`
- Bank-wise ATM/POS/Card statistics → `https://rbi.org.in/scripts/ATMView.aspx`
- RBI Payment System Indicators → `https://www.rbi.org.in/Scripts/PSIUserView.aspx`
- RBI Bulletin → `https://www.rbi.org.in/Scripts/BS_ViewBulletin.aspx`

## RBI endpoints (curl-friendly from sandbox, 200 OK)

| Source | URL | Status | Fetch method |
|---|---|---|---|
| DBIE portal | https://data.rbi.org.in | 200 | portal pages; report APIs to map in Phase 1 |
| Payment System Indicators (monthly) | https://www.rbi.org.in/Scripts/PSIUserView.aspx | 200 (101 KB) | ASP.NET postback form → month select → export. No inline table, no direct .xlsx link. Use browser automation or ViewState emulation. |
| Bank-wise volumes | https://rbi.org.in/scripts/NEFTView.aspx | 200 (101 KB) | same pattern as PSI |
| Bank-wise ATM/POS/Card | https://rbi.org.in/scripts/ATMView.aspx | 200 (110 KB) | same pattern as PSI |
| CIMS (new data portal) | https://cims.rbi.org.in | **refused from sandbox; 200 from ThinkPad (IN)** | fetch via ThinkPad/ocitwo (Indian vantage) |

## Fetch-method decision matrix
1. **NPCI JSON API** — browser-context fetch via agent-browser (session carries Akamai cookies). One script: load any npci.org.in page once, then fetch() all API calls in-page. No ThinkPad needed.
2. **RBI legacy .aspx pages** (PSI, NEFTView, ATMView) — agent-browser page interaction (select month, click export), or postback emulation if Phase 1 proves it stable.
3. **CIMS** — from ThinkPad or ocitwo only (geo-blocked from sandbox).
4. **DBIE** — curl first; map report-export URLs in Phase 1.

## Gaps noticed (candidates, not blockers)
- RuPay / BBPS / *99# have no tab in the NPCI statistics API (RuPay card stats come via RBI; BBPS has its own site).
- NFS has district-wise ATM stats (geo dataset — differentiating feature for the hub).
- UPI uptime/downtime tabs exist (reliability tracking — consumer-relevant angle).
