Home › API

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.

๐Ÿงช Try it without writing code
Interactive API Explorer โ€” pick a city, hit Fetch, see live JSON, copy curl/JS/Python snippets.
Open Explorer โ†’
โšก

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:

URL
https://wibest.in/data/json/hospitals.json

From JavaScript / browser:

JS
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):

Python
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
curl https://wibest.in/data/json/hospitals.json | jq '.data[] | select(.nabh == true)'

Endpoints

Hospitals

GET /data/json/hospitals.json

Complete dataset. All 463 hospitals across 36 cities. ~88 KB. Header object includes name, version, license, count; payload is data array.

GET /data/api/hospitals/<city-slug>.json

Per-city slice. Pre-filtered, smaller payload. Slugs are lowercase, hyphenated: bangalore, navi-mumbai, pimpri-chinchwad. 36 available.

GET /data/csv/wib-hospitals-<city-slug>.csv

CSV variant of the per-city slice. Same data, comma-separated. Easier for spreadsheet imports.

Restaurants

GET /data/json/restaurants.json

Complete dataset. All 605 restaurants across 28 cities. ~92 KB.

GET /data/api/restaurants/<city-slug>.json

Per-city slice. 28 cities available. Same slug convention as hospitals.

Response schema

All combined and per-city JSON responses follow this shape:

JSON
{
  "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

FieldTypeDescription
namestringHospital name as it appears on the hospital's own website.
citystringCity name (e.g., "Bangalore", "Navi Mumbai"). 36 distinct cities.
typestringOne of: Private, Government, Trust.
bedsnumber | nullBed count, or null if not publicly reported.
ratingnumber | nullEditorial 1-5 rating normalised from public review aggregates.
specialtiesstring[]Up to 5 primary specialties the hospital highlights.
nabhbooleanNABH accreditation status. true only if currently listed on NABH registry.
addressstringVerified street address with pincode.

Restaurant record fields

FieldTypeDescription
namestringRestaurant name.
citystringCity name. 28 distinct cities.
cuisinesstring[]Up to 4 cuisines per restaurant. Editorial tagging.
ratingnumberEditorial 1-5 rating from public review aggregates.
budget_tierstringOne of: under_500, 500_to_2000, above_2000 (per person, INR).
addressstringVerified street address.
vegetarianbooleantrue only for strictly vegetarian restaurants.

Patterns & recipes

Filter by NABH-accredited hospitals in a city

JS
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

JS
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

Python
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

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:

HTML
Data source: <a href="https://wibest.in/data/">WIB Open Data</a>, CC-BY 4.0

For academic citation:

BibTeX
@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}
}
Built something with the API? Email hello@wibest.in with what you made. We'll feature it on the /press-coverage/ page and link back to your project.

Roadmap

Want something specific? Email hello@wibest.in with what you need.