# BBPS biller metadata dump

Everything BBPS biller-catalog we hold, one folder. Collected 2026-11-13 during
NAR-2026-008 (unauthenticated biller-metadata sweep across 33 BBPS web providers).
Canonical schemas are NPCI's; the big catalog is MobiKwik's client bundle.

## Layout

- `catalogs/` — raw biller catalogs as fetched
  - `mobikwik-billerConfig-v4.json` — **the prize**: 1,404 billers / 3,023 input
    fields with per-field validation, from MobiKwik's public CDN, no auth.
    (`billerConfig_v3.json` 132 billers, `v5.json` 159 — legacy/partial sets.)
    Provenance: `mobikwik-billerConfig-v4.provenance.md`.
  - `billavenue-biller-info-sample.xml` + `.provenance.md` — 4-biller BillAvenue
    BillerInfo API response (from public ASP integration code) — shows the *real*
    NPCI-side MDM fields (`billerFetchRequirement`, `billerAdhoc`, param groups).
- `docs/` — canonical schemas
  - `npci-bbps-mdm-circular-006-2022.pdf` + `.txt` — Biller Fetch MDM API XSD
  - `npci-bbps-api-specifications-v13.pdf` + `.txt` — full API spec incl.
    `biller.customerParamGroups` element tree
  - `billavenue-bbps-technical-standards.pdf` — Bill Fetch sample XML
- `normalized/` — queryable flattening of the MobiKwik catalogs
  - `bbps.duckdb` — tables `billers` (1,695 rows: version × category × group ×
    op × flags) and `fields` (3,654 rows: type/regex/min/max per field)
  - `mobikwik-billers.csv`, `mobikwik-fields.csv` — same, as CSV
  - `parse_mobikwik.py` — regenerates everything from `catalogs/*.json`

## Querying

```bash
duckdb normalized/bbps.duckdb
-- consumer-number rules with regexes (2,953 of 3,023 v4 fields carry one):
SELECT biller_group, field_name, regex, min_len, max_len
FROM fields WHERE regex LIKE '%^%' AND version='v4';
-- category spread: broadband 438 · emipayments 431 · electricity 105 ·
-- muncipality 102 · water 77 · insurance 64 · gas 59 · cable 48
```

## Caveats

- `op` codes are **MobiKwik operator codes, not NPCI billerIds** — no join to
  NPCI's registry without a mapping table.
- Client-bundle view: no `billerFetchRequirement`/`billerAdhoc` flags, no
  payment-channel matrices, no `amountOptions` breakups. Those exist only in the
  authenticated CU↔COU MDM API (circular 006).
- Amounts (`min`/`max`) are in **paise**; `min_len`/`max_len` are characters.
- v3/v5 look like stale/partial uploads left on the CDN — treat v4 as current.

## Related

- Sweep case, findings, probe log: `/home/workspace/Narasimha/` (NAR-2026-008)
- Sources/build pipeline: `../../README.md`, `../../SOURCES.md`
