
International atmosphere. Not a client project.
API docs
The catalog assistant accepts one POST. Listing questions use this site's sale catalog. Index movement and reference stamp duty use only the published market snapshot and the same duty bands. It does not forecast prices and it is not investment advice.
POST /api/chat
POST /api/chat with Content-Type application/json. The body must be at most 8,000 characters. The handler reads message, locale, propertyId, and state. locale may be zh-Hant, zh-Hans, en, ja, or ko. When it is omitted, zh-Hant is used.
A successful response is JSON with reply, listings, suggestions, state, and whatsapp_url. An oversized body is 413. Invalid JSON is 400. The response sends cache-control: no-store.
Partner API notes
This API gives issued API keys the listing fields that are already public on the site. A response contains those public fields only.
2026-10-13 · OpenAPI 2026-10-13
OpenAPI
The machine-readable spec is at /api/v1/openapi. The notes below describe the same spec.
Keys and limits
Send the key in the Authorization header as a Bearer token. The key is shown once when it is created. The database stores a hash. Each key has an hourly request limit and then receives 429. A key can be revoked.
Public fields
Property id, estate, section, district, HKD reference price, price per saleable square foot, unit description, saleable area, layout, floor, highlights, nearby notes, photo URLs, sale status, and updated time. Owner names, phone numbers, email addresses, and registration records are not included.
- propertyId
- estate
- sectionId
- districtZh
- districtEn
- priceHkd
- pricePerSqftHkd
- unitZh
- saleableSqft
- layoutZh
- layoutEn
- floorZh
- floorEn
- highlightsZh
- nearbyZh
- photos
- listingType
- updatedAt
Official data refresh
Public files from the Rating and Valuation Department, the Land Registry, the Education Bureau, and data.gov.hk are fetched on a schedule, cached in the existing Neon database, and stored with the source URL and date. The data hub pages still cite those sources. This API does not republish those raw files in bulk.
Personal data
This API does not provide personal data of owners or of people who register interest. Access logs store a hash of the caller address, the key prefix, the path, and the status code. They do not store the raw network address. An API key is a partner credential, not an owner's record. Handling of personal data remains subject to the Personal Data (Privacy) Ordinance. The official text is on the Privacy Commissioner's site.
Terms of use
Prices are catalog reference prices and records can change. A response is not a valuation, not investment advice, not an offer, and not a contract. Attribute commercialisation.ai when you use a response. A key is for the party it was issued to. This site can revoke a key or change the limit. Do not present a response as a sale of securities or tokens.
OpenAPI
{
"openapi": "3.0.3",
"info": {
"title": "commercialisation.ai partner listings",
"version": "2026-10-13",
"description": "Sale catalog reference prices in HKD for browsing. Records can change. This response is not a valuation, not investment advice, and not an offer or a contract."
},
"servers": [
{
"url": "https://commercialisation.ai"
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer"
}
}
},
"security": [
{
"bearerAuth": []
}
],
"paths": {
"/api/v1/listings": {
"get": {
"operationId": "listListings",
"summary": "List public sale listings",
"parameters": [
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50
}
},
{
"name": "offset",
"in": "query",
"schema": {
"type": "integer",
"minimum": 0,
"default": 0
}
}
],
"responses": {
"200": {
"description": "A page of public listing fields"
},
"401": {
"description": "Missing or unknown API key"
},
"429": {
"description": "Rate limit"
}
}
}
},
"/api/v1/listings/{id}": {
"get": {
"operationId": "getListing",
"summary": "Read one public sale listing",
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"pattern": "^M\\d+$"
}
}
],
"responses": {
"200": {
"description": "One public listing"
},
"404": {
"description": "Unknown id"
}
}
}
}
},
"x-public-fields": [
"propertyId",
"estate",
"sectionId",
"districtZh",
"districtEn",
"priceHkd",
"pricePerSqftHkd",
"unitZh",
"saleableSqft",
"layoutZh",
"layoutEn",
"floorZh",
"floorEn",
"highlightsZh",
"nearbyZh",
"photos",
"listingType",
"updatedAt"
],
"x-listing-property-types": {
"propertyId": {
"type": "string"
},
"estate": {
"type": "string"
},
"sectionId": {
"type": "string"
},
"districtZh": {
"type": "string"
},
"districtEn": {
"type": "string"
},
"priceHkd": {
"type": "string"
},
"pricePerSqftHkd": {
"type": "string"
},
"unitZh": {
"type": "string"
},
"saleableSqft": {
"type": "string"
},
"layoutZh": {
"type": "string"
},
"layoutEn": {
"type": "string"
},
"floorZh": {
"type": "string"
},
"floorEn": {
"type": "string"
},
"highlightsZh": {
"type": "string"
},
"nearbyZh": {
"type": "string"
},
"photos": {
"type": "string"
},
"listingType": {
"type": "string"
},
"updatedAt": {
"type": "string"
}
}
}