Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: HotelMonitor agent Price Check API
version: 1.2.0
description: 'Read-only answers about hotel prices, for AI assistants. Prices are tax-inclusive nightly figures from HotelMonitor''s own price scans (the Agoda share is an estimate of tax). They are past observations, not live quotes. Results include page_url, HotelMonitor''s price-history page, and where available book_url, a booking-site link with the dates filled in, so the person can confirm the current price. Booking links are affiliate links; HotelMonitor may earn a commission at no extra cost to the person. Rate limits per client (IP address, IPv6 by /64, plus user agent), shared with the MCP server: 60 requests a minute and 2,000 a day; over either you get 429 with Retry-After. X-RateLimit-* headers describe the per-minute window and RateLimit-Policy states both. The same tools are available over MCP at https://hotelmonitor.co.uk/mcp.'
contact:
name: HotelMonitor
url: https://hotelmonitor.co.uk/developers#mcp
servers:
- url: https://hotelmonitor.co.uk/api/agent/v1
tags:
- name: Price Check
paths:
/price-check:
get:
operationId: checkHotelPrice
summary: Is this price high, low or usual for this hotel in that month?
description: Compares a price with the hotel's own usual price for the check-in month. Returns verdict null (reason hotel_not_tracked or not_enough_data) when there are not enough scans of that hotel, with the destination's month figure as labelled context. book_url is included when checkout is given.
parameters:
- name: hotel
in: query
required: true
schema:
type: string
maxLength: 120
- name: destination
in: query
required: true
schema:
type: string
description: Destination slug, e.g. tenerife, new-york. "New York" and new_york are accepted too.
- name: checkin
in: query
required: true
schema:
type: string
format: date
- name: checkout
in: query
required: false
schema:
type: string
format: date
description: Required when per=stay. At most 30 nights.
- name: price
in: query
required: true
schema:
type: number
exclusiveMinimum: 0
description: In GBP.
- name: per
in: query
required: true
schema:
type: string
enum:
- night
- stay
description: Whether price is per night or for the whole stay.
- name: adults
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 8
default: 2
- $ref: '#/components/parameters/via'
responses:
'200':
description: verdict below_usual, about_usual, above_usual, or null with reason. Includes page_url, and book_url when checkout is given.
'400':
description: Invalid input. An unknown destination returns the UnknownDestination shape; other errors the Error shape.
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/UnknownDestination'
- $ref: '#/components/schemas/Error'
'429':
description: Rate limited. See Retry-After.
tags:
- Price Check
components:
parameters:
via:
name: via
in: query
required: false
schema:
type: string
maxLength: 32
description: Optional short name of your app or assistant (lower-case letters, digits, - or _), used in booking links so we can see where visits come from. Anything else is ignored and agent_api is used.
schemas:
Error:
type: object
properties:
error:
type: string
hint:
type: string
required:
- error
UnknownDestination:
type: object
properties:
error:
type: string
const: unknown_destination
requested:
type: string
suggestions:
type: array
items:
type: string
description: Up to 5 valid slugs close to the one asked for.
valid_destinations:
type: array
items:
type: string
hint:
type: string
required:
- error
- suggestions
- valid_destinations
- hint