Skip to content

API Documentation

Everything you need to integrate NPI lookup and healthcare provider verification into your application.

Authentication

All API requests require an API key passed in the X-API-Key header.

Getting a key

Sign up on the home page with your email to receive a free API key instantly. Keys start with the prefix pv_.

Header format

X-API-Key: pv_your_api_key_here

Base URL

https://api.clearnpi.io/v1

All endpoint paths below are relative to this base URL.

Endpoints

GET/v1/provider/{npi}Look up a provider by NPI
GET/v1/provider/searchSearch providers by name, specialty, or state
GET/v1/provider/{npi}/licenseState license status and expiration
GET/v1/provider/{npi}/exclusionsOIG exclusion check
POST/v1/provider/batchBatch verify up to 100 NPIs
GET/v1/taxonomyList or search taxonomy codes
POST/v1/webhooks/expiryAlert when a license nears expiration
POST/v1/keys/createCreate a free API key
GET/v1/provider/{npi}Look up a provider by NPI

Returns the full provider record for a given NPI, including status, address, specialty, OIG exclusion status, and state licenses.

Path parameters

ParameterTypeRequiredDescription
npistringYes10-digit National Provider Identifier

Response

{
  "npi": "1234567890",
  "entity_type": "individual",
  "first_name": "Sarah",
  "last_name": "Johnson",
  "organization_name": null,
  "gender": "F",
  "specialty": "Family Medicine",
  "taxonomy_code": "207Q00000X",
  "address_line1": "100 Medical Center Dr",
  "city": "Los Angeles",
  "state": "CA",
  "zip_code": "90001",
  "phone": "310-555-0100",
  "latitude": 34.0522,
  "longitude": -118.2437,
  "status": "active",
  "enumeration_date": "2005-04-15",
  "oig_excluded": false,
  "oig_exclusion_date": null,
  "licenses": [
    {
      "state": "CA",
      "license_number": "A123456",
      "license_type": "MD",
      "status": "active",
      "expiration_date": "2026-12-31",
      "last_verified": "2026-03-01"
    }
  ]
}

Example

curl -H "X-API-Key: pv_your_key" \
  https://api.clearnpi.io/v1/provider/1234567890
GET/v1/provider/searchSearch providers by name, specialty, or state

Search the provider database by name, specialty, state, entity type, or status. Returns paginated results.

Query parameters

ParameterTypeRequiredDescription
namestringNoProvider name (partial match)
specialtystringNoMedical specialty
statestringNo2-letter state code
entity_typestringNo"individual" or "organization"
statusstringNo"active", "inactive", or "deactivated"
pageintegerNoPage number (default: 1)
per_pageintegerNoResults per page (default: 20, max: 100)

Response

{
  "total": 142,
  "page": 1,
  "per_page": 20,
  "results": [
    { /* Provider object */ },
    ...
  ]
}

Example

curl -H "X-API-Key: pv_your_key" \
  "https://api.clearnpi.io/v1/provider/search?name=johnson&state=CA&per_page=10"
GET/v1/provider/{npi}/licenseState license status and expiration

Returns state license details for a given provider, including license number, status, and expiration date.

Path parameters

ParameterTypeRequiredDescription
npistringYes10-digit National Provider Identifier

Response

{
  "npi": "1234567890",
  "licenses": [
    {
      "state": "CA",
      "license_number": "A123456",
      "license_type": "MD",
      "status": "active",
      "expiration_date": "2026-12-31",
      "last_verified": "2026-03-01"
    }
  ]
}

Example

curl -H "X-API-Key: pv_your_key" \
  https://api.clearnpi.io/v1/provider/1234567890/license
GET/v1/provider/{npi}/exclusionsOIG exclusion check

Check whether a provider appears on the OIG List of Excluded Individuals/Entities (LEIE). Returns exclusion status and date if applicable.

Path parameters

ParameterTypeRequiredDescription
npistringYes10-digit National Provider Identifier

Response

{
  "npi": "1234567890",
  "oig_excluded": false,
  "exclusion_date": null
}

Example

curl -H "X-API-Key: pv_your_key" \
  https://api.clearnpi.io/v1/provider/1234567890/exclusions
POST/v1/provider/batchBatch verify up to 100 NPIs

Verify up to 100 NPIs in a single request. Returns each provider's verification status and data.

Request body

ParameterTypeRequiredDescription
npisstring[]YesArray of NPI strings (max 100)

Request example

{
  "npis": ["1234567890", "0987654321", "5556667778"]
}

Response

{
  "total_requested": 3,
  "total_found": 2,
  "results": [
    {
      "npi": "1234567890",
      "found": true,
      "provider": {
        "npi": "1234567890",
        "entity_type": "individual",
        "first_name": "Sarah",
        "last_name": "Johnson",
        "organization_name": null,
        "specialty": "Family Medicine",
        "taxonomy_code": "207Q00000X",
        "city": "Los Angeles",
        "state": "CA",
        "status": "active",
        "oig_excluded": false,
        "licenses": [
          { "state": "CA", "status": "active", "expiration_date": "2026-12-31" }
        ]
      },
      "error": null
    },
    {
      "npi": "5556667778",
      "found": false,
      "provider": null,
      "error": "NPI not found"
    }
  ],
  "response_time_ms": 42
}

Example

curl -X POST -H "X-API-Key: pv_your_key" \
  -H "Content-Type: application/json" \
  -d '{"npis":["1234567890","0987654321"]}' \
  https://api.clearnpi.io/v1/provider/batch
GET/v1/taxonomyList or search taxonomy codes

Returns healthcare provider taxonomy codes. Optionally filter by search term. No API key required for this endpoint.

Query parameters

ParameterTypeRequiredDescription
searchstringNoFilter taxonomy codes by keyword

Response

[
  {
    "code": "207Q00000X",
    "grouping": "Allopathic & Osteopathic Physicians",
    "classification": "Family Medicine",
    "specialization": null,
    "display_name": "Family Medicine"
  },
  ...
]

Example

curl "https://api.clearnpi.io/v1/taxonomy?search=cardiology"
POST/v1/webhooks/expiryAlert when a license nears expiration

Subscribe to receive a webhook notification when a provider's license is approaching its expiration date.

Request body

ParameterTypeRequiredDescription
npistringYes10-digit NPI to monitor
callback_urlstringYesURL to receive the webhook POST
days_beforeintegerNoDays before expiration to trigger (default: 30)

Response

{
  "status": "subscribed",
  "npi": "1234567890",
  "callback_url": "https://yourapp.com/webhook"
}

Example

curl -X POST -H "X-API-Key: pv_your_key" \
  -H "Content-Type: application/json" \
  -d '{"npi":"1234567890","callback_url":"https://yourapp.com/webhook","days_before":30}' \
  https://api.clearnpi.io/v1/webhooks/expiry
POST/v1/keys/createCreate a free API key

Create a free-tier API key. No authentication required.

Request body

ParameterTypeRequiredDescription
emailstringYesYour email address
namestringNoKey name (default: "Default key")

Response

{
  "api_key": "pv_live_abc123...",
  "plan": "free"
}

Example

curl -X POST -H "Content-Type: application/json" \
  -d '{"email":"dev@example.com"}' \
  https://api.clearnpi.io/v1/keys/create

Error Codes

StatusCodeDescription
400Bad RequestInvalid parameters — check required fields and format
401UnauthorizedMissing or invalid API key in the X-API-Key header
404Not FoundThe requested NPI does not exist in the database
429Too Many RequestsRate limit exceeded — slow down or upgrade your plan

Error response format

{
  "detail": "Invalid API key",
  "status_code": 401
}

Rate Limits

Rate limits are enforced per API key. When you exceed your limit, the API returns 429 Too Many Requests.

PlanRequests / day~ Requests / monthBatch size
Free100~3,00010 NPIs
Basic ($49/mo)333~10,00050 NPIs
Pro ($149/mo)3,333~100,000100 NPIs
EnterpriseUnlimitedUnlimited100 NPIs

Rate limits reset daily at midnight UTC. Exceeding your limit returns 429 Too Many Requests. The X-RateLimit-Remaining header shows your remaining calls for the day.

Data Freshness

ClearNPI aggregates data from multiple federal and state sources. Here's how often each source is updated:

SourceDataUpdate frequency
NPPESNPI records, demographics, taxonomyWeekly (every Sunday)
OIG LEIEExclusion list — fraud, abuse flagsMonthly
State boardsLicense status, expiration datesVaries by state (daily to monthly)

SDKs & Integration

ClearNPI is a standard REST API that works with any HTTP client in any language. No proprietary SDK is required.

Quick start examples

JavaScript / TypeScript

const res = await fetch("https://api.clearnpi.io/v1/provider/1234567890", {
  headers: { "X-API-Key": "pv_your_key" },
});
const provider = await res.json();

Python

import requests

resp = requests.get(
    "https://api.clearnpi.io/v1/provider/1234567890",
    headers={"X-API-Key": "pv_your_key"},
)
provider = resp.json()

cURL

curl -H "X-API-Key: pv_your_key" \
  https://api.clearnpi.io/v1/provider/1234567890