- Data
- REST API
- Market data
- Market volume series
Market volume series
POST /v1/market/volume-seriesMonthly transaction VOLUME for a postcode district, postcode area or
Same call over MCP
Monthly transaction volumemarket_volume_seriesAuthenticate with an API key from the API & MCP Hub. The same call is available as an MCP tool at the same price.
Reference
What POST /v1/market/volume-series returns
Use this, not market_facts, for "how many sales" questions. market_facts reads the area_facts cube, whose count is a UPRN-matched sample that runs 17-66% short of the registry; this reads HMLR price paid directly. Conversely use market_facts for price/rent/yield by asset class and bedroom band, which this does not break down.
Provide exactly one of district ("SW11", or a full postcode, which is truncated), area ("SW") or county ("GREATER LONDON"). district is a POSTCODE district, not a borough — "NW1", not "Camden".
start and end are months: "2024-06" or "2024-06-01", either accepted.
Metrics default to txn_count + median_price. Prices are category A only — a median including repossessions is not a market median.
ALWAYS check provisional_from in the response before reading a trend: HM Land Registry registers sales months after completion, so the trailing months are incomplete and will rise. UK only.
Inputs
Before you call it
- district
- Give exactly one geography.
districtis a postcode district ("NW1", not a borough name),areaa postcode area ("NW") andcountyan upper-case county name ("GREATER LONDON").
Request
Calling POST /v1/market/volume-series
curl -X POST "https://api.marketcode.ai/v1/market/volume-series" \
-H "Authorization: Bearer $MARKETCODE_API_KEY"
-H "Content-Type: application/json" \
-d '{"district":"SE22","start":"2025-01","end":"2025-12"}'Send your API key as a Bearer token. Every response carries credits_charged and credits_remaining.
Inputs
Parameters
This endpoint takes no path or query parameters.
Request body
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| district | Body | string | No | Outward code, e.g. "SW11" (a full postcode is truncated) |
| area | Body | string | No | Postcode area, e.g. "SW" |
| county | Body | string | No | HMLR county, e.g. "GREATER LONDON" |
| metrics | Body | string[] | No | Subset of txn_count, txn_count_ppd_a, txn_count_ppd_b, txn_count_new_build, txn_count_uprn_matched, median_price, p25_price, p75_price, mean_price. Omit for txn_count + median_price. |
| start | Body | string | No | First month, ISO date |
| end | Body | string | No | Last month, ISO date |
Response
What POST /v1/market/volume-series returns for a real request
curl -X POST "https://api.marketcode.ai/v1/market/volume-series" \
-H "Authorization: Bearer $MARKETCODE_API_KEY"
-H "Content-Type: application/json" \
-d '{"district":"SE22","start":"2025-01","end":"2025-12"}'{
"country": "UK",
"query": {
"district": "SE22"
},
"data": {
"grain": "district",
"geography": "SE22",
"metrics": [
"txn_count",
"median_price"
],
"months": [
"1995-01-01",
"1995-02-01",
"1995-03-01",
"… 376 more"
],
"series": {
"txn_count": [
20,
33,
40,
"… 376 more"
],
"median_price": [
61000,
62000,
51250,
"… 376 more"
]
},
"n_districts": 1,
"n_months": 379,
"total_transactions": 18143,
"data_through": "2026-07-01",
"last_ingested_at": "2026-08-29T07:34:59.722953",
"provisional_from": "2026-02-01",
"cached": true,
"time_ms": 0.4
},
"credits_charged": 0
}A real response, captured from production and trimmed: arrays to three items, long strings shortened, volatile keys dropped.
Response
Response fields
| Field | Type | Example |
|---|---|---|
| country | string | UK |
| query | object | |
| query.district | string | SE22 |
| data | object | |
| data.grain | string | district |
| data.geography | string | SE22 |
| data.metrics | array | |
| data.months | array | |
| data.series | object | |
| data.series.txn_count | array | |
| data.series.median_price | array | |
| data.n_districts | integer | 1 |
| data.n_months | integer | 379 |
| data.total_transactions | integer | 18143 |
| data.data_through | string | 2026-07-01 |
| data.last_ingested_at | string | 2026-08-29T07:34:59.722953 |
| data.provisional_from | string | 2026-02-01 |
| data.cached | boolean | true |
| data.time_ms | number | 0.4 |
| credits_charged | integer | 0 |
Fields observed in the example response above; a field the example did not exercise is not listed.
Price and licence
What it costs, and where the data comes from
Market volume series is free over MCP and over REST, and the two surfaces share one credit balance. Free calls need a signed-in account or an API key and appear in your usage, but they never touch your balance.
Credits are granted on sign-up and bought in packs; the pricing page lists every call.
Sources
- HM Land Registry
Price Paid Data
Open Government Licence v3 · England and Wales
Related
Endpoints used with Market volume series
- Market facts for an areaFree
market_factsPrice, rent, yield and days-on-market by geography × asset class ×Named in the description - Resolve an area nameFree
area_resolveResolve an area name or code ("Hackney", "E5") to its area_id, centroidSame product - Rank areas on a market metricFree
market_rankingRank areas against each other on a market metric — one row per area at the latest period. Defaults to turnover_rate, which is sales as a share of the stock that could have sold: the liquidity measure, as opposed to transaction count, which measures market size.Same product - House price index seriesFree
market_index_seriesThe published house-price INDEX for one postcode district or local authority: the level per month (base period = 100), the forecast tail flagged, and provenance saying how the index was built.Same product - Asking-price index (portal listings)Free
asking_price_index_seriesHedonic ASKING-PRICE index for one postcode district, local authority or Great Britain, from portal listings (Rightmove ~95%), 2022M01 = 100, with 80% bands and posterior standard errors, smoothed toward the parent geography.Same product - Live listings stock, dailyFree
listing_stock_seriesLive listings on the market by day for one area, channel and bedroom band — the stock-on-market series, with the median age of the dated live stock, median asking price or rent, and the new-build count.Same product
Glossary
Terms used here
- Postcode district, area and sector: The parts of a UK postcode: the area ("SW"), the district ("SW11") and the sector ("SW11 1"); most MarketCode area statistics are published at district grain.
- Price Paid Data: HM Land Registry's record of every registered residential sale in England and Wales since 1995: price, date, address, type, tenure and whether it was a standard market sale.
- Registration lag: The weeks to months between a sale completing and HM Land Registry registering it, which makes the most recent months of any sold-price series incomplete.
- Transaction volume: The count of registered sales in an area and period, read straight from HM Land Registry Price Paid rather than from a matched sample.
FAQ
Questions about Market volume series
How much does `market_volume_series` cost?
+
Market volume series is free over MCP and over REST, and the two surfaces share one credit balance. Free calls need a signed-in account or an API key and appear in your usage, but they never touch your balance.
How do I authenticate?
+
Send your API key as a Bearer token in the Authorization header. Keys are created in the API & MCP Hub, shown once and revocable. Every response carries the credits charged and your remaining balance.
Is there an MCP version?
+
Yes. The market_volume_series tool on the MarketCode MCP server is the same call at the same price, signed in with OAuth rather than a key, so Claude, ChatGPT, Codex and Cursor can run it in a conversation.
Where does the data come from?
+
Read from HM Land Registry price paid data. Coverage is the UK.
Does `market_volume_series` change anything?
+
No. The tool is annotated read-only on the server, so it never writes to your data or ours and an assistant can call it without a confirmation step.
Try Market volume series on a real address.
30-minute call. We'll provision a key and walk through the endpoint on your use case.