Health — entry 018 of 23
NPPES
NPPES is the CMS registry of every NPI issued to US healthcare providers and organizations, searchable by name, NPI number, taxonomy, or location and returning full enumeration records including addresses, credentials, and specialty codes. It requires no registration or key and is rate-limited only informally by fair-use expectations. A live Origin-header probe against npiregistry.cms.hhs.gov/api returns no Access-Control-Allow-Origin header, so browser-side calls need a proxy.
NPPES is the CMS registry of every NPI issued to US healthcare providers and organizations, searchable by name, NPI number, taxonomy, or location and returning full enumeration records including addresses, credentials, and specialty codes. It requires no registration or key, but every call must carry a version query param — a live GET this run with version omitted returned an HTTP 200 with an Errors envelope rather than a 4xx.
GreatAPIs Score
Auth quickstart
- No API key or registration required. Every call must include
version=2.1(the current documented version) — omitting it does not 404, it returns HTTP 200 with{"Errors":[{"description":"Unsupported Version","field":"version","number":"17"}]}, confirmed live this run.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Search providers by city and state
GEThttps://npiregistry.cms.hhs.gov/api/?version=2.1&city=Baltimore&state=MD&limit=1
{"result_count":1,"results":[{"addresses":[{"address_1":"103 E READ ST","address_purpose":"MAILING","address_type":"DOM","city":"BALTIMORE","country_code":"US","country_name":"United States","fax_number":"410-659-1943","postal_code":"212022403","state":"MD","telephone_number":"410-234-0007"},{"address_1":"103 E READ ST","address_purpose":"LOCATION","address_type":"DOM","city":"BALTIMORE","country_code":"US","country_name":"United States","fax_number":"410-659-1943","postal_code":"212022403","state":"MD","telephone_number":"410-234-0007"}],"basic":{"credential":"Ph.D.","enumeration_date":"2007-04-23","first_name":"STEFFI","last_name":".RESNICK","last_updated":"2025-09-11","middle_name":"BETH","name_prefix":"Dr.","name_suffix":"--","sex":"F","sole_proprietor":"NO","status":"A"},"created_epoch":"1177362431000","endpoints":[],"enumeration_type":"NPI-1","identifiers":[{"code":"01","desc":"Other (non-Medicare)","identifier":"32448","issuer":"MAMSI","state":"MD"},{"code":"01","desc":"Other (non-Medicare)","identifier":"428144001","issuer":"CIGNA","state":"MD"},{"code":"01","desc":"Other (non-Medicare)","identifier":"4673985","issuer":"AETNA","state":"MD"},{"code":"01","desc":"Other (non-Medicare)","identifier":"521456813","issuer":"UNITED HEALTHCARE","state":"MD"},{"code":"01","desc":"Other (non-Medicare)","identifier":"H412S","issuer":"CAREFIRST BC BS MD","state":"MD"},{"code":"01","desc":"Other (non-Medicare)","identifier":"J210","issuer":"CAREFIRST BC BS NCA","state":"MD"}],"last_updated_epoch":"1757623214000","number":"1073731121","other_names":[],"practiceLocations":[],"taxonomies":[{"code":"231H00000X","desc":"Audiologist","license":"0176","primary":false,"state":"MD","taxonomy_group":""},{"code":"237600000X","desc":"Audiologist-Hearing Aid Fitter","license":"0176","primary":true,"state":"MD","taxonomy_group":""}]}]}Developer reference
https://npiregistry.cms.hhs.gov/api/Gotchas & limits
- A search for a nonexistent-but-well-formed NPI is an HTTP 200 with an empty result, not a 404: a live
GET /api/?version=2.1&number=1234567893this run returned{"result_count":0,"results":[]}at status 200 — checkresult_count, never the HTTP status, to detect a no-match. - A malformed
numberparam is also a 200, wrapped in the sameErrorsenvelope used for the missing-versioncase: a liveGET /api/?version=2.1&number=123this run returned{"Errors":[{"description":"NPI must be 10 digits","field":"number","number":"06"}]}at status 200 — always check for anErrorskey before readingresults. limitsilently clamps at 200 instead of erroring: a liveGETwithlimit=201this run still returned exactly"result_count":200in the body, with no warning or error about the requested value being out of range.- No CORS header is sent under any condition: a live GET with an
Origin: https://example.comrequest header this run returned noaccess-control-allow-originin the response at all, confirming the storedcors: no— browser-side calls need a server-side proxy.