# Providers and NPIs

Every provider is identified by a 10-digit NPI (National Provider Identifier). Send it as a string, and keep the leading digit.

Source: https://inplan.io/docs/providers-and-npis · Updated 2026-10-30

## NPI format

An NPI has 10 digits and starts with 1 or 2. The last digit is a check digit (Luhn, with the prefix 80840). We validate it before any lookup, so a typo answers `400 invalid_npi` instead of a wrong answer.

Response (400 Bad Request · application/problem+json):

```json
{
  "type": "invalid_npi",
  "title": "Invalid NPI",
  "status": 400,
  "detail": "\"1234567890\" fails the NPI check digit (Luhn with prefix 80840).",
  "instance": "/v1/check",
  "request_id": "req_tyeV9VkOEHSgXbbW",
  "docs": "https://inplan.io/docs/errors#invalid_npi"
}
```

## Provider profiles

`GET /v1/providers/{npi}` returns the name, credential, specialties, practice locations, group practices and facility affiliations from national provider registry records, plus `plan_summary`: how many marketplace and Medicare Advantage plans list the provider.

Response (200 OK · shortened):

```json
{
  "data": {
    "npi": "1184617268",
    "profile_found": true,
    "name": {
      "first": "Michael",
      "middle": "Buttimer",
      "last": "Williard",
      "suffix": null,
      "display": "Michael B. Williard, MD"
    },
    "credential": "MD",
    "gender": "male",
    "status": "active",
    "specialties": [
      {
        "name": "Orthopedic Surgery",
        "primary": true
      }
    ],
    "education": {
      "medical_school": "Ohio State University College of Medicine",
      "graduation_year": 1987
    },
    "locations": [
      {
        "address_line_1": "605 Crescent Pl",
        "address_line_2": null,
        "city": "Gahanna",
        "state": "OH",
        "zip": "43230",
        "phone": "6145457900",
        "latitude": null,
        "longitude": null,
        "group": {
          "name": "Orthopedic One, Inc.",
          "pac_id": "3072598283"
        },
        "telehealth": null
      }
    ],
    "groups": [
      {
        "name": "Orthopedic One, Inc.",
        "pac_id": "3072598283",
        "members": 282
      }
    ],
    "affiliations": [
      {
        "facility_type": "Home health agency",
        "ccn": "368154",
        "name": null,
        "city": null,
        "state": null
      },
      {
        "facility_type": "Hospital",
        "ccn": "360035",
        "name": "Mount Carmel East & West",
        "city": "Columbus",
        "state": "OH"
      }
    ],
    "privacy": {
      "contact_masked": false
    },
    "plan_summary": {
      "aca": {
        "plans": 77,
        "issuers": 4,
        "states": [
          "OH"
        ],
        "plan_years": [
          2025,
          2026,
          2027
        ],
        "as_of": "2026-10-28"
      },
      "ma": {
        "plans": 36,
        "organizations": 4,
        "plan_years": [
          2027
        ],
        "accepting_new_patients_any": true,
        "as_of": "2026-10-29"
      }
    },
    "links": {
      "plans": "/v1/providers/1184617268/plans"
    }
  }
}
```

## Names and credentials

`name.display` joins the name and the credential as published, for example "Michael B. Williard, MD". We never add titles such as "Dr.": show the credential, not a title.

## Listings without a profile

Some NPIs appear in plan directories but not in our registry records. Then `profile_found` is `false`, the identity fields are absent, and `plan_summary` still counts the plans. An NPI with neither answers `404 not_found`.

## Privacy

Providers can ask us to hide their street address and phone. Then `privacy.contact_masked` is `true` and those fields are `null`. City, state and ZIP stay. We hold no patient data.
