HHS API: Search healthcare providers
Finds US healthcare providers by name, place, specialty and provider type in the NPI Registry, with practice contact details and primary taxonomy. Results may include providers with similar names.
Unofficial. Not affiliated with or endorsed by HHS.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- City optional
city Practice city, for example "Cleveland".
Cleveland
Default
.- Name, required
name Person or organization name, for example "John Smith" or "Cleveland Clinic".
Cleveland Clinic
- State optional
state US state name or two-letter code, for example "Ohio" or "OH".
Ohio
Default
.- Specialty optional
specialty Specialty in plain words, for example "cardiology" or "Family Medicine".
(default)
- Max Results optional
max_results Maximum providers to return, for example 20 (up to 200).
3
Whole number from 1 to 200. Default
20.- Provider Type optional
provider_type Type of provider to find, for example "individual".
organization
One of
any,individual,organization. Defaultany.
Input as JSON
{ "city": "Cleveland", "name": "Cleveland Clinic", "state": "Ohio", "max_results": 3, "provider_type": "organization"}Output
{ "providers": [ { "name": "Cleveland Clinic", "phone": "216-444-2136", "active": "yes", "npi_number": "1275791162", "license_state": null, "provider_type": "Organization", "registry_link": "https://npiregistry.cms.hhs.gov/provider-view/1275791162" , "practice_address": "9500 Euclid Ave, Department Of Radiology- HB6, Cleveland, OH 44195-0001", "primary_specialty": "General Acute Care Hospital" }, { "name": "Cleveland Clinic", "phone": "216-444-6781", "active": "yes", "npi_number": "1356508964", "license_state": null, "provider_type": "Organization", "registry_link": "https://npiregistry.cms.hhs.gov/provider-view/1356508964" , "practice_address": "9500 Euclid Ave, Cleveland, OH 44195-0001", "primary_specialty": "Chronic Disease Hospital" }, { "name": "Cleveland Clinic", "phone": "216-526-5430", "active": "yes", "npi_number": "1336316389", "license_state": null, "provider_type": "Organization", "registry_link": "https://npiregistry.cms.hhs.gov/provider-view/1336316389" , "practice_address": "Cleveland Clinic 9500 Euclid Ave H35, Cardiothoracic Surgery,, Cleveland, OH 44195-0001", "primary_specialty": "General Acute Care Hospital" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"npiregistry.cms.hhs.gov/search_providers","input":{"city":"Cleveland","name":"Cleveland Clinic","state":"Ohio","max_results":3,"provider_type":"organization"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "npiregistry.cms.hhs.gov/search_providers" , "input": { "city": "Cleveland", "name": "Cleveland Clinic", "state": "Ohio", "max_results": 3, "provider_type": "organization" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "npiregistry.cms.hhs.gov/search_providers" , "input": { "city": "Cleveland", "name": "Cleveland Clinic", "state": "Ohio", "max_results": 3, "provider_type": "organization" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run npiregistry.cms.hhs.gov/search_providers# with {"city":"Cleveland","name":"Cleveland Clinic","state":"Ohio","max_results":3,"provider_type":"organization"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "name" ], "properties": { "city": { "type": "string", "default": "", "description": "Practice city, for example \"Cleveland\"." }, "name": { "type": "string", "minLength": 1, "description": "Person or organization name, for example \"John Smith\" or \"Cleveland Clinic\"." }, "state": { "type": "string", "default": "", "description": "US state name or two-letter code, for example \"Ohio\" or \"OH\"." }, "specialty": { "type": "string", "default": "", "description": "Specialty in plain words, for example \"cardiology\" or \"Family Medicine\"." }, "max_results": { "type": "integer", "default": 20, "maximum": 200, "minimum": 1, "description": "Maximum providers to return, for example 20 (up to 200)." }, "provider_type": { "enum": [ "any", "individual", "organization" ], "type": "string", "default": "any", "description": "Type of provider to find, for example \"individual\"." } }}Output schema
{ "type": "object", "required": [ "providers" ], "properties": { "providers": { "type": "array", "items": { "type": "object", "required": [ "name", "provider_type", "primary_specialty", "npi_number", "practice_address", "phone", "license_state", "active", "registry_link" ], "properties": { "name": { "type": [ "string", "null" ], "description": "Provider name and credentials, if listed." }, "phone": { "type": [ "string", "null" ], "description": "Practice location phone number." }, "active": { "type": [ "string", "null" ], "description": "yes or no according to the NPI record." }, "npi_number": { "type": "string", "description": "National Provider Identifier number." }, "license_state": { "type": [ "string", "null" ], "description": "State of the primary specialty license." }, "provider_type": { "type": "string", "description": "Individual or Organization." }, "registry_link": { "type": "string", "description": "Link to the provider record in the NPI Registry." }, "practice_address": { "type": [ "string", "null" ], "description": "Practice location address." }, "primary_specialty": { "type": [ "string", "null" ], "description": "Primary registered specialty." } } }, "description": "Matching healthcare providers." } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
npiregistry.cms.hhs.gov/search_providers- Returns
- name, provider type, primary specialty, NPI number, practice address, phone, license state, active status, registry link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method npiregistry.cms.hhs.gov/search_providers with the inputs above.
Ask your agent
- Find a cardiologist named Patel in Columbus, Ohio with phone number and NPI
- Look up organizations called Mercy Health in Ohio in the NPI registry
- I need individual family medicine providers in Austin, TX with practice addresses
- Search NPI registry for pediatric dentists in Denver, Colorado, up to 50 results
- Which providers named Johnson practice orthopedics in Florida, and is their license active?
See more
All HHS methodsLooks up a provider in the NPI Registry by 10-digit NPI number and returns the public name, specialties, addresses, contact details and registry dates.
npiregistry.cms.hhs.gov/get_providerFinds U.S. nursing homes on Medicare Care Compare by name, city and state, or ZIP code. Results include star ratings, ownership, fines from the last three years, and Care Compare links.
medicare.gov/search_nursing_homesFinds U.S. hospitals by name, city and state, or ZIP code, with Medicare overall and patient survey star ratings, contact details, and Care Compare links. Ratings may be unavailable for some hospitals.
medicare.gov/search_hospitalsFind nearby NHS service listings from a UK postcode or town, nearest first. NHS service search covers England; urgent_care returns A&E listings. Hours, patient availability and websites are null when not shown.
nhs.uk/search_nearby_servicesFinds U.S. nonprofits by organization name, optionally filtered by state and city, with the latest reported revenue and assets.
projects.propublica.org/search_nonprofitsFinds NIH research grants by topic, organisation, or researcher name. Searches the last five fiscal years by default.
reporter.nih.gov/search_grantsFinds PubMed medical and life-science articles by topic, with publication details and free full-text links when PubMed confirms them.
pubmed.ncbi.nlm.nih.gov/search_articlesFinds North American industrial suppliers on Thomasnet for a product or service, optionally narrowed by US state or Canadian province and supplier type, in Thomasnet's public listing order. Certifications come from public certification listings or explicit company-profile claims.
thomasnet.com/search_suppliers