curl --request POST \
--url https://api.anysite.io/api/28hse/estates/search \
--header 'Content-Type: application/json' \
--header 'access-token: <api-key>' \
--data '
{
"count": 2,
"timeout": 300,
"site": "28hse",
"lang": "tc",
"usage": "residential",
"estate_kinds": [],
"commercial_kinds": [],
"regions": [],
"district_groups": [],
"districts": [],
"keyword": "<string>"
}
'import requests
url = "https://api.anysite.io/api/28hse/estates/search"
payload = {
"count": 2,
"timeout": 300,
"site": "28hse",
"lang": "tc",
"usage": "residential",
"estate_kinds": [],
"commercial_kinds": [],
"regions": [],
"district_groups": [],
"districts": [],
"keyword": "<string>"
}
headers = {
"access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
count: 2,
timeout: 300,
site: '28hse',
lang: 'tc',
usage: 'residential',
estate_kinds: [],
commercial_kinds: [],
regions: [],
district_groups: [],
districts: [],
keyword: '<string>'
})
};
fetch('https://api.anysite.io/api/28hse/estates/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.anysite.io/api/28hse/estates/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'count' => 2,
'timeout' => 300,
'site' => '28hse',
'lang' => 'tc',
'usage' => 'residential',
'estate_kinds' => [
],
'commercial_kinds' => [
],
'regions' => [
],
'district_groups' => [
],
'districts' => [
],
'keyword' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"access-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.anysite.io/api/28hse/estates/search"
payload := strings.NewReader("{\n \"count\": 2,\n \"timeout\": 300,\n \"site\": \"28hse\",\n \"lang\": \"tc\",\n \"usage\": \"residential\",\n \"estate_kinds\": [],\n \"commercial_kinds\": [],\n \"regions\": [],\n \"district_groups\": [],\n \"districts\": [],\n \"keyword\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("access-token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.anysite.io/api/28hse/estates/search")
.header("access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"count\": 2,\n \"timeout\": 300,\n \"site\": \"28hse\",\n \"lang\": \"tc\",\n \"usage\": \"residential\",\n \"estate_kinds\": [],\n \"commercial_kinds\": [],\n \"regions\": [],\n \"district_groups\": [],\n \"districts\": [],\n \"keyword\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.anysite.io/api/28hse/estates/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"count\": 2,\n \"timeout\": 300,\n \"site\": \"28hse\",\n \"lang\": \"tc\",\n \"usage\": \"residential\",\n \"estate_kinds\": [],\n \"commercial_kinds\": [],\n \"regions\": [],\n \"district_groups\": [],\n \"districts\": [],\n \"keyword\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"@type": "Hse28Estate",
"cat_id": "<string>",
"url": "<string>",
"name": "<string>",
"name_en": "<string>",
"street": "<string>",
"region": "<string>",
"district": "<string>",
"image": "<string>",
"labels": [],
"block_count": 123,
"unit_count": 123,
"occupation_year": 123,
"developer": "<string>",
"management_company": "<string>",
"clubhouse": "<string>",
"primary_school_net": "<string>",
"primary_school_net_id": "<string>",
"secondary_school_net": "<string>",
"secondary_school_net_id": "<string>",
"avg_price_per_sqft": 123,
"price_change_percent": 123,
"price_per_sqft_year_ago": 123,
"sale_transaction_count": 123,
"profit_ratio_percent": 123,
"loss_ratio_percent": 123,
"turnover_rate_percent": 123,
"min_asking_price": 123,
"max_asking_price": 123,
"min_asking_price_per_sqft": 123,
"max_asking_price_per_sqft": 123,
"sale_listing_count": 123,
"avg_rent_per_sqft": 123,
"rent_transaction_count": 123,
"rental_yield_percent": 123,
"rental_activity_percent": 123,
"min_asking_rent": 123,
"max_asking_rent": 123,
"min_asking_rent_per_sqft": 123,
"max_asking_rent_per_sqft": 123,
"rent_listing_count": 123,
"population": 123,
"household_count": 123,
"average_household_size": 123,
"census": [],
"phases": []
}
]{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}/28hse/estates/search
Search the Hong Kong estate (屋苑) directory published by 28Hse and Squarefoot — residential estates as well as commercial and industrial buildings. Filter by ownership category (private estate, subsidised or public housing, detached house) or building category (industrial, office, shop), the three-level area tree and free text. Each card returns the estate id and page URL, the name, the district, the ninety-day deal volume, the number of listings for sale and to let, the rental yield, the average price per square foot, the cover photo and the estate labels such as the developer, the age band and activity markers. The total number of matching estates is returned in the X-Total-Available-Results header.
Price: 10 credits per 15 results
curl --request POST \
--url https://api.anysite.io/api/28hse/estates/search \
--header 'Content-Type: application/json' \
--header 'access-token: <api-key>' \
--data '
{
"count": 2,
"timeout": 300,
"site": "28hse",
"lang": "tc",
"usage": "residential",
"estate_kinds": [],
"commercial_kinds": [],
"regions": [],
"district_groups": [],
"districts": [],
"keyword": "<string>"
}
'import requests
url = "https://api.anysite.io/api/28hse/estates/search"
payload = {
"count": 2,
"timeout": 300,
"site": "28hse",
"lang": "tc",
"usage": "residential",
"estate_kinds": [],
"commercial_kinds": [],
"regions": [],
"district_groups": [],
"districts": [],
"keyword": "<string>"
}
headers = {
"access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
count: 2,
timeout: 300,
site: '28hse',
lang: 'tc',
usage: 'residential',
estate_kinds: [],
commercial_kinds: [],
regions: [],
district_groups: [],
districts: [],
keyword: '<string>'
})
};
fetch('https://api.anysite.io/api/28hse/estates/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.anysite.io/api/28hse/estates/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'count' => 2,
'timeout' => 300,
'site' => '28hse',
'lang' => 'tc',
'usage' => 'residential',
'estate_kinds' => [
],
'commercial_kinds' => [
],
'regions' => [
],
'district_groups' => [
],
'districts' => [
],
'keyword' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"access-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.anysite.io/api/28hse/estates/search"
payload := strings.NewReader("{\n \"count\": 2,\n \"timeout\": 300,\n \"site\": \"28hse\",\n \"lang\": \"tc\",\n \"usage\": \"residential\",\n \"estate_kinds\": [],\n \"commercial_kinds\": [],\n \"regions\": [],\n \"district_groups\": [],\n \"districts\": [],\n \"keyword\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("access-token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.anysite.io/api/28hse/estates/search")
.header("access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"count\": 2,\n \"timeout\": 300,\n \"site\": \"28hse\",\n \"lang\": \"tc\",\n \"usage\": \"residential\",\n \"estate_kinds\": [],\n \"commercial_kinds\": [],\n \"regions\": [],\n \"district_groups\": [],\n \"districts\": [],\n \"keyword\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.anysite.io/api/28hse/estates/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"count\": 2,\n \"timeout\": 300,\n \"site\": \"28hse\",\n \"lang\": \"tc\",\n \"usage\": \"residential\",\n \"estate_kinds\": [],\n \"commercial_kinds\": [],\n \"regions\": [],\n \"district_groups\": [],\n \"districts\": [],\n \"keyword\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"@type": "Hse28Estate",
"cat_id": "<string>",
"url": "<string>",
"name": "<string>",
"name_en": "<string>",
"street": "<string>",
"region": "<string>",
"district": "<string>",
"image": "<string>",
"labels": [],
"block_count": 123,
"unit_count": 123,
"occupation_year": 123,
"developer": "<string>",
"management_company": "<string>",
"clubhouse": "<string>",
"primary_school_net": "<string>",
"primary_school_net_id": "<string>",
"secondary_school_net": "<string>",
"secondary_school_net_id": "<string>",
"avg_price_per_sqft": 123,
"price_change_percent": 123,
"price_per_sqft_year_ago": 123,
"sale_transaction_count": 123,
"profit_ratio_percent": 123,
"loss_ratio_percent": 123,
"turnover_rate_percent": 123,
"min_asking_price": 123,
"max_asking_price": 123,
"min_asking_price_per_sqft": 123,
"max_asking_price_per_sqft": 123,
"sale_listing_count": 123,
"avg_rent_per_sqft": 123,
"rent_transaction_count": 123,
"rental_yield_percent": 123,
"rental_activity_percent": 123,
"min_asking_rent": 123,
"max_asking_rent": 123,
"min_asking_rent_per_sqft": 123,
"max_asking_rent_per_sqft": 123,
"rent_listing_count": 123,
"population": 123,
"household_count": 123,
"average_household_size": 123,
"census": [],
"phases": []
}
]{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
API token from the dashboard
Headers
Body
x >= 120 <= x <= 150028hse, squarefoot tc, cn, en residential, commercial private_estate, public_and_subsidised_housing, detached_house industrial, office, shop hong_kong_island, kowloon, new_territories, outlying_islands island_south, aberdeen_ap_lei_chau_wong_chuk_hang, chai_wan_siu_sai_wan_shek_o, shau_kei_wan_heng_fa_chuen, sai_wan_ho, taikoo, quarry_bay, north_point_mid_levels, north_point_fortress_hill, tin_hau_tai_hang, causeway_bay_happy_valley, wan_chai_admiralty, mid_levels, central_sheung_wan, sai_ying_pun_shek_tong_tsui, kennedy_town, whampoa, hung_hom, tsim_sha_tsui, jordan, yau_ma_tei, mong_kok, prince_edward, tai_kok_tsui_olympic_kowloon_station, lai_king, mei_foo, cheung_sha_wan, lai_chi_kok, sham_shui_po_shek_kip_mei_nam_cheong, yau_yat_tsuen, ho_man_tin, kowloon_tong, san_po_kong_wong_tai_sin, kai_tak, kowloon_city, to_kwa_wan, diamond_hill_lok_fu, ngau_chi_wan, kowloon_bay, kwun_tong_ngau_tau_kok, yau_tong, lam_tin, sha_tau_kok, tsing_yi, kwai_chung_kwai_fong, tsuen_wan_tai_wo_hau, tsuen_wan_sham_tseng, tuen_mun_castle_peak_road, tuen_mun, tin_shui_wai, yuen_long_hung_shui_kiu, sheung_shui, fan_ling, tai_po_tai_wo_pak_shek_kok, sha_tin_tai_wai_fotan, ma_on_shan, tseung_kwan_o, sai_kung_clear_water_bay, cheung_chau_other_islands, lamma_island, peng_chau, south_lantau_island_tai_o, tung_chung, discovery_bay, ma_wan, greater_bay_area pok_fu_lam, shouson_hill, baguio_villa, southern_district, repulse_bay, tai_tam, stanley, south_horizons, parkview, wong_chuk_hang, ap_lei_chau, aberdeen, chai_wan, shek_o, siu_sai_wan, shau_kei_wan, heng_fa_chuen, north_point, fortress_hill, tai_hang, tin_hau, jardines_lookout, happy_valley, happy_valley_mid_levels, causeway_bay, admiralty, wan_chai, shiu_fai_terrace, western_mid_levels, mid_levels_central, the_peak, sheung_wan, central, sai_ying_pun, shek_tong_tsui, tai_kok_tsui, olympic, kowloon_station, sham_shui_po, shek_kip_mei, nam_cheong, san_po_kong, wong_tai_sin, diamond_hill, lok_fu, ngau_tau_kok, kwun_tong, kwai_chung, kwai_fong, tsuen_wan, tai_wo_hau, yuen_long, hung_shui_kiu, tai_po, tai_wo, pak_shek_kok, sha_tin, tai_wai, fotan, tseung_kwan_o_town, lohas_park, hang_hau, po_lam, tiu_keng_leng, sai_kung, clear_water_bay, cheung_chau, other_islands, south_lantau_island, tai_o, zhongshan, zhuhai, guangdong, huizhou, shenzhen, jiangmen Response
Successful Response
Show child attributes
Show child attributes
Show child attributes
Show child attributes