Agoda Review Comments API
Access provider-specific hotel reviews from Agoda or partner platforms with granular control over the review source.
Overview
Provider-Specific Reviews
Filter reviews by specific providers like Agoda (3038) or aggregated sources (332) for targeted sentiment analysis.
The Review Comments endpoint provides access to reviews from specific review providers, allowing you to filter and analyze feedback from individual platforms. This is useful when you need to focus on reviews from a particular source or compare sentiment across different platforms.
Endpoint URL
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
hotel_id | integer | Required | Agoda hotel ID (path parameter) |
page | integer | Optional | Page number for pagination (starts at 1, default: 1) |
page_size | integer | Optional | Number of reviews per page (1-20, default: 5) |
provider_id | integer | Optional | Review provider ID (3038 = Agoda reviews, default: 3038) |
sorting | integer | Optional | Sort order: 7 = most recent, 6 = highest rating, 5 = lowest rating (default: 7) |
Provider IDs
Common Review Providers
Provider IDs allow filtering reviews by their source platform. Use 3038 for Agoda's own reviews.
Response Format
Success Response
Returns provider-specific reviews with detailed pagination information.
{
"success": true,
"hotel_id": 319457,
"reviews": [...],
"pagination": {
"current_page": 1,
"page_size": 5,
"total_count": 565,
"total_pages": 113
},
"retrieved_at": "2025-09-04T10:30:00Z"
}
Provider-Specific Counts
Total review counts will vary by provider. Agoda (3038) may have different totals than aggregated sources.
Usage Examples
Get Agoda-Only Reviews
Fetch reviews submitted directly on Agoda platform:
Get Highest Rated Reviews
Fetch top-rated reviews for showcasing positive feedback:
Paginate Through All Reviews
Iterate through pages to collect all reviews:
Best Practices
Optimization Tips
- Use specific provider IDs to reduce response size and processing time
- Implement pagination with reasonable page sizes (5-10) for better performance
- Cache reviews by provider_id as they change less frequently than aggregated data
- Use sorting=6 to highlight positive reviews in your application
- Monitor pagination.total_pages to optimize your fetching strategy
- Consider fetching from multiple providers in parallel for comparison
Provider Comparison
Fetch reviews from different providers separately to compare sentiment and identify platform-specific trends.
curl -X GET "https://api.stayapi.com/v1/agoda/hotel/reviews/319457/comments?provider_id=3038&page=1&page_size=10" \ -H "X-API-Key: YOUR_API_KEY"
// Get provider-specific reviews const response = await fetch( 'https://api.stayapi.com/v1/agoda/hotel/reviews/319457/comments?provider_id=3038&page=1', { headers: { 'X-API-Key': 'YOUR_API_KEY' } } ); const data = await response.json(); console.log(`Provider 3038 has ${data.pagination.total_count} reviews`); // Compare multiple providers const providers = [3038, 332]; const providerReviews = {}; for (const providerId of providers) { const res = await fetch( `https://api.stayapi.com/v1/agoda/hotel/reviews/319457/comments?provider_id=${providerId}`, { headers: { 'X-API-Key': 'YOUR_API_KEY' } } ); const data = await res.json(); providerReviews[providerId] = data.reviews; } console.log('Reviews by provider:', providerReviews);
import requests # Get Agoda-specific reviews url = 'https://api.stayapi.com/v1/agoda/hotel/reviews/319457/comments' params = { 'provider_id': 3038, # Agoda reviews 'page': 1, 'page_size': 10, 'sorting': 7 # Most recent } headers = { 'X-API-Key': 'YOUR_API_KEY' } response = requests.get(url, params=params, headers=headers) data = response.json() print(f"Agoda reviews: {data['pagination']['total_count']}") # Analyze sentiment by provider providers = [3038, 332] provider_ratings = {} for provider_id in providers: params['provider_id'] = provider_id response = requests.get(url, params=params, headers=headers) reviews = response.json()['reviews'] avg_rating = sum(r['rating'] for r in reviews) / len(reviews) if reviews else 0 provider_ratings[provider_id] = avg_rating print(f"Average ratings by provider: {provider_ratings}")
<?php $hotel_id = 319457; $params = http_build_query([ 'provider_id' => 3038, // Agoda reviews 'page' => 1, 'page_size' => 10, 'sorting' => 7 ]); $ch = curl_init("https://api.stayapi.com/v1/agoda/hotel/reviews/{$hotel_id}/comments?{$params}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'X-API-Key: YOUR_API_KEY' ]); $response = curl_exec($ch); $data = json_decode($response, true); curl_close($ch); echo "Provider 3038 reviews: " . $data['pagination']['total_count'] . "\n"; // Get reviews from multiple providers $providers = [3038, 332]; foreach ($providers as $provider_id) { $params = http_build_query([ 'provider_id' => $provider_id, 'page' => 1, 'page_size' => 5 ]); $ch = curl_init("https://api.stayapi.com/v1/agoda/hotel/reviews/{$hotel_id}/comments?{$params}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-API-Key: YOUR_API_KEY']); $response = curl_exec($ch); $provider_data = json_decode($response, true); curl_close($ch); echo "Provider $provider_id: " . count($provider_data['reviews']) . " reviews\n"; }
require 'net/http' require 'json' # Get Agoda-specific reviews uri = URI('https://api.stayapi.com/v1/agoda/hotel/reviews/319457/comments') params = { provider_id: 3038, page: 1, page_size: 10, sorting: 7 } uri.query = URI.encode_www_form(params) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Get.new(uri) request['X-API-Key'] = 'YOUR_API_KEY' response = http.request(request) data = JSON.parse(response.body) puts "Agoda reviews: #{data['pagination']['total_count']}" # Compare providers providers = [3038, 332] providers.each do |provider_id| uri = URI('https://api.stayapi.com/v1/agoda/hotel/reviews/319457/comments') uri.query = URI.encode_www_form(provider_id: provider_id, page: 1) request = Net::HTTP::Get.new(uri) request['X-API-Key'] = 'YOUR_API_KEY' response = http.request(request) provider_data = JSON.parse(response.body) puts "Provider #{provider_id}: #{provider_data['reviews'].length} reviews fetched" end
{ "success": true, "hotel_id": 319457, "reviews": [ { "review_id": "607467196", "rating": 8.0, "title": "Very good", "comment": "", "pros": "Enough space in room, clean and silent.", "cons": "Shower is annoying, whole toilet floor is wet after shower...", "reviewer": { "name": "Eerik", "country": "", "level": "", "group_type": "Business traveler" }, "date": "January 16, 2023", "stay_date": "", "room_type": "", "helpful_count": 0, "language": "en", "photos": [], "sub_ratings": {} }, { "review_id": "607467536", "rating": 6.0, "title": "Will not go again to this hotel---", "comment": "", "pros": "The place of the hotel was very good. We could reach all parts of town...", "cons": "They didn't communicate with me. I contacted them about payment...", "reviewer": { "name": "Gyorgy", "country": "", "level": "", "group_type": "Business traveler" }, "date": "October 03, 2022", "stay_date": "", "room_type": "", "helpful_count": 0, "language": "en", "photos": [], "sub_ratings": {} } ], "pagination": { "current_page": 1, "page_size": 5, "total_count": 565, "total_pages": 113 }, "retrieved_at": "2025-09-04T10:30:00Z" }
{ "error": { "code": "PROVIDER_NOT_FOUND", "message": "The specified provider ID is not available for this hotel", "status": 404 } }