Find a hotel first with [city search](/docs/endpoints/agoda/search) or [hotel name lookup](/docs/endpoints/agoda/hotel-lookup).

GET
# Agoda Hotel Reviews API

Extract comprehensive hotel reviews from Agoda with detailed ratings, guest profiles, and sentiment data. Returns Agoda's own guest reviews only.

## Overview

#### Agoda Guest Reviews

Returns Agoda’s own guest reviews only. Reviews Agoda shows from partner sites are not included.

The Agoda Hotel Reviews endpoint provides access to comprehensive review data including guest ratings, detailed comments, reviewer profiles, stay information, and sub-ratings for various hotel aspects. It returns Agoda's own guest reviews only.

### Endpoint URL

GET https://api.stayapi.com/v1/agoda/hotel/reviews/{hotel\_id} 

## Management replies

Returns Agoda's own guest reviews only; reviews Agoda shows from partner sites are not included; pagination (`total_count`, `has_more`) covers Agoda's own reviews only. The requested page size is 20; actual counts can differ. Agoda lists English-language reviews first (newest first with the default sort), then reviews in other languages, so for a complete date range, page until `has_more` is false. Advertised totals do not guarantee every review is accessible. A hotel with no Agoda reviews returns `200` with `reviews: []` and `total_count` 0; a page Agoda keeps blocking returns `502`, so retry it later.

`reviews[].owner_response` is null when no reply is available, or an object with nullable string fields `text`, `published_date`, and `author`. Reply dates preserve source formatting; ISO format and timezone are not guaranteed. Date and author may be null even when text is present.

```
{"text":"Thank you for your feedback.","published_date":null,"author":"Hotel management"}
```

`review_score` is Agoda's own guest score and rating count (not combined with partner sites), never a page average. Its `review_count` can be higher than `pagination.total_count` because it includes ratings without written reviews. Available aggregates contain nullable `overall`, `score_text`, and `review_count`. Missing aggregates can be an empty object or null; the review comments endpoint may return null. Do not infer an aggregate from the reviews on this page.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| hotel\_id | integer | Required | Agoda hotel ID (path parameter, e.g., 319457) |
| page | integer | Optional | Page number for pagination (starts at 1, default: 1) |
| sorting | integer | Optional | Sort order: 7 = most recent, 6 = highest rating, 5 = lowest rating (default: 7) |

## Response Format

### Success Response

Returns a JSON object containing reviews array, pagination details, and hotel metadata.

```
{
  "success": true,
  "hotel_id": 319457,
  "hotel_name": "Omena Hotel Jyvaskyla",
  "reviews": [...],
  "pagination": {
    "current_page": 1,
    "page_size": 20,
    "total_count": 1459,
    "total_pages": 73,
    "has_more": true
  },
  "review_score": {
    "overall": 7.9,
    "score_text": "Very good",
    "review_count": 1612
  },
  "retrieved_at": "2025-09-04T10:30:00Z"
}
```

### Review Object Structure

#### Core Fields

- `review_id` - Unique review identifier
- `rating` - Overall rating (1-10 scale)
- `title` - Review title/summary
- `comment` - Full review text
- `pros` - Positive aspects mentioned
- `cons` - Negative aspects mentioned
- `date` - Review submission date
- `stay_date` - Guest's stay date
- `room_type` - Room type booked
- `helpful_count` - Number of helpful votes
- `language` - Reviewer's language code (e.g. en, de, zh-CN; null if Agoda doesn't provide one)
- `translation` - Agoda's machine translation, or null if Agoda didn't translate the review: nullable `language`, `title`, `comment`. `title`/`comment` above are always the original text

#### Reviewer Object

- `name` - Reviewer's display name
- `country` - Reviewer's country
- `level` - Reviewer experience level
- `group_type` - Travel group type (Solo, Couple, Family, etc.)

#### Sub-ratings Object

- `cleanliness` - Cleanliness rating
- `location` - Location rating
- `service` - Service quality rating
- `facilities` - Facilities rating
- `value_for_money` - Value rating
- `comfort` - Comfort rating

## Error Responses

400
### Bad Request

Invalid hotel ID or parameter values

401
### Unauthorized

Missing or invalid API key

500
### Internal Server Error

Failed to fetch reviews from Agoda

## Usage Tips

#### Pagination Info

The requested page size is 20; actual counts can differ. Use page to fetch available results; advertised totals do not guarantee exhaustive coverage.

### Best Practices

- Start with page 1 and increment sequentially for pagination
- Use sorting=7 for most recent reviews to get latest feedback
- Page until pagination.has\_more is false; English-language reviews come first, then other languages
- Cache review data as it doesn't change frequently
- Combine with hotel details endpoint for complete property information
- Sub-ratings provide detailed insights into specific hotel aspects

Request

```curl
curl -X GET "https://api.stayapi.com/v1/agoda/hotel/reviews/319457?page=1&sorting=7" \
  -H "X-API-Key: YOUR_API_KEY"
```

Response

```json
{
  "success": true,
  "hotel_id": 319457,
  "hotel_name": "Omena Hotel Jyvaskyla",
  "reviews": [
    {
      "review_id": "1013949992",
      "rating": 10.0,
      "title": "Thanks a lot for Omena Call Support",
      "comment": "Omena Call Support helped me to get my check-in link and access code...",
      "pros": "",
      "cons": "",
      "reviewer": {
        "name": "Shintaro",
        "country": "Japan",
        "level": "",
        "group_type": "Group"
      },
      "date": "August 22, 2025",
      "stay_date": "August 2025",
      "room_type": "Double Room",
      "helpful_count": 0,
      "language": "en",
      "translation": null,
      "photos": [],
      "sub_ratings": {
        "cleanliness": 9.0,
        "location": 9.5,
        "service": 8.0,
        "facilities": 8.5,
        "value_for_money": 8.5,
        "comfort": 9.0
      },
      "owner_response": {
        "text": "Dear guest, thank you for your kind words! We are glad you enjoyed the location and cleanliness, and we hope to welcome you again soon.",
        "published_date": "2025-08-20T10:15:00+07:00",
        "author": "Hotel Management"
      }
    },
    {
      "review_id": "848411361",
      "rating": 9.2,
      "title": "Good for short stay in city center",
      "comment": "The room is spacious and clean. Location is unbeatable...",
      "pros": "",
      "cons": "",
      "reviewer": {
        "name": "Minjie",
        "country": "China",
        "level": "",
        "group_type": "Solo traveler"
      },
      "date": "August 29, 2024",
      "stay_date": "August 2024",
      "room_type": "Double Room",
      "helpful_count": 0,
      "language": "en",
      "translation": null,
      "photos": [],
      "sub_ratings": {
        "cleanliness": 9.0,
        "location": 10.0,
        "service": 8.0,
        "facilities": 8.0,
        "value_for_money": 9.0,
        "comfort": 9.0
      },
      "owner_response": null
    }
  ],
  "pagination": {
    "current_page": 1,
    "page_size": 20,
    "total_count": 1459,
    "total_pages": 73,
    "has_more": true
  },
  "review_score": {
    "overall": 7.9,
    "score_text": "Very good",
    "review_count": 1612
  },
  "retrieved_at": "2025-09-04T10:30:00Z"
}
```

```json
{
  "error": {
    "code": "INVALID_HOTEL_ID",
    "message": "The provided hotel ID is invalid or not found",
    "status": 400
  }
}
```
