NEWMedicare Advantage 2027 plans are live in the API.Read the changelog

Plans that list a provider

GEThttps://api.inplan.io/v1/providers/{npi}/plans

Every plan whose network directory lists the provider, marketplace plans first, each with its plan year, source type and date. Filter by market, state and year; page with offset.

.mdView as MarkdownFree plan and up · 1 call per page

WHEN TO USE IT

Use it to show every plan that keeps a provider, for example to quote plans that keep a client's doctors. To answer for one known plan, call GET /v1/check.

PATH PARAMETERS

Path parameters for GET /v1/providers/{npi}/plans
NAMEDESCRIPTION
npi
string · Required
The provider's 10-digit National Provider Identifier. We validate the check digit.
Example: 1184617268

QUERY PARAMETERS

Query parameters for GET /v1/providers/{npi}/plans
NAMEDESCRIPTION
market
string · aca or ma · Optional
aca for marketplace plans, ma for Medicare Advantage plans. Omit for both.
Example: ma
state
string · Optional
2-letter state. Marketplace plans: the plan's state. Medicare Advantage plans: a state in the plan's service area.
Example: OH
year
integer · Optional
Only plans for this plan year (2025 to 2030).
Example: 2026
limit
integer · default 500 · max 2,000 · Optional
Plans per page.
offset
integer · default 0 · Optional
Plans to skip. Use next_offset from the previous page.

RESPONSE FIELDS

Every response has the envelope request_id, data_as_of, data, sources and notes (details). Fields of data:

Response fields
FIELDDESCRIPTION
npi
string
The NPI you asked for.
provider_states
string[]
States of the provider's practice locations.
filters
object
The filters you sent (null when not sent).
filters.market
string | null
aca, ma or null.
filters.state
string | null
The state filter.
filters.year
integer | null
The plan year filter.
total
integer
Plans that match the filters, across all pages.
counts
object
The total, split by market.
counts.aca
integer
Marketplace plans that match.
counts.ma
integer
Medicare Advantage plans that match.
offset
integer
The offset of this page.
limit
integer
The page size.
next_offset
integer | null
The offset for the next page, or null on the last page.
plans
object[]
The plans on this page: marketplace plans first, then Medicare Advantage plans.
plans[].market
string
aca or ma.
plans[].plan_id
string
The plan id.
plans[].plan_year
integer
The plan year of this listing.
plans[].plan_name
string | null
The plan name, when we hold plan details.
plans[].issuer
object
Marketplace plans: the insurer.
plans[].issuer.id
string
The 5-digit insurer id.
plans[].issuer.name
string | null
The insurer name, when we hold it.
plans[].state
string
Marketplace plans: the plan state.
plans[].metal_level
string | null
Marketplace plans: the metal level.
plans[].plan_type
string | null
HMO, PPO, EPO, POS and similar.
plans[].network_tiers
string[]
Marketplace plans: the tiers the directory names for this provider.
plans[].plan_details_available
boolean
true when plan name, metal level and plan type are included.
plans[].source
object
Where this listing comes from.
plans[].source.type
string
insurer_directory or plan_directory.
plans[].source.as_of
date | null
The date we read that directory.
plans[].organization
string
Medicare Advantage plans: the organization that offers the plan.
plans[].snp
object
Medicare Advantage plans: special needs plan details.
plans[].snp.is_snp
boolean
true for a special needs plan.
plans[].snp.type
string
The special needs plan type, as published.
plans[].service_area_states
string[]
Medicare Advantage plans: states in the plan's service area.
plans[].accepting_new_patients
boolean | null
Medicare Advantage plans: whether the directory says the provider accepts new patients.
plans[].provider_kind
string
Medicare Advantage plans: the kind of provider listed.
plans[].taxonomy
string
Medicare Advantage plans: the provider taxonomy code listed with the network entry.
plans[].provider_state_in_service_area
boolean | null
Medicare Advantage plans: true when one of the provider's states is in the service area, null when either side is unknown.

RESPONSES

A page of plans. total counts every match; next_offset is null on the last page.

200 OK · application/json
{  "request_id": "req_EEsgYcNXpuC_ijmU",  "data_as_of": "2026-10-29",  "data": {    "npi": "1184617268",    "provider_states": [      "OH"    ],    "filters": {      "market": null,      "state": null,      "year": 2026    },    "total": 46,    "counts": {      "aca": 46,      "ma": 0    },    "offset": 0,    "limit": 2,    "next_offset": 2,    "plans": [      {        "market": "aca",        "plan_id": "29276OH0970001",        "plan_year": 2026,        "plan_name": "Anthem Bronze Pathway 10600 ($0 Virtual PCP + $0 Select Drugs)",        "issuer": {          "id": "29276",          "name": "Anthem Blue Cross and Blue Shield"        },        "state": "OH",        "metal_level": "Bronze",        "plan_type": "HMO",        "network_tiers": [          "PARTICIPATING"        ],        "plan_details_available": true,        "source": {          "type": "insurer_directory",          "as_of": "2026-07-27"        }      },      {        "market": "aca",        "plan_id": "29276OH0970002",        "plan_year": 2026,        "plan_name": "Anthem Heart Healthy Bronze Pathway 6000 ($0 Virtual PCP + $0 Select Drugs)",        "issuer": {          "id": "29276",          "name": "Anthem Blue Cross and Blue Shield"        },        "state": "OH",        "metal_level": "Expanded Bronze",        "plan_type": "HMO",        "network_tiers": [          "PARTICIPATING"        ],        "plan_details_available": true,        "source": {          "type": "insurer_directory",          "as_of": "2026-07-27"        }      }    ]  },  "sources": [    {      "type": "insurer_directory",      "description": "Provider network directories published by health insurers",      "as_of": "2026-10-29"    },    {      "type": "plan_catalog",      "description": "Published health plan catalogs",      "as_of": "2026-10-28"    },    {      "type": "plan_directory",      "description": "Provider network directories published by Medicare Advantage plans",      "as_of": "2026-10-29"    }  ],  "notes": [    "Network directories change. Confirm with the plan or the provider before care."  ]}

With market=ma: Medicare Advantage plans add service area, new-patient and provider-kind fields.

200 OK · application/json
{  "request_id": "req_lUbO6VDvdYSs2XWz",  "data_as_of": "2026-10-29",  "data": {    "npi": "1184617268",    "provider_states": [      "OH"    ],    "filters": {      "market": "ma",      "state": null,      "year": null    },    "total": 36,    "counts": {      "aca": 0,      "ma": 36    },    "offset": 0,    "limit": 1,    "next_offset": 1,    "plans": [      {        "market": "ma",        "plan_id": "H2526-001-000",        "plan_year": 2027,        "plan_name": "DEVOTED CHOICE 001 OH (PPO)",        "organization": "Devoted Health",        "plan_type": "PPO",        "snp": {          "is_snp": false,          "type": "Not Applicable"        },        "service_area_states": [          "OH"        ],        "accepting_new_patients": true,        "provider_kind": "practitioner",        "taxonomy": "207X00000X",        "plan_details_available": true,        "source": {          "type": "plan_directory",          "as_of": "2026-10-29"        },        "provider_state_in_service_area": true      }    ]  },  "sources": [    {      "type": "plan_directory",      "description": "Provider network directories published by Medicare Advantage plans",      "as_of": "2026-10-29"    },    {      "type": "plan_catalog",      "description": "Published health plan catalogs",      "as_of": "2026-10-28"    }  ],  "notes": [    "Network directories change. Confirm with the plan or the provider before care.",    "A plan's network can include providers outside the plan's service area. Compare service_area_states with the provider's location."  ]}

An invalid NPI or filter.

400 Bad Request · application/problem+json
{  "type": "invalid_npi",  "title": "Invalid NPI",  "status": 400,  "detail": "\"1234567890\" fails the NPI check digit (Luhn with prefix 80840).",  "instance": "/v1/providers/1234567890/plans",  "request_id": "req_tJFUtTPOxNSXJtXb",  "docs": "https://inplan.io/docs/errors#invalid_npi"}

The Authorization header is missing or malformed, or the key is unknown or revoked.

401 Unauthorized · application/problem+json
{  "type": "unauthorized",  "title": "Missing API key",  "status": 401,  "detail": "Send `Authorization: Bearer ip_live_...`.",  "instance": "/v1/providers/1184617268/plans",  "request_id": "req_ItpJcJKIUQZ1dBDx",  "docs": "https://inplan.io/docs/errors#unauthorized"}

We hold no provider record and no plan listing for this NPI.

404 Not Found · application/problem+json
{  "type": "not_found",  "title": "Provider not found",  "status": 404,  "detail": "No provider found for NPI 1999999984.",  "instance": "/v1/providers/1999999984/plans",  "request_id": "req_HVipN6sy7kXyvBYe",  "docs": "https://inplan.io/docs/errors#not_found"}

ERROR FORMAT

Errors use application/problem+json (RFC 7807) with type, title, status, detail, instance, request_id and docs. Other statuses this endpoint can return: 403 (plan, account or demo-key limit), 429 (rate limit or quota) and 503 (busy or timed out). See Errors.

RATE-LIMIT HEADERS

Every response that passes the key and plan checks carries RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, RateLimit-Policy, X-Quota-Limit, X-Quota-Remaining, X-Quota-Reset and X-Request-Id. Limits apply to each key. See Rate limits and quotas.

Limits by plan
PLANREQUESTS A SECONDCALLS A MONTH
Free2500
Builder1025,000
Growth25150,000
ScaleSet with youSet with you