POST /api/midland/commercial/properties/search
Price: 20 credits
Search Midland ICI (美聯工商舖) Hong Kong commercial listings — offices, industrial space and shops for sale or lease. Filters cover property class, sale or lease, free text, districts, building, street and MTR station ids, building grade, floor band, stock type, sole-agency and newly listed tags, asking price, monthly rent, area, price per square foot, rent per square foot, and whether photos, a video or a virtual tour are attached. Each listing carries the reference number, name and address, district, street and building, grade, floor band and stock type (street-level shop, basement, upper-floor shop, industrial), the area range, price and rent with per-square-foot figures and negotiability flags, unit features such as lift-facing, sea or garden outlook, tags, media flags, thumbnail, coordinates, the nearest MTR station with walking time, a link to deals in the same building, and the assigned agents with EAA licence numbers and contact channels.
Search Hong Kong commercial property listed by Midland ICI. Always set count. usage picks the class: 'COMMERCIAL' (offices), 'INDUSTRIAL' or 'SHOPS'. transaction_type 'S' is for sale and 'L' for lease; sale listings populate price / price_per_area and lease listings rent / rent_per_area. Areas are always in square feet and prices in HKD. Use midland/commercial/properties with a property_no for a single listing.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)lang string — Output language for names, districts and agent details. (default: "zh-hk"; one of: "zh-hk", "zh-cn", "en")count integer required — Max number of results to return (min: 1)usage string nullable — Property class: offices, industrial space or shops. Unset returns all three. (one of: "COMMERCIAL", "INDUSTRIAL", "SHOPS")transaction_type string nullable — For sale or for lease. Unset returns both. (one of: "S", "L")text string nullable — Free-text query matched against building, street and district names. (minLength: 1)districts array nullable — Districts the property sits in. (one of: "ABE", "ADM", "ALC", "CAB", "CEN", "CHW", "CSW", "FAN", "FOT", "HAV", "HMT", "HSK", "HUH", "ISD", "JOR", "KAT", "KOB", "KOC", "KOT", "KWC", "KWT", "MEF", "MIL", "MOK", "MOS", "NCW", "NOP", "NTK", "PFL", "PRE", "QUB", "SAK", "SHM", "SHS", "SHT", "SHW", "SKW", "SLY", "SOU", "SPK", "SSP", "STS", "TAH", "TAK", "TAP", "TAW", "TIH", "TIS", "TIW", "TKO", "TKT", "TKW", "TSE", "TSI", "TST", "TSW", "TSY", "TUC", "TUM", "VIP", "WAC", "WCH", "WCN", "WES", "WTS", "YAT", "YMT", "YUL")building_id string nullable — Building id (e.g. B000018824). (minLength: 1)street_id string nullable — Street id. (minLength: 1)mtr_id string nullable — MTR station id. (minLength: 1)grades array nullable — Building grade (offices and industrial). (one of: "MISC00165", "MISC00166")floor_levels array nullable — Floor band within the building. The high and middle bands also return their upper and lower sub-bands; pick a sub-band directly to isolate it. (one of: "MISC00169", "MISC00170", "MISC00171", "MISC00172", "MISC00173", "MISC00174")stock_types array nullable — Stock type: street-level or upstairs shop, basement, mall unit, workshop, godown and more. (one of: "MISC00177", "MISC00178", "MISC00179", "MISC00180", "MISC00109", "MISC00100", "MISC00110", "MISC00108", "MISC00105", "MISC00115")tags array nullable — Sole-agency or newly listed properties. (one of: "soleagent", "new_property")min_price number nullable — Minimum asking price. (min: 0)max_price number nullable — Maximum asking price. (min: 0)min_rent number nullable — Minimum monthly rent. (min: 0)max_rent number nullable — Maximum monthly rent. (min: 0)min_area number nullable — Minimum area in square feet. (min: 0)max_area number nullable — Maximum area in square feet. (min: 0)min_price_per_area number nullable — Minimum price per square foot. (min: 0)max_price_per_area number nullable — Maximum price per square foot. (min: 0)min_rent_per_area number nullable — Minimum rent per square foot. (min: 0)max_rent_per_area number nullable — Maximum rent per square foot. (min: 0)with_photo boolean nullable — Only properties that have photos.with_video boolean nullable — Only properties that have a video.with_vr boolean nullable — Only properties that have a virtual tour.with_vr720 boolean nullable — Only properties that have a 720-degree walkthrough.@type string (default: "MidlandCommercialProperty")property_no string requiredname string nullableurl string nullableusage string nullabletransaction_types array (default: [])address string nullabledistrict_code string nullabledistrict string nullablestreet object nullable@type string (default: "MidlandRef")id string nullablename string nullablebuilding object nullable@type string (default: "MidlandRef")id string nullablename string nullablegrade object nullable@type string (default: "MidlandRef")id string nullablename string nullablefloor_level object nullable@type string (default: "MidlandRef")id string nullablename string nullablestock_type object nullable@type string (default: "MidlandRef")id string nullablename string nullablemin_area number nullablemax_area number nullableprice number nullableprice_per_area number nullablerent number nullablerent_per_area number nullableis_price_negotiable boolean nullableis_rent_negotiable boolean nullablefeatures array (default: [])@type string (default: "MidlandRef")id string nullablename string nullabletags array (default: [])@type string (default: "MidlandRef")id string nullablename string nullablehas_photo boolean nullablehas_video boolean nullablehas_vr boolean nullablehas_vr720 boolean nullableimage string nullablelocation object nullable@type string (default: "MidlandLocation")latitude number nullablelongitude number nullablemtr_station string nullablemtr_walking_seconds integer nullabletransactions_url string nullableagents array (default: [])@type string (default: "MidlandCommercialAgent")id string nullablelicence_no string nullablename string nullablename_zh_cn string nullablename_en string nullablejob_title string nullableemail string nullablephone string nullablewhatsapp string nullablewechat_id string nullablewechat_qr string nullableimage string nullabledepartment_id string nullabledepartment_name string nullabledepartment_code string nullableis_sole_agent boolean 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.