---
title: "Price or reconcile a whole claim"
method: POST
path: "/v1/claims/price"
tags: ["claims"]
---

# Price or reconcile a whole claim

`POST /v1/claims/price`

## Request

- Base URL: `https://api.ticexplorer.com`
- URL: `https://api.ticexplorer.com/v1/claims/price`
- Auth: HTTP bearer

Many claim lines at one or more candidate billing entities → the rate each entity would be paid per line (APC
case rates, packaging, office vs facility), totals, and — with `claim_allowed_total` — a reconciliation verdict.

**Workflows**

Workflow `estimate-visit-cost`, step 4/4 `price-visit`: Estimate what a visit will cost a person before care, under their plan, at a specific place.
- Purpose: Prices all expected lines at the candidate billing entities for the given place of service.
- Call after: `find_codes`

Workflow `check-a-bill`, step 3/3 `reconcile`: Check whether a received bill or EOB matches the plan's published negotiated prices.
- Purpose: Reconciles the claim at the billing entity and related entities; hospital bills are place_of_service hospital_outpatient.
- Call after: `find_providers`

## Request body

- ClaimRequest
  - `coverage` Coverage, required
    - `type` 'plan' | 'medicare' | 'hospital': plan = a plan from find_plan (insurer rate files); medicare = Original Medicare fee schedule; hospital = hospitals' own price files (Medicare Advantage, Medicaid, cash/self-pay): each hospital's posted rate per payer/plan as the hospital wrote it (not necessarily the person's plan), mostly facility charges; cash = its discounted cash price, not the gross charge. price_claim does not accept hospital.
    - `plan_id` string, nullable: Required when type = plan; from find_plan.
    - `hospital_coverage` string, nullable: For type = hospital: medicare_advantage | medicaid | cash | a payer name.
  - `zip` string, required
  - `lines` ClaimLine[], required
    - `code` string, nullable: CPT/HCPCS code on the bill (from the bill/EOB or find_codes). Leave empty when a hospital bill shows only a revenue category, and give revenue_category instead.
    - `revenue_category` string, nullable: For hospital bills without codes: the line as printed, e.g. "Radiology - Diagnostic", "Laboratory", "Emergency Room", "CT scan", "Pharmacy". Priced as each hospital outpatient payment group (APC) that category can be; reconciliation then shows which one matches the allowed amount.
    - `units` number
    - `modifiers` string[]: e.g. ["26"] or ["TC"].
    - `billed` number, nullable: Billed charge for the line (needed for percent-of-charges contracts).
    - `allowed` number, nullable: Allowed amount for this line from the EOB, if shown.
  - `billing_entities` Entity[]: Candidate billing entities (TINs); each line is priced at each. Include the owning hospital's TIN for hospital-owned clinics.
    - `tin` string, required: Billing entity tax ID from find_providers (billing_entities or related_entities).
  - `place_of_service` 'office' | 'hospital_outpatient' | 'facility' | 'unknown': office = clinic / urgent care / doctor's office ("physician services"); hospital_outpatient = hospital outpatient department, hospital imaging or lab ("hospital services").
  - `claim_allowed_total` number, nullable: Actual allowed amount from the bill/EOB, to reconcile.
  - `miles` number
  - `wait_seconds` integer

## Response `200`

Successful Response

- ClaimResult
  - `lines` ClaimLineResult[], required
    - `code` string, required
    - `units` number, required
    - `status_indicator` string, nullable
    - `options` ClaimOption[], required: The rule-based rate each candidate billing entity would be paid.
      - `tin` string, nullable
      - `entity` string, nullable
      - `amount` number, nullable
      - `method` string, required
      - `confidence` string, required
    - `expected_range` number[], nullable
    - `notes` string[]
  - `billing_entities` object[], required
  - `per_entity_totals` object[], required
  - `expected_total_range` number[], required
  - `reconciliation` Reconciliation
    - `actual_allowed_total` number, required
    - `best_match_total` number, required
    - `difference` number, required
    - `difference_percent` number, required
    - `verdict` 'explained' | 'plausible' | 'unexplained', required
    - `best_match` object[], required
    - `explanation` string, required
    - `interpretation` string, required
    - `caveat` string, required
  - `needs` Need[]
    - `field` string, required: The missing input or condition, e.g. which_insurer, place_of_service, wait.
    - `why` string, required: Why it changes the answer and what to do.
  - `next_steps` string[]

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `402`: Payment Required
- `403`: Forbidden
- `404`: Not Found
- `422`: Unprocessable Entity
- `429`: Too Many Requests

---

[API](https://skmtc.dev/ticexplorer/apis/tic-explorer-api.md) · [All operations](https://skmtc.dev/ticexplorer/apis/tic-explorer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ticexplorer/apis/tic-explorer-api/revisions/9800d20135b9?raw)
