curl --request POST \
--url https://api.anysite.io/api/centaline/estates \
--header 'Content-Type: application/json' \
--header 'access-token: <api-key>' \
--data '
{
"estate": "<string>",
"timeout": 300,
"lang": "hk"
}
'import requests
url = "https://api.anysite.io/api/centaline/estates"
payload = {
"estate": "<string>",
"timeout": 300,
"lang": "hk"
}
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({estate: '<string>', timeout: 300, lang: 'hk'})
};
fetch('https://api.anysite.io/api/centaline/estates', 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/centaline/estates",
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([
'estate' => '<string>',
'timeout' => 300,
'lang' => 'hk'
]),
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/centaline/estates"
payload := strings.NewReader("{\n \"estate\": \"<string>\",\n \"timeout\": 300,\n \"lang\": \"hk\"\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/centaline/estates")
.header("access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"estate\": \"<string>\",\n \"timeout\": 300,\n \"lang\": \"hk\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.anysite.io/api/centaline/estates")
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 \"estate\": \"<string>\",\n \"timeout\": 300,\n \"lang\": \"hk\"\n}"
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"@type": "CentalineEstate",
"url": "<string>",
"name": "<string>",
"name_en": "<string>",
"phase_name": "<string>",
"phase_name_en": "<string>",
"address": "<string>",
"estate_usage": "<string>",
"developer": "<string>",
"management_company": "<string>",
"phase_count": 123,
"building_count": 123,
"unit_count": 123,
"first_occupation_at": 123,
"last_occupation_at": 123,
"mtr_station": "<string>",
"mtr_walk_minutes": 123,
"facilities": [],
"category_labels": [],
"sale": {
"@type": "CentalinePriceTrend",
"saleable_price_per_sqft": 123,
"saleable_price_per_sqft_change_percent": 123,
"gross_price_per_sqft": 123,
"gross_price_per_sqft_change_percent": 123,
"min_price": 123,
"max_price": 123,
"min_saleable_price_per_sqft": 123,
"max_saleable_price_per_sqft": 123,
"listing_count": 123,
"transaction_count": 123
},
"rent": {
"@type": "CentalinePriceTrend",
"saleable_price_per_sqft": 123,
"saleable_price_per_sqft_change_percent": 123,
"gross_price_per_sqft": 123,
"gross_price_per_sqft_change_percent": 123,
"min_price": 123,
"max_price": 123,
"min_saleable_price_per_sqft": 123,
"max_saleable_price_per_sqft": 123,
"listing_count": 123,
"transaction_count": 123
},
"adjusted_sale_price_per_sqft": 123,
"adjusted_rent_per_sqft": 123,
"rental_yield": 123,
"phases": [],
"agents": [],
"branches": [],
"census": {
"@type": "CentalineEstateCensus",
"statistical_year": 123,
"population": 123,
"household_count": 123,
"median_age": 123,
"average_household_size": 123,
"median_household_income": 123,
"median_monthly_rent": 123,
"median_rent_to_income_ratio": 123,
"median_mortgage_payment": 123,
"median_mortgage_to_income_ratio": 123,
"cantonese_speaking_percent": 123,
"putonghua_speaking_percent": 123,
"english_speaking_percent": 123,
"tertiary_education_percent": 123,
"secondary_education_percent": 123,
"primary_education_percent": 123,
"owner_occupied_percent": 123,
"owner_occupied_with_mortgage_percent": 123,
"rented_percent": 123
},
"school_net": {
"@type": "CentalineSchoolNet",
"primary_school_net": "<string>",
"primary_school_url": "<string>",
"secondary_school_district": "<string>",
"secondary_school_url": "<string>"
},
"scope": {
"@type": "CentalineScope",
"region": "<string>",
"region_code": "<string>",
"district": "<string>",
"district_code": "<string>",
"area": "<string>",
"area_code": "<string>",
"hma": "<string>",
"hma_id": "<string>",
"hma_description": "<string>",
"image": "<string>"
},
"bookmark_count": 123,
"floor_plan_count": 123,
"floor_plans": [],
"images": [],
"latitude": 123,
"longitude": 123,
"image": "<string>",
"updated_at": 123
}
]{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}/centaline/estates
Get the full profile of a Hong Kong residential estate (屋苑) by its Centaline type code. Returns the estate name in Chinese and English, address and prose description, ownership category, developer and management company, phase/building/unit counts, first and last occupation dates, walking time to the MTR, clubhouse facilities and category labels, current sale and rent price levels with month-on-month trend and listing and transaction counts, the Centaline adjusted price and rent per sq ft with the rental yield, the phase list with per-phase listing counts, 2021 census figures for the surrounding area (population, households, median age, income, rent, mortgage, spoken language, education and tenure), the school nets, the district hierarchy, the agents and branches that cover the estate, photos, site floor plans and coordinates.
Price: 10 credits
⚠️ Common errors: 412: No Centaline estate with this type code.
curl --request POST \
--url https://api.anysite.io/api/centaline/estates \
--header 'Content-Type: application/json' \
--header 'access-token: <api-key>' \
--data '
{
"estate": "<string>",
"timeout": 300,
"lang": "hk"
}
'import requests
url = "https://api.anysite.io/api/centaline/estates"
payload = {
"estate": "<string>",
"timeout": 300,
"lang": "hk"
}
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({estate: '<string>', timeout: 300, lang: 'hk'})
};
fetch('https://api.anysite.io/api/centaline/estates', 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/centaline/estates",
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([
'estate' => '<string>',
'timeout' => 300,
'lang' => 'hk'
]),
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/centaline/estates"
payload := strings.NewReader("{\n \"estate\": \"<string>\",\n \"timeout\": 300,\n \"lang\": \"hk\"\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/centaline/estates")
.header("access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"estate\": \"<string>\",\n \"timeout\": 300,\n \"lang\": \"hk\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.anysite.io/api/centaline/estates")
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 \"estate\": \"<string>\",\n \"timeout\": 300,\n \"lang\": \"hk\"\n}"
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"@type": "CentalineEstate",
"url": "<string>",
"name": "<string>",
"name_en": "<string>",
"phase_name": "<string>",
"phase_name_en": "<string>",
"address": "<string>",
"estate_usage": "<string>",
"developer": "<string>",
"management_company": "<string>",
"phase_count": 123,
"building_count": 123,
"unit_count": 123,
"first_occupation_at": 123,
"last_occupation_at": 123,
"mtr_station": "<string>",
"mtr_walk_minutes": 123,
"facilities": [],
"category_labels": [],
"sale": {
"@type": "CentalinePriceTrend",
"saleable_price_per_sqft": 123,
"saleable_price_per_sqft_change_percent": 123,
"gross_price_per_sqft": 123,
"gross_price_per_sqft_change_percent": 123,
"min_price": 123,
"max_price": 123,
"min_saleable_price_per_sqft": 123,
"max_saleable_price_per_sqft": 123,
"listing_count": 123,
"transaction_count": 123
},
"rent": {
"@type": "CentalinePriceTrend",
"saleable_price_per_sqft": 123,
"saleable_price_per_sqft_change_percent": 123,
"gross_price_per_sqft": 123,
"gross_price_per_sqft_change_percent": 123,
"min_price": 123,
"max_price": 123,
"min_saleable_price_per_sqft": 123,
"max_saleable_price_per_sqft": 123,
"listing_count": 123,
"transaction_count": 123
},
"adjusted_sale_price_per_sqft": 123,
"adjusted_rent_per_sqft": 123,
"rental_yield": 123,
"phases": [],
"agents": [],
"branches": [],
"census": {
"@type": "CentalineEstateCensus",
"statistical_year": 123,
"population": 123,
"household_count": 123,
"median_age": 123,
"average_household_size": 123,
"median_household_income": 123,
"median_monthly_rent": 123,
"median_rent_to_income_ratio": 123,
"median_mortgage_payment": 123,
"median_mortgage_to_income_ratio": 123,
"cantonese_speaking_percent": 123,
"putonghua_speaking_percent": 123,
"english_speaking_percent": 123,
"tertiary_education_percent": 123,
"secondary_education_percent": 123,
"primary_education_percent": 123,
"owner_occupied_percent": 123,
"owner_occupied_with_mortgage_percent": 123,
"rented_percent": 123
},
"school_net": {
"@type": "CentalineSchoolNet",
"primary_school_net": "<string>",
"primary_school_url": "<string>",
"secondary_school_district": "<string>",
"secondary_school_url": "<string>"
},
"scope": {
"@type": "CentalineScope",
"region": "<string>",
"region_code": "<string>",
"district": "<string>",
"district_code": "<string>",
"area": "<string>",
"area_code": "<string>",
"hma": "<string>",
"hma_id": "<string>",
"hma_description": "<string>",
"image": "<string>"
},
"bookmark_count": 123,
"floor_plan_count": 123,
"floor_plans": [],
"images": [],
"latitude": 123,
"longitude": 123,
"image": "<string>",
"updated_at": 123
}
]{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
API token from the dashboard
Headers
Body
Response
Successful Response
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes