Search by task, endpoint, field, or error.
NPI Lookup API
A US provider, specialty, address, and registry status.
Look up a National Provider Identifier in the CMS NPPES registry. You get the checksum verdict and the record: provider name, individual or organization, credential, primary specialty with its NUCC taxonomy code, practice address, and phone. Junk or a failed checksum answers valid: false as a 200, never a 404. A checksum-valid number the registry does not know answers registered: false with record fields null.
active means the number is not deactivated. deep.deactivated_at is the date CMS published when it is. excluded checks the OIG LEIE exclusion list by NPI, and false is not clearance: LEIE rows without an NPI cannot be matched by number. An NPI is not proof of licensure. We serve the published NPPES dissemination file only. Provider directory data, not PHI.
?deep=true adds deep.deactivated_at, deep.medicare, deep.opt_out, and deep.enrollments on paid plans. medicare is the published FFS enrollment extract. opt_out is the affidavit list, matched by NPI only. false is not clearance. Neither flag is licensure.
Lookup
Parameters 3
- npistring · path · required
The NPI as you have it. Spaces and punctuation fold out
- langstring · query · optional
Display language as one BCP 47 tag, such as fr or zh-Hant. Changes supported display labels only; IDs, codes, native names, facts, parsing and deep access stay unchanged. Omit for the original response. Unsupported regions use the supported language base; unsupported languages or scripts use English. Missing labels retain their source value. Accept-Language is not read automatically. Available on the current API contract; frozen 1.0.0 is unchanged.
- deepboolean · query · optional
Deactivation date and Medicare enrollment detail. Included on paid plans.
import { parseAPI } from '@parseapi/sdk';
const parse = parseAPI("YOUR_API_KEY");
const result = await parse.npi("1881018208");
console.log(result);Run on your server with a secret key. Calling from a browser or app?
{
"npi": "1881018208",
"valid": true,
"registered": true,
"active": true,
"excluded": false,
"type": "organization",
"name": "Mayo Clinic",
"first": null,
"last": null,
"credential": null,
"specialty": "Multi-Specialty Clinic/Center",
"taxonomy": "261QM1300X",
"address": "200 1st St SW",
"city": "Rochester",
"state": "MN",
"state_name": "Minnesota",
"postal": "55905-0001",
"country": "US",
"phone": "+15072842511"
}import { parseAPI } from '@parseapi/sdk';
const parse = parseAPI("YOUR_API_KEY");
const result = await parse.npi("1891058467");
console.log(result);Run on your server with a secret key. Calling from a browser or app?
{
"npi": "1891058467",
"valid": true,
"registered": true,
"active": true,
"excluded": false,
"type": "individual",
"name": "Rasha Abdelsalam",
"first": "Rasha",
"last": "Abdelsalam",
"credential": "MD",
"specialty": "Family Medicine Physician",
"taxonomy": "207Q00000X",
"address": "2283 S Monaco Pkwy Ste 105",
"city": "Denver",
"state": "CO",
"state_name": "Colorado",
"postal": "80222",
"country": "US",
"phone": "+17205312370"
}import { parseAPI } from '@parseapi/sdk';
const parse = parseAPI("YOUR_API_KEY");
const result = await parse.npi("1891-058-467");
console.log(result);Run on your server with a secret key. Calling from a browser or app?
{
"npi": "1891058467",
"valid": true,
"registered": true,
"active": true,
"excluded": false,
"type": "individual",
"name": "Rasha Abdelsalam",
"first": "Rasha",
"last": "Abdelsalam",
"credential": "MD",
"specialty": "Family Medicine Physician",
"taxonomy": "207Q00000X",
"address": "2283 S Monaco Pkwy Ste 105",
"city": "Denver",
"state": "CO",
"state_name": "Colorado",
"postal": "80222",
"country": "US",
"phone": "+17205312370"
}import { parseAPI } from '@parseapi/sdk';
const parse = parseAPI("YOUR_API_KEY");
const result = await parse.npi("1234567890");
console.log(result);Run on your server with a secret key. Calling from a browser or app?
{
"npi": "1234567890",
"valid": false,
"registered": null,
"active": null,
"excluded": null,
"type": null,
"name": null,
"first": null,
"last": null,
"credential": null,
"specialty": null,
"taxonomy": null,
"address": null,
"city": null,
"state": null,
"state_name": null,
"postal": null,
"country": null,
"phone": null
}Deep examples run with your own key. Check this API’s included units and pricing before running.
import { parseAPI } from '@parseapi/sdk';
const parse = parseAPI("YOUR_API_KEY");
const result = await parse.npi("1881018208", { deep: true });
console.log(result);Run on your server with a secret key. Calling from a browser or app?
{
"npi": "1881018208",
"valid": true,
"registered": true,
"active": true,
"excluded": false,
"type": "organization",
"name": "Mayo Clinic",
"first": null,
"last": null,
"credential": null,
"specialty": "Multi-Specialty Clinic/Center",
"taxonomy": "261QM1300X",
"address": "200 1st St SW",
"city": "Rochester",
"state": "MN",
"state_name": "Minnesota",
"postal": "55905-0001",
"country": "US",
"phone": "+15072842511",
"deep": {
"medicare": true,
"opt_out": false,
"enrollments": [
{
"type": "part_b",
"state": "MN",
"specialty": "Clinic/Group Practice"
}
],
"deactivated_at": null
}
}Response fields
- npi
- The number as folded, digits only. Invalid input still echoes the fold
- valid
- 10 digits and the Luhn check digit with the 80840 prefix holds
- registered
- The NPI exists in the NPPES registry. null when the number is invalid
- active
- Not deactivated. null when not registered
- excluded
- On the OIG LEIE exclusion list, matched by NPI only. false is not clearance: many LEIE rows carry no NPI. null when not registered
- type
- individual or organization
- name
- Provider name. Organizations ship the legal business name
- first
- First name. null for organizations
- last
- Last name. null for organizations
- credential
- Credential as the provider registered it (MD, DDS). null for organizations
- specialty
- Primary taxonomy display name from the NUCC code set
- taxonomy
- The primary NUCC taxonomy code
- address
- Practice location street line
- city
- Practice location city
- state
- Practice location state code
- state_name
- State display name
- postal
- Practice location postal code, ZIP+4 when NPPES has it
- country
- Practice location country, ISO 3166-1 alpha-2
- phone
- Practice location phone, E.164
Deep fields
- deep.deactivated_at
- Date CMS deactivated the NPI, YYYY-MM-DD. null when the number is still active or not registered
- deep.medicare
- In the published Medicare FFS enrollment extract. false is not a clearance. null when not registered or not yet stamped. Paid plans
- deep.opt_out
- On the CMS opt-out affidavit list, matched by NPI only. false is not clearance. Paid plans
- deep.enrollments
- Enrollment rows (type, specialty, state). Empty when medicare is false. null when unstamped or not registered. Paid plans
Display language
Pass lang with a language tag such as fr, pt-BR, or zh-Hant. Separately sourced state_name when available. Person names, provider names and addresses stay unchanged.
Omitting lang preserves the original response. Codes, IDs, numeric facts and native-name fields stay unchanged. Missing translations keep their existing source value; unknown values stay null. A preserved name_local may equal the translated name.
Send a chosen browser preference explicitly, for example { lang: navigator.language } in your JavaScript SDK options. The API does not read Accept-Language automatically. Unsupported regions fall back to their supported base language; unsupported languages or scripts use English. Empty, invalid or repeated tags return 400.
Content-Language identifies languages used in translated display fields and known English fallbacks. This option follows the current API contract. Requests selecting frozen 1.0.0 retain that contract. Select API 2.0.0 to use display language.
41 display language choices
| Language tag | Language |
|---|---|
| en | American English |
| zh-Hans | 简体中文 |
| fr | français (France) |
| de | Deutsch |
| it | italiano |
| ja | 日本語 |
| ko | 한국어 |
| es | español de España |
| ar | العربية |
| bg | български |
| ca | català |
| hr | hrvatski |
| cs | čeština |
| da | dansk |
| nl | Nederlands |
| fi | suomi |
| el | Ελληνικά |
| he | עברית |
| hi | हिन्दी |
| hu | magyar |
| id | Indonesia |
| kk | қазақ тілі |
| ms | Melayu |
| nb | norsk bokmål |
| pl | polski |
| pt | português (Brasil) |
| ro | română |
| ru | русский |
| sk | slovenčina |
| sv | svenska |
| th | ไทย |
| tr | Türkçe |
| uk | українська |
| vi | Tiếng Việt |
| zh-Hant | 繁體中文 |
| en-AU | Australian English |
| en-GB | British English |
| fr-CA | français canadien |
| es-419 | español latinoamericano |
| pt-PT | português europeu |
| zh-Hant-HK | 繁體中文(中國香港特別行政區) |
Build with NPI
All tutorials →Questions? Email