{"openapi":"3.1.0","info":{"title":"MarketCode Data API","description":"Pay-as-you-go property and address APIs for the UK and US — UPRN lookup, address autocomplete, geocoding, AVM, comps, planning, and more.","version":"0.1.0"},"paths":{"/v1/address/autocomplete":{"get":{"tags":["address"],"summary":"Autocomplete","description":"Address autocomplete — FREE. Returns ranked candidates; UPRNs not\nincluded (use `/address/resolve` to resolve to a canonical UPRN).\n\nForwards to property-service `/address/resolve` GET (AddressBase cascade).","operationId":"autocomplete_v1_address_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":500,"description":"Partial address or postcode","title":"Q"},"description":"Partial address or postcode"},{"name":"country","in":"query","required":false,"schema":{"const":"UK","type":"string","default":"UK","title":"Country"}},{"name":"max_results","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"default":10,"title":"Max Results"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Autocomplete V1 Address Autocomplete Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/address/resolve":{"post":{"tags":["address"],"summary":"Resolve","description":"Resolve free-text address to canonical record (UPRN for UK).","operationId":"resolve_v1_address_resolve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Resolve V1 Address Resolve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/address/uprn/{uprn}":{"get":{"tags":["address"],"summary":"By Uprn","description":"Look up an address by UPRN. UK only.","operationId":"by_uprn_v1_address_uprn__uprn__get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response By Uprn V1 Address Uprn  Uprn  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/address/postcode/{postcode}":{"get":{"tags":["address"],"summary":"By Postcode","description":"Return all addresses at a UK postcode. The upstream wraps the result\nset under `data.matches`; we surface the full payload plus the\ncredit accounting (charged + remaining balance).","operationId":"by_postcode_v1_address_postcode__postcode__get","parameters":[{"name":"postcode","in":"path","required":true,"schema":{"type":"string","title":"Postcode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response By Postcode V1 Address Postcode  Postcode  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}":{"get":{"tags":["property-intelligence"],"summary":"Lookup","description":"Full property record for a UPRN, grouped into tiers (identity, property,\nenergy, building, land, risk, designations, infrastructure, ownership,\nprovenance). Up to ~300 fields; nulls are omitted. The `provenance` tier\ncarries the `<field>_source` and `<field>_confidence` siblings, so you can\ntrust each cell individually rather than the row as a whole.\n\nUK only.","operationId":"lookup_v1_property__uprn__get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Lookup V1 Property  Uprn  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}/reconcile":{"get":{"tags":["property-intelligence"],"summary":"Reconcile","description":"Cross-source feature reconciliation for a UPRN. Surfaces divergences\nacross EPC / Rightmove / council tax / OS NGD — useful when you need\nto know that two sources disagree before trusting a number.\n\nUK only.","operationId":"reconcile_v1_property__uprn__reconcile_get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reconcile V1 Property  Uprn  Reconcile Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}/summary":{"get":{"tags":["property-intelligence"],"summary":"Summary","description":"One-call building summary: what the property is, what it is part of, and\nthe headline attributes — assembled upstream so a single request answers\nthe question instead of three.\n\nUK only.","operationId":"summary_v1_property__uprn__summary_get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Summary V1 Property  Uprn  Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}/history":{"get":{"tags":["property-intelligence"],"summary":"History","description":"Sold-price history for this property, newest first — every HM Land Registry\nPrice Paid record matched to this UPRN.\n\n**Superseded by `GET /v1/transactions/uprn/{uprn}`, which is the same data\nfrom the same source.** This route is kept so existing integrations keep\nworking and will be removed once they have moved.\n\nNote the change of source: until 2026-08-27 this endpoint scraped a listing\nportal live, which let it add listing windows, photos and floor plans on top\nof the sale records. It now reads the warehouse, so the prices, dates and\ntenure are unchanged and better attributed — HMLR under OGL, UPRN-matched\nand trust-filtered — while the portal-derived extras are gone. `max_drilldowns`\nno longer applies and is ignored if sent.","operationId":"history_v1_property__uprn__history_get","deprecated":true,"parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response History V1 Property  Uprn  History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}/comps":{"get":{"tags":["property-intelligence"],"summary":"Comps","description":"Comparable properties in the same building/block, with missing attributes\nbackfilled from sibling records so the comps are usable rather than sparse.\n\nUK only.","operationId":"comps_v1_property__uprn__comps_get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}},{"name":"max_backfills","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"default":12,"title":"Max Backfills"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Comps V1 Property  Uprn  Comps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}/flood-risk":{"get":{"tags":["property-intelligence"],"summary":"Flood Risk","description":"**Placeholder — do not build on this.** Upstream has no per-UPRN Environment\nAgency wiring yet and returns `risk_level: \"UNKNOWN\"` for every property, so\nthis endpoint cannot currently answer the question it names. It stays mounted\nand free so existing callers keep their 200, and is marked deprecated so the\npublished spec stops advertising it as working.\n\nThe EA data IS ingested for land parcels; only the per-UPRN path is missing.\nTracked as data gap 10.","operationId":"flood_risk_v1_property__uprn__flood_risk_get","deprecated":true,"parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Flood Risk V1 Property  Uprn  Flood Risk Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/council-tax/{uprn}":{"get":{"tags":["property-intelligence"],"summary":"Council Tax","description":"VOA council tax band for a property.\n\nEvery band is DECLARED — read from the VOA list, never inferred by a model.\n`band_source` says which, and a predicted band would arrive as a distinct\nvalue rather than being folded in, because a caller cannot tell the two\napart after the fact.\n\nThree fields are deliberately null rather than approximated:\n`effective_date` (the crawl records when the VOA refreshed the LIST, not\nwhen this property's band took effect), `composite`, and\n`annual_cost_gbp` — a band is not a bill, and the per-band charge for each\nbilling authority is a separate source we do not hold.\n\nEngland and Wales only: Scotland is the SAA, Northern Ireland the LPS.\n`status` is `not_found` when the band exists in the VOA list but address\nmatching has not linked it — a matching gap on our side, not an absent\nband.\n\nCosts nothing to call, deliberately: coverage is still filling, so a\n`not_found` must not be able to cost anything. `core/pricing.py` carries\nthe reasoning — this route was withdrawn once for charging to say\n\"unavailable\", and the number lives in one place so prose cannot drift\nfrom it.","operationId":"council_tax_v1_property_council_tax__uprn__get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","description":"Property UPRN","title":"Uprn"},"description":"Property UPRN"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Council Tax V1 Property Council Tax  Uprn  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}/lease":{"get":{"tags":["property-intelligence"],"summary":"Lease","description":"The governing registered lease at this property, with its receipt: term,\nunexpired years computed today, `is_short_lease` (under 80 years) and the\nunder-60 flag, alienation clause, lease price paid, and the\nenfranchisement and valuation notes. `status: no_lease` with the reason\nwhen the register holds none.\n\nUK only.","operationId":"lease_v1_property__uprn__lease_get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","description":"Property UPRN","title":"Uprn"},"description":"Property UPRN"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Lease V1 Property  Uprn  Lease Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/lease/batch":{"post":{"tags":["property-intelligence"],"summary":"Lease Batch","description":"/{uprn}/lease for up to 100 properties in one call, per-item outcomes\n(ok | no_lease | not_found | error) in input order. Charged per property\nanswered — the sum of the single calls, never more.\n\nUK only.","operationId":"lease_batch_v1_property_lease_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UprnBatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lease Batch V1 Property Lease Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}/risk":{"get":{"tags":["property-intelligence"],"summary":"Risk","description":"The risk report: every designation and hazard flag THREE-VALUED with its\nsource — flood (zone, historic, defences, RoFRS, surface water), coal,\nheritage, environmental designations, planning (Article 4, TPO,\nbrownfield) and infrastructure (substation headroom and distance, nearest\nrenewable project) — grouped, with a summary of what is true and what was\nnever checked. \"Not in a flood zone\" and \"we have not checked\" are\ndifferent answers here.\n\nUK only.","operationId":"risk_v1_property__uprn__risk_get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","description":"Property UPRN","title":"Uprn"},"description":"Property UPRN"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Risk V1 Property  Uprn  Risk Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/risk/batch":{"post":{"tags":["property-intelligence"],"summary":"Risk Batch","description":"/{uprn}/risk for up to 100 properties in one call, per-item outcomes\n(ok | not_found | error) in input order. Charged per property answered.\n\nUK only.","operationId":"risk_batch_v1_property_risk_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UprnBatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Risk Batch V1 Property Risk Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}/planning-history":{"get":{"tags":["property-intelligence"],"summary":"Planning History","description":"Planning history AT this property: applications linked to the unit or its\nbuilding (or within 25 m of its point when none is linked), each with\ndecision, dates, appeal, CIL liability, development type and match level;\nwhat needs consent here from the designation flags read three-valued; the\nLPA; and whether official planning data covers the authority at all.\n`status: not_covered` is not charged.\n\nUK only.","operationId":"planning_history_v1_property__uprn__planning_history_get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Planning History V1 Property  Uprn  Planning History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/planning-history/batch":{"post":{"tags":["property-intelligence"],"summary":"Planning History Batch","description":"/{uprn}/planning-history for up to 100 properties in one call, per-item\noutcomes (ok | no_applications | not_covered | not_found | error) in input\norder. Charged per property answered (ok or no_applications) — the sum of\nthe single calls, never more.\n\nUK only.","operationId":"planning_history_batch_v1_property_planning_history_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UprnBatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Planning History Batch V1 Property Planning History Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/commercial/{uprn}":{"get":{"tags":["property-intelligence"],"summary":"Commercial Report","description":"The commercial property report at a UPRN: the hereditament as the 2026\nrating list describes it, the sector's rent index across four lists and\nits capital index, an income-basis value with the yield's receipt, the\nauction history at the address and the district's commercial auction\nmarket, the registered owner and the lease. Blocks that cannot be derived\ntoday say `not_available` with the reason.\n\nUK only.","operationId":"commercial_report_v1_property_commercial__uprn__get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Commercial Report V1 Property Commercial  Uprn  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/commercial/uarn/{uarn}":{"get":{"tags":["property-intelligence"],"summary":"Commercial Report By Uarn","description":"The same commercial report addressed by the VOA's UARN; the response\ncarries the UPRN the rating list links it to.\n\nUK only.","operationId":"commercial_report_by_uarn_v1_property_commercial_uarn__uarn__get","parameters":[{"name":"uarn","in":"path","required":true,"schema":{"type":"integer","title":"Uarn"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Commercial Report By Uarn V1 Property Commercial Uarn  Uarn  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/changes-since":{"post":{"tags":["property-intelligence"],"summary":"Changes Since","description":"What changed since your cursor: new listings, price reductions and\nincreases, and status changes from the portal change log.\n\nThe cursor is an event id in an append-only log, not a timestamp, so a row\nrecorded late cannot slip behind your watermark. Read\n`coverage.event_types` before trusting an empty page — withdrawal is not\nobserved, and five further change kinds have no feed at all and are listed\nunder `coverage.not_yet_fed`.\n\nUK only.","operationId":"changes_since_v1_property_changes_since_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangesSince"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Changes Since V1 Property Changes Since Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}/rental-estimate":{"get":{"tags":["property-intelligence"],"summary":"Rental Estimate","description":"What this property would let for, with the BASIS on the answer: its own\nlive rental listing where it has one, otherwise the district median asking\nrent for its bedroom band with the p25–p75 band.\n\nThe yield is GROSS — before voids, management, maintenance, ground rent or\nservice charge. The LHA block is a housing benefit cap for the broad rental\nmarket area, not a market rent, with the shared-room rate for an HMO\nroom-by-room comparison.\n\nUK only.","operationId":"rental_estimate_v1_property__uprn__rental_estimate_get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}},{"name":"beds","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Beds"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rental Estimate V1 Property  Uprn  Rental Estimate Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}/retrofit":{"get":{"tags":["property-intelligence"],"summary":"Retrofit","description":"The energy picture: current rating against the certificate's own potential,\nthe points and bands available, the fabric and heating recorded, and MEES —\nan F or G cannot lawfully be let without a registered exemption, which is a\nlegal bar and not a valuation adjustment.\n\nThe recommended measures list is not available: MHCLG publishes it in a\ncompanion file that is not loaded, and a generic list would look like this\nproperty's assessment without being one.\n\nUK only.","operationId":"retrofit_v1_property__uprn__retrofit_get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Retrofit V1 Property  Uprn  Retrofit Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property/{uprn}/report":{"get":{"tags":["property-intelligence"],"summary":"Property Report","description":"Everything we hold about one property in one document: summary, registered\nlease, the risk report with every flag three-valued, a rental estimate with\nits basis, the energy picture and the planning decisions nearby.\n\nA failed section degrades in place and names the kind of absence rather\nthan failing the document; `sections_ok` and `sections_degraded` say how\nmuch of what you paid for actually answered.\n\nUK only.","operationId":"property_report_v1_property__uprn__report_get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}},{"name":"include_precedents","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Precedents"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Property Report V1 Property  Uprn  Report Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/valuation/estimate":{"post":{"tags":["valuation"],"summary":"Estimate","description":"Automated value estimate for a UPRN: point value plus a range.\n\nUK only.","operationId":"estimate_v1_valuation_estimate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValuationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Estimate V1 Valuation Estimate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/valuation/full":{"post":{"tags":["valuation"],"summary":"Full","description":"Full AVM block for a UPRN: value range, the comparables it was derived\nfrom, and the confidence breakdown.\n\nUK only.","operationId":"full_v1_valuation_full_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValuationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Full V1 Valuation Full Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/valuation/{uprn}/comps-adjustments":{"get":{"tags":["valuation"],"summary":"Comps Adjustments","description":"Same-building comparables for a property with the adjustment ledger: each\ncomp's sale, its time adjustment by the district index to today, any\nrelisting penalty, and the IQR fence that decided which comps count. This\nis the evidence behind `/valuation/full`, itemised.\n\nUK only.","operationId":"comps_adjustments_v1_valuation__uprn__comps_adjustments_get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","description":"Property UPRN","title":"Uprn"},"description":"Property UPRN"},{"name":"lookback_months","in":"query","required":false,"schema":{"type":"integer","maximum":120,"minimum":12,"description":"How far back to take same-building sales","default":60,"title":"Lookback Months"},"description":"How far back to take same-building sales"},{"name":"relisted_uprns","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated UPRNs known to have been relisted and withdrawn; each carries a deterministic -10% penalty on its adjusted price","title":"Relisted Uprns"},"description":"Comma-separated UPRNs known to have been relisted and withdrawn; each carries a deterministic -10% penalty on its adjusted price"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Comps Adjustments V1 Valuation  Uprn  Comps Adjustments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/valuation/{uprn}/transaction-anchor":{"get":{"tags":["valuation"],"summary":"Transaction Anchor","description":"The subject property's own last registered sale, carried to today by the\ndistrict index: the price, the date, the index factor applied and the\nanchored value. Where a property has sold, this is the single strongest\npiece of evidence a valuation has, and it is stated on its own here.\n\nUK only.","operationId":"transaction_anchor_v1_valuation__uprn__transaction_anchor_get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","description":"Property UPRN","title":"Uprn"},"description":"Property UPRN"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Transaction Anchor V1 Valuation  Uprn  Transaction Anchor Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/valuation/accuracy":{"get":{"tags":["valuation"],"summary":"Accuracy","description":"Our valuation error, measured forward: every month, each registered sale\nthe model had already valued is compared with the price actually paid\n(MdAPE, PPE20, n) per asset class and model version. Nothing in it could\nhave been seen by the model. Until the first vintage lands (October 2026)\n`status` is `no_rows_yet` — an empty table, not a zero error.\n\nUK only.","operationId":"accuracy_v1_valuation_accuracy_get","parameters":[{"name":"asset_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Residential | Commercial | Mixed-Use; omit for all","title":"Asset Class"},"description":"Residential | Commercial | Mixed-Use; omit for all"},{"name":"model_version","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"e.g. gbm-h3-v4; omit for every version","title":"Model Version"},"description":"e.g. gbm-h3-v4; omit for every version"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Earliest vintage month, YYYY-MM","title":"Since"},"description":"Earliest vintage month, YYYY-MM"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Accuracy V1 Valuation Accuracy Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/planning/designations":{"post":{"tags":["planning"],"summary":"Designations","description":"All thirteen planning-designation checks for a location in one call —\nconservation area, listed building, green belt, AONB, national park,\nflood zone, Article 4, brownfield, ancient woodland, heritage at risk,\nTPO, AQMA and scheduled monument.\n\nUK only.","operationId":"designations_v1_planning_designations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanningLocation"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Designations V1 Planning Designations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/planning/applications":{"post":{"tags":["planning"],"summary":"Applications","description":"Local planning authority and planning-portal URL for a location.\n\nNote this returns where to look, not the applications themselves —\ncouncil portals are not machine-readable and are navigated separately.\n\nUK only.","operationId":"applications_v1_planning_applications_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanningLocation"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Applications V1 Planning Applications Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/planning/check":{"post":{"tags":["planning"],"summary":"Check","description":"The planning designation checks YOU choose, for one location, in one\ncall: any of article_4, brownfield, ancient_woodland, heritage_at_risk,\ntpo, aqma, scheduled_monument, sssi, agricultural_land, flood_risk,\ngreen_belt, listed_buildings, aonb, national_park, conservation_area.\nEach check reports its own result; a check that could not be read says\n`status: unknown` with the reason, never a silent absence.\n\nUK only.","operationId":"check_v1_planning_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanningCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Check V1 Planning Check Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/planning/precedents":{"post":{"tags":["planning"],"summary":"Precedents","description":"What happened to applications like this one nearby: the approval rate over\ncomparable applications with its denominator stated, the median time to a\ndecision on the smaller sample carrying both dates, a breakdown by\napplication type, and recent examples with their outcomes.\n\nA RATE, not a probability. Withdrawals, advisory outcomes (observations on\nanother authority's application, and confirmations that consent was not\nrequired) and undecided applications are counted and excluded from the\ndenominator — counting them as approvals would add tens of thousands of\nphantom approvals.\n\nCoverage is the 35 London planning authorities. Outside London this returns\nnothing, which is a coverage gap and not a quiet planning history.\n\nUK only.","operationId":"precedents_v1_planning_precedents_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrecedentsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Precedents V1 Planning Precedents Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/areas/resolve":{"post":{"tags":["geography"],"summary":"Resolve","description":"Resolve an area name to its area_id, centroid, and the full location\nhierarchy as breadcrumbs (e.g. E5 → Hackney → Greater London → UK).\n\nUK only.","operationId":"resolve_v1_areas_resolve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AreaResolveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Resolve V1 Areas Resolve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/areas/reverse-geocode":{"get":{"tags":["geography"],"summary":"Reverse Geocode","description":"The area of a given type containing a coordinate.\n\nUK only.","operationId":"reverse_geocode_v1_areas_reverse_geocode_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"title":"Lng"}},{"name":"type_id","in":"query","required":true,"schema":{"type":"string","description":"Area type UUID — which geography layer to answer for (ward, LAD, LSOA, …). Required: a point sits inside one area per layer, so without it the answer is ambiguous.","title":"Type Id"},"description":"Area type UUID — which geography layer to answer for (ward, LAD, LSOA, …). Required: a point sits inside one area per layer, so without it the answer is ambiguous."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reverse Geocode V1 Areas Reverse Geocode Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/areas/coverage":{"get":{"tags":["geography"],"summary":"Coverage","description":"The data-coverage register for a local authority — what to read before the\ndata: per-field non-null and source shares, which designation flags were\nchecked, lease and hereditament link shares, the official planning\ncoverage row and the listing sweep share.\n\nUK only.","operationId":"coverage_v1_areas_coverage_get","parameters":[{"name":"area","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":120,"description":"A local authority: GSS code (E09000032), name (Wandsworth) or warehouse area id","title":"Area"},"description":"A local authority: GSS code (E09000032), name (Wandsworth) or warehouse area id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Coverage V1 Areas Coverage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ownership/title/{title_number}":{"get":{"tags":["ownership"],"summary":"By Title","description":"Registered proprietor(s) for an HMLR title number.\n\nEngland & Wales only.","operationId":"by_title_v1_ownership_title__title_number__get","parameters":[{"name":"title_number","in":"path","required":true,"schema":{"type":"string","title":"Title Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response By Title V1 Ownership Title  Title Number  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ownership/company/{company_number}":{"get":{"tags":["ownership"],"summary":"By Company","description":"Titles held by a company, by Companies House number.\n\nEngland & Wales only.","operationId":"by_company_v1_ownership_company__company_number__get","parameters":[{"name":"company_number","in":"path","required":true,"schema":{"type":"string","title":"Company Number"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response By Company V1 Ownership Company  Company Number  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sourcing/search":{"post":{"tags":["sourcing"],"summary":"Search","description":"Find land parcels or residential units matching investment criteria.\n\nFilter by geography, land use and built coverage, unit attributes and EPC\nband, and by owner — including how long they have held it, which is the\nusual off-market signal.\n\nUK only.","operationId":"search_v1_sourcing_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourcingSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Search V1 Sourcing Search Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sourcing/owners":{"post":{"tags":["sourcing"],"summary":"Owners","description":"Resolve registered owners for parcels returned by a sourcing search.\n\nUses the bulk HM Land Registry corporate and overseas ownership registers,\nso it names companies and public bodies. Individually-owned titles are not\nin the bulk data and come back unresolved rather than wrong.\n\nUK only.","operationId":"owners_v1_sourcing_owners_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourcingOwnersRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Owners V1 Sourcing Owners Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sourcing/strategies":{"get":{"tags":["sourcing"],"summary":"Strategies","description":"The sourcing strategy presets as data: each one's filters (every key\noverridable, with its default and unit), its ranking components with\nweights and scales, the columns it reads, the data gaps that limit it and\nits version. Pass `area` as a LAD GSS code for `data_ready` per strategy.\n\nUK only.","operationId":"strategies_v1_sourcing_strategies_get","parameters":[{"name":"area","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Area"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Strategies V1 Sourcing Strategies Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sourcing/live-listings":{"post":{"tags":["sourcing"],"summary":"Live Listings","description":"What is on the market right now in these postcode districts, enriched\nagainst the twin: asking against our valuation, £/m², yield on both bases,\nlease years, EPC and its retrofit gap, the designation flags, days listed\nand the agent, with a signals line per row.\n\nPages rather than counts — a district holds far more archived listings\nthan live ones, so a total costs seconds while the page costs\nmilliseconds. Read `has_more` and page with `offset`.\n\nUK only.","operationId":"live_listings_v1_sourcing_live_listings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiveListingsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Live Listings V1 Sourcing Live Listings Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sourcing/offmarket-owners":{"post":{"tags":["sourcing"],"summary":"Offmarket Owners","description":"Who owns the stock in an area — optionally only the stock a strategy\npoints at — ranked by holding size, tenure and equity, with company status\nand the signals behind the rank.\n\nCompanies only, and structurally so: grouping is on the company number, so\nunits held by private individuals have no group to appear in. They are\ncounted, never listed.\n\nUK only.","operationId":"offmarket_owners_v1_sourcing_offmarket_owners_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffmarketOwnersRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Offmarket Owners V1 Sourcing Offmarket Owners Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sourcing/land-assembly":{"get":{"tags":["sourcing"],"summary":"Land Assembly","description":"The parcels adjacent to one parcel, who owns each, and what the combined\nsite would be: total area, distinct owners, how many neighbours share the\nsubject's proprietor, and the constraints across the whole assembly.\n\nAddress the subject by `parcel_id`, `inspire_id`, `title_number` or\n`uprn`. Adjacency is an intersection against the subject's boundary\nbuffered by `tolerance_m`, because registered boundaries rarely share an\nexact edge.\n\nUK only.","operationId":"land_assembly_v1_sourcing_land_assembly_get","parameters":[{"name":"parcel_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parcel Id"}},{"name":"inspire_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inspire Id"}},{"name":"title_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title Number"}},{"name":"uprn","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Uprn"}},{"name":"ring_m","in":"query","required":false,"schema":{"type":"integer","default":150,"title":"Ring M"}},{"name":"tolerance_m","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Tolerance M"}},{"name":"same_owner_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Same Owner Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Land Assembly V1 Sourcing Land Assembly Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sourcing/commercial":{"post":{"tags":["sourcing"],"summary":"Commercial","description":"Rated commercial stock in a local authority, filtered by sector and\nrateable value: each row with its income-basis value, freeholder where a\ntitle links, and auction history. No £/m² is published — the VOA's\nmeasured area is not loaded, and the twin's unit-level area is not\ncomparable with a hereditament-level rateable value.\n\nRateable value is the VOA's estimated annual rental value at the list's\nantecedent valuation date, NOT passing rent. The income-basis value\ndivides it by the district's own commercial auction yield and comes back\n`not_available` where there is no such evidence — no default is applied.\n\nUK only.","operationId":"commercial_v1_sourcing_commercial_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Commercial V1 Sourcing Commercial Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sourcing/parcel":{"get":{"tags":["sourcing"],"summary":"Parcel","description":"One land parcel in full: INSPIRE id, title number and OS id, area and land\nuse, the registered proprietor where a title links, the units standing on\nit, plot utilisation, and every constraint flag three-valued.\n\n`not_checked` is not `false` — a parcel with unchecked flags is unassessed,\nnot unconstrained. Plot coverage is footprint over area, which is not a\ndensity, and the unbuilt ground it implies is an upper bound before any\nconstraint or access test.\n\nUK only.","operationId":"parcel_v1_sourcing_parcel_get","parameters":[{"name":"parcel_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parcel Id"}},{"name":"inspire_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inspire Id"}},{"name":"title_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title Number"}},{"name":"uprn","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Uprn"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Parcel V1 Sourcing Parcel Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/site/appraisal":{"get":{"tags":["site"],"summary":"Appraisal","description":"Everything known about one site, assembled and judged.\n\nParcel geometry as GeoJSON, valuation against last recorded sale, the\nregistered proprietor, EPC, full auction history, and live planning\ndesignations — one call instead of six, with the joins already made.\n\nGive `scheme_gia_m2` (and your own `rate_gbp_m2`, since no £/m² benchmark\nis loaded) for a `scheme` block: build cost from the published index times\nthe regional factor, with a cost per unit. It is construction cost only —\none side of a residual, not a residual. A `precedents` block summarises\nwhat nearby applications were decided.\n\nThe `signals` block is the reason to use this over the individual tools. It\nnames what fired and carries the evidence: repeat auction failure with the\nguide-to-estimate ratio, long-held with the nominal gain, MEES-unlettable\nwith the band, under-built with the coverage, corporate owner with the\ncompany number.\n\nA block that is absent says so. No registered proprietor is a real answer —\nthe polygon-to-title backfill reaches about 44% of parcels — and so is no\nEPC or no auction history. None of them is an error.\n\nA designation check that FAILS is reported as unknown, never as absent.\n\nUK only.","operationId":"appraisal_v1_site_appraisal_get","parameters":[{"name":"uprn","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Property UPRN","title":"Uprn"},"description":"Property UPRN"},{"name":"land_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Parcel id from /sourcing/search","title":"Land Id"},"description":"Parcel id from /sourcing/search"},{"name":"include_designations","in":"query","required":false,"schema":{"type":"boolean","description":"Run live planning constraint checks (adds ~1-3s).","default":true,"title":"Include Designations"},"description":"Run live planning constraint checks (adds ~1-3s)."},{"name":"scheme_gia_m2","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Proposed gross internal area — prices the build side.","title":"Scheme Gia M2"},"description":"Proposed gross internal area — prices the build side."},{"name":"scheme_units","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"description":"Proposed unit count.","title":"Scheme Units"},"description":"Proposed unit count."},{"name":"sector","in":"query","required":false,"schema":{"type":"string","description":"Cost sector for the build estimate","default":"residential","title":"Sector"},"description":"Cost sector for the build estimate"},{"name":"region","in":"query","required":false,"schema":{"type":"string","description":"NATIONAL | LONDON | SOUTH_EAST","default":"NATIONAL","title":"Region"},"description":"NATIONAL | LONDON | SOUTH_EAST"},{"name":"rate_gbp_m2","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Your own £/m² rate — required for a priced build.","title":"Rate Gbp M2"},"description":"Your own £/m² rate — required for a priced build."},{"name":"rate_period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The period your rate is quoted at, e.g. 2024Q1","title":"Rate Period"},"description":"The period your rate is quoted at, e.g. 2024Q1"},{"name":"include_precedents","in":"query","required":false,"schema":{"type":"boolean","description":"Summarise nearby planning decisions.","default":true,"title":"Include Precedents"},"description":"Summarise nearby planning decisions."},{"name":"precedent_radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":50,"default":800,"title":"Precedent Radius M"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Appraisal V1 Site Appraisal Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/site/cost-index":{"get":{"tags":["site"],"summary":"Cost Index","description":"Construction cost index series — tender prices, output prices, the\nconstruction deflator and labour — by sector and frequency, each series\nwith its base period and method. The cost side of a development appraisal,\nfrom the same table the site appraisal's build cost will read.\n\nUK only.","operationId":"cost_index_v1_site_cost_index_get","parameters":[{"name":"basis","in":"query","required":true,"schema":{"type":"string","description":"tender | output | deflator | labour","title":"Basis"},"description":"tender | output | deflator | labour"},{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"residential, commercial, industrial, infrastructure, all, …","title":"Sector"},"description":"residential, commercial, industrial, infrastructure, all, …"},{"name":"region_key","in":"query","required":false,"schema":{"type":"string","description":"Only UK is loaded; regional factors are /site/appraisal's inputs","default":"UK","title":"Region Key"},"description":"Only UK is loaded; regional factors are /site/appraisal's inputs"},{"name":"freq","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"monthly | quarterly | annual","title":"Freq"},"description":"monthly | quarterly | annual"},{"name":"from_period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Inclusive lower bound, e.g. 2014Q1 / 2014M01 / 2014","title":"From Period"},"description":"Inclusive lower bound, e.g. 2014Q1 / 2014M01 / 2014"},{"name":"to_period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Inclusive upper bound","title":"To Period"},"description":"Inclusive upper bound"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cost Index V1 Site Cost Index Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/site/build-cost":{"get":{"tags":["site"],"summary":"Build Cost","description":"Build cost for a scheme: the sector's cost index with its 1- and 5-year\nmovement, the regional location factor, the editorial on-cost percentages\nand, given a GIA and a £/m² rate, an estimate — the rate rebased through\nthe index, localised, multiplied out, totals at low / mid / high on-costs.\nThe £/m² benchmark leg says `not_available` until a tender benchmark is\nloaded; nothing here is a modelled number.\n\nUK only.","operationId":"build_cost_v1_site_build_cost_get","parameters":[{"name":"sector","in":"query","required":true,"schema":{"type":"string","description":"residential | commercial | industrial | infrastructure | public | all","title":"Sector"},"description":"residential | commercial | industrial | infrastructure | public | all"},{"name":"region","in":"query","required":false,"schema":{"type":"string","description":"Location-factor region key: NATIONAL, LONDON, SOUTH_EAST (a 422 lists what is loaded)","default":"NATIONAL","title":"Region"},"description":"Location-factor region key: NATIONAL, LONDON, SOUTH_EAST (a 422 lists what is loaded)"},{"name":"gia_m2","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Gross internal area, m²","title":"Gia M2"},"description":"Gross internal area, m²"},{"name":"basis","in":"query","required":false,"schema":{"type":"string","description":"tender | output","default":"tender","title":"Basis"},"description":"tender | output"},{"name":"rate_gbp_m2","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Your base build rate £/m²; required for an estimate while no benchmark is loaded","title":"Rate Gbp M2"},"description":"Your base build rate £/m²; required for an estimate while no benchmark is loaded"},{"name":"rate_period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Period that rate is priced at, in the series' own format (2024Q1 / 2024M01)","title":"Rate Period"},"description":"Period that rate is priced at, in the series' own format (2024Q1 / 2024M01)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Build Cost V1 Site Build Cost Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/mortgage-rates":{"get":{"tags":["finance"],"summary":"Mortgage Rates","description":"Average UK mortgage rates from the Bank of England: 2-year fixed, 3-year\nfixed at 75% LTV, and the standard variable rate.\n\nA market-wide input to an appraisal, not a quote for a borrower — it is the\nBoE's published average, so it carries no applicant, product or lender.\n\nUK only.","operationId":"mortgage_rates_v1_market_mortgage_rates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Mortgage Rates V1 Market Mortgage Rates Get"}}}}}}},"/v1/housing/lha-rate":{"post":{"tags":["finance"],"summary":"Lha Rate","description":"Local Housing Allowance for a postcode and bedroom category — the ceiling\non housing benefit, and so the effective rent floor for a benefit-funded\ntenancy.\n\nRATES ARE WEEKLY. `rate_unit` says `gbp_per_week`, and the response is\npublished exactly as the rate-setting bodies publish it. Comparing one\ndirectly against a monthly rent understates it by about 4.33x; convert at\nthe point of use, and multiply by 52/12 rather than by 4.\n\nResolved through the Broad Rental Market Area that contains the postcode,\nnot the local authority — a BRMA is its own geography and the two do not\nalign. `brma` names which one answered.\n\nThree bodies set these rates: the VOA in England, Rent Service Scotland,\nand Rent Officers Wales. There is no category above 4 bedrooms.\n\nUK only.","operationId":"lha_rate_v1_housing_lha_rate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LhaRateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lha Rate V1 Housing Lha Rate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/energy/epc/{uprn}":{"get":{"tags":["energy"],"summary":"Epc","description":"Every EPC lodged against a property, newest first.\n\nReturns the history rather than only the latest — a property re-assessed\nafter work has two certificates, and the difference between them is the\nevidence the work happened. Each carries a retrofit gap, or null where it\ncannot be computed.\n\nUK only.","operationId":"epc_v1_energy_epc__uprn__get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","description":"Property UPRN","title":"Uprn"},"description":"Property UPRN"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Epc V1 Energy Epc  Uprn  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/energy/profile/{area_id}":{"get":{"tags":["energy"],"summary":"Profile","description":"Energy composition of the certificated stock in an area: EPC band mix, fuel\nmix, heat-pump and solar penetration.\n\nPercentages are of properties HOLDING an EPC, not of all stock. EPCs are\nlodged on sale or let, so long-held and social housing are\nunder-represented, and the response says so.\n\nUK only.","operationId":"profile_v1_energy_profile__area_id__get","parameters":[{"name":"area_id","in":"path","required":true,"schema":{"type":"string","description":"Marts area id from /areas/resolve","title":"Area Id"},"description":"Marts area id from /areas/resolve"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Profile V1 Energy Profile  Area Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/energy/retrofit-candidates":{"post":{"tags":["energy"],"summary":"Retrofit Candidates","description":"Properties in an area with the most improvement headroom, ranked by\npotential efficiency and filtered by EPC band and heating fuel.\n\nA targeting tool: it returns a list to act on, not a fact about one\nproperty.\n\nUK only.","operationId":"retrofit_candidates_v1_energy_retrofit_candidates_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetrofitRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Retrofit Candidates V1 Energy Retrofit Candidates Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/energy/solar-potential":{"post":{"tags":["energy"],"summary":"Solar Potential","description":"Roof characteristics for solar screening: footprint, roof shape and\nmaterial, height, and whether panels are already present.\n\nReturns no generation estimate. Pitch, orientation and shading are not in\nthe warehouse, and a figure derived from footprint alone would read as a\nyield forecast without being one.\n\nUK only.","operationId":"solar_potential_v1_energy_solar_potential_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolarRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solar Potential V1 Energy Solar Potential Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/agents/{area_id}":{"get":{"tags":["intel"],"summary":"Agent Activity","description":"Which agents actually transact in an area, ranked by listing count, with\nseparate sale and rental counts and medians.\n\nUK only.","operationId":"agent_activity_v1_market_agents__area_id__get","parameters":[{"name":"area_id","in":"path","required":true,"schema":{"type":"string","description":"Marts area id from /areas/resolve","title":"Area Id"},"description":"Marts area id from /areas/resolve"},{"name":"months","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":120,"minimum":1},{"type":"null"}],"title":"Months"}},{"name":"listing_type","in":"query","required":false,"schema":{"anyOf":[{"enum":["sale","rental"],"type":"string"},{"type":"null"}],"title":"Listing Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Agent Activity V1 Market Agents  Area Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/listings/history/{uprn}":{"get":{"tags":["intel"],"summary":"Listing History","description":"Every listing snapshot for a property, with a price trajectory where at\nleast two snapshots carry a price.\n\nUK only.","operationId":"listing_history_v1_listings_history__uprn__get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","description":"Property UPRN","title":"Uprn"},"description":"Property UPRN"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Listing History V1 Listings History  Uprn  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/equity/estimate":{"post":{"tags":["intel"],"summary":"Equity Estimate","description":"Current estimated value against the last recorded sale: gain and years\nheld.\n\nNOT a loan-to-value — the warehouse holds no mortgage balance — and the\ngain is nominal rather than inflation-adjusted.\n\nUK only.","operationId":"equity_estimate_v1_equity_estimate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UprnsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Equity Estimate V1 Equity Estimate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/equity/long-held":{"post":{"tags":["intel"],"summary":"Long Held","description":"Long-held properties in an area carrying a large paper gain — the classic\noff-market cohort, ordered by gain rather than by value.\n\nUK only.","operationId":"long_held_v1_equity_long_held_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LongHeldRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Long Held V1 Equity Long Held Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ownership/proprietor":{"get":{"tags":["intel"],"summary":"Owner Profile","description":"What the register shows for one proprietor.\n\nA company number is an exact key; a name is a fuzzy substring match, and\nthe response says which was used — company names repeat across unrelated\nentities, so a name match is candidates rather than a portfolio.\n\nUK only.","operationId":"owner_profile_v1_ownership_proprietor_get","parameters":[{"name":"company_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Number"}},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Owner Profile V1 Ownership Proprietor Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/buildings/physical":{"post":{"tags":["intel"],"summary":"Building Physical","description":"Physical form of the buildings a set of UPRNs sit in: height, volume,\nfootprint, floors, construction and roof material, basement, green roof,\nsolar panels and unit mix.\n\nyear_built and num_floors are thinly populated and come back null rather\nthan estimated.\n\nUK only.","operationId":"building_physical_v1_buildings_physical_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UprnsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Building Physical V1 Buildings Physical Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/buildings/stock-profile/{area_id}":{"get":{"tags":["intel"],"summary":"Stock Profile","description":"Composition of the built stock in an area: unit counts, HMO share,\nmixed-use share, median height and footprint, solar penetration.\n\nMedians rather than means — one tower would skew an average height enough\nto mischaracterise a low-rise district.\n\nUK only.","operationId":"stock_profile_v1_buildings_stock_profile__area_id__get","parameters":[{"name":"area_id","in":"path","required":true,"schema":{"type":"string","description":"Marts area id from /areas/resolve","title":"Area Id"},"description":"Marts area id from /areas/resolve"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Stock Profile V1 Buildings Stock Profile  Area Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/buildings/mixed-use":{"post":{"tags":["intel"],"summary":"Mixed Use","description":"Buildings holding both residential and commercial units — the conversion\nand permitted-development cohort, and awkward to source elsewhere because\nit is a property of the unit mix rather than of any one property.\n\nUK only.","operationId":"mixed_use_v1_buildings_mixed_use_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MixedUseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Mixed Use V1 Buildings Mixed Use Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/land/plot-utilisation":{"post":{"tags":["intel"],"summary":"Plot Utilisation","description":"Land parcels by size and how much of them is built on.\n\nUK only.","operationId":"plot_utilisation_v1_land_plot_utilisation_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlotUtilisationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Plot Utilisation V1 Land Plot Utilisation Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/h3/density/{area_id}":{"get":{"tags":["intel"],"summary":"H3 Density","description":"Hex-binned stock and transaction density for map layers.\n\nDensity ONLY. There is no usable price column on the hex cube, and the\nresponse names what is and is not available rather than returning a\nmostly-null price that would render as missing data.\n\nUK only.","operationId":"h3_density_v1_h3_density__area_id__get","parameters":[{"name":"area_id","in":"path","required":true,"schema":{"type":"string","description":"Marts area id from /areas/resolve","title":"Area Id"},"description":"Marts area id from /areas/resolve"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20000,"minimum":1,"default":2000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response H3 Density V1 H3 Density  Area Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/facts":{"post":{"tags":["market-facts"],"summary":"Facts","description":"Query the pre-cubed area_facts table by geography × asset class × period.\n\nUK only.","operationId":"facts_v1_market_facts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketFactsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Facts V1 Market Facts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/ranking":{"post":{"tags":["market-facts"],"summary":"Ranking","description":"Rank areas against each other on a market metric — one row per area,\naggregated over a trailing window.\n\nDistinct from /market/facts, which answers for ONE area. This is the\ncomparison: \"which districts in Manchester turn over fastest\", \"rank\nthese twelve areas by price per sqm\". Distinct from /market/volume-ranking\ntoo — that ranks on raw transaction COUNT, which measures market size,\nnot liquidity. Turnover rate is sales as a share of the stock that could\nhave sold, which is what people mean when they ask which market moves.\n\nThe response carries a `window` block naming the months aggregated. Read\nit: a 12-month turnover and a 3-month one differ by roughly 4x, and the\nmost recent months are deliberately excluded because HM Land Registry\nregisters sales after completion.\n\nturnover_rate is exact. Price, rent and yield are weighted means of the\nunderlying medians — indicative, not true medians.\n\nUK only.","operationId":"ranking_v1_market_ranking_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketRankingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ranking V1 Market Ranking Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/volume-series":{"post":{"tags":["market-facts"],"summary":"Volume Series","description":"Monthly transaction volume for a district, postcode area or county —\n1995 to present, oldest month first.\n\nThe response always carries `data_through`, `last_ingested_at` and\n`provisional_from`. HM Land Registry registers sales months after\ncompletion, so the trailing months are a floor that will rise; plotting\nthem as fact reads a registration lag as a market crash.\n\nUK only.","operationId":"volume_series_v1_market_volume_series_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeSeriesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Volume Series V1 Market Volume Series Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/volume-ranking":{"post":{"tags":["market-facts"],"summary":"Volume Ranking","description":"Rank postcode districts by transaction volume (or median price) over a\ntrailing window — \"the busiest districts in Greater London last year\".\n\nUK only.","operationId":"volume_ranking_v1_market_volume_ranking_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeRankingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Volume Ranking V1 Market Volume Ranking Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/index-series":{"get":{"tags":["market-facts"],"summary":"Index Series","description":"The published house-price index for one postcode district or local\nauthority: per-period level (base = 100), lo/hi on forecast rows,\n`is_forecast`, and provenance — index_method, index_decision, base period,\nlast settled period. The same series that shapes /valuation/full's\nback-series.\n\nUK only.","operationId":"index_series_v1_market_index_series_get","parameters":[{"name":"area_code","in":"query","required":true,"schema":{"type":"string","description":"Postcode district (\"W14\") or local authority NAME (\"Camden\")","title":"Area Code"},"description":"Postcode district (\"W14\") or local authority NAME (\"Camden\")"},{"name":"area_type","in":"query","required":false,"schema":{"type":"string","description":"district | lad","default":"district","title":"Area Type"},"description":"district | lad"},{"name":"frequency","in":"query","required":false,"schema":{"type":"string","description":"monthly | quarterly","default":"monthly","title":"Frequency"},"description":"monthly | quarterly"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY, YYYY-MM or YYYY-Qn","title":"From"},"description":"YYYY, YYYY-MM or YYYY-Qn"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY, YYYY-MM or YYYY-Qn (inclusive)","title":"To"},"description":"YYYY, YYYY-MM or YYYY-Qn (inclusive)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":400,"title":"Limit"}},{"name":"include_forecast","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Forecast"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Index Series V1 Market Index Series Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/time-adjustment":{"get":{"tags":["market-facts"],"summary":"Time Adjustment","description":"The index factor that carries a price from a past date to today for a\npostcode district: the from- and to-period index levels, the multiplier,\nand the index the factor came from. The same arithmetic the valuation\napplies to each comparable, exposed so a caller can adjust a price of\ntheir own.\n\nUK only.","operationId":"time_adjustment_v1_market_time_adjustment_get","parameters":[{"name":"postcode","in":"query","required":true,"schema":{"type":"string","description":"Full UK postcode; only the district (first half) is used","title":"Postcode"},"description":"Full UK postcode; only the district (first half) is used"},{"name":"from_date","in":"query","required":true,"schema":{"type":"string","description":"ISO date of the historic transaction (YYYY-MM-DD)","title":"From Date"},"description":"ISO date of the historic transaction (YYYY-MM-DD)"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional property type filter (e.g. 'Flat')","title":"Property Type"},"description":"Optional property type filter (e.g. 'Flat')"},{"name":"lookback_years","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":5,"title":"Lookback Years"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Time Adjustment V1 Market Time Adjustment Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/commercial-index":{"get":{"tags":["market-facts"],"summary":"Commercial Index","description":"Repeat-sales commercial CAPITAL index, quarterly, 1995Q1 = 100 — national,\nnational x sector, or local authority x ALL. No local x sector family\nexists; read the national sector series beside the authority's ALL series.\n\nUK only.","operationId":"commercial_index_v1_market_commercial_index_get","parameters":[{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ALL (default) | OFFICE | RETAIL | HOTEL | HOLIDAY_LET","title":"Sector"},"description":"ALL (default) | OFFICE | RETAIL | HOTEL | HOLIDAY_LET"},{"name":"area","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Omit for national; else a local authority NAME","title":"Area"},"description":"Omit for national; else a local authority NAME"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYYQn, YYYY-Qn, YYYY-MM or YYYY","title":"From"},"description":"YYYYQn, YYYY-Qn, YYYY-MM or YYYY"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last quarter (inclusive)","title":"To"},"description":"Last quarter (inclusive)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":400,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Commercial Index V1 Market Commercial Index Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/commercial-rent-index":{"get":{"tags":["market-facts"],"summary":"Commercial Rent Index","description":"Commercial RENT index from VOA rateable values — four points (2010 / 2017\n/ 2023 / 2026 lists, dated at their antecedent valuation dates), 2010 list\n= 100. The response's `basis` says what it is: open-market rent\nassessments, not advertised rents, not capital values.\n\nUK only.","operationId":"commercial_rent_index_v1_market_commercial_rent_index_get","parameters":[{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ALL (default) or a VOA sector, e.g. INDUSTRIAL_WAREHOUSE","title":"Sector"},"description":"ALL (default) or a VOA sector, e.g. INDUSTRIAL_WAREHOUSE"},{"name":"area","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Omit for national; else a local authority GSS code or NAME","title":"Area"},"description":"Omit for national; else a local authority GSS code or NAME"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"First rating-list year, e.g. 2017","title":"From"},"description":"First rating-list year, e.g. 2017"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last rating-list year (inclusive)","title":"To"},"description":"Last rating-list year (inclusive)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Commercial Rent Index V1 Market Commercial Rent Index Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/asking-index":{"get":{"tags":["market-facts"],"summary":"Asking Index","description":"Hedonic ASKING-PRICE index from portal listings, 2022M01 = 100, with 80%\nbands and posterior SEs, smoothed toward the parent geography. Asking, not\nsold: it leads the repeat-sales index and includes what never sells.\n\nUK only.","operationId":"asking_index_v1_market_asking_index_get","parameters":[{"name":"area_code","in":"query","required":false,"schema":{"type":"string","description":"Postcode district (\"W14\"), local authority NAME (\"Camden\") with area_type=lad, or NATIONAL","default":"NATIONAL","title":"Area Code"},"description":"Postcode district (\"W14\"), local authority NAME (\"Camden\") with area_type=lad, or NATIONAL"},{"name":"area_type","in":"query","required":false,"schema":{"type":"string","description":"district | lad | national","default":"district","title":"Area Type"},"description":"district | lad | national"},{"name":"frequency","in":"query","required":false,"schema":{"type":"string","description":"monthly | quarterly — read provenance.pub_freq for the grain the data resolves","default":"monthly","title":"Frequency"},"description":"monthly | quarterly — read provenance.pub_freq for the grain the data resolves"},{"name":"method","in":"query","required":false,"schema":{"type":"string","description":"hedonic_smoothed | hedonic_raw","default":"hedonic_smoothed","title":"Method"},"description":"hedonic_smoothed | hedonic_raw"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY, YYYY-MM or YYYY-Qn","title":"From"},"description":"YYYY, YYYY-MM or YYYY-Qn"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last period (inclusive)","title":"To"},"description":"Last period (inclusive)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":400,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Asking Index V1 Market Asking Index Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/rent-index":{"get":{"tags":["market-facts"],"summary":"Rent Index","description":"Hedonic ASKING-RENT index from portal lettings, 2022M01 = 100, with bands\nand SEs. Validated against the ONS Price Index of Private Rents by local\nauthority every build and withheld in a month where they disagree — a\nmissing recent month is a refusal, not an outage. Asking, not achieved.\n\nUK only.","operationId":"rent_index_v1_market_rent_index_get","parameters":[{"name":"area_code","in":"query","required":false,"schema":{"type":"string","description":"Postcode district (\"W14\"), local authority NAME (\"Camden\") with area_type=lad, or NATIONAL","default":"NATIONAL","title":"Area Code"},"description":"Postcode district (\"W14\"), local authority NAME (\"Camden\") with area_type=lad, or NATIONAL"},{"name":"area_type","in":"query","required":false,"schema":{"type":"string","description":"district | lad | national","default":"district","title":"Area Type"},"description":"district | lad | national"},{"name":"frequency","in":"query","required":false,"schema":{"type":"string","description":"monthly | quarterly — read provenance.pub_freq","default":"monthly","title":"Frequency"},"description":"monthly | quarterly — read provenance.pub_freq"},{"name":"method","in":"query","required":false,"schema":{"type":"string","description":"hedonic_smoothed | hedonic_raw","default":"hedonic_smoothed","title":"Method"},"description":"hedonic_smoothed | hedonic_raw"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY, YYYY-MM or YYYY-Qn","title":"From"},"description":"YYYY, YYYY-MM or YYYY-Qn"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last period (inclusive)","title":"To"},"description":"Last period (inclusive)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":400,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rent Index V1 Market Rent Index Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/listings":{"get":{"tags":["market-facts"],"summary":"Listings","description":"Monthly supply-side statistics from portal listings: listings added\n(never-reduced cohort) and reduced, reduction share, asking price / rent\ndistributions, new-build share, agent concentration, yields on two bases,\nand asking-to-sold on the registry-matched subset. The payload's `basis`\nand `notes` say what each number is — read them before quoting a flow or a\nsell-through.\n\nUK only.","operationId":"listings_v1_market_listings_get","parameters":[{"name":"area_code","in":"query","required":false,"schema":{"type":"string","description":"Postcode district, local authority NAME with area_type=lad, or NATIONAL","default":"NATIONAL","title":"Area Code"},"description":"Postcode district, local authority NAME with area_type=lad, or NATIONAL"},{"name":"area_type","in":"query","required":false,"schema":{"type":"string","description":"district | lad | national","default":"district","title":"Area Type"},"description":"district | lad | national"},{"name":"channel","in":"query","required":false,"schema":{"type":"string","description":"residential_sale | residential_rent","default":"residential_sale","title":"Channel"},"description":"residential_sale | residential_rent"},{"name":"bedroom_band","in":"query","required":false,"schema":{"type":"string","description":"all | 1bed | 2bed | 3bed | 4bed | 5plus | unknown","default":"all","title":"Bedroom Band"},"description":"all | 1bed | 2bed | 3bed | 4bed | 5plus | unknown"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY or YYYY-MM","title":"From"},"description":"YYYY or YYYY-MM"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":120,"minimum":1,"default":60,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Listings V1 Market Listings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/listing-stock":{"get":{"tags":["market-facts"],"summary":"Listing Stock","description":"Live listings on the market by day — the stock series, observed forwards\nfrom 2026-09-05 because the portal keeps no exit dates. A short series is\nexpected, not missing data.\n\nUK only.","operationId":"listing_stock_v1_market_listing_stock_get","parameters":[{"name":"area_code","in":"query","required":false,"schema":{"type":"string","description":"Postcode district, local authority NAME with area_type=lad, or NATIONAL","default":"NATIONAL","title":"Area Code"},"description":"Postcode district, local authority NAME with area_type=lad, or NATIONAL"},{"name":"area_type","in":"query","required":false,"schema":{"type":"string","description":"district | lad | national","default":"district","title":"Area Type"},"description":"district | lad | national"},{"name":"channel","in":"query","required":false,"schema":{"type":"string","description":"residential_sale | residential_rent","default":"residential_sale","title":"Channel"},"description":"residential_sale | residential_rent"},{"name":"bedroom_band","in":"query","required":false,"schema":{"type":"string","description":"all | 1bed | 2bed | 3bed | 4bed | 5plus | unknown","default":"all","title":"Bedroom Band"},"description":"all | 1bed | 2bed | 3bed | 4bed | 5plus | unknown"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD","title":"From"},"description":"YYYY-MM-DD"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":1,"default":90,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Listing Stock V1 Market Listing Stock Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/yields":{"get":{"tags":["market-facts"],"summary":"Yields","description":"Gross yield for an area and bedroom band on TWO bases, by month, with n:\n`gross_yield_asking` (asking rent over asking price, same area and band)\nand `gross_yield_avm_median` (asking rent over our valuation of the same\nlisted units, `gross_yield_avm_n` listings behind it). Null where the\nmonth is too thin to publish. The basis sentence travels with the data.\n\nUK only.","operationId":"yields_v1_market_yields_get","parameters":[{"name":"area_code","in":"query","required":false,"schema":{"type":"string","description":"Postcode district (\"W14\"), local authority name, or NATIONAL","default":"NATIONAL","title":"Area Code"},"description":"Postcode district (\"W14\"), local authority name, or NATIONAL"},{"name":"area_type","in":"query","required":false,"schema":{"type":"string","description":"district | lad | national","default":"district","title":"Area Type"},"description":"district | lad | national"},{"name":"bedroom_band","in":"query","required":false,"schema":{"type":"string","description":"all | 1bed | 2bed | 3bed | 4bed | 5plus | unknown","default":"all","title":"Bedroom Band"},"description":"all | 1bed | 2bed | 3bed | 4bed | 5plus | unknown"},{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":12,"title":"Months"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Yields V1 Market Yields Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/forecast":{"get":{"tags":["market-facts"],"summary":"Forecast","description":"The published house-price index forecast for an area: the last SETTLED\nindex point as the anchor, then up to seven forecast periods with `lo`\nand `hi` bands, and the method and grain that produced them. Seven is the\nhorizon the index publishes; nothing beyond it is offered.\n\nUK only.","operationId":"forecast_v1_market_forecast_get","parameters":[{"name":"area_code","in":"query","required":true,"schema":{"type":"string","description":"Postcode district (\"W14\") or local authority name","title":"Area Code"},"description":"Postcode district (\"W14\") or local authority name"},{"name":"area_type","in":"query","required":false,"schema":{"type":"string","description":"district | lad","default":"district","title":"Area Type"},"description":"district | lad"},{"name":"frequency","in":"query","required":false,"schema":{"type":"string","description":"monthly | quarterly","default":"monthly","title":"Frequency"},"description":"monthly | quarterly"},{"name":"horizon","in":"query","required":false,"schema":{"type":"integer","maximum":7,"minimum":1,"description":"Forecast steps to return (the index publishes h1–h7)","default":7,"title":"Horizon"},"description":"Forecast steps to return (the index publishes h1–h7)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Forecast V1 Market Forecast Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/supply-demand":{"get":{"tags":["market-facts"],"summary":"Supply Demand","description":"Supply and demand for an area in one call: live stock today (count,\nmedian age on market, new-home count), and the monthly flow — listings\nadded and reduced, reduction share, new-home share, agent concentration,\nasking-to-sold on the registry-matched subset and days to completion.\nForward-only where it says so: the stock series began 2026-09-05.\n\nUK only.","operationId":"supply_demand_v1_market_supply_demand_get","parameters":[{"name":"area_code","in":"query","required":false,"schema":{"type":"string","description":"Postcode district (\"W14\"), local authority name, or NATIONAL","default":"NATIONAL","title":"Area Code"},"description":"Postcode district (\"W14\"), local authority name, or NATIONAL"},{"name":"area_type","in":"query","required":false,"schema":{"type":"string","description":"district | lad | national","default":"district","title":"Area Type"},"description":"district | lad | national"},{"name":"channel","in":"query","required":false,"schema":{"type":"string","description":"residential_sale | residential_rent","default":"residential_sale","title":"Channel"},"description":"residential_sale | residential_rent"},{"name":"bedroom_band","in":"query","required":false,"schema":{"type":"string","description":"all | 1bed | 2bed | 3bed | 4bed | 5plus | unknown","default":"all","title":"Bedroom Band"},"description":"all | 1bed | 2bed | 3bed | 4bed | 5plus | unknown"},{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":12,"title":"Months"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Supply Demand V1 Market Supply Demand Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/commercial-market":{"get":{"tags":["market-facts"],"summary":"Commercial Market","description":"The commercial market for a sector and a place: the repeat-sales CAPITAL\nindex, the VOA rating-list RENT index, and the rated stock in the\nauthority with its total and median rateable value.\n\nThe two indices are different kinds of series and must not be plotted\ntogether — one is quarterly and thin enough that quarters rest on\nsingle-digit sale pairs (`n_pairs` is on every point), the other moves once\nper rating list, four points in sixteen years. Only 19 authorities carry a\ncapital series, ALL sector only; where one is absent the national series is\nreturned and labelled.\n\nUK only.","operationId":"commercial_market_v1_market_commercial_market_get","parameters":[{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ALL (default) or a VOA sector: RETAIL, OFFICE, INDUSTRIAL_WAREHOUSE, …","title":"Sector"},"description":"ALL (default) or a VOA sector: RETAIL, OFFICE, INDUSTRIAL_WAREHOUSE, …"},{"name":"lad_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"LAD GSS code, for the rated stock counts","title":"Lad Code"},"description":"LAD GSS code, for the rated stock counts"},{"name":"area_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"A warehouse area id, for a local index where one is published","title":"Area Key"},"description":"A warehouse area id, for a local index where one is published"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Commercial Market V1 Market Commercial Market Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/market/area-report":{"get":{"tags":["market-facts"],"summary":"Area Report","description":"The market for one area in one document: sourcing readiness per strategy,\nthe commercial capital and rent indices with rated stock, the planning\ndecision record for the authority, and the live listing stock.\n\nThe scopes are not interchangeable: readiness, commercial and planning are\nkeyed on the local authority, the live listing lane on postcode district.\nPass both to fill every section.\n\nMounted on /market rather than /property deliberately: the property router\nmatches `/{uprn}` as an int before any later literal, so `/property/area-report`\nwould be parsed as a UPRN and rejected with a 422. The upstream path is\nunchanged.\n\nUK only.","operationId":"area_report_v1_market_area_report_get","parameters":[{"name":"lad_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lad Code"}},{"name":"postcode_district","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postcode District"}},{"name":"sector","in":"query","required":false,"schema":{"type":"string","default":"ALL","title":"Sector"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Area Report V1 Market Area Report Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/transactions/uprn/{uprn}":{"get":{"tags":["transactions"],"summary":"By Uprn","description":"All HMLR Price Paid records joined to this UPRN. Sorted newest-first.\n\nUK only (England & Wales — Scotland uses a different registry).","operationId":"by_uprn_v1_transactions_uprn__uprn__get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response By Uprn V1 Transactions Uprn  Uprn  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auctions/lots":{"get":{"tags":["auctions"],"summary":"Lots","description":"Individual auction lots: guide price, whether it sold, the hammer price\nwhere the auctioneer published one, and net yield where quoted.\n\nAround a quarter of lots carry an achieved price and a fifth carry a yield —\nthat is the market's disclosure habits, not a gap in the data. Use\n`with_achieved_price` or `with_yield` to restrict to lots that can answer a\nquestion about outcomes.\n\n`meta.coverage` reports how many of the returned rows carry each, so a thin\nresult is legible as thin rather than read as the whole market.\n\nUK only.","operationId":"lots_v1_auctions_lots_get","parameters":[{"name":"postcode_district","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"e.g. AL10","title":"Postcode District"},"description":"e.g. AL10"},{"name":"postcode_area","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"e.g. AL","title":"Postcode Area"},"description":"e.g. AL"},{"name":"auctioneer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"allsop | savills | acuitus | barnettross | agentsproperty","title":"Auctioneer"},"description":"allsop | savills | acuitus | barnettross | agentsproperty"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date To"}},{"name":"is_commercial","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Commercial"}},{"name":"sold_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Sold Only"}},{"name":"with_achieved_price","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"With Achieved Price"}},{"name":"with_yield","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"With Yield"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Lots V1 Auctions Lots Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auctions/stats":{"get":{"tags":["auctions"],"summary":"Stats","description":"Quarterly auction statistics by postcode district: lots offered, lots sold,\nsale rate, and average guide, achieved and net yield with the count behind\neach.\n\nRead `n_guide` and `n_achieved` before comparing `avg_guide_gbp` with\n`avg_achieved_gbp` — they average different sets of lots. `comparable` is\nfalse where the two populations are too unbalanced for the difference to\nmean anything.\n\nUK only.","operationId":"stats_v1_auctions_stats_get","parameters":[{"name":"postcode_district","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"e.g. AL10","title":"Postcode District"},"description":"e.g. AL10"},{"name":"quarter_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"First day of the earliest quarter, e.g. 2024-01-01","title":"Quarter From"},"description":"First day of the earliest quarter, e.g. 2024-01-01"},{"name":"quarter_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Quarter To"}},{"name":"is_commercial","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Commercial"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Stats V1 Auctions Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auctions/distressed":{"get":{"tags":["auctions"],"summary":"Distressed","description":"Properties that keep going to auction and never sell — the distress screen.\n\nA vendor who wants out and a market that has said no more than once, both on\nthe public record. Ordered by how many separate auctions the lot has failed\nat, then by how long it has been on the circuit.\n\nREAD `guide_to_avm` BEFORE TREATING A ROW AS AN OPPORTUNITY. Above 1.0 the\nlot is guided above our estimate, which is usually why it keeps failing —\nthat is a repricing conversation, not a discount. Below ~0.5, check the\nlease: a flat guided at a fraction of its freehold estimate is often short\nlease or ground rent rather than a bargain.\n\nRows are grouped by ADDRESS, not UPRN — flat-level UPRN matching in this\ntable collapses separate flats onto one id, and a per-UPRN count\nover-reports. `meta.grouping` says so in the response.\n\nUK only. Free.","operationId":"distressed_v1_auctions_distressed_get","parameters":[{"name":"postcode_district","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"e.g. SE10","title":"Postcode District"},"description":"e.g. SE10"},{"name":"postcode_area","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"e.g. SE","title":"Postcode Area"},"description":"e.g. SE"},{"name":"min_auctions","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":2,"description":"Distinct auction dates the lot has appeared on without selling.","default":3,"title":"Min Auctions"},"description":"Distinct auction dates the lot has appeared on without selling."},{"name":"years","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"description":"How far back to look.","default":3,"title":"Years"},"description":"How far back to look."},{"name":"max_guide_to_avm","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":5,"exclusiveMinimum":0},{"type":"null"}],"description":"Keep only lots guided at most this multiple of our AVM. 0.8 finds lots guided 20%+ below estimate. Lots with no guide or no AVM are excluded when set.","title":"Max Guide To Avm"},"description":"Keep only lots guided at most this multiple of our AVM. 0.8 finds lots guided 20%+ below estimate. Lots with no guide or no AVM are excluded when set."},{"name":"is_commercial","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Commercial"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Distressed V1 Auctions Distressed Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auctions/discount":{"get":{"tags":["auctions"],"summary":"Discount","description":"How far below our valuation auction actually clears.\n\nAn achieved hammer price against an automated valuation of the same\nproperty. EIG has far more auction data and no AVM; we have less auction\ndata and the valuation, so this is the one auction number we can produce\nand they cannot.\n\nREAD `by_year` BEFORE QUOTING THE HEADLINE. Every AVM shares one snapshot\ndate, so the ratio is an auction discount only where the sale and the\nvaluation are close in time. The series sits near 0.65 from 2021 and falls\nto ~0.44 in 2016-2019 — that fall is house-price growth between the hammer\nand the estimate, not a deeper discount.\n\nUK only.","operationId":"discount_v1_auctions_discount_get","parameters":[{"name":"postcode_district","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"e.g. SE10","title":"Postcode District"},"description":"e.g. SE10"},{"name":"postcode_area","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"e.g. SE","title":"Postcode Area"},"description":"e.g. SE"},{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":120,"minimum":3,"default":24,"title":"Months"}},{"name":"is_commercial","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Commercial"}},{"name":"min_lots","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Min Lots"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Discount V1 Auctions Discount Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auctions/comps":{"get":{"tags":["auctions"],"summary":"Comps","description":"Auction comparables on ACHIEVED prices, each against our valuation.\n\nA portal tells you a property went to auction; this says what it made and\nwhat our AVM thought it was worth on the same address. That is the\ndifference between a comparable and a listing.\n\nBedrooms and property type come from the UPRN-matched unit, not the auction\ncatalogue — the catalogue populates property_type on 12% of sold lots and\ntenure on none.\n\nUK only.","operationId":"comps_v1_auctions_comps_get","parameters":[{"name":"postcode_district","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"e.g. SE10","title":"Postcode District"},"description":"e.g. SE10"},{"name":"postcode_area","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"e.g. SE","title":"Postcode Area"},"description":"e.g. SE"},{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":120,"minimum":3,"default":24,"title":"Months"}},{"name":"is_commercial","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Commercial"}},{"name":"min_beds","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":20,"minimum":0},{"type":"null"}],"title":"Min Beds"}},{"name":"max_beds","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":20,"minimum":0},{"type":"null"}],"title":"Max Beds"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Comps V1 Auctions Comps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/query/semantic":{"post":{"tags":["query"],"summary":"Semantic","description":"Run a governed query against the semantic layer: pick an entity, the\nmetrics and dimensions you want, and filters. Aliases are resolved by the\nregistry, so you cannot reach anything the semantic model does not expose.\n\nPrefer this over `/query/sql` — it is cheaper, it is bounded, and the\nresult carries the SQL it generated plus provenance.\n\nUK only. Charged if the query runs and times out or errors\nin the warehouse; a query rejected before it runs is free.","operationId":"semantic_v1_query_semantic_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SemanticQueryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Semantic V1 Query Semantic Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/query/sql":{"post":{"tags":["query"],"summary":"Sql","description":"Run a read-only SQL statement against the warehouse. SELECT and WITH only,\nrestricted to the allowed schemas, and wrapped in an outer LIMIT.\n\nThis is the last resort — if a curated endpoint or `/query/semantic` can\nanswer the question, it will be cheaper and faster.\n\nUK only. Charged if the query runs and times out or errors\nin the warehouse; a query rejected before it runs — bad SQL, a schema\noutside the allowlist, a column that does not exist — is free.","operationId":"sql_v1_query_sql_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SqlQueryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sql V1 Query Sql Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/media/asset/{token}":{"get":{"tags":["media"],"summary":"Asset","description":"Resolve a signed media link and redirect to the file.\n\nUnauthenticated by design — see the module note. Not metered either: the\ncatalogue call that minted this link was the billable event, and charging\nper image would bill a customer once per thumbnail their page happens to\nrender.","operationId":"asset_v1_media_asset__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/media/{uprn}":{"get":{"tags":["media"],"summary":"Property Media","description":"Photographs, floorplans, EPC graphs and brochures for a property, from the\nlistings we have crawled. Every `url` is on this domain, signed and\nexpiring — the portal's own URL is never returned, so a stored response\ncannot decay into a hotlink to someone else's CDN.\n\nWhere we hold the file it is served from our storage; otherwise the link\nredirects to the source, so the bytes reach the viewer's browser without\npassing through this API.\n\nCoverage is uneven and the response says so per type: we hold the bytes\nfor floorplans and brochures only, and for a minority of those.\n\nEach item carries the portal and host it came from.\n\nUK only.","operationId":"property_media_v1_media__uprn__get","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"integer","title":"Uprn"}},{"name":"types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated: image, floorplan, epc, brochure, virtual_tour","title":"Types"},"description":"Comma-separated: image, floorplan, epc, brochure, virtual_tour"},{"name":"ttl_seconds","in":"query","required":false,"schema":{"type":"integer","maximum":86400,"minimum":60,"default":21600,"title":"Ttl Seconds"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Property Media V1 Media  Uprn  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/saved-searches":{"get":{"tags":["saved-searches"],"summary":"List All","description":"Every saved search on this account, newest first. Free.","operationId":"list_all_v1_saved_searches_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List All V1 Saved Searches Get"}}}}}},"post":{"tags":["saved-searches"],"summary":"Create","description":"Save a named search. Free — a customer is not charged to organise their\nown account.\n\n`tool` must be one this replays (see the error for the list) and `params`\nis that tool's own argument object, stored as given.","operationId":"create_v1_saved_searches_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearchIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create V1 Saved Searches Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/saved-searches/{search_id}":{"get":{"tags":["saved-searches"],"summary":"Get One","description":"One saved search. Free.","operationId":"get_one_v1_saved_searches__search_id__get","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get One V1 Saved Searches  Search Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["saved-searches"],"summary":"Update","description":"Rename a saved search or replace its parameters. Free.\n\n`params` is REPLACED, not merged: a partial merge would leave a filter the\ncaller believes they removed still in force, and a stored search that\nquietly keeps an old filter is worse than one that has to be restated.","operationId":"update_v1_saved_searches__search_id__patch","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearchPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update V1 Saved Searches  Search Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["saved-searches"],"summary":"Delete","description":"Delete a saved search. Free, and irreversible.","operationId":"delete_v1_saved_searches__search_id__delete","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete V1 Saved Searches  Search Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/saved-searches/{search_id}/run":{"post":{"tags":["saved-searches"],"summary":"Run","description":"Run a saved search now and return its rows.\n\nCharged at the UNDERLYING tool's price, against that tool's own pricing\nkey — a saved sourcing search bills exactly as a direct one does. There is\nno discount for saving and no surcharge.\n\nNothing runs in the background: a saved search costs nothing while it\nmerely exists, and this is the only call that spends. Where the tool\ncarries a change-feed cursor, the stored one is passed in and the new one\nis written back, so consecutive runs answer \"what changed\" rather than\nrepeating the whole result.","operationId":"run_v1_saved_searches__search_id__run_post","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Run V1 Saved Searches  Search Id  Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/meta/pricing":{"get":{"tags":["meta"],"summary":"Pricing","description":"Credit cost of every endpoint on this API, and what each one buys.\n\n`credits: 0` means genuinely free, not \"unpriced\" — most of the surface is\nfree by design, because the data underneath is open (HM Land Registry Price\nPaid under OGL, Environment Agency, planning, EPC) or is our own derivation\nover it. A non-zero price means one of three things, given in `ground`:\n\n  * `licence`  — the source is licensed to us and not open (OS AddressBase\n                 for addresses, HMLR CCOD/OCOD for ownership)\n  * `marginal` — the call runs a model rather than an indexed read\n  * `shape`    — the caller controls the shape of the work, so the rate\n                 cannot be the only bound (`/query/*`)\n\nPrices are per successful call unless the endpoint's own description says\notherwise; `/query/*` is charged when the warehouse did the work even if the\nquery then timed out, and never on a rejected request.","operationId":"pricing_v1_meta_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Pricing V1 Meta Pricing Get"}}}}}}},"/health":{"get":{"tags":["meta"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}}},"components":{"schemas":{"AreaResolveRequest":{"properties":{"area_name":{"type":"string","maxLength":200,"minLength":1,"title":"Area Name","description":"Area name or code, e.g. \"Hackney\", \"Kensington\", \"E5\""},"include_h3":{"type":"boolean","title":"Include H3","description":"Also return H3 cell IDs","default":false},"h3_resolution":{"type":"integer","maximum":10.0,"minimum":7.0,"title":"H3 Resolution","description":"H3 resolution 7-10","default":9}},"type":"object","required":["area_name"],"title":"AreaResolveRequest"},"BBox":{"properties":{"min_lng":{"type":"number","title":"Min Lng"},"min_lat":{"type":"number","title":"Min Lat"},"max_lng":{"type":"number","title":"Max Lng"},"max_lat":{"type":"number","title":"Max Lat"}},"type":"object","required":["min_lng","min_lat","max_lng","max_lat"],"title":"BBox"},"ChangesSince":{"properties":{"cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cursor","description":"Event id from a previous next_cursor"},"event_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Event Types","description":"added | price_reduced | price_increased | status_changed | delisted"},"postcode_districts":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Postcode Districts"},"uprns":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":500},{"type":"null"}],"title":"Uprns"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"since":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since","description":"ISO date; filters on event_date"},"limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Limit","default":100}},"type":"object","title":"ChangesSince"},"CommercialSearchRequest":{"properties":{"lad_code":{"type":"string","title":"Lad Code","description":"LAD GSS code, e.g. E09000032. Required."},"sectors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sectors","description":"VOA sectors, e.g. ['RETAIL','OFFICE']"},"scat_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scat Codes"},"min_rv":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Rv"},"max_rv":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Rv"},"with_owner":{"type":"boolean","title":"With Owner","default":false},"single_hereditament":{"type":"boolean","title":"Single Hereditament","default":false},"limit":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Limit","default":50},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0}},"type":"object","required":["lad_code"],"title":"CommercialSearchRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LhaRateRequest":{"properties":{"postcode":{"type":"string","title":"Postcode","description":"A full UK postcode, e.g. 'W14 9JH'"},"bedrooms":{"type":"integer","enum":[1,2,3,4],"title":"Bedrooms","description":"Bedroom category, 1-4. LHA has no category above 4."}},"type":"object","required":["postcode","bedrooms"],"title":"LhaRateRequest"},"LiveListingsRequest":{"properties":{"postcode_districts":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Postcode Districts","description":"Postcode districts, e.g. [\"SW11\"]"},"channel":{"type":"string","enum":["residential_sale","residential_rent","commercial_sale","commercial_rent","any"],"title":"Channel","default":"residential_sale"},"min_price":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Price"},"max_price":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Price"},"min_beds":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":0.0},{"type":"null"}],"title":"Min Beds"},"max_beds":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":0.0},{"type":"null"}],"title":"Max Beds"},"auction_only":{"type":"boolean","title":"Auction Only","default":false},"new_homes":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"New Homes"},"limit":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Limit","default":50},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0}},"type":"object","required":["postcode_districts"],"title":"LiveListingsRequest"},"LongHeldRequest":{"properties":{"area_id":{"type":"string","title":"Area Id","description":"Marts area id from /areas/resolve"},"min_years":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Min Years","default":10},"min_gain_pct":{"type":"number","minimum":-100.0,"title":"Min Gain Pct","default":50.0},"limit":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Limit","default":100}},"type":"object","required":["area_id"],"title":"LongHeldRequest"},"MarketFactsRequest":{"properties":{"postcode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postcode","description":"UK postcode, e.g. SW1A 1AA"},"lsoa_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lsoa Code","description":"LSOA 2021 code"},"ward_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ward Code","description":"GSS ward code"},"lad_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lad Code","description":"GSS local-authority code"},"h3_cell":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"H3 Cell","description":"h3 cell ID (resolution 7-9 recommended)"},"asset_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Class","description":"e.g. \"residential\", \"commercial\""},"asset_subtype":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Subtype","description":"e.g. \"flat\", \"terraced\", \"detached\""},"bedroom_band":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedroom Band","description":"e.g. \"1\", \"2\", \"3\", \"4+\""},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period","description":"ISO month or quarter, e.g. \"2026-Q1\" or \"2026-05\""},"metrics":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metrics","description":"Specific metrics to return. Omit for the default set: sales_price, price_psm, rental_value, gross_yield, days_on_market."}},"type":"object","title":"MarketFactsRequest","description":"Query the area_facts cube. At least one geography selector is required\n(postcode / lsoa / ward / lad / h3). Other selectors narrow the slice."},"MarketRankingRequest":{"properties":{"area_type":{"type":"string","title":"Area Type","description":"Grain to rank at: 'Postcode District' (default) or an administrative type such as 'Local Authority District'. There are no LSOA, ward, postcode-sector or postcode-unit areas.","default":"Postcode District"},"parent_area_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Area Code","description":"Restrict to children of this area_code."},"area_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Area Codes","description":"Explicit allowlist of area_codes to compare."},"asset_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Class","default":"residential"},"bedroom_band":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedroom Band","default":"all"},"hmo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hmo"},"metrics":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metrics","description":"Metrics to return. Omit for the default set. Populated today: sales_price, price_psm, turnover_rate. rental_value and gross_yield are awaiting backfill and come back listed in `metrics_with_no_data`."},"sort":{"type":"string","title":"Sort","description":"Metric to rank by. Defaults to turnover_rate — the only liquidity metric that is fully populated. Do NOT rank on gross_yield or days_on_market yet: they are 0% populated, so every row sorts as NULL and the ranking is arbitrary.","default":"turnover_rate"},"order":{"type":"string","title":"Order","description":"asc | desc","default":"desc"},"limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Limit","default":50},"window_months":{"type":"integer","maximum":60.0,"minimum":1.0,"title":"Window Months","description":"Trailing whole months to aggregate over. 12 gives the conventional annual turnover rate.","default":12},"lag_months":{"type":"integer","maximum":12.0,"minimum":0.0,"title":"Lag Months","description":"Months dropped from the end of the data before the window starts, for HM Land Registry registration lag. 0 includes the provisional months and understates turnover.","default":3},"min_stock":{"type":"integer","minimum":0.0,"title":"Min Stock","description":"Skip areas with fewer dwellings than this. A rate over a tiny denominator sorts straight to the top. 0 disables.","default":50}},"type":"object","title":"MarketRankingRequest","description":"One row per area, ranked by a metric. Upstream: /market/facts/bulk."},"MixedUseRequest":{"properties":{"area_id":{"type":"string","title":"Area Id","description":"Marts area id from /areas/resolve"},"min_commercial":{"type":"integer","minimum":1.0,"title":"Min Commercial","default":1},"min_residential":{"type":"integer","minimum":1.0,"title":"Min Residential","default":1},"limit":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Limit","default":100}},"type":"object","required":["area_id"],"title":"MixedUseRequest"},"OffmarketOwnersRequest":{"properties":{"lad_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lad Code","description":"A LAD GSS code, e.g. E09000032"},"postcode_district":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postcode District","description":"e.g. SW11"},"h3_cells":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"H3 Cells","description":"h3 r8 cells, max 500"},"strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strategy","description":"Narrow to a preset's units before grouping"},"strategy_overrides":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Strategy Overrides"},"min_units":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Min Units","default":2},"limit":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Limit","default":50}},"type":"object","title":"OffmarketOwnersRequest"},"PlanningCheckRequest":{"properties":{"postcode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postcode","description":"Full UK postcode, e.g. SW1A 1AA"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location","description":"Coordinates as \"lat,lng\""},"checks":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Checks","description":"Which checks to run; omit for all fifteen. One or more of: agricultural_land, ancient_woodland, aonb, aqma, article_4, brownfield, conservation_area, flood_risk, green_belt, heritage_at_risk, listed_buildings, national_park, scheduled_monument, sssi, tpo"}},"type":"object","title":"PlanningCheckRequest"},"PlanningLocation":{"properties":{"postcode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postcode","description":"Full UK postcode, e.g. SW1A 1AA"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location","description":"Coordinates as \"lat,lng\""}},"type":"object","title":"PlanningLocation","description":"Location for a planning lookup. Upstream needs a postcode or coordinates;\nrejecting an empty body here means the caller gets a 422 explaining that,\nrather than paying credits for an upstream 4xx."},"PlotUtilisationRequest":{"properties":{"area_id":{"type":"string","title":"Area Id","description":"Marts area id from /areas/resolve"},"min_area_m2":{"type":"number","minimum":0.0,"title":"Min Area M2","default":0},"max_built_coverage":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Max Built Coverage","description":"Built footprint as a share of plot; 0.2 finds largely undeveloped parcels. Parcels with no MEASURED coverage are excluded when this is set, rather than counted as empty."},"limit":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Limit","default":100}},"type":"object","required":["area_id"],"title":"PlotUtilisationRequest"},"PrecedentsRequest":{"properties":{"lat":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lon"},"radius_m":{"type":"integer","maximum":5000.0,"minimum":50.0,"title":"Radius M","default":800},"lpa_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lpa Code","description":"Instead of a point: a planning authority code"},"application_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Application Types","description":"Substrings matched against application_type, e.g. ['Householder']"},"years":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Years","default":10},"examples":{"type":"integer","maximum":25.0,"minimum":0.0,"title":"Examples","default":10}},"type":"object","title":"PrecedentsRequest"},"ResolveRequest":{"properties":{"query":{"type":"string","maxLength":500,"minLength":1,"title":"Query"},"country":{"type":"string","const":"UK","title":"Country","default":"UK"},"max_results":{"type":"integer","maximum":25.0,"minimum":1.0,"title":"Max Results","default":5}},"type":"object","required":["query"],"title":"ResolveRequest"},"RetrofitRequest":{"properties":{"area_id":{"type":"string","title":"Area Id","description":"Marts area id from /areas/resolve"},"bands":{"items":{"type":"string"},"type":"array","title":"Bands","description":"EPC bands to include. One or more of ['A', 'B', 'C', 'D', 'E', 'F', 'G']."},"fuel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fuel","description":"Substring match on main heating fuel, e.g. 'gas'."},"limit":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Limit","default":100}},"type":"object","required":["area_id"],"title":"RetrofitRequest"},"SavedSearchIn":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"tool":{"type":"string","title":"Tool","description":"One of: sourcing_search, sourcing_live_listings, sourcing_offmarket_owners, sourcing_commercial, changes_since"},"params":{"additionalProperties":true,"type":"object","title":"Params"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"}},"type":"object","required":["name","tool"],"title":"SavedSearchIn"},"SavedSearchPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Name"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Params"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"}},"type":"object","title":"SavedSearchPatch"},"SemanticQueryRequest":{"properties":{"entity":{"type":"string","title":"Entity","description":"Semantic entity key, e.g. \"area_facts\""},"select":{"items":{"type":"string"},"type":"array","title":"Select","description":"Column/dimension aliases"},"metrics":{"items":{"type":"string"},"type":"array","title":"Metrics","description":"Metric names on the entity"},"dimensions":{"items":{"type":"string"},"type":"array","title":"Dimensions","description":"Group-by aliases"},"filters":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Filters","description":"Filter clauses"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period","description":"Period code, e.g. 2026-Q1"},"joins":{"items":{"type":"string"},"type":"array","title":"Joins","description":"Governed join target entities"},"order_by":{"items":{"items":{"type":"string"},"type":"array"},"type":"array","title":"Order By","description":"[[\"alias\",\"desc\"], …]"},"limit":{"type":"integer","maximum":2000.0,"minimum":1.0,"title":"Limit","description":"Row limit, capped at 2000","default":500}},"type":"object","required":["entity"],"title":"SemanticQueryRequest","description":"A governed query against the semantic layer. Aliases are resolved to\nphysical columns by the registry, so this cannot reach a table the\nsemantic model does not expose."},"SolarRequest":{"properties":{"uprns":{"items":{"type":"integer"},"type":"array","maxItems":500,"minItems":1,"title":"Uprns"}},"type":"object","required":["uprns"],"title":"SolarRequest"},"SourcingOwnersRequest":{"properties":{"asset":{"type":"string","enum":["land","units"],"title":"Asset","default":"land"},"parcel_ids":{"items":{"type":"string"},"type":"array","maxItems":500,"minItems":1,"title":"Parcel Ids","description":"Parcel ids from a sourcing_search result."}},"type":"object","required":["parcel_ids"],"title":"SourcingOwnersRequest"},"SourcingSearchRequest":{"properties":{"asset":{"type":"string","enum":["land","units"],"title":"Asset","description":"Search land parcels or residential units.","default":"land"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location","description":"Place or area name, e.g. 'Camden' or 'SW11'. Give exactly one of location, bbox or area_geojson."},"bbox":{"anyOf":[{"$ref":"#/components/schemas/BBox"},{"type":"null"}]},"area_geojson":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Area Geojson","description":"GeoJSON geometry in EPSG:4326."},"landuse":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Landuse","description":"Land-use tier-A classes to include."},"max_built_coverage":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Max Built Coverage","description":"Max built footprint as a share of plot area. Lower means less developed. 0.2 finds substantially empty plots."},"property_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Property Types"},"min_beds":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Beds"},"max_beds":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Beds"},"epc_in":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Epc In","description":"EPC bands to include, e.g. ['E','F','G']."},"tenure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenure"},"owner_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Owner Types"},"exclude_owner_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Owner Types"},"require_owner":{"type":"boolean","title":"Require Owner","description":"Only return parcels where an owner is known.","default":false},"min_years_owned":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Min Years Owned","description":"Held at least this long. The usual off-market signal."},"company_status":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Company Status"},"min_score":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Min Score"},"min_rlv":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Rlv","description":"Minimum residual land value, £."},"opportunities_only":{"type":"boolean","title":"Opportunities Only","default":false},"include_undevelopable":{"type":"boolean","title":"Include Undevelopable","default":false},"in_brownfield_register":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"In Brownfield Register"},"not_in_green_belt":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Not In Green Belt"},"not_in_conservation_area":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Not In Conservation Area"},"max_flood_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Max Flood Zone"},"limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Limit","default":50},"strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strategy","description":"A published preset key from /sourcing/strategies"},"strategy_overrides":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Strategy Overrides","description":"Values for the preset's own filter keys; null switches one off"},"lad_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lad Code","description":"Strategy path: LAD GSS code, e.g. E09000032"},"postcode_district":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postcode District","description":"Strategy path: e.g. SW11"},"h3_cells":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"H3 Cells","description":"Strategy path: h3 r8 cells, max 500"},"listing_state":{"anyOf":[{"type":"string","enum":["any","live","live_sale","live_rent","off_market"]},{"type":"null"}],"title":"Listing State","description":"Strategy path: restrict to on- or off-market units"},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor","description":"Strategy path: keyset cursor from next_cursor"}},"type":"object","title":"SourcingSearchRequest"},"SqlQueryRequest":{"properties":{"sql":{"type":"string","maxLength":9000,"minLength":1,"title":"Sql","description":"A single read-only SELECT/WITH statement over the warehouse."},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"Bound parameters, referenced as :name in the SQL."},"max_rows":{"type":"integer","maximum":5000.0,"minimum":1.0,"title":"Max Rows","description":"Row cap applied as an outer LIMIT (max 5000).","default":1000}},"type":"object","required":["sql"],"title":"SqlQueryRequest"},"UprnBatch":{"properties":{"uprns":{"items":{"type":"integer"},"type":"array","maxItems":100,"minItems":1,"title":"Uprns","description":"Up to 100 UPRNs"}},"type":"object","required":["uprns"],"title":"UprnBatch"},"UprnsRequest":{"properties":{"uprns":{"items":{"type":"integer"},"type":"array","maxItems":500,"minItems":1,"title":"Uprns"}},"type":"object","required":["uprns"],"title":"UprnsRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValuationRequest":{"properties":{"uprn":{"type":"integer","title":"Uprn","description":"Property UPRN"}},"type":"object","required":["uprn"],"title":"ValuationRequest"},"VolumeRankingRequest":{"properties":{"county":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"County","description":"e.g. \"GREATER LONDON\""},"area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Area","description":"e.g. \"SW\""},"months":{"type":"integer","maximum":372.0,"minimum":1.0,"title":"Months","default":12},"order_by":{"type":"string","title":"Order By","default":"txn_count"},"limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Limit","default":50}},"type":"object","title":"VolumeRankingRequest","description":"Rank districts by volume or price over a trailing window."},"VolumeSeriesRequest":{"properties":{"district":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"District","description":"Outward code, e.g. \"SW11\" (a full postcode is truncated)"},"area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Area","description":"Postcode area, e.g. \"SW\""},"county":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"County","description":"HMLR county, e.g. \"GREATER LONDON\""},"metrics":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metrics","description":"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":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start","description":"First month, ISO date"},"end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End","description":"Last month, ISO date"}},"type":"object","title":"VolumeSeriesRequest","description":"Monthly transaction volume for one geography. Exactly one selector."}}}}