Agoda Hotel Details & Room Rates (by Hotel ID)
omnial/agoda-hotel
Given an Agoda hotel ID, stay dates, occupancy, currency, and locale, returns the hotel's own details (name, address, star rating, review score and count) plus every available room offer for that stay: room name, size, bed type, max occupancy, nightly total and original fare, any discount applied, breakfast/refundable flags, rate type, and the cancellation policy text, all in the requested currency and locale.
Price
Up to $0.0137 per call; you pay what the call used
You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $5.00.
Data source
Data from Agoda.
Use it
Your AI assistant does the work: it finds this tool, shows you the price first, runs it, and you are charged when the run finishes. There is nothing to set up for this tool in particular.
Connect once and your AI can find and run this tool, and any other it needs.
For developers: the calls your assistant makes
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/agoda-hotel" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/agoda-hotel" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/agoda-hotel", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/agoda-hotel", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.0137 |
- Updated
- Oct 27, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"hotelId",
"checkIn",
"checkOut",
"rooms",
"adults",
"children",
"currency",
"locale",
"login"
],
"properties": {
"login": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Upstream login-state flag passed to the scraper verbatim (the vendor's examples use 1)."
},
"rooms": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Number of rooms."
},
"adults": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Number of adult guests."
},
"locale": {
"type": "string",
"minLength": 2,
"description": "Locale for returned content, e.g. 'en-US'."
},
"checkIn": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Check-in date in YYYY-MM-DD format."
},
"hotelId": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Agoda's numeric hotel ID (from the hotel page or a prior search)."
},
"checkOut": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Check-out date in YYYY-MM-DD format."
},
"children": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of child guests."
},
"currency": {
"type": "string",
"maxLength": 3,
"minLength": 3,
"description": "Three-letter currency code for returned prices, e.g. 'USD'."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"required": [
"request_timestamp",
"specs",
"hotel_detail",
"rooms"
],
"properties": {
"rooms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rank": {
"type": "number"
},
"product_list": {
"type": "array",
"items": {
"type": "object",
"properties": {
"bed_type": {
"type": "string"
},
"currency": {
"type": "string"
},
"rate_type": {
"type": "string",
"description": "e.g. 'PAY_NOW', 'PAY_AT_HOTEL'."
},
"room_name": {
"type": "string",
"description": "The room type's own public name."
},
"room_size": {
"type": "number"
},
"product_id": {
"type": "string"
},
"refundable": {
"type": "boolean"
},
"final_price": {
"type": "number",
"description": "Total price for the stay, in the requested currency."
},
"is_breakfast": {
"type": "boolean"
},
"max_occupancy": {
"type": "number"
},
"original_fare": {
"type": "number",
"description": "Pre-discount reference price. Was 0 on every row of a Tokyo (JPY) query -- not guaranteed to be a meaningful comparison price on every hotel."
},
"room_size_unit": {
"type": "string",
"description": "e.g. 'sqm'."
},
"discount_detail": {
"type": [
"object",
"null"
],
"properties": {
"breakdowns": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"amount": {
"type": "number"
},
"subtitle": {
"type": "string"
},
"discountType": {
"type": "number"
}
},
"additionalProperties": true
}
},
"breakdownsTitle": {
"type": "string"
},
"breakdownsSubtitle": {
"type": "string"
},
"totalDiscountAmount": {
"type": "number"
},
"totalDiscountBannerMessage": {
"type": "string"
},
"totalDiscountJacketMessage": {
"type": "string"
},
"appliedDiscountBannerMessage": {
"type": "string"
}
},
"description": "Discount/cashback breakdown for this rate, or null when no discount applies -- usually null, populated on a minority of rows.",
"additionalProperties": true
},
"discount_percent": {
"type": "number"
},
"is_promo_applied": {
"type": "boolean"
},
"cancellation_info": {
"type": "string",
"description": "Free-text cancellation policy for this specific rate."
}
},
"additionalProperties": true
},
"description": "Every available room offer for the stay -- e.g. 24 entries for a Singapore query, 4 for a Tokyo query; a single room_name/product_id can repeat across multiple entries, one per rate_type/breakfast/refundability combination."
},
"platform_name": {
"type": "string",
"description": "Typically 'Agoda'."
}
},
"additionalProperties": true
},
"description": "One entry per platform grouping; typically a single entry."
},
"specs": {
"type": "object",
"properties": {
"login": {
"type": "integer"
},
"rooms": {
"type": "string",
"description": "Echoed as a string."
},
"adults": {
"type": "string",
"description": "Echoed as a string."
},
"locale": {
"type": "string"
},
"check_in": {
"type": "string"
},
"children": {
"type": "string",
"description": "Echoed as a string."
},
"currency": {
"type": "string"
},
"hotel_id": {
"type": "string",
"description": "Echoes the queried hotelId, as a string."
},
"check_out": {
"type": "string"
},
"scraped_at": {
"type": "string",
"description": "Epoch milliseconds (as a string) of the scrape, matching request_timestamp."
},
"target_site": {
"type": "string",
"description": "The data source site queried, typically 'agoda.com'."
}
},
"description": "Echoes the resolved query parameters actually used for this lookup.",
"additionalProperties": true
},
"hotel_detail": {
"type": "object",
"properties": {
"lat": {
"type": "string",
"description": "Latitude, as a decimal string."
},
"long": {
"type": "string",
"description": "Longitude, as a decimal string."
},
"address": {
"type": "string",
"description": "The hotel's own public street address."
},
"hotel_name": {
"type": "string",
"description": "The hotel's own public name."
},
"star_rating": {
"type": "number"
},
"review_count": {
"type": "number"
},
"review_score": {
"type": "number"
}
},
"additionalProperties": true
},
"request_timestamp": {
"type": "string",
"description": "Epoch milliseconds (as a string) when the upstream call was made."
}
},
"description": "The hotel-and-room-offers record. Identically shaped in testing (a Singapore hotel in USD/en-US, a Tokyo hotel in JPY/ja-JP) -- always hotel details plus at least one rooms entry; a not-found/empty case was never observed against this endpoint.",
"additionalProperties": true
}