# API reference

Eight endpoints over HTTPS, JSON in and out. Every endpoint has its own page with parameters, examples in curl, JavaScript and Python, and real responses.

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

## Base URL and key

```text
https://api.inplan.io
```

Send `Authorization: Bearer <your key>` on every request except `/v1/status`. See [Authentication](https://inplan.io/docs/authentication).

## Endpoints

| Method | Path | Plan |
| --- | --- | --- |
| GET | [`/v1/providers/{npi}`](https://inplan.io/docs/api/providers) | Free and above |
| GET | [`/v1/providers/{npi}/plans`](https://inplan.io/docs/api/provider-plans) | Free and above |
| GET | [`/v1/check`](https://inplan.io/docs/api/check) | Free and above |
| POST | [`/v1/check/batch`](https://inplan.io/docs/api/check-batch) | Builder and above |
| GET | [`/v1/plans/{plan_id}`](https://inplan.io/docs/api/plans) | Free and above |
| GET | [`/v1/plans/{plan_id}/providers`](https://inplan.io/docs/api/plan-providers) | Growth and above |
| GET | [`/v1/coverage`](https://inplan.io/docs/api/coverage) | Free and above |
| GET | [`/v1/status`](https://inplan.io/docs/api/status) | No key needed |

## The response envelope

Every successful response has the same top level. Errors use the [problem format](https://inplan.io/docs/errors).

Response (200 OK · envelope, data shortened):

```json
{
  "request_id": "req_ws7hhhC7uSWYqEye",
  "data_as_of": "2026-07-27",
  "data": {
    "answer": "listed"
  },
  "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"
    }
  ],
  "notes": [
    "in_network=null means no listing was found in current directory data. It is not a statement that the provider is out of network.",
    "Network directories change. Confirm with the plan or the provider before care."
  ]
}
```

| Field | Type | Description |
| --- | --- | --- |
| `request_id` | string | Unique to this request. Also sent as the `X-Request-Id` header. Quote it when you contact support. |
| `data_as_of` | date \| null | The date of the newest data behind this response. |
| `data` | object | The answer. Its fields depend on the endpoint and are listed below. |
| `sources` | object[] | The types of data behind the response, each with its date. |
| `sources[].type` | string | The source type: `insurer_directory`, `plan_directory`, `provider_registry` or `plan_catalog`. |
| `sources[].description` | string | The source type in plain words. |
| `sources[].as_of` | date \| null | The date this type of data is current to. |
| `notes` | string[] | Short notes to show next to the answer. Present on most endpoints. |

## Files for tools and agents

- [`/openapi.json`](https://inplan.io/openapi.json): OpenAPI 3.1, with real response examples.
- [Postman collection](https://inplan.io/docs/inplan.postman_collection.json): import it, then set `INPLAN_KEY` in the collection variables.
- [`/llms.txt`](https://inplan.io/llms.txt) and [`/llms-full.txt`](https://inplan.io/llms-full.txt): these docs for language models.
