← Docs

Provider API

A US provider, specialty, address, and registry status.

Pass an NPI to get a provider name, primary specialty, practice address, and registry status. Individuals and organizations use the same response.

Lookup

GET
api.parseapi.com/provider/{npi}
Provider details from the imported directory
Explore
Parameters 3
npistring · path · required

NPI text, at most 64 characters. Whitespace, periods, hyphens, and parentheses are removed. Other characters fail validation. Pass raw text to an SDK, or URL-encode once for HTTP.

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.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.provider("1881018208");
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "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",
  "sources": {
    "nppes": null,
    "leie": null,
    "pecos": null,
    "optout": null
  }
}

Read the result

valid
The format and checksum passed. Registration is a separate result.
registered
A record exists in the imported directory. false means no record found.
active
The imported NPI record is not deactivated. It does not establish licensure or current practice.
excluded
The recorded exclusion flag matches by NPI only. false is not clearance.

Unknown fields stay null. A format or checksum failure returns HTTP 200 with valid: false. A store failure with no cached answer returns 503, never a directory miss. Directory records can lag published changes. Core sources reports source editions when known; missing edition evidence stays null. Source publication, coverage and completed import dates are separate.

Input and more examples

Pass text, at most 64 characters. Whitespace, periods, hyphens, and parentheses are removed. Other characters fail validation. Use raw text with an SDK or URL-encode once for HTTP. The lookup returns one primary taxonomy and practice address. Name search and secondary locations are not available.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.provider("1891058467");
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "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",
  "sources": {
    "nppes": null,
    "leie": null,
    "pecos": null,
    "optout": null
  }
}

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.provider("1891-058-467");
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "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",
  "sources": {
    "nppes": null,
    "leie": null,
    "pecos": null,
    "optout": null
  }
}

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.provider("1234567890");
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "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
}
More provider details with deep

Add ?deep=true for the deactivation date, Medicare FFS enrollment, opt-out status, all published taxonomies with reported license numbers and states, and enumeration, record-update and reactivation dates. Included on paid plans with no per-lookup deep charge. Core fields stay the same. Free returns deep: {}. Without the option, deep is omitted.

An empty enrollment list is a known empty result. null means the details are unknown or unavailable. Medicare and opt-out flags do not establish credentialing or payment eligibility. License details are provider-reported; record dates are not source-freshness dates.

Run Provider Deep with a paid-plan key. Provider details are included without a separate lookup charge.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.provider("1881018208", { deep: true });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "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",
  "sources": {
    "nppes": null,
    "leie": null,
    "pecos": null,
    "optout": null
  },
  "deep": {
    "deactivated_at": null,
    "enumerated_at": null,
    "updated_at": null,
    "reactivated_at": null,
    "taxonomies": null,
    "medicare": true,
    "opt_out": false,
    "enrollments": [
      {
        "type": "part_b",
        "state": "MN",
        "specialty": "Clinic/Group Practice"
      }
    ]
  }
}

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). [] when medicare is false or a known empty list. null when details are unknown, unavailable, or not registered. Paid plans
deep.enumerated_at
Published NPPES enumeration date. null when unavailable
deep.updated_at
Provider record update date, not source or request freshness
deep.reactivated_at
Published reactivation date. null when unavailable
deep.taxonomies
All published taxonomies in source order: taxonomy, specialty, primary, license and state. Reported licenses are not verified. null means unavailable; [] means observed empty

Response fields

npi
Input after removing whitespace, periods, hyphens, and parentheses. Other characters remain invalid. null when empty
valid
10 ASCII digits and the Luhn check digit with the 80840 prefix holds. Does not establish registration or licensure
registered
Record found in the imported NPPES directory. false is a directory miss, null means invalid or unknown
active
Not deactivated in the imported record. Does not establish licensure or current practice. null when unknown
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
Primary practice location street line. Other locations are not returned
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
Recorded practice location country, ISO 3166-1 alpha-2. null when absent
phone
Practice phone in E.164 for recognized US/CA numbers. Otherwise recorded digits, or null when absent
sources
NPPES, LEIE, PECOS and opt-out edition metadata on every plan. Unknown sources stay null; dates distinguish publication, coverage and completed import

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 tagLanguage
enAmerican English
zh-Hans简体中文
frfrançais (France)
deDeutsch
ititaliano
ja日本語
ko한국어
esespañol de España
arالعربية
bgбългарски
cacatalà
hrhrvatski
csčeština
dadansk
nlNederlands
fisuomi
elΕλληνικά
heעברית
hiहिन्दी
humagyar
idIndonesia
kkқазақ тілі
msMelayu
nbnorsk bokmål
plpolski
ptportuguês (Brasil)
roromână
ruрусский
skslovenčina
svsvenska
thไทย
trTürkçe
ukукраїнська
viTiếng Việt
zh-Hant繁體中文
en-AUAustralian English
en-GBBritish English
fr-CAfrançais canadien
es-419español latinoamericano
pt-PTportuguês europeu
zh-Hant-HK繁體中文(中國香港特別行政區)

Build with Provider

All tutorials →

Questions? Email