---
title: "Get bike valuation"
method: GET
path: "/api/mcp/valuation"
tags: ["MCP API"]
---

# Get bike valuation

`GET /api/mcp/valuation`

## Request

- Base URL: `https://www.cyclesite.co.uk`
- URL: `https://www.cyclesite.co.uk/api/mcp/valuation`
- Auth: none required

Bike valuation summary. Primary basis is measured UK asking-price data (basis "uk_listings_asking"): median and P25-P75 asking range, sample size, confidence, and a per-model-year price curve. These are last-advertised asking prices, never confirmed sale prices. Falls back to Cyclesite sold-snapshot data (price trend, days-to-sell, condition breakdown, comparable listings) only when enough internal sold rows exist. citationUrls anchor each figure for per-fact citation. No authentication required.

## Query parameters

- `brand` string, required: Bike brand
- `model` string, required: Bike model

## Response `200`

Valuation summary

- object
  - `activeListings` number: Live listings for this model right now (asking basis only)
  - `attribution` string, required
  - `avgDaysToSell` number, nullable: Sold-snapshot fallback only
  - `basis` 'uk_listings_asking': Present when the figures are measured UK asking prices (the common case); absent on the sold-snapshot fallback
  - `citationUrls` object: Anchored URLs for citing individual figures
  - `comparableListings` object[]: Sold-snapshot fallback only
    - `condition` string, nullable, required
    - `priceGbp` number, required
    - `title` string, required
    - `url` string, nullable, required
  - `conditionBreakdown` object: Sold-snapshot fallback only
  - `confidence` 'high' | 'medium' | 'low'
  - `maxPriceGbp` number: P75 asking price on the asking basis; highest sold price on the fallback
  - `medianPriceGbp` number
  - `minPriceGbp` number: P25 asking price on the asking basis; lowest sold price on the fallback
  - `priceByModelYear` object[]: Measured price-by-model-year curve, newest first (asking basis only)
    - `median` number, required: Median asking price for that model year, rounded to £50
    - `n` number, required: Listings behind that year's figure
    - `year` number, required
  - `priceTrend` 'rising' | 'stable' | 'falling': Sold-snapshot fallback only
  - `retention` object, nullable
    - `after3y` number: Fraction of anchor-year median retained after 3 years, 0-1
    - `after5y` number: Fraction of anchor-year median retained after 5 years, 0-1
    - `anchorYear` number, required
  - `sampleSize` number: Listings measured (asking basis only)
  - `summary` string, required
  - `url` string

## Other responses

- `429`: Rate limited

---

[API](https://skmtc.dev/cyclesite/apis/cyclesite-public-api.md) · [All operations](https://skmtc.dev/cyclesite/apis/cyclesite-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cyclesite/apis/cyclesite-public-api/revisions/a0dc604cce71?raw)
