Skip to content
Eden Engine

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.

activeper callv1
Provider
Web & Business Data Network
Category
travel
Provider price
$0.01365 per call
Latency p50 / p95
— / —
Success rate
—
Verified
—

Provider list price; Omnial MCP charges provider cost plus a platform markup on top.

Contract

input_schema.json
{
  "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.json
{
  "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. Observed as 0 on every Tokyo fixture row -- 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 -- observed both null (most rows) and populated (a minority of rows on both fixtures) across the two fixtures.",
                  "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 -- 24 entries on the Singapore fixture, 4 on the Tokyo fixture; a single room_name/product_id can repeat across multiple entries, one per rate_type/breakfast/refundability combination."
          },
          "platform_name": {
            "type": "string",
            "description": "Always 'Agoda' on both fixtures observed."
          }
        },
        "additionalProperties": true
      },
      "description": "One entry per platform grouping observed; a single entry on both real fixtures."
    },
    "specs": {
      "type": "object",
      "properties": {
        "login": {
          "type": "integer"
        },
        "rooms": {
          "type": "string",
          "description": "Echoed as a string on both fixtures observed."
        },
        "adults": {
          "type": "string",
          "description": "Echoed as a string on both fixtures observed."
        },
        "locale": {
          "type": "string"
        },
        "check_in": {
          "type": "string"
        },
        "children": {
          "type": "string",
          "description": "Echoed as a string on both fixtures observed."
        },
        "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, 'agoda.com' on both fixtures observed."
        }
      },
      "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, as returned at routing.responseResultPath ($.output), after field mapping. Observed identically shaped on both real fixtures (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
}

Pricing

Every real charge, itemised. A model that quietly omits one is a slow financial leak, so nothing here is rolled up, and a charge that only applies to some inputs says so rather than being added in.

Prices in this catalog are the provider's own list price, not your bill: Omnial MCP charges provider cost plus a platform markup on top, so what you are charged is higher than the figure shown. For the exact amount a specific call will cost, run omnial_execute with dry_run: true; that number includes the markup and is what we hold while the call runs. It is a quote, not a cap on the charge.

ChargeRate
Per call
Flat, regardless of what comes back
$0.01365
Cost basis
Not recorded

This tool's catalog entry does not record how its final bill is determined, so we will not tell you whether its cost is fixed before the call or reported by the provider afterwards. Either way what is held is a quote rather than a cap: you are charged what the call actually costs, bounded at 2x the quote.

Updated
Sep 23, 2026