Providers in a plan
The providers a marketplace plan lists, page by page, with filters for state, ZIP and radius, and specialty. Each provider carries the network tiers the directory names.
WHEN TO USE IT
Use it to build provider search inside a plan, for example "cardiologists near 43230 in this plan". For Medicare Advantage plans, use GET /v1/check or GET /v1/providers/{npi}/plans. Paging is described in Pagination.
PATH PARAMETERS
| NAME | DESCRIPTION |
|---|---|
plan_idstring · Required | A marketplace plan id. Medicare Advantage ids answer 501.Example: 29276OH0970001 |
QUERY PARAMETERS
| NAME | DESCRIPTION |
|---|---|
statestring · Optional | Only providers with a practice location in this state. Example: OH |
specialtystring · Optional | Part of a specialty name, any case, for example cardio.Example: cardio |
zipstring · Optional | A 5-digit ZIP. Without radius: providers with a location in this ZIP.Example: 43230 |
radiusinteger · Optional | Miles from the center of zip, 1 to 100. Needs zip.Example: 10 |
yearinteger · Optional | The plan year of the listings. Default: the newest year we hold. Example: 2026 |
limitinteger · default 50 · max 100 · Optional | Providers per page. With filters a page can hold fewer. |
cursorstring · Optional | page.next_cursor from the previous page, unchanged. |
RESPONSE FIELDS
Every response has the envelope request_id, data_as_of, data, sources and notes (details). Fields of data:
| FIELD | DESCRIPTION |
|---|---|
plan_idstring | The plan id. |
plan_yearinteger | The plan year of these listings. |
plan_namestring | The plan name. |
issuerobject | The insurer. |
issuer.idstring | The 5-digit insurer id. |
issuer.namestring | The insurer name. |
filtersobject | The filters you sent (null when not sent). |
filters.statestring | null | State filter. |
filters.zipstring | null | ZIP filter. |
filters.radiusinteger | null | Radius in miles around zip. |
filters.specialtystring | null | Specialty filter, in upper case. |
providersobject[] | Providers on this page, in directory order. |
providers[].npistring | The NPI. |
providers[].namestring | null | Display name with credential. |
providers[].credentialstring | null | The credential as published. |
providers[].primary_specialtystring | null | The primary specialty. |
providers[].network_tiersstring[] | Tiers the directory names for this provider in this plan. |
providers[].locationsobject[] | Up to 5 practice locations that match your filters. |
providers[].locations[].citystring | City. |
providers[].locations[].statestring | State. |
providers[].locations[].zipstring | ZIP code. |
providers[].locations[].distance_milesnumber | null | Miles from the zip you sent, when you sent radius. Else null. |
providers[].profile_foundboolean | true when we hold identity details for this NPI. |
pageobject | Paging state. See Pagination. |
page.limitinteger | The page size you asked for. |
page.rows_scannedinteger | Listing rows read for this page. |
page.scanned_throughinteger | Listing rows read so far, across pages. |
page.max_depthinteger | The most listing rows paging reads for one plan. |
page.next_cursorstring | null | Pass it as cursor for the next page. null on the last page. |
sourceobject | The source type and date of these listings. |
source.typestring | Always insurer_directory. |
source.as_ofdate | The date we read the directory. |
RESPONSES
A page of providers. Pass page.next_cursor as cursor for the next page.
{ "request_id": "req_k-SKujLq8DN5VkZE", "data_as_of": "2026-10-29", "data": { "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" }, "filters": { "state": null, "zip": null, "radius": null, "specialty": null }, "providers": [ { "npi": "1457438566", "name": "Pamella J. Kibbe, NP", "credential": "NP", "primary_specialty": "Nurse Practitioner", "network_tiers": [ "PARTICIPATING" ], "locations": [ { "city": "Columbus", "state": "OH", "zip": "43214", "distance_miles": null } ], "profile_found": true }, { "npi": "1154167203", "name": "Morgan E. Brockhouse, DMD", "credential": "DMD", "primary_specialty": "Dentist", "network_tiers": [ "PARTICIPATING" ], "locations": [ { "city": "East Peoria", "state": "IL", "zip": "61611", "distance_miles": null } ], "profile_found": true } ], "page": { "limit": 2, "rows_scanned": 2, "scanned_through": 2, "max_depth": 5000, "next_cursor": "eyJvIjoyLCJ5IjoyMDI2LCJwIjoiMjkyNzZPSDA5NzAwMDEifQ" }, "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": "provider_registry", "description": "National provider registry and practice records", "as_of": "2026-10-29" } ], "notes": [ "With filters a page can hold fewer than `limit` providers. Follow next_cursor until it is null.", "Network directories change. Confirm with the plan or the provider before care." ]}
With specialty=cardio.
{ "request_id": "req_LIWkkbLXmx_TZSaD", "data_as_of": "2026-10-29", "data": { "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" }, "filters": { "state": null, "zip": null, "radius": null, "specialty": "CARDIO" }, "providers": [ { "npi": "1023120250", "name": "Jayanta T. Mukherjee, MD", "credential": "MD", "primary_specialty": "Cardiovascular Disease (cardiology)", "network_tiers": [ "PARTICIPATING" ], "locations": [ { "city": "Kettering", "state": "OH", "zip": "45429", "distance_miles": null } ], "profile_found": true } ], "page": { "limit": 2, "rows_scanned": 200, "scanned_through": 200, "max_depth": 5000, "next_cursor": "eyJvIjoyMDAsInkiOjIwMjYsInAiOiIyOTI3Nk9IMDk3MDAwMSJ9" }, "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": "provider_registry", "description": "National provider registry and practice records", "as_of": "2026-10-29" } ], "notes": [ "With filters a page can hold fewer than `limit` providers. Follow next_cursor until it is null.", "Network directories change. Confirm with the plan or the provider before care." ]}
A changed or foreign cursor (invalid_cursor), paging past 5,000 listings (depth_limit), or an invalid filter.
{ "type": "invalid_cursor", "title": "Invalid cursor", "status": 400, "detail": "Pass the next_cursor value from the previous page unchanged.", "instance": "/v1/plans/29276OH0970001/providers", "request_id": "req_kicZeaYEQF_Xcf0U", "docs": "https://inplan.io/docs/errors#invalid_cursor"}
The key is on Free or Builder. Plan-to-provider search starts on Growth.
{ "type": "plan_upgrade_required", "title": "Plan upgrade required", "status": 403, "detail": "This endpoint needs the growth plan or higher; this key is on free.", "instance": "/v1/plans/29276OH0970001/providers", "request_id": "req_qgViOYVxgNYeqbMb", "docs": "https://inplan.io/docs/errors#plan_upgrade_required", "current_plan": "free", "required_plan": "growth"}
A Medicare Advantage plan id.
{ "type": "not_implemented", "title": "Available for Marketplace plans", "status": 501, "detail": "Provider search by plan is available for Marketplace plans. For Medicare Advantage plans use /v1/check or /v1/providers/{npi}/plans.", "instance": "/v1/plans/H2526-001-000/providers", "request_id": "req_91oTGyIEJwKXhH2R", "docs": "https://inplan.io/docs/errors#not_implemented"}
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: 401, 404 (plan_not_found), 429 and 503. The Playground demo key cannot call this endpoint. 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.
| PLAN | REQUESTS A SECOND | CALLS A MONTH |
|---|---|---|
| Free | 2 | 500 |
| Builder | 10 | 25,000 |
| Growth | 25 | 150,000 |
| Scale | Set with you | Set with you |