Using BankPulse as data, not just a website
BankPulse turns RBI master directions into plain-English points for bankers. This page covers the 11 public resources and endpoints BankPulse already serves live. Most are read-only; one, Ask BankPulse, answers questions. This is a first, honest slice of a fuller API this site is still building.
Every point BankPulse publishes comes from the Reserve Bank of India's own documents at rbi.org.in. No RBI text is copied here.
The machine-readable contract
Everything on this page is generated from one file a machine can read directly: openapi.json (OpenAPI 3.1.0). If this page and that file ever disagree, the file is correct -- this page is only its plain-English reading.
Bulk snapshot
documents.json and mydesk.json are already full corpus dumps. Nothing in them is paged, and nothing is sampled. Both are checked at build time. See each resource's own x-bulk-snapshot note below. No separate bulk-download file or endpoint exists. These two do not need one. A change feed exists too: /changes.json, first published on 12 September 2026. It only adds to its end.
It never rewrites itself. Every recorded change is one numbered event. So a machine can remember the last number it read. It can ask again later and take only what is above that number. A once-a-day bundle exists too. /changes/index.json lists every day. Each day has its own /changes/YYYY-MM-DD.json file. Signed webhooks still do not exist. That is a real gap, and it is not claimed here.
The 11 resources
POST /api/askJSON
Ask BankPulse a question; answered ONLY from BankPulse's own stored plain-English points, never from the model's memory.
Rate limit: 60 requests per hour per hashed requester IP. The limit is RATE_PER_HOUR in src/ask.js. Over the limit the request returns 429-refused below.
GET /ask_index_meta.jsonJSON
Freshness manifest for the answer index that /ask.html searches.
GET /changes.jsonJSON
Every change BankPulse has recorded, one numbered event each, newest first.
GET /changes/index.jsonJSON
Every day the change feed has a bundle for, oldest first, each with a link to that day's own file.
GET /coverage.jsonJSON
Every RBI source BankPulse reads, how often, and when it was last read.
GET /documents.jsonJSON
Every RBI document BankPulse tracks, one row each.
Bulk snapshot: Yes. Every one of the 2022 tracked documents is in this file's "documents" array today. This is checked at build time: the array length equals "tracked". It is not a page and not a sample. No separate dump file or endpoint exists. This GET request already is the full snapshot. It is refreshed on every rebuild (see "generated_at").
GET /feed.xmlXML
RSS 2.0 feed of BankPulse Daily Brief editions.
GET /llms.txttext
Plain-text summary of BankPulse for AI agents and crawlers.
GET /mydesk.jsonJSON
Every RBI document, mapped to the desks and institution kinds it reaches.
Bulk snapshot: Yes. Its "documents" array also holds all 2022 tracked documents. This is checked at build time against documents.json's count. Only the fields differ: desk and institution mapping instead of status and label. It is refreshed on every rebuild (see "generated_ist").
GET /news.jsonJSON
RBI-and-banking news items BankPulse's news page shows.
GET /sitemap.xmlXML
Standard XML sitemap of every live BankPulse URL.
SDK examples
These are real, runnable requests. No key, signup or account is needed for the 10 read-only GET resources below. They use the same https://bankpulse.ai server as the rest of this page. POST /api/ask costs a live model call. Its example is shown here, but it is not run for you. The request shape is exactly what src/ask.js accepts (see /openapi.json).
POST /api/askexample
curl
curl -X POST https://bankpulse.ai/api/ask \
-H "Content-Type: application/json" \
-d '{"q": "What is the minimum capital requirement for a small finance bank?"}'Python
import requests
r = requests.post(
"https://bankpulse.ai/api/ask",
json={"q": 'What is the minimum capital requirement for a small finance bank?'},
)
print(r.json())GET /ask_index_meta.jsonexample
curl
curl https://bankpulse.ai/ask_index_meta.json
Python
import requests
r = requests.get("https://bankpulse.ai/ask_index_meta.json")
data = r.json()
print(data)GET /changes.jsonexample
curl
curl https://bankpulse.ai/changes.json
Python
import requests
r = requests.get("https://bankpulse.ai/changes.json")
data = r.json()
print(data)GET /changes/index.jsonexample
curl
curl https://bankpulse.ai/changes/index.json
Python
import requests
r = requests.get("https://bankpulse.ai/changes/index.json")
data = r.json()
print(data)GET /coverage.jsonexample
curl
curl https://bankpulse.ai/coverage.json
Python
import requests
r = requests.get("https://bankpulse.ai/coverage.json")
data = r.json()
print(data)GET /documents.jsonexample
curl
curl https://bankpulse.ai/documents.json
Python
import requests
r = requests.get("https://bankpulse.ai/documents.json")
data = r.json()
print(data)GET /feed.xmlexample
curl
curl https://bankpulse.ai/feed.xml
Python
import requests
r = requests.get("https://bankpulse.ai/feed.xml")
print(r.text)GET /llms.txtexample
curl
curl https://bankpulse.ai/llms.txt
Python
import requests
r = requests.get("https://bankpulse.ai/llms.txt")
print(r.text)GET /mydesk.jsonexample
curl
curl https://bankpulse.ai/mydesk.json
Python
import requests
r = requests.get("https://bankpulse.ai/mydesk.json")
data = r.json()
print(data)GET /news.jsonexample
curl
curl https://bankpulse.ai/news.json
Python
import requests
r = requests.get("https://bankpulse.ai/news.json")
data = r.json()
print(data)GET /sitemap.xmlexample
curl
curl https://bankpulse.ai/sitemap.xml
Python
import requests
r = requests.get("https://bankpulse.ai/sitemap.xml")
print(r.text)Where to go
Coverage ledger
Every count published anywhere on this site, and where each one comes from.
Open coverage →How we verify
The rules every page and every resource here is built and checked by.
Read the methodology →Tell us about a problem
Found a resource behaving differently from what this page says? Tell us.
Open corrections →