# Guide: health tech platforms

Add network status where your users already pick a provider: search results, matching and intake forms.

Source: https://inplan.io/docs/guides/health-tech · Updated 2026-10-30

## 1. Show who the provider is

`GET /v1/providers/{npi}` returns the name with credential, specialties, practice locations and a count of the plans that list the provider.

curl:

```bash
curl https://api.inplan.io/v1/providers/1184617268 \
  -H "Authorization: Bearer $INPLAN_KEY"
```

JavaScript:

```javascript
const res = await fetch("https://api.inplan.io/v1/providers/1184617268", {
  headers: { Authorization: `Bearer ${process.env.INPLAN_KEY}` },
});
const body = await res.json();
const { name, specialties, plan_summary } = body.data;
```

Python:

```python
import os, requests

res = requests.get(
    "https://api.inplan.io/v1/providers/1184617268",
    headers={"Authorization": f"Bearer {os.environ['INPLAN_KEY']}"},
    timeout=10,
)
body = res.json()
d = body["data"]; print(d["name"]["display"], d["plan_summary"])
```

## 2. Search inside a plan

On Growth and above, `GET /v1/plans/{plan_id}/providers` pages through the providers a marketplace plan lists. Filter by `state`, `zip` with `radius` in miles, or `specialty` (a case-insensitive part of the specialty name).

curl:

```bash
curl https://api.inplan.io/v1/plans/29276OH0970001/providers \
  -H "Authorization: Bearer $INPLAN_KEY" \
  -G -d specialty=cardio -d limit=2
```

JavaScript:

```javascript
const url = new URL("https://api.inplan.io/v1/plans/29276OH0970001/providers");
url.search = new URLSearchParams({ specialty: "cardio", limit: "2" });

const res = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.INPLAN_KEY}` },
});
const body = await res.json();
const { providers, page } = body.data;
```

Python:

```python
import os, requests

res = requests.get(
    "https://api.inplan.io/v1/plans/29276OH0970001/providers",
    params={"specialty": "cardio", "limit": "2"},
    headers={"Authorization": f"Bearer {os.environ['INPLAN_KEY']}"},
    timeout=10,
)
body = res.json()
providers, page = body["data"]["providers"], body["data"]["page"]
```

Response (200 OK · shortened):

```json
{
  "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"
    }
  }
}
```

Follow `page.next_cursor` until it is `null`. See [Pagination](https://inplan.io/docs/pagination).

## 3. Check at intake

When a user enters a plan, check it against their chosen provider with `GET /v1/check`, or check a whole roster with `POST /v1/check/batch`. Store `as_of` with the answer.
