Provider directory API, explained.
A provider directory API answers one question in code: does this health plan's network list this provider? You send a provider's NPI and a plan ID. You get back an answer, the plan year it applies to, and where and when the answer was read.
Short answer: it turns the network directories that insurers publish into one consistent answer format, so your product can check a provider against a plan without visiting each insurer's website or parsing each insurer's files.
What a provider directory is
Every health plan has a network: the doctors, clinics and hospitals it has contracts with. Insurers publish those networks as provider directories, so members can find in-network care. A directory is organised by plan, because one insurer sells many plans and they do not all share the same network. A narrow-network silver plan and a broad-network gold plan from the same insurer can list very different providers.
The directory a member sees on an insurer's website is built for one person looking up one doctor. A product that serves many people across many insurers needs something else: the same data, read in bulk, in a form code can query.
Why an API instead of insurer websites
Benefits platforms, telehealth companies, broker tools and care navigation apps all need to answer "is my user's doctor in this plan?" inside their own screens. Doing that against insurer websites runs into three problems:
- Many sources. Each insurer publishes its own directory, in its own structure, on its own schedule. A product that covers several states quickly needs dozens of insurers.
- Different identifiers. Websites search by name and address. Code needs stable keys: the NPI for the provider and the plan ID for the plan.
- Change over time. Directories change. An answer is only useful with the date it was read and the plan year it applies to.
A directory API does the reading, matching and dating once, and gives every caller the same answer shape.
What a good answer contains
Whatever API you use, check that each answer carries these fields. Without them you cannot show the answer to a patient honestly or debug it later.
- The provider and the plan, by NPI and plan ID, exactly as you asked.
- The plan year the listing applies to. Directories often list the current year and the next one side by side.
- The answer, with a clear meaning for "not found". In InPlan,
in_network: truemeans the plan's directory lists the provider.nullmeans no listing was found in current directory data. We never returnfalse, because a missing listing is not proof that a provider is out of network. - The source type and read date, so you can show "listed in this plan's directory, read on 2026-08-12" and set your own rule for how recent an answer must be.
The check call
The most common call checks one provider against one plan. The example below is real: Samantha N. Beard, DO, a family physician in North Wilkesboro, North Carolina, and a 2026 AmeriHealth Caritas Next marketplace plan.
curl -H "Authorization: Bearer $INPLAN_KEY" \ "https://api.inplan.io/v1/check?npi=1376006148&plan_id=17414NC0010004"
{
"data_as_of": "2026-10-29",
"data": {
"npi": "1376006148",
"plan_id": "17414NC0010004",
"market": "aca",
"plan_years_listed": [2026, 2025],
"in_network": true,
"answer": "listed",
"explanation": "The insurer's network directory lists this provider for this plan.",
"plan_year": 2026,
"plan": {
"plan_name": "AmeriHealth Caritas Next Bronze Essential + No Referrals",
"issuer": { "id": "17414", "name": "AmeriHealth Caritas Next" },
"state": "NC", "metal_level": "Bronze", "plan_type": "HMO"
},
"source": { "type": "insurer_directory", "as_of": "2026-08-12" }
}
}The answer says the directory lists her for plan years 2026 and 2025, and returns the 2026 plan's name, metal level and type from public plan catalogs. The same call works for Medicare Advantage plan IDs such as H3404-003-001. Read the full field list in the check reference.
Every plan that lists a provider
The second call most products need runs the other way: given a provider, which plans list them? It is how a broker tool filters quotes to plans that keep a client's doctor, or how a navigation app suggests plans.
curl -H "Authorization: Bearer $INPLAN_KEY" \ "https://api.inplan.io/v1/providers/1376006148/plans?market=ma&limit=1"
{
"total": 146,
"counts": { "aca": 0, "ma": 146 },
"plans": [{
"market": "ma",
"plan_id": "H3404-003-001",
"plan_year": 2027,
"plan_name": "Blue Medicare PPO Enhanced (PPO)",
"organization": "Blue Cross and Blue Shield of North Carolina",
"service_area_states": ["NC"],
"accepting_new_patients": true,
"provider_state_in_service_area": true,
"source": { "type": "plan_directory", "as_of": "2026-10-29" }
}]
}For Medicare Advantage plans, the answer also says whether the directory marks the provider as accepting new patients, and whether the provider practises inside the plan's service area. Some networks list providers outside the states a plan is sold in, so that second flag matters before you tell a member a provider is usable.
Two more calls
- Plan details (
GET /v1/plans/{plan_id}): the insurer, state, metal level, plan type and plan year for a plan ID, and whether we hold provider listings for it. Try it free with the plan ID lookup. - Providers in a plan (
GET /v1/plans/{plan_id}/providers): the providers a marketplace plan lists, filtered by state, specialty or distance from a ZIP code. For whole networks at once, a state data file is usually the better fit.
What to watch for
- Ask per plan, not per insurer. "Does this doctor take Oscar?" has no single answer. Ask about the plan ID the person has or is considering. Our NPI vs plan network guide explains why.
- Keep the date. Store the read date with every answer you save, and show it to users.
- Say "not found", not "out of network". When no listing is found, ask the user to confirm with the plan or the provider.
- Cache, but not forever. Directories change during the year. Re-check before enrollment and before booking care.
Getting started
You can run the calls above in the playground with no key: it serves a set of sample providers, including the one in this guide. A free key gives 500 calls a month against the full data: marketplace and Medicare Advantage plans from the insurers listed on our insurer pages.