POST /api/midland/transactions/search
Price: 20 credits
Search Midland Realty's Hong Kong property deal archive — Land Registry records plus Midland's own transactions, covering the full history rather than a recent window. Filters cover sale or rental deals, free text, recency window, primary or secondary market, resale at a profit or a loss, unit features, record source, ownership class, the luxury segment, the eight-level geography, estate, phase, building, street and unit ids, MTR station with walking time, primary school net, universities, price, saleable area, price per area unit, building age, holding period, bedrooms, floor band and ordering. Each deal carries the transacted price and price per saleable area, areas, the previous deal price and date with the gain and holding period, room counts, floor and flat, the estate / phase / building, unit features, floor plans, coordinates and the deal record source.
Search Hong Kong property transactions recorded by Midland Realty. Always set count, plus lang / unit / currency for the output locale. transaction_type 'S' returns sale deals and 'L' rental deals; price holds the transacted amount in both cases. gain_percent and holding_period_years compare against the previous deal on the same unit. Leave transaction_date unset to reach the whole archive, or narrow it to a recent window. Slice by estate_ids, building_ids, int_sm_district_ids or unit_ids when you need deep history — a single query reaches at most 10000 records, so split large areas by district, estate or date window. Use midland/transactions with a deal id for the unit's full price history.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)lang string — Output language. Districts, estates, buildings and feature names are all translated. (default: "zh-hk"; one of: "zh-hk", "zh-cn", "en")unit string — Area unit used for areas and per-area prices. (default: "feet"; one of: "feet", "meter")currency string — Currency used for prices, rents and monthly payments. (default: "HKD"; one of: "HKD", "CNY")min_building_age integer nullable — Minimum building age in years, counted from first occupation. (min: 0; max: 999)max_building_age integer nullable — Maximum building age in years, counted from first occupation. (min: 0; max: 999)count integer required — Max number of results to return (min: 1; max: 10000)transaction_type string nullable — Sale or rental deals. Unset returns both. (one of: "S", "L")text string nullable — Free-text query matched against estate, building, street and district names. (minLength: 1)transaction_date string nullable — Recency window. Unset searches the whole Land Registry archive back to the 1990s. (one of: "7days", "30days", "90days", "180days", "1year", "3year")market_types array nullable — Primary (first-hand) or secondary market deals. (one of: "1", "2")gains array nullable — Only deals resold at a profit or at a loss versus the prior deal. (one of: "profit", "loss")features array nullable — Unit features recorded for the deal. (one of: "balcony", "utility_platform", "flat_roof", "carpark", "roof", "garden", "duplex", "triplex", "combined")source string nullable — Record origin: Land Registry, Midland's own records or Hong Kong Property's. (one of: "landreg", "midland", "hkp")property_types array nullable — Ownership class: private housing, HOS or TPS. (one of: "private", "hos", "tps")is_deluxe boolean nullable — Only luxury-segment deals.sort string — Result ordering. (default: "default"; one of: "default", "price", "price_desc", "net_area", "net_area_desc", "net_ft_price", "net_ft_price_desc")region_id string nullable — Region id: 10 Hong Kong Island, 20 Kowloon, 30 New Territories. (minLength: 1)subregion_ids array nullable — Sub-region ids.district_ids array nullable — District ids.sm_district_ids array nullable — Small district ids.combined_district_ids array nullable — Combined district ids.int_district_ids array nullable — Internal district ids.int_sm_district_ids array nullable — Internal small district ids.estate_ids array nullable — Estate ids (e.g. E000004419).phase_ids array nullable — Estate phase ids.building_ids array nullable — Building ids (e.g. B000055190).street_ids array nullable — Street ids.house_street_ids array nullable — Village-house street ids.unit_ids array nullable — Unit ids, to pull the deal history of one flat.mtr_ids array nullable — MTR station ids.walking_duration integer nullable — Max walking time in seconds to the selected MTR station. Only applied together with mtr_ids; the widest catchment the data holds is reached at 900. (min: 1)school_net string nullable — Primary school net code. (minLength: 1)university_ids array nullable — Universities whose neighbourhoods should be covered. (one of: "U01", "U02", "U03", "U04", "U05", "U06", "U07", "U08", "U09", "U10", "U11", "U12", "U13")min_price number nullable — Minimum transacted price or rent. (min: 0)max_price number nullable — Maximum transacted price or rent. (min: 0)min_net_area number nullable — Minimum saleable area. (min: 0)max_net_area number nullable — Maximum saleable area. (min: 0)min_net_ft_price number nullable — Minimum price per saleable area unit. (min: 0)max_net_ft_price number nullable — Maximum price per saleable area unit. (min: 0)min_holding_period number nullable — Minimum holding period in years before the resale. (min: 0)max_holding_period number nullable — Maximum holding period in years before the resale. (min: 0)bedrooms array nullable — Bedroom counts (0 = studio). (one of: "0", "1", "2", "3", "4+")floor_levels array nullable — Floor bands: high, middle, low. (one of: "H", "M", "L")@type string (default: "MidlandTransactionCard")id string requiredurl string nullabletransaction_type string nullabletransaction_at integer nullablemarket_type string nullablesource string nullableoriginal_source string nullabletags array (default: [])price number nullableprice_per_net_area number nullablearea number nullablenet_area number nullableprevious_price number nullableprevious_transaction_at integer nullablegain_percent number nullableholding_period_years number nullablebedroom_count integer nullablesitting_room_count integer nullablefloor string nullablefloor_level object nullable@type string (default: "MidlandRef")id string nullablename string nullableflat string nullableis_premium_paid boolean nullabledeal_type string nullablegeo object nullable@type string (default: "MidlandGeo")region object nullable@type string (default: "MidlandRef")id string nullablename string nullablesubregion object nullable@type string (default: "MidlandRef")id string nullablename string nullabledistrict object nullable@type string (default: "MidlandRef")id string nullablename string nullablesm_district object nullable@type string (default: "MidlandRef")id string nullablename string nullablecombined_district object nullable@type string (default: "MidlandRef")id string nullablename string nullableint_district object nullable@type string (default: "MidlandRef")id string nullablename string nullableint_sm_district object nullable@type string (default: "MidlandRef")id string nullablename string nullablelux_district object nullable@type string (default: "MidlandRef")id string nullablename string nullableestate object nullable@type string (default: "MidlandRef")id string nullablename string nullablephase object nullable@type string (default: "MidlandRef")id string nullablename string nullablebuilding object nullable@type string (default: "MidlandBuilding")id string nullablename string nullableaddress string nullablefirst_op_at integer nullablefloor_count integer nullablebuilding_type string nullablelatitude number nullablelongitude number nullablestreetview_latitude number nullablestreetview_longitude number nullablestreetview_angle integer nullablefeatures array (default: [])@type string (default: "MidlandRef")id string nullablename string nullablefloor_plans array (default: [])@type string (default: "MidlandFloorPlan")id string nullablename string nullableurl string nullablesource string nullablephase_id string nullablephase_name string nullablebuilding_id string nullablebuilding_name string nullablefloor_from string nullablefloor_to string nullablefloor_text string nullableimage string nullablelocation object nullable@type string (default: "MidlandLocation")latitude number nullablelongitude number nullablelistings_url string nullableupdated_at integer nullable422 — The request body did not validate Check the fields against this schema. A URN with the wrong prefix is the most common cause.408 — The request ran past its time limit Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.412 — The entity was not found, or a precondition failed Retrying will not help: either the entity does not exist, or the input points at a different one.429 — Too many requests: a rate limit or a usage window is exhausted When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.500 — Something broke on our side Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.529 — Rate limit reached, or the endpoint is overloaded Wait at least 30 seconds, then retry.X-Error — Error message text (present only on error)X-Request-ID — Unique request identifierX-Execution-Time — Execution time in secondsX-Result-Count — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.X-Total-Available-Results — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.X-Warning — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.X-Retry-After — Seconds to wait before retrying. Present only on 429.