---
title: "Get Fair Market Value (FMV) for Multiple Cards"
method: POST
path: "/v1/cards/card-fmv-batch"
tags: ["Pricing & Valuations"]
---

# Get Fair Market Value (FMV) for Multiple Cards

`POST /v1/cards/card-fmv-batch`

## Request

- Base URL: `https://api.cardhedger.com`
- URL: `https://api.cardhedger.com/v1/cards/card-fmv-batch`
- Auth: API key in header `X-API-Key`

Get the Fair Market Value (FMV) for multiple cards in a single request.

Supports up to 100 card/grade combinations per call. Each item is valued
independently and the results array preserves request order.

**See `card-fmv` for full documentation of the per-item response,
including the 11 possible `method` values, the movement-index cascade,
confidence grading, and how to interpret `raw_price` vs `price`.**

## Error handling

- A per-item `error` is returned ONLY when an individual item could not
  be parsed (e.g., invalid grade format). Other items in the batch are
  still processed.
- Items with no underlying sale data return a well-formed result with
  `method: "no_data"` and `price: null` — NOT an error.
- `total_requested` and `total_successful` summarize the batch:
  `total_successful` counts items with a non-null `price`, so
  `no_data` items are excluded from that count.

**Example curl:**
```bash
curl -X POST -H "X-API-Key: your-api-key-here" \
     -H "Content-Type: application/json" \
     -d '{
       "items": [
         {"card_id": "1586812246197x228181943611293700", "grade": "PSA 10"},
         {"card_id": "1586812246197x228181943611293700", "grade": "PSA 9"}
       ]
     }' \
     "https://api.cardhedger.com/v1/cards/card-fmv-batch"
```

Maximum 100 items per request.

## Request body

- CardFMVBatchRequest: Request parameters for the batch card FMV endpoint.
  - `items` CardFMVItem[], required: List of card/grade combinations to value (max 100)
    - `card_id` string, required: Unique CardHedge card identifier. If you only have a card name or description, call `match-card` or `card-search` first to resolve it.
    - `grade` string, required: Card grade label. Supported formats: '<Provider> <Grade>' (e.g., 'PSA 9', 'PSA 10', 'BGS 9.5', 'SGC 9', 'CGC 10'), 'Raw' for ungraded, or '<Provider> Auth' for authenticated-only.

## Response `200`

Successful Response

- CardFMVBatchResponse: Response model for the batch card FMV endpoint.
  - `results` CardFMVBatchResultItem[], required: List of FMV results
    - `card_id` string, required: Card identifier echoed from the request
    - `grade` string, required: Grade echoed from the request
    - `price` number, nullable: Fair market value in USD (null when no data is available)
    - `price_low` number, nullable: Lower bound of the FMV range
    - `price_high` number, nullable: Upper bound of the FMV range
    - `confidence` number, nullable: Confidence score (0-1)
    - `method` string, nullable: FMV calculation method. See `card-fmv` for full definitions of all 11 values: base methods (`direct`, `card_interpolation`, `cross_provider`, `anchor_multiplier`, `segment_fallback`, `no_data`) and their `_indexed` variants (e.g., `direct_indexed`, `card_interpolation_indexed`) that apply a movement index to stale prices.
    - `freshness_days` integer, nullable: Age of the underlying sale data in days. On `_indexed` methods this reflects the index's `as_of_date` instead. Null on `segment_fallback` and `no_data`.
    - `support_grades` integer, nullable: Number of grade data points contributing to the estimate. 1 for `direct`; 2+ for `card_interpolation`; 0 for `segment_fallback` / `no_data`.
    - `grade_label` string, nullable: Normalized grade label (e.g., 'PSA 9', 'Raw').
    - `provider` string, nullable: Grading provider (e.g., 'PSA', 'BGS', 'Raw').
    - `grade_value` number, nullable: Numeric grade value. 0 for Raw; negative for authenticated-only grades (e.g., 'PSA Auth').
    - `as_of_date` string, nullable: ISO 8601 date the applied movement index was last computed. Set only on `_indexed` methods; null otherwise.
    - `index_level` string, nullable: Cascade level used for movement adjustment: `card_grade` (this card+grade), `card` (blended across this card's grades), `player` (player-level), `segment` (year × category), `none` (stale but no qualifying index), or `null` (fresh — no adjustment needed). See `card-fmv` for details.
    - `index_pct_change` number, nullable: Cumulative percent change applied by the movement index (decimal, e.g., 0.157 = +15.7%). Set only on `_indexed` methods.
    - `raw_price` number, nullable: Pre-adjustment price. For `direct`: the chosen FMV value (or the original latest_price). For other methods: the cascade result before any movement adjustment. Compare to `price` to see what the movement index changed.
    - `index_truncated` boolean, nullable: True if the FMV's lookback window was capped at 730 days. Treat truncated adjustments as lower-confidence.
    - `fmv_window_days` integer, nullable: FMV smoothing window in days (one of 7/15/30/90). Null when no FMV smoothing was applied (or the method is not `direct`).
    - `fmv_sample_count` integer, nullable: Number of distinct daily prints that fed the Winsorized-median FMV. Null when no FMV was applied.
    - `base_sample_count` integer, nullable: Number of sales behind the base latest_price (90-day sale count on the source grade row). Only set on `direct` lookups that did NOT substitute a Winsorized-median FMV — where `fmv_sample_count` is present it describes the FMV instead. Null means the source reported no sale count.
    - `index_sample_count` integer, nullable: Number of observations at the chosen movement-index window. Filter low-signal adjustments by checking this is ≥ 10.
    - `confidence_grade` string, nullable: Bucketed confidence: `A` (≥ 0.42) trust, `B` (≥ 0.25) usable, `C` (≥ 0.10) borderline, `D` (< 0.10) noisy. Null on `no_data`. See `card-fmv` for full definitions.
    - `price_explanation` string, nullable: Human-readable description of how the FMV was derived. For debug/audit only — wording may change.
    - `cross_grade_fmv_count` integer, nullable: For cross-grade methods: count of source grades whose latest_price was FMV-substituted. Null when the method wasn't used.
    - `error` string, nullable: Per-item error message if THIS item could not be parsed. Items with no sale data return `method: 'no_data'` and `price: null` rather than an `error`.
  - `total_requested` integer, required: Number of items requested
  - `total_successful` integer, required: Number of successful FMV lookups

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/cardhedger/apis/card-hedge-api.md) - [All operations](https://skmtc.dev/cardhedger/apis/card-hedge-api/llms.txt) - [OpenAPI document](https://skmtc.dev/cardhedger/apis/card-hedge-api/revisions/6de42f192a4d?raw)
