b2a_get_key
Claudelabel and agent` (max 64 chars each) are free-form hints we record on the key for our own observability; they do not affect rate limits or capabilities.by Blue Pillow S.p.A
Blue Pillow Hotels & Stays is the first neutral price comparison layer built for AI agents, powered by Blue Pillow — a travel technology company operating one of Europe's largest lodging metasearch platforms (1B+ daily price searches across 16+ booking operators). What your agent can do: • Search hotels, B&Bs, apartments and villas worldwide with live, date-specific prices compared across 16+ booking sites (Booking.com, Expedia, Trip.com, Hotels.com and more) in a single call. • See per-operator offers side by side — price per night and total, rooms left (scarcity), free-cancellation and breakfast flags — not just one source's inventory. • Resolve destinations from place names, discover sub-destinations near coordinates, and check live availability for specific properties and dates. • Paste a bluepillow.com listing URL directly as a property reference — the id is extracted automatically. • Hand off to a tracked booking link when the user is ready to book. Zero-friction access: no signup and no OAuth. On first use the agent calls the b2a_get_key tool, which issues a free, permanent anonymous API key (rate limits: 60 req/min, 5,000 req/day). The same key also works on the REST API. Neutrality is the point: results compare all covered operators, so your agent can reason over real alternatives instead of a single provider's inventory.
label and agent` (max 64 chars each) are free-form hints we record on the key for our own observability; they do not affect rate limits or capabilities.search_stays or get_property_details. The complementary get_property_details tool answers "what is this property like" with static facts; this tool answers "can I book it for these dates at what price" with live, date-specific data. Required input: property_id (the id from a search_stays result, opaque string starting with prop_), dates (check_in + check_out, ISO 8601), and guests (adults / children / infants composition). Without these the live lookup cannot proceed. Natural-language date references — "tonight", "this weekend", "next weekend", "the weekend of July 4", "Memorial Day weekend", "long weekend in May" — translate to concrete check_in / check_out values at the call site; concrete ISO dates also work. check_in is a date in the real-time calendar that is today or later; past values are rejected at the API boundary. user_country, currency, and language carry the user's locale, not the property's. Prices are returned in currency if set, else derived from user_country, else USD — pass user_country and/or currency whenever you know the user's location/currency so the quote matches what they'll pay; don't rely on the USD default. user_country and language also localize the web_url booking link. Response shape: - availability_status — available, unavailable, or unknown. Available means rooms confirmed at the operator level for the requested window; quote freely. Unavailable means no rooms for these dates — surface that explicitly to the user with a suggestion of alternate dates (there is no price for these dates). - offers[] — per-operator quotes. Each carries amount (total stay), amount_per_night (per-night), currency, breakfast_included, refundable, rooms_left, and deeplink_url. offers[0] is the curated best. Each deeplink_url is a BluePillow tracked-redirect URL (bluepillow.com/…) that records the click and forwards the user to the operator's booking page — pass it verbatim, never reconstruct it or replace it with a raw OTA link. - price — mirror of offers[0] for callers that just want the curated headline. null when unavailable (no price for these dates). Per-night vs total — amount_per_night is per-night; amount on each offer is the total for the requested stay. Phrasings like "€X/night via Booking, breakfast included, €Y total" are unambiguous; bare numbers without a unit ("€192") get misread. Scarcity signals: low rooms_left values (1-3) are useful cues — "1 room left at €X on Booking" reads naturally. Free cancellation (refundable=true) and breakfast-included are decision factors worth surfacing proactively when present on some offers but not others. When all results across operators are unavailable, that's the signal to say so explicitly to the user and offer to widen the dates or look at alternatives. For final booking confirmation, hand the user the corresponding deeplink_url (or the property's web_url) — booking URLs are not reconstructed by hand.destination_id in subsequent search_stays calls. Useful when coordinates are already in hand (from world knowledge, from a previous tool result, or directly from the user) and the agent needs to enumerate which curated destinations cover that area before searching for properties. Also useful as a fan-out entry point for region-level intents — broad areas such as 'Tuscany', 'Pacific Northwest', 'New England', or 'Central Europe' — where the agent can pass an approximate regional centroid and surface a list of sub-destinations the user may then narrow down to before a focused search. Returns up to 5 candidates ordered by distance. The radius defaults to 5 km; widens up to 50 km for broader queries.rating + rating_count) by default. Review DATA beyond the headline — the ratings breakdown and the actual review texts — is opt-in via the include parameter (see below); pass it whenever the user's question is about guest experience. Carries no price unless called with dates: a price only exists for a concrete stay window. Useful when the user wants to inspect or compare a specific option in depth — facilities, neighborhood, what guests say — without yet committing to specific dates. HOW TO GET REVIEWS (when you need to reason about guest experience): pass include. reviews_aggregate gives the score + counts + per-OTA breakdown; reviews_sample/reviews_extended give the actual review texts. Without include, none of these are returned (you get only the headline rating/rating_count). See the include section below. For live availability and a real per-operator quote for a specific stay window, the path is check_property_availability instead. The two tools coexist by design: this one answers "what is this property like" with stable, cacheable data; the other answers "can I book it for these dates at what price" with live, date-specific quotes. Calling this tool when the user has specific dates in mind and wants to know whether the property is bookable will not surface the availability/quote — the user will then have to wait for a second round-trip to the availability tool. Input: the id field from a search_stays result (opaque string starting with prop_, e.g. prop_69ce2ddcbf46061e4095778b). For a property the user has named directly, resolve the place name through resolve_destination and run a targeted search_stays first to obtain the id. Optional include=["reviews_aggregate"] attaches a per-source breakdown of review counts and average ratings — useful when the user asks about overall sentiment or wants to see how each booking source rates the property. It summarizes ALL reviews (score + total count), so it is the right tool for "how is it rated". Review texts are available via two includes, both deliberately capped to avoid token waste: - reviews_sample — up to 5 recent review texts. Enough to get the gist of what guests say. - reviews_extended — up to 20 recent review texts, for a deeper qualitative read. Supersedes reviews_sample when both are passed. Reach for reviews_extended only when 5 are genuinely not enough — the returned list carries a reviews_meta block (returned, total_available, capped, note) that tells you how many texts exist and confirms the cap is intentional: the omitted reviews are older and the aggregate already reflects all of them, so you do NOT need to try to fetch everything. Note: review texts are returned only when called WITHOUT dates (the dated availability path does not carry them). user_country, currency, and language carry the user's locale, not the property's. When this call carries dates (live prices), prices come back in currency if set, else derived from user_country, else USD — so pass user_country and/or currency whenever you know the user's location/currency; don't rely on the USD default. user_country and language also localize the web_url booking link. Language default is "en"; country default is "US". All rating-like fields are on a 0-5 scale (Google Places-compatible): the top-level rating, reviews_aggregate.score_0_5, and each per-OTA score under distribution_by_ota. Without dates this tool returns no price (price is null, offers empty) and availability_status is unknown (no dates were considered). The live quote, when needed, comes from check_property_availability. web_url is a ready-to-open booking link for the property. Pass it verbatim when the user asks for a booking link — booking URLs are not reconstructed by hand.search_stays. The canonical entry point when the user's request mentions a place name and coordinates are not already known from a prior call in this session. If coordinates are already in hand from an earlier tool result, passing them directly to search_stays skips this resolver step. Accepts cities, neighborhoods, airports, and points of interest in any language, using the local canonical name (not a translation). The country parameter disambiguates names that occur in multiple places (for example Springfield MA vs Springfield IL vs Springfield MO). The type parameter narrows the kind of destination returned. poi is the narrowest match and has partial coverage on the comparator side; when the agent's own geographic knowledge can already geocode the POI to lat/lon, passing coordinates to search_stays is the more reliable path.user_country, currency, and language carry the user's locale, not the destination's. IMPORTANT — currency: prices are returned in currency if you set it, otherwise in the currency derived from user_country (US→USD, CA→CAD, GB→GBP, euro-area→EUR); if you set NEITHER, prices default to USD, which may not be the user's currency. So whenever you know where the user is (or what currency they want), pass user_country and/or currency — do not rely on the default. Prices are never converted client-side; each offer is quoted by the operator in that currency. user_country and language also localize the booking link (web_url). The user's own residence/billing country is the right user_country (not the destination's), and their interface language the right language. Each result is shaped for downstream presentation without extra calls: - location.lat and location.lon carry per-property coordinates, suitable for plotting all results on a single map so the user can compare spatial alternatives at a glance. The map widget reads these fields directly from this response — no separate lookup needed for visualization. - thumbnail_url carries the property's first photo URL when available (null when no image is on file); useful for embedding inline or showing on the map alongside the pin. - images on search results is capped to the first photo to keep the comparison payload compact; each item has a url field, and thumbnail_url mirrors images[0].url. Call get_property_details for a single property to retrieve its full photo gallery. - web_url is a ready-to-open booking link for the property, already encoded with the user's check-in/check-out, language, currency, and guest count. Pass it to the user verbatim when they ask for a booking link — never reconstruct the URL from individual parameters, the query-string format is not guaranteed to match generic booking-URL conventions. - Price is live and date-specific only. There is no date-agnostic "from" figure: a meaningful price only exists for a concrete query (property + dates + occupancy). - price and offers[] — the live quote for the requested dates, populated only when dates were passed and the comparator confirmed availability. offers[0] is the curated best; each offer carries amount (total stay), amount_per_night (per-night), currency, breakfast_included, refundable, rooms_left, and deeplink_url. price mirrors offers[0]. - With no dates (or when nothing is available) price is null and offers is empty — surface the property without a price rather than inventing a starting figure. - availability_status per result encodes the live state: - available — bookable rooms confirmed at the operator level. offers and price carry the live date-specific quotes. Quote the rate via offers[i].amount_per_night (per-night) and offers[i].amount (total stay) and use the deeplinks for the booking handoff. - unavailable — no rooms reported for those dates. offers is empty and price is null (no price for these dates). Useful to decide whether to suggest alternate dates, drop the property from the recommendation, or offer it as a backup. - unknown — no dates were considered (request had no dates). offers is empty and price is null — no price signal without a dated query. Per-night vs total — never confuse them in the user-facing prose. amount_per_night is per-night; amount on each offer is the total stay (sum across nights, in `currenc…App Stats
6
Tools
Claude
Platforms
Category
Hotel ReservationsWorks with
Similar Apps
Data refreshed daily