Agoda API endpoint
Returns Agoda activities (tours, attractions, experiences) matching a free-text keyword and/or a city. When keyword is omitted, the resolved city's name is used instead to return a general listing of activities in that city. Callers may supply a known Agoda city id or a free-text city name for the city filter; when both are supplied city_id takes precedence.
/agoda/activities/searchQuery parameters:
keyword (optional) — free-text activity search keyword, e.g.
cooking class. When omitted, the resolved city's name is used instead.city_id (optional) — numeric Agoda city id to filter results to.
Optional if keyword is supplied; city_id takes precedence over city
when both are supplied.city (optional) — free-text city name. Used directly as the search text
when keyword is omitted, and to resolve a city id filter.Notable response behavior:
keyword, city_id, or city is required; supplying
none returns 400 before any upstream request is made.keyword in the response echoes the actual search text used: the
caller's own keyword when supplied, otherwise the resolved city name.city_id filtering is best-effort: when a city filter is active, only
activity results whose own city matches are kept.200 with an empty
activities list, not an error.| Field | Filled in, of 3 checked | Values in the sample |
|---|---|---|
| activity_id | 3 | |
| name | 3 | “Bangkok Chim Chum | Bangkok” and 2 other values |
| city_id | 3 | |
| city_name | 3 | “Bangkok” |
| categories | 3 | median 1 entry |
| source_url | 3 | agoda.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| keyword | string | No | Free-text activity search keyword. When omitted, the resolved city's name is used instead. | cooking class | |
| city_id | integer | No | Numeric Agoda city id to filter results to. Optional if keyword is supplied; city_id takes precedence over city when both are supplied. | 9395 | |
| city | string | No | Free-text city name, used directly as the search text when keyword is omitted, and to resolve a city id filter. | Bangkok | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/agoda/activities/search?keyword=coffee" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"city_id": 9395,
"keyword": "chim chum",
"count": 1,
"activities": [
{
"activity_id": 1633875,
"name": "Bangkok Chim Chum | Bangkok",
"city_id": 9395,
"city_name": "Bangkok",
"categories": [
{
"id": 2,
"code": "FOOD_AND_DRINKS",
"is_primary": true
}
],
"source_url": "https://www.agoda.com/search?cityId=9395&selectedActivity=1633875"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/agoda.activitiesSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | agoda.ActivitiesSearchResponse | No | ||||
| data.activities | array | No | ||||
| data.activities[].activity_id | integer | No | 1633875 | |||
| data.activities[].categories | array | No | ||||
| data.activities[].categories[].code | string | No | FOOD_AND_DRINKS | |||
| data.activities[].categories[].id | integer | No | 2 | |||
| data.activities[].categories[].is_primary | boolean | No | ||||
| data.activities[].city_id | integer | No | 9395 | |||
| data.activities[].city_name | string | No | Bangkok | |||
| data.activities[].name | string | No | Bangkok Chim Chum | Bangkok | |||
| data.activities[].source_url | string | No | https://www.agoda.com/search?cityId=9395&selectedActivity=1633875 | SourceURL is a real, live-verified Agoda deep link straight to this activity within its city (Agoda's own suggestion-endpoint url field). | ||
| data.city_id | integer | No | 9395 | |||
| data.count | integer | No | 1 | |||
| data.keyword | string | No | cooking class | Keyword is the actual search text used against Agoda's suggestion endpoint: the caller's own Keyword when supplied, otherwise the resolved city name used as a general-listing fallback. | ||
| 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/activities/search?keyword=coffee" \
-H "x-api-key: $CRAWLORA_API_KEY"