# Guide: benefits and ICHRA

For each plan on offer, show which of an employee's doctors the plan's directory lists. One batch call answers up to 100 doctor-plan pairs.

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

## 1. Build the pairs

Collect the NPIs of the doctors each employee wants to keep, and the plan ids on offer for that employee. Every doctor-plan combination is one pair. Three doctors and eight plans make 24 pairs: one batch call, 24 calls against your quota.

Need the NPI of a doctor your user names? Store the NPI when the user picks the doctor in your own search, then send it here.

## 2. Check them in one call

curl:

```bash
curl https://api.inplan.io/v1/check/batch \
  -H "Authorization: Bearer $INPLAN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"year":2026,"items":[{"npi":"1184617268","plan_id":"29276OH0970001"},{"npi":"1184617268","plan_id":"29276OH0970002"}]}'
```

JavaScript:

```javascript
const res = await fetch("https://api.inplan.io/v1/check/batch", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.INPLAN_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    year: 2026,
    items: [
      {
        npi: "1184617268",
        plan_id: "29276OH0970001"
      },
      {
        npi: "1184617268",
        plan_id: "29276OH0970002"
      }
    ]
  }),
});
const body = await res.json();
const listed = body.data.results.filter((r) => r.answer === "listed");
```

Python:

```python
import os, requests

res = requests.post(
    "https://api.inplan.io/v1/check/batch",
    json={
        "year": 2026,
        "items": [
            {
                "npi": "1184617268",
                "plan_id": "29276OH0970001"
            },
            {
                "npi": "1184617268",
                "plan_id": "29276OH0970002"
            }
        ]
    },
    headers={"Authorization": f"Bearer {os.environ['INPLAN_KEY']}"},
    timeout=30,
)
body = res.json()
listed = [r for r in body["data"]["results"] if r.get("answer") == "listed"]
```

Group the results by `plan_id`. A plan that lists every doctor keeps the employee's care team; show it first.

## 3. Show the answer

- For `listed`, show "Listed" with the plan year and the date from `evidence[].source.as_of`.
- For `not_found`, show "Not found" and ask the employee to confirm with the plan. Never show "out of network".
- Put the note from `notes` near the results: directories change, so confirm before care.

## 4. Plan for volume

Each pair is one call. An open-enrollment week can be your busiest month, so size your plan on that month. `X-Quota-Remaining` on every response tells you how many calls are left. Batch checks need Builder or above. See [Batch checks](https://inplan.io/docs/batch-checks).
