NPI vs plan network: why in-network is per plan.
An NPI tells you who a provider is. It does not tell you whether they are in network, because network status belongs to a plan, not to a provider or an insurer. The same NPI can be listed in one plan and not in another plan from the same insurer, at one location and not another, and for one plan year and not the next.
What an NPI is, and is not
The National Provider Identifier is a 10-digit number that identifies a healthcare provider: a person, such as a physician or nurse practitioner, or an organization, such as a clinic. A provider keeps the same NPI when they move, change employer or join new networks. That stability is why it is the right key for a provider in your database.
It is also why an NPI cannot carry network status. Networks are contracts between insurers and providers, organised into plans, and they change. "Is NPI 1376006148 in network?" is an incomplete question. The complete one is: does plan X, for plan year Y, list this provider?
Per plan, not per insurer
One insurer sells many plans, and they do not all use the same network. Narrow and broad networks sit side by side in the same state, sometimes under the same brand. So "does this doctor take Cigna?" or "does this doctor take UnitedHealthcare?" has no single answer.
Here is a real case. Samantha N. Beard, DO, is a family physician in North Wilkesboro, North Carolina. The directories we hold list her in 199 marketplace plans from 8 insurers. Two silver plans sold in North Carolina give different answers:
# same provider, two silver plans sold in North Carolina curl -H "Authorization: Bearer $INPLAN_KEY" \ "https://api.inplan.io/v1/check?npi=1376006148&plan_id=54332NC0030027" curl -H "Authorization: Bearer $INPLAN_KEY" \ "https://api.inplan.io/v1/check?npi=1376006148&plan_id=73943NC0070030"
54332NC0030027 UHC Silver Standard (No Referrals)
"in_network": true, "answer": "listed",
"evidence": [{ "plan_year": 2026, "network_tier": "NON-PREFERRED",
"source": { "type": "insurer_directory", "as_of": "2026-07-27" } }]
73943NC0070030 Connect Silver 3600 Indiv Med Deductible
"in_network": null, "answer": "not_found",
"explanation": "No listing found in current directory data for this provider and plan."The first plan lists her, in its non-preferred tier. For the second, no listing was found in current directory data. That second answer is not "out of network"; it is a reason to confirm with the plan. Either way, a product that answered at the insurer level would be wrong for one of these two plans.
Tiers inside a plan
Even inside one plan, a directory can place a provider in a network tier, such as preferred or non-preferred. Tiers can change what a member pays for a visit. When the directory gives a tier, the answer carries it in network_tier. Show it, or at least do not hide it, when cost matters to your user.
Per location
Providers often practise at more than one address, and contracts can differ by practice or group. A member who books at a different office may get a different result than the directory suggests. Treat location as part of the question whenever you can.
Two things in the API help. The provider profile (GET /v1/providers/{npi}) returns the provider's practice locations. For Medicare Advantage plans, each plan in a provider's list carries the plan's service-area states and a flag that says whether the provider practises inside them:
"plan_id": "H3404-003-001", "plan_name": "Blue Medicare PPO Enhanced (PPO)", "service_area_states": ["NC"], "accepting_new_patients": true, "provider_state_in_service_area": true
The flag matters because some networks list providers outside the states a plan is sold in. The same family physician practises in North Carolina, and marketplace plans sold in Georgia, South Carolina and Tennessee also list her. A listing is a fact about the directory; whether it is useful to a member depends on where the member lives and where the provider sees patients.
Per plan year
Plans are sold for a plan year, and directories often publish the current year and the next one together. A listing for next year is not a listing for this year, and the other way round. Among the plans that list the same physician, one lists her for 2026 and 2027, another for 2025 and 2026, and a third for 2026 only. Each answer returns plan_years_listed, and you can ask for one year with &year=2027.
Around open enrollment this is the difference between a correct answer and a support ticket. Check the year the person is enrolling for.
What to store in your product
If you keep network answers, keep the whole question with them. One row per check:
npiandplan_id, as checkedplan_yearthe answer applies toanswer: listed or not found (never collapse not found into "no")network_tier, when presentsource.typeandsource.as_of: where the answer came from and when it was read
With those five things you can show the answer honestly, re-check it when it gets old, and explain it when someone asks.
How to say it to patients and members
- Name the plan, not just the insurer: "Listed in UHC Silver Standard (No Referrals)".
- Give the date: "from the plan's directory, read on 2026-07-27".
- For not found, ask them to confirm with the plan or the office instead of saying "out of network".
- Suggest a call to the office before a first visit. Directories change between reads.
Try the two checks above in the free provider and plan checker, or see how many plans list a provider with the NPI lookup. For plan years and IDs in depth, read plans and plan years in the docs.