---
title: "Search Cards with 90-Day Average Prices"
method: POST
path: "/v1/cards/90day-prices-by-grade-search"
tags: ["Market Data"]
---

# Search Cards with 90-Day Average Prices

`POST /v1/cards/90day-prices-by-grade-search`

## Request

- Base URL: `https://api.cardhedger.com`
- URL: `https://api.cardhedger.com/v1/cards/90day-prices-by-grade-search`
- Auth: API key in header `X-API-Key`

Full-text card search with 90-day average prices attached to each result.

Runs a full-text, relevance-ranked search, then merges each matched card's
90-day average price for the requested grade. Results are returned in
relevance order. Cards without price data for the specified grade are
included with null price fields.

To browse or paginate all cards at a grade instead of searching, see
`90day-prices-by-grade`.

**Parameters:**
- `search`: Required. Search query (e.g., 'Mike Trout 2011 Topps Update')
- `grade`: Required. Card grade (e.g., 'PSA 10', 'SGC 10', 'BGS 9.5')
- `page`: Page number for pagination (default: 1)
- `page_size`: Number of results per page (1-100, default: 50)

Paging covers the first 10,000 results of a query: `found` is always the
full match count, `pages` counts only the reachable pages, and a page
beyond that window returns an empty `cards` list.

**Example curl:**
```bash
curl -X POST -H "X-API-Key: your-api-key-here" \
     -H "Content-Type: application/json" \
     -d '{
       "search": "Mike Trout 2011 Topps Update",
       "grade": "PSA 10"
     }' \
     "https://api.cardhedger.com/v1/cards/90day-prices-by-grade-search"
```

Returns cards in relevance order with 90-day average price and sales count.

## Request body

- SearchWith90DayPricesRequest: Request model for the full-text search + 90-day price by grade endpoint.
  - `search` string, required: Search query
  - `grade` string, required: Card grade (e.g., 'PSA 10')
  - `page` integer: Page number for pagination
  - `page_size` integer: Number of results per page (max 100)

## Response `200`

Successful Response

- SearchWith90DayPricesResponse: Response model for the full-text search + 90-day price by grade endpoint.
  - `page` integer, required: Current page number
  - `pages` integer, required: Total pages of results
  - `found` integer, required: Total matching cards
  - `search_time_ms` integer, required: Search time in milliseconds
  - `cards` SearchWith90DayPricesCard[]: Cards in relevance order
    - `card_id` string, required: Unique card identifier
    - `description` string, required: Full card description
    - `search_text` string, required: Text the search matched against
    - `text_match_score` integer, required: Relevance score for the match
    - `gemrate_id` string, nullable
    - `player` string, nullable
    - `set` string, nullable
    - `number` string, nullable
    - `variant` string, nullable
    - `image` string, nullable
    - `category` string, nullable
    - `category_group` string, nullable
    - `set_type` string, nullable
    - `90_day_sales` integer, nullable: Number of sales in last 90 days
    - `grade` string, nullable
    - `price` string, nullable

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