WIB Public API
Free JSON endpoints for India's verified hospital and restaurant data โ 463 hospitals + 605 restaurants across 36 cities. No signup, no API key, no rate limits. CORS-enabled for browser fetches. CC-BY 4.0 license. Use it for journalism, research, prototypes, dashboards, and apps.
No signup
No API key, no auth header. Just GET.
CORS-enabled
Fetch directly from any web app.
Static JSON
CDN-cached. Fast everywhere.
CC-BY 4.0
Attribute WIB; everything else is yours.
Quickstart
Open this URL in a browser โ you'll get back the full hospital dataset as JSON:
https://wibest.in/data/json/hospitals.json
From JavaScript / browser:
const res = await fetch('https://wibest.in/data/json/hospitals.json'); const json = await res.json(); // json.count = 463, json.data = [...] console.log(json.data[0]);
From Python (pandas):
import pandas as pd df = pd.read_json('https://wibest.in/data/json/hospitals.json', orient='records')['data'] # or use the CSV directly: df = pd.read_csv('https://wibest.in/data/csv/wib-hospitals-all.csv')
From curl:
curl https://wibest.in/data/json/hospitals.json | jq '.data[] | select(.nabh == true)'Endpoints
Hospitals
Complete dataset. All 463 hospitals across 36 cities. ~88 KB. Header object includes name, version, license, count; payload is data array.
Per-city slice. Pre-filtered, smaller payload. Slugs are lowercase, hyphenated: bangalore, navi-mumbai, pimpri-chinchwad. 36 available.
CSV variant of the per-city slice. Same data, comma-separated. Easier for spreadsheet imports.
Restaurants
Complete dataset. All 605 restaurants across 28 cities. ~92 KB.
Per-city slice. 28 cities available. Same slug convention as hospitals.
Response schema
All combined and per-city JSON responses follow this shape:
{
"name": "WIB India Hospitals Dataset 2026",
"version": "2026-05-06",
"license": "CC-BY-4.0",
"source": "https://wibest.in/data/",
"count": 463,
"data": [
{
"name": "Apollo Hospital Chennai",
"city": "Chennai",
"type": "Private",
"beds": 3200,
"rating": 4.5,
"specialties": ["Cardiology", "Oncology", ...],
"nabh": true,
"address": "21 Greams Lane, Chennai 600006"
},
...
]
}Hospital record fields
| Field | Type | Description |
|---|---|---|
| name | string | Hospital name as it appears on the hospital's own website. |
| city | string | City name (e.g., "Bangalore", "Navi Mumbai"). 36 distinct cities. |
| type | string | One of: Private, Government, Trust. |
| beds | number | null | Bed count, or null if not publicly reported. |
| rating | number | null | Editorial 1-5 rating normalised from public review aggregates. |
| specialties | string[] | Up to 5 primary specialties the hospital highlights. |
| nabh | boolean | NABH accreditation status. true only if currently listed on NABH registry. |
| address | string | Verified street address with pincode. |
Restaurant record fields
| Field | Type | Description |
|---|---|---|
| name | string | Restaurant name. |
| city | string | City name. 28 distinct cities. |
| cuisines | string[] | Up to 4 cuisines per restaurant. Editorial tagging. |
| rating | number | Editorial 1-5 rating from public review aggregates. |
| budget_tier | string | One of: under_500, 500_to_2000, above_2000 (per person, INR). |
| address | string | Verified street address. |
| vegetarian | boolean | true only for strictly vegetarian restaurants. |
Patterns & recipes
Filter by NABH-accredited hospitals in a city
const r = await fetch('/data/api/hospitals/bangalore.json'); const json = await r.json(); const nabhOnly = json.data.filter(h => h.nabh); console.log(nabhOnly.length, 'NABH hospitals in', json.city);
Find top-rated cardiology hospitals across India
const r = await fetch('/data/json/hospitals.json'); const json = await r.json(); const cardio = json.data .filter(h => h.specialties.includes('Cardiology') || h.specialties.includes('Cardiac Surgery')) .sort((a, b) => (b.rating || 0) - (a.rating || 0)) .slice(0, 10);
Pandas: NABH coverage by city
import pandas as pd df = pd.read_csv('https://wibest.in/data/csv/wib-hospitals-all.csv') nabh_by_city = df.groupby('city')['nabh'].agg(['sum', 'count']) nabh_by_city['rate'] = nabh_by_city['sum'] / nabh_by_city['count'] print(nabh_by_city.sort_values('rate', ascending=False))
Rate limits & reliability
- No rate limits. Files are static JSON/CSV served by GitHub Pages โ there's nothing to rate-limit beyond Cloudflare's defaults (which are generous).
- Caching is your friend. Each combined dataset is ~90KB. If you're fetching often, cache it client-side or server-side for at least an hour. The data updates weekly at most.
- Versioning. The header object's
versionfield is a date stamp. Pin to it if your app needs stable references; otherwise the URL always returns the latest snapshot. - Changelog. Major dataset updates are logged at /data/changelog/.
License & attribution
All data is published under Creative Commons Attribution 4.0 (CC-BY 4.0). You can use it commercially, modify it, redistribute it โ the only requirement is attribution.
Suggested attribution:
Data source: <a href="https://wibest.in/data/">WIB Open Data</a>, CC-BY 4.0
For academic citation:
@misc{wib_hospitals_2026,
author = {WIB Editorial},
title = {WIB India Hospitals Dataset 2026},
year = {2026},
url = {https://wibest.in/data/},
license = {CC-BY-4.0}
}Roadmap
- Schools and colleges open data export is queued โ same JSON + CSV pattern as hospitals/restaurants. ETA: June 2026.
- Historical snapshots. Quarterly versioned datasets so researchers can study how Indian hospital/restaurant landscapes change over time.
- Geo lookups. Filter by state, lat/lng radius, or postal pincode.
- Aggregate endpoints. Pre-computed summaries (NABH coverage by city, cuisine distribution, etc.) so you don't need to load the full dataset for basic metrics.
Want something specific? Email hello@wibest.in with what you need.