Agoda API endpoint
Returns Homes & Apartments results for an Agoda city: full listing detail for every matching property whose accommodation type is Apartment. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence.
/agoda/homes/searchReturns Homes & Apartments results for an Agoda city: full listing detail for every matching property whose accommodation type is Apartment, drawn from the same city search as hotel search and filtered down to non-hotel accommodation types. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence.
Query parameters:
city_id (optional) — numeric Agoda city id, e.g. 9395 for Bangkok.
Either city_id or city is required; city_id takes precedence when
both are supplied.city (optional) — free-text city name, resolved to a numeric city id via
Agoda's own destination search. Ignored when city_id is also supplied.page (optional) — 1-indexed result page over the underlying city
search, defaults to 1.limit (optional) — candidate listings fetched per page before filtering
to homes/apartments, defaults to 10, maximum 50.Notable response behavior:
city_id or city is required; supplying neither returns 400
before any upstream request is made. An unknown/unresolvable city returns
404.homes entries carry the same shape as the hotel detail endpoint's
response, plus accommodation_type. Known accommodation_type values
observed on Agoda: 34 (Hotel), 33 (Hostel), 37 (Resort), 120
(Apartment). This endpoint currently returns only 120 (Apartment)
entries; broader vacation-home/villa coverage is a planned follow-up.count can be smaller than limit even when more matching homes exist on
later pages — page forward with page to see more.| Field | Filled in, of 3 checked | Values in the sample |
|---|---|---|
| property_id | 3 | |
| display_name | 3 | |
| accommodation_type | 3 | 120 |
| rating | 3 | 2 to 4, median 3.5 |
| address | 3 | |
| number_of_rooms | 3 | 75 to 129, median 112 |
| chain_id | 1 | |
| children_stay_free_type_id | 3 | |
| description_long | 3 | median 22,021 characters |
| description_short | 3 | “. Unwind and Enjoy at The Quarter Ploenchit by UHG (SHA Plu…” and 2 other values |
| policy | 3 | |
| main_image_url | 3 | pix8.agoda.net |
| source_url | 3 | agoda.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| city_id | integer | No | Numeric Agoda city id, e.g. 9395 for Bangkok. Either city_id or city is required; city_id takes precedence when both are supplied. | 9395 | |
| city | string | No | Free-text city name, resolved to a numeric city id via Agoda's own destination search. Ignored when city_id is also supplied. | Bangkok | |
| page | integer | No | 1 | 1-indexed result page over the underlying city search, defaults to 1 | 1 |
| limit | integer | No | 10 | Candidate listings fetched per page before filtering to homes/apartments, defaults to 10, maximum 50 | 10 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/agoda/homes/search?page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"city_id": 9395,
"page": 1,
"limit": 10,
"count": 1,
"homes": [
{
"property_id": 149146,
"display_name": "Diamond Bangkok Apartment",
"accommodation_type": 120,
"rating": 3.5,
"address": {
"city": {
"id": 9395,
"name": "Bangkok"
},
"country": {
"id": 106,
"name": "Thailand"
}
},
"source_url": "https://www.agoda.com/search?cid=-1&selectedproperty=149146&city=9395"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/agoda.homesSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | agoda.HomesSearchResponse | No | ||||
| data.city_id | integer | No | 9395 | |||
| data.count | integer | No | 1 | |||
| data.homes | array | No | ||||
| data.homes[].accommodation_type | integer | No | 34 | AccommodationType is Agoda's own numeric property-type code (contentSummary.accommodationType), confirmed live 2026-08-05. Known values: 34 = Hotel, 33 = Hostel, 37 = Resort, 120 = Apartment. | ||
| data.homes[].address | agoda.Address | No | Address record, 8 fields: address1, city, country, postal_code. Described under Get Agoda hotel detail API. | |||
| data.homes[].chain_id | integer | No | 3603 | |||
| data.homes[].children_stay_free_type_id | integer | No | 1 | |||
| data.homes[].description_long | string | No | ||||
| data.homes[].description_short | string | No | Experience Luxury and Convenience at Baiyoke Sky Hotel. | |||
| data.homes[].display_name | string | No | Baiyoke Sky Hotel | |||
| data.homes[].formerly_name | string | No | ||||
| data.homes[].main_image_url | string | No | https://pix8.agoda.net/hotelImages/10637/-1/878a9b58ccd19eee41b98d20e388c080.jpg?ca=9&ce=1 | MainImageURL is the property's primary photo, resolved from Agoda's own content API (contentImages.mainImage.urls) and normalized to an absolute https:// URL. Empty if Agoda has no main image on file. | ||
| data.homes[].number_of_rooms | string | No | 659 | |||
| data.homes[].policy | agoda.Policy | No | Policy record, 4 fields: additional, adult, extra_bed, min_age. Described under Get Agoda hotel detail API. | |||
| data.homes[].property_id | integer | No | 10637 | |||
| data.homes[].rating | number | No | 4 | |||
| data.homes[].source_url | string | No | https://www.agoda.com/search?cid=-1&selectedproperty=10637&city=9395 | SourceURL is a real, live-verified Agoda URL that resolves directly to this property (Agoda's own affiliate redirect target), even though it is not the pretty slug-based hotel page. | ||
| data.limit | integer | No | 10 | |||
| data.page | integer | No | 1 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/agoda/homes/search?page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"