> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arlohealth.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Pricing API

> Free, anonymous US cost estimates and network status from insurers' published rate files

## What it is

A public JSON API for US in-network cost estimates and provider network status. No login, no key, no connector. Any agent that can make an HTTPS request can use it, including shared bot templates where recipients install nothing.

```
Base URL: https://api.arlohealth.ai/api/pricing.v1
```

Estimates come from insurers' machine-readable rate files (Anthem, any Blue Cross Blue Shield plan through BlueCard, Blue Shield of California, UnitedHealthcare, Cigna, Aetna, and HCSC), Medicare's own fee schedules and the CMS clinician enrollment file for Original Medicare, plus public CMS data about providers. Medicare Advantage plans are declined with the reason: their rates are not published. Every response carries a `disclaimer`: estimates are never guarantees.

<Note>
  The same endpoints back the `search_care_prices`, `check_network_status`, and `get_provider_evidence` MCP tools. With an Arlo account token the plan can also come from the patient's linked insurance records. Without one, the plan comes from `planHints` only.
</Note>

## Start here

<Steps>
  <Step title="Read the guide">
    `GET /api/pricing.v1/guide.md` is the source of truth for calling the routes and reading every field. The [Agent guide](/pricing/guide) page is the same text.
  </Step>

  <Step title="Pick a service code">
    `GET /api/pricing.v1/catalog` lists the supported CPT/HCPCS codes with `appliesTo` and `relatedCodes`. There is no free-text service input: the caller chooses the code.
  </Step>

  <Step title="Ask which insurer">
    Pass it as `planHints.payerName` (or `payerName=` on GET). `GET /api/pricing.v1/payers` lists the accepted names. "Original Medicare" is accepted; a bare "Medicare" is priced as Original Medicare with an ask to confirm it is not a Medicare Advantage plan.
  </Step>

  <Step title="Call and relay">
    `search` for "what does X cost near me", `network-status` first for any named clinic or doctor, `provider-evidence` for one provider by NPI. Relay `disclaimer` and any `needsMoreInfo` asks on every response.
  </Step>
</Steps>

## What to get from the person

The answer gets sharper with each of these. Ask for the first three up front; the rest when the response asks (`needsMoreInfo`) or the person has them handy.

| Get this                                                                              | Effect                                                                  | Pass it as                                                    |
| ------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------- |
| Insurer name                                                                          | Required for any price                                                  | `payerName`                                                   |
| For Medicare: Original or Advantage, and any Medigap supplement                       | Advantage plans are not supported; Medigap changes what the person owes | `payerName` ("Original Medicare", "AARP Medicare Supplement") |
| Location (for a named clinic, the clinic's city or ZIP)                               | Which providers are nearby                                              | `zip`, or `latitude` + `longitude`                            |
| The exact service: age, new vs established, screening vs symptom, body part, contrast | Chooses the code                                                        | `code` from `/catalog`                                        |
| Employer the plan is through, or the plan name on the card                            | Ranges become the plan's exact rates                                    | `employerName`, `planName`                                    |
| Group number (Blue Cross Blue Shield IL/TX/OK/NM/MT only)                             | Selects the exact plan                                                  | `groupNumber`                                                 |
| Provider name and city, or the NPI                                                    | Network status and named-clinic prices; evidence needs the NPI          | `providerName`, `npi`                                         |
| Billing NPI and Tax ID from a past bill or Explanation of Benefits                    | Settles which legal entity bills when several could                     | `npi`, then match `billingCandidates[].tin`                   |
| Which coverage, if they have more than one                                            | Two plans give two answers                                              | `payerName`                                                   |

The [Agent guide](/pricing/guide) explains each of these, how every route works, and how to read the responses.

## Endpoints

| Method    | Path                                | Purpose                                                 |
| --------- | ----------------------------------- | ------------------------------------------------------- |
| GET       | `/api/pricing.v1`                   | Index: links, limits, disclaimer                        |
| GET       | `/api/pricing.v1/openapi.json`      | OpenAPI 3.1 contract (also `.yaml`)                     |
| GET       | `/api/pricing.v1/guide.md`          | Agent guide                                             |
| GET       | `/api/pricing.v1/skill.md`          | Drop-in SKILL.md for agent platforms                    |
| GET       | `/api/pricing.v1/catalog`           | Supported services                                      |
| GET       | `/api/pricing.v1/payers`            | Supported insurers and accepted names                   |
| POST, GET | `/api/pricing.v1/search`            | Nearby in-network options with estimated prices         |
| POST, GET | `/api/pricing.v1/network-status`    | Is a named provider in-network, and what do they charge |
| POST, GET | `/api/pricing.v1/provider-evidence` | Public-data evidence about one provider                 |

The GET forms take flat query parameters (`code`, `zip`, `latitude`, `longitude`, `radiusKm`, `limit`, `providerName`, `npi`, `payerName`, `employerName`, `planName`, `groupNumber`, `planUnavailable`).

## Example

```bash theme={null}
curl -s -H "User-Agent: my-agent/1.0" \
  "https://api.arlohealth.ai/api/pricing.v1/search?code=99213&zip=94607&limit=5&payerName=Anthem"
```

Send a descriptive `User-Agent`. Requests with a bare HTTP-library agent may be rejected at the edge.

## Limits

Anonymous calls are rate limited per IP per minute (`search` 60, `network-status` 20, `provider-evidence` 60), and a few are served at a time per caller. A `429` carries `Retry-After` and an `error` of `RATE_LIMITED` or `BUSY`. A `503 PRICING_PUBLIC_DISABLED` means anonymous pricing is paused. Discovery routes are cacheable for an hour.

Every response carries `X-Arlo-Api-Version` and a `Link` header with `rel="service-doc"` (the guide) and `rel="service-desc"` (the OpenAPI document).

## Terms

Use is subject to the [Arlo Health terms](https://arlohealth.ai/tos). Responses derive from public regulatory data and contain no patient information.
