> ## 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.

# Care Pricing Tools

> Estimate what care costs under the user's insurance and check whether a provider is in-network

## Overview

Two read-only tools answer the questions patients can't answer themselves at booking time: **"what will this cost me?"** and **"is this provider in my network?"**

| Tool                   | Question it answers                                                                |
| ---------------------- | ---------------------------------------------------------------------------------- |
| `search_care_prices`   | Where can I get a service nearby, and what does each place charge under my plan?   |
| `check_network_status` | Is this specific provider or facility in-network for me — and what do they charge? |

Both are free to use: they never charge the user, never start a consultation, and work without an active care request. Estimates come from insurers' published machine-readable rate files (public price-transparency data), matched to the patient's plan via their [connected insurance](/mcp-tools/health-records) when available.

<Info>
  **Coverage** — US only. Supported payers today: Anthem Blue Cross (CA/NY), Blue Shield of California, UnitedHealthcare (including UMR, Oxford, and Surest), Cigna, and Aetna.
</Info>

<Warning>
  Estimates are never guarantees. Every response carries a `disclaimer` — always relay it: actual billing can differ based on plan specifics, services performed, and deductible status, so the user should confirm cost and network status when scheduling.
</Warning>

## How plan matching works

The service resolves the patient's plan from their linked insurance records when connected. The response's `plan` block tells you what the estimate is based on:

| Field               | Meaning                                                                                                                     |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `matchTier`         | `ein_exact` \| `employer_exact` \| `plan_name_exact` \| `payer_fallback` \| `no_payer` — how precisely the plan was matched |
| `basis`             | Human-readable explanation of what the estimate is based on                                                                 |
| `planHintsReceived` | Present when you passed `planHints`: `{matched, reason?}` — when `matched: false`, don't re-ask the user for the same value |

When the exact plan isn't matched, results carry a `rateRange` (`{min, max, median}` across the payer's plan schedules) instead of an exact `rate`, and the response includes `needsMoreInfo` — asks to relay to the user (e.g. the employer or plan name from their insurance card) that upgrade results to their plan's exact rates. Each ask includes `how` to obtain it. If the user can't provide plan identifiers, re-call with `planHints.unavailable: true` to stop the asks and keep range-based estimates.

***

## search\_care\_prices

Find nearby in-network care options with estimated negotiated prices under the user's plan.

### Parameters

| Parameter                | Type   | Required | Description                                                                                                                                                               |
| ------------------------ | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `code`                   | string | No       | **Preferred** — explicit CPT/HCPCS code from the supported catalog (the live tool description lists it)                                                                   |
| `service`                | string | No       | Plain-language fallback — only exact catalog names/synonyms resolve (`"office visit"`, `"knee MRI"`); anything fuzzy returns `supportedServices` to pick from and re-call |
| `latitude` / `longitude` | number | No       | Preferred location                                                                                                                                                        |
| `zip`                    | string | No       | 5-digit ZIP if coordinates unavailable                                                                                                                                    |
| `radiusKm`               | number | No       | Search radius in km (default 40)                                                                                                                                          |
| `limit`                  | number | No       | Max results (default 25)                                                                                                                                                  |
| `planHints`              | object | No       | `employerName`, `planName`, `payerName`, `unavailable` — extra plan identifiers when `needsMoreInfo` asked for them                                                       |
| `patientId`              | string | No       | Family-member patient id from `get_user_profile` (defaults to the account holder)                                                                                         |

### The service catalog

Roughly 150 common outpatient services are supported: office/telehealth/preventive visits, psychotherapy, imaging (X-ray/CT/MRI/ultrasound, screening and diagnostic mammograms, DEXA), cardiac tests (EKG/echo/stress test), common labs and STI tests, PT/chiro, and common procedures (colonoscopy, endoscopy, injections, biopsies, IUD, vasectomy, home sleep study, spirometry, hearing test).

* Passing an explicit `code` is preferred — the agent has the conversation context to pick correctly (screening vs diagnostic intent, age bands, body part).
* When a code isn't supported or the service text doesn't resolve, the response returns the full `supportedServices` catalog — pick the closest code and re-call.
* The response echoes what was priced in `service` — **always verify it matches the user's intent** before relaying numbers (never quote a screening code for a diagnostic indication). `inputConflict` is set when your service text and code disagreed.

### Reading the results

Results are grouped into `facilities` — places of care (billing NPIs grouped by street address), sorted by best rate. Present results **place-first** (facility name or address), with the providers inside. Each provider carries:

| Field                | Meaning                                                                                                                                                                                                                        |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `rate`               | Exact-plan negotiated rate; `null` on fallback matches (use `rateRange` then)                                                                                                                                                  |
| `typicalRate`        | Median in-network rate for this service among this payer's members                                                                                                                                                             |
| `rateAssessment`     | Set when the rate is far from typical (≥1.75x or ≤0.4x) — **always relay**                                                                                                                                                     |
| `serviceEvidence`    | `observed` = this NPI actually bills this service (public Medicare claims data) \| `category_observed` = bills near-identical services \| `unconfirmed` = no billing record — advise confirming; never say they don't offer it |
| `note`               | Per-provider caveat (e.g. a facility-billed imaging rate excludes the physician's separate professional fee) — relay when present                                                                                              |
| `telehealthEligible` | Whether virtual delivery is plausible for this service                                                                                                                                                                         |
| `confidence`         | `high` \| `medium`                                                                                                                                                                                                             |

`service.priceNote` carries pricing semantics that change what the number means (per-15-minute therapy units, ACA preventive care usually \$0 out-of-pocket) — **always relay when present**; the raw number alone would mislead.

Facility `latitude`/`longitude` plus `locationPrecision` (`address` = map-grade pin, `zip_centroid` = approximate area) support map rendering.

<Note>
  A contracted rate proves the code is in that provider's network contract — **not** that the service is bookable there. Advise confirming availability when scheduling.
</Note>

***

## check\_network\_status

Check whether a specific provider or facility is in-network for the user's plan, and optionally what they charge for a specific service.

### Parameters

| Parameter                        | Type   | Required | Description                                                                                                                             |
| -------------------------------- | ------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `providerName`                   | string | No       | Provider or facility name — consumer brand names work (matched against NPPES "doing business as" records)                               |
| `npi`                            | string | No       | Optional NPI if known — never required                                                                                                  |
| `code` / `service`               | string | No       | Add a service to get each match's contracted rate benchmarked against the typical rate                                                  |
| `latitude` / `longitude` / `zip` | —      | No       | Location to disambiguate — the response's `location.applied` tells you whether it was consumed                                          |
| `limit`                          | number | No       | Max matches (default 50, max 100). Large systems bill under many NPIs whose network status and rates differ — the breadth is the signal |
| `planHints`                      | object | No       | Same shape as `search_care_prices`                                                                                                      |
| `patientId`                      | string | No       | Defaults to the account holder                                                                                                          |

### Interpreting network status

* `inNetwork: true` — the provider appears **with negotiated rates** in the plan's published network files. Strong signal. `networkEvidence` counts how many of the plan's network memberships back the claim (1–2 = thin, 10+ = broad participation).
* `inNetwork: false` — "not found in the published files": likely out of network, but files can lag reality. Advise verifying with the provider; **never state a hard "they are out of network"**.
* `rateNote` — present when in-network but the published files carry no rate for the code. Relay it; don't read a missing rate as "not covered".

### "How much does this practice cost me?"

* **Confirm the user's current city/ZIP first** — the same consumer brand (e.g. One Medical) bills under different legal entities in different markets, at very different rates.
* If a brand name doesn't match, `needsMoreInfo` tells you how to resolve it (e.g. find the billing name on an EOB, or web-search the practice's public NPI and re-call with `npi`).
* `rateAssessment` flags rates far from the payer's typical (e.g. a routine visit billed at 4x typical under a hospital's faculty-practice contract). Relay it — this is exactly the invisible markup patients can't see at booking.
* Rated matches carry `serviceEvidence`: `observed` means you can say they perform it; `unconfirmed` means phrase it as "their contract prices X at \$Y" and advise confirming availability.

### Example flow

```javascript theme={null}
// "Is One Medical in my network, and what's an office visit there?"
const result = await checkNetworkStatus({
  providerName: "One Medical",
  service: "office visit",
  zip: "94110"
});

// Relay needsMoreInfo asks, rateAssessment flags, and the disclaimer.
// If the user can't provide plan identifiers:
const fallback = await checkNetworkStatus({
  providerName: "One Medical",
  service: "office visit",
  zip: "94110",
  planHints: { unavailable: true }
});
```
