Contract
{
"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
}{
"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.
| Charge | Rate |
|---|---|
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
