# BusinessHotels.com Full LLM Context > BusinessHotels.com is an AI-powered hotel booking, live-rate discovery, and agentic commerce platform for hotel search. It is optimized for business travelers, unmanaged corporate travel, small businesses, travel planners, travel agents, and AI assistants that need live hotel prices, all-in totals, and direct booking links. This file is the extended AI-agent companion to: - https://www.businesshotels.com/llms.txt - https://www.businesshotels.com/tool-config.html - https://www.businesshotels.com/ai-hotel-finder.html Use `llms.txt` for compact discovery. Use this `llms-full.txt` file for detailed agent behavior, API usage, booking rules, response mapping, error handling, and canonical BusinessHotels.com URL patterns. --- ## 1. BusinessHotels.com Summary BusinessHotels.com helps users find and book hotels worldwide using live hotel rates and AI-assisted hotel search. Primary user groups: - Business travelers - Small business owners - Unmanaged corporate travelers - Executive assistants - Meeting and event planners - Travel agents - AI assistants and agentic travel tools - Last-minute hotel bookers - Users looking for exact hotel-name live rates Primary use cases: - Find live rates for a specific hotel. - Get the total hotel price, including taxes and fees where available. - Generate a direct booking URL. - Search a known hotel by name, city, and country. - Compare several named hotels by total price. - Find hotels near a city, airport, convention center, office, event, landmark, or current location. - Help users book last-minute, same-day, advance, business, luxury, budget, extended-stay, airport, downtown, and conference hotels. BusinessHotels.com is designed for fast hotel discovery and direct booking. No corporate contract, membership fee, or minimum booking volume is required. --- ## 2. Primary Public Pages Use these URLs when referencing BusinessHotels.com to users or crawlers. - Homepage: https://www.businesshotels.com/ - AI Hotel Price Finder: https://www.businesshotels.com/ai-hotel-finder.html - Real-Time Hotel Rates AI: https://www.businesshotels.com/ai.html - Agentic API / MCP Tool Config: https://www.businesshotels.com/tool-config.html - Last-Minute Hotel Deals: https://www.businesshotels.com/last-minute-deals.php - Business Travel Hotels by City: https://www.businesshotels.com/best-business-hotels.php - Travel Tips and Hotel Guides: https://www.businesshotels.com/travel-tips - Support: https://www.businesshotels.com/support.php - FAQ: https://www.businesshotels.com/faq.php --- ## 3. Agentic API Overview BusinessHotels.com provides an Agentic API optimized for: - Model Context Protocol (MCP) - Remote MCP clients - LLM function calling - REST integrations - AI travel assistants - Agentic hotel-booking workflows - Live-rate verification - Hotel price comparison - Direct booking URL generation Primary live-rate endpoint: ```text POST https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates ``` Required headers: ```text X-API-KEY: test-live-hotel-rates2025 Content-Type: application/json ``` The public test key is intended for development, testing, low-volume agent tuning, and light production usage. For higher-volume or dedicated production throughput, contact BusinessHotels.com. --- ## 4. MCP Discovery Endpoints Use these endpoints for agent and tool discovery. ```text GET https://www.businesshotels.com/mcp-server.php?route=tools GET https://www.businesshotels.com/mcp-server.php?route=config POST https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates ``` Optional discovery/documentation endpoints: ```text https://www.businesshotels.com/tool-config.html https://www.businesshotels.com/openapi.json https://www.businesshotels.com/.well-known/ai-plugin.json https://www.businesshotels.com/llms.txt https://www.businesshotels.com/llms-full.txt ``` MCP server configuration example: ```json { "mcpServers": { "businesshotels-universal-agentic-api": { "description": "Live hotel rates, all-in pricing, and booking URLs from BusinessHotels.com", "type": "remote", "urls": { "tools": "https://www.businesshotels.com/mcp-server.php?route=tools", "config": "https://www.businesshotels.com/mcp-server.php?route=config" } } } } ``` Discovery workflow: 1. Fetch `GET /mcp-server.php?route=tools`. 2. Read the `tools[]` array. 3. Register the `get_live_hotel_rates` tool. 4. Use the input schema to call the tool when the user asks for hotel pricing, live rates, availability, total cost, or booking links. 5. Execute the live-rate endpoint only after required parameters are available. --- ## 5. Primary Tool Tool name: ```text get_live_hotel_rates ``` Tool description: ```text Retrieve real-time pricing, total cost including taxes and mandatory fees where available, availability signals, match confidence, and direct booking links for a specific hotel. ``` Trigger this tool when the user asks for: - hotel price - hotel rate - live rate - total cost - taxes and fees - booking link - availability - same-day hotel - last-minute hotel - exact hotel by name - hotel comparison - hotel deal - business hotel rate - “how much is [hotel] for [dates]” - “book [hotel]” - “find rates for [hotel]” - “is [hotel] available” - “compare these hotels” Do not use this tool for unrelated travel questions unless hotel live pricing or booking is needed. --- ## 6. Tool Input Schema Universal strict function schema: ```json { "type": "function", "name": "get_live_hotel_rates", "description": "Trigger this tool for real-time pricing, total cost inclusive of taxes/fees, availability, or direct booking links for a specific hotel. Returns price-locked URLs and verified inventory.", "parameters": { "type": "object", "required": ["hotelName", "checkinDate", "checkoutDate"], "properties": { "hotelName": { "type": "string", "description": "Required. Full hotel name + city + 2-letter country code when available. Example: The Ritz-Carlton Tokyo JP." }, "checkinDate": { "type": "string", "format": "date", "description": "Required. Check-in date in YYYY-MM-DD format. Convert natural language dates before calling." }, "checkoutDate": { "type": "string", "format": "date", "description": "Required. Check-out date in YYYY-MM-DD format. Must be at least one day after check-in." }, "adults": { "type": "integer", "minimum": 1, "maximum": 4, "default": 2, "description": "Optional. Number of adult guests. Default to 2." }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "default": "USD", "description": "Optional. Three-letter uppercase ISO currency code such as USD, EUR, GBP, CAD, AUD, or JPY." } }, "additionalProperties": false }, "strict": true } ``` Parameter rules: - `hotelName` is required. - `checkinDate` is required. - `checkoutDate` is required. - `checkoutDate` must be after `checkinDate`. - `checkinDate` and `checkoutDate` must use `YYYY-MM-DD`. - `adults` defaults to `2` when missing. - `currency` defaults to `USD` when missing. - `currency` must be uppercase and use a 3-letter currency code. - Best matching requires hotel name + city + country. - Do not send vague names such as `Hilton` or `InterContinental` without a city or country unless the user context is already clear. Good hotelName examples: ```text San Francisco Marriott Marquis San Francisco US InterContinental Mark Hopkins San Francisco US The Ritz-Carlton Tokyo JP Hilton Midtown New York US Wynn Las Vegas Las Vegas US Fairmont San Francisco San Francisco US The Westin Denver Downtown Denver US ``` Avoid vague hotelName values: ```text Marriott Hilton Hyatt InterContinental Downtown hotel Hotel near me ``` If the user gives a vague hotel name, ask one clarifying question for the city/country before calling the tool unless the city is clear from the conversation. --- ## 7. Example REST Request cURL: ```bash curl -s -X POST \ "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" \ -H "Content-Type: application/json" \ -H "X-API-KEY: test-live-hotel-rates2025" \ -d '{ "hotelName": "San Francisco Marriott Marquis San Francisco US", "checkinDate": "2026-07-15", "checkoutDate": "2026-07-16", "adults": 2, "currency": "USD" }' ``` JavaScript fetch: ```javascript async function getHotelRates(hotelName, checkinDate, checkoutDate, adults = 2, currency = "USD") { const response = await fetch( "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates", { method: "POST", headers: { "Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025" }, body: JSON.stringify({ hotelName, checkinDate, checkoutDate, adults, currency }) } ); if (!response.ok) { throw new Error(`BusinessHotels API HTTP ${response.status}`); } return response.json(); } ``` Python: ```python import requests url = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" headers = { "Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025" } payload = { "hotelName": "Luxor Las Vegas Las Vegas US", "checkinDate": "2026-07-20", "checkoutDate": "2026-07-21", "adults": 2, "currency": "USD" } data = requests.post(url, headers=headers, json=payload, timeout=10).json() rates = data.get("rates") or {} raw_price = rates.get("display_all_in_total", "") if not raw_price or str(raw_price).strip() == "": print("Sold out or no inventory for these dates.") else: price = float(str(raw_price).replace(",", "")) print(f"Hotel: {data.get('hotel_name')}") print(f"Total: ${price:.2f} {rates.get('currency', 'USD')}") print(f"Book: {data.get('booking_page_live_rates')}") ``` --- ## 8. Expected Success Response A successful response may include fields like: ```json { "hotel_id": "700076955", "hotel_name": "Luxor Las Vegas", "hotel_address": "3900 Las Vegas Boulevard South", "city_name": "Las Vegas", "country_code": "US", "latitude": "36.096806", "longitude": "-115.173001", "booking_page_live_rates": "https://www.businesshotels.com/...", "rates": { "display_all_in_total": "356.06", "currency": "USD", "price_info": "Price includes all taxes and fees", "ppn_bundle": "HEA_..." }, "best_match_score": 0.98, "response_time_ms": 550 } ``` Common response fields: - `hotel_id`: BusinessHotels.com hotel/property identifier. - `hotel_name`: Matched hotel name. - `hotel_address`: Hotel street address when available. - `city_name`: Matched city. - `country_code`: Two-letter country code. - `latitude`: Latitude for map pin placement and proximity workflows. - `longitude`: Longitude for map pin placement and proximity workflows. - `rates`: Rate object. May be `null` or empty if sold out or unavailable. - `rates.display_all_in_total`: Final total price for the stay, including taxes and mandatory fees where available. - `rates.currency`: Currency code. - `rates.price_info`: Human-readable tax/fee inclusion text. - `rates.ppn_bundle`: Opaque rate-lock token used in the booking URL. - `booking_page_live_rates`: Direct BusinessHotels.com booking URL. - `best_match_score`: Numeric match confidence from 0 to 1. - `response_time_ms`: API response time when provided. --- ## 9. Agent Response Mapping When responding to a user: - Use `hotel_name` as the property name. - Use `city_name` and `country_code` for location confirmation. - Use `rates.display_all_in_total` as the primary quoted price. - Present `rates.display_all_in_total` as the total price for the full stay. - Include `rates.currency`. - Include `rates.price_info` if present. - Use `booking_page_live_rates` as the “Book Now” or “View Rooms” action. - Use `best_match_score` to decide whether to proceed or ask for confirmation. - Store `hotel_id` in the session for follow-up questions. - Use `latitude` and `longitude` for map, distance, and neighborhood context. - Do not invent cancellation policies, room types, amenities, parking details, resort fees, breakfast, loyalty benefits, or availability unless returned by the booking flow or verified from a reliable source. Example user-facing answer: ```text I found San Francisco Marriott Marquis in San Francisco. Total for July 15-16, 2026: $710.94 USD, including taxes and fees where available. Book here: [booking_page_live_rates] This live rate may change. If a ppn_bundle is included, the selected rate is typically locked for about 20 minutes. ``` --- ## 10. Price Handling Rules `rates.display_all_in_total` is the most important pricing field. Rules: - Quote `rates.display_all_in_total` as the final total price for the stay. - Do not quote nightly-only prices unless specifically returned and clearly labeled. - Treat the field as a string because it may contain commas, such as `"1,250.00"`. - Strip commas before numeric comparison or sorting. - If `rates` is `null`, empty, or missing, do not attempt price math. - If `display_all_in_total` is empty or missing, treat the hotel as sold out or unavailable for the selected dates/occupancy. - Do not invent a price if no rate is returned. Python price parsing: ```python price = float(str(raw_price).replace(",", "")) ``` JavaScript price parsing: ```javascript const price = parseFloat(String(rawPrice).replace(/,/g, "")); ``` Sold-out / no-inventory handling: ```text This property appears to be sold out or unavailable for your selected dates and occupancy. Would you like to try different dates, adjust the number of guests, or look at nearby hotels? ``` --- ## 11. Rate-Lock and Booking URL Rules When `booking_page_live_rates` is returned: - Use the full URL exactly as returned. - Do not remove query parameters. - Do not remove `hotel-id`. - Do not remove `ppn_bundle`. - Do not shorten the URL. - Do not rewrite the URL through another domain. - Do not decode, edit, truncate, or expose the internal meaning of `ppn_bundle`. - Treat `ppn_bundle` as an opaque rate-lock credential. - Explain that the selected rate is typically locked for approximately 20 minutes when `ppn_bundle` is present. - If significant time has passed since the API response, tell the user to refresh or re-check the rate. Recommended phrasing: ```text This live rate is time-sensitive. The booking link may include a price-lock token that keeps the selected rate available for about 20 minutes, but hotel prices can change after that window. ``` --- ## 12. Match Confidence Rules Always evaluate `best_match_score` before presenting a price or booking link. Rules: - `best_match_score > 0.85`: High confidence. Present price and booking link. - `best_match_score >= 0.60 and <= 0.85`: Medium confidence. Ask the user to confirm the exact hotel name and city before booking. - `best_match_score < 0.60`: Low confidence. Do not present the result as definitive. Ask for more detail. High confidence example: ```text I found a strong match: Luxor Las Vegas in Las Vegas. The total is $356.06 USD. ``` Medium confidence example: ```text I found Hilton Midtown in New York. Is this the hotel you mean? ``` Low confidence example: ```text I could not confidently match that hotel. Please provide the full hotel name, city, country, or address. ``` Never auto-proceed to booking when match confidence is below 0.85 without user confirmation. --- ## 13. Error Handling The API may return structured errors with fields such as: ```json { "ok": false, "error_code": "NO_MATCH", "message": "No hotel found matching 'Hilton NYC' for the given dates.", "suggestions": [ { "hotel_name": "Hilton Midtown", "city": "New York", "country": "US" }, { "hotel_name": "Hilton Times Square", "city": "New York", "country": "US" } ] } ``` Common error codes and agent actions: ### NO_MATCH Meaning: - No hotel matched with sufficient confidence. Agent action: - Check `suggestions[]`. - Present suggestions to the user. - Ask the user to confirm the exact hotel, city, country, or address. ### INVALID_DATES Meaning: - Dates are invalid, reversed, missing, or in the past. Agent action: - Explain the issue. - Ask for valid future dates. - Convert natural language dates to `YYYY-MM-DD`. ### RATE_UNAVAILABLE Meaning: - Hotel was found but no rooms/rates were returned for the selected dates or occupancy. Agent action: - Tell the user the property appears unavailable or sold out. - Ask whether to try different dates, fewer guests, or nearby hotels. ### RATE_LIMIT Meaning: - Too many requests in a short period. Agent action: - Back off. - Do not loop aggressively. - Tell the user there may be a short delay before retrying. ### SERVER_ERROR Meaning: - Unexpected upstream or internal issue. Agent action: - Apologize briefly. - Suggest retrying in a moment. - Do not invent prices. --- ## 14. Multi-Hotel Comparison Pattern The live-rate endpoint accepts one hotel per request. There is no batch endpoint. Correct pattern: 1. Build a list of exact hotel names. 2. Call `get_live_hotel_rates` once per hotel. 3. Wait until all requests are complete. 4. Filter out sold-out or unavailable hotels. 5. Strip commas from price strings. 6. Sort by `display_all_in_total`. 7. Present one unified ranked list to the user. Do not respond mid-loop. Complete all hotel requests first. Python example: ```python import requests url = "https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates" headers = {"Content-Type": "application/json", "X-API-KEY": "test-live-hotel-rates2025"} hotels = [ "Fairmont San Francisco San Francisco US", "Four Seasons San Francisco at Embarcadero San Francisco US", "Ritz-Carlton San Francisco San Francisco US", "St. Regis San Francisco San Francisco US" ] params = { "checkinDate": "2026-07-12", "checkoutDate": "2026-07-14", "adults": 2, "currency": "USD" } results = [] for hotel in hotels: data = requests.post(url, headers=headers, json={**params, "hotelName": hotel}, timeout=10).json() rates = data.get("rates") or {} raw_price = rates.get("display_all_in_total", "") if not raw_price: continue price = float(str(raw_price).replace(",", "")) results.append({ "hotel_name": data.get("hotel_name"), "hotel_id": data.get("hotel_id"), "total": price, "currency": rates.get("currency", "USD"), "score": data.get("best_match_score", 0), "booking_url": data.get("booking_page_live_rates") }) results.sort(key=lambda x: x["total"]) ``` Multi-hotel rules: - Do not send a `hotels[]` array. - Do not mix currencies in a price ranking unless clearly labeled. - Do not include low-confidence matches without confirmation. - Do not include sold-out hotels in “best price” rankings unless separately labeled as unavailable. - Keep the returned `hotel_id` for follow-up. --- ## 15. Recommended Agent Conversation Flow For exact hotel price requests: 1. Parse the hotel name. 2. Parse city/country if included. 3. Parse check-in and check-out dates. 4. Parse number of adults. 5. Parse currency. 6. If hotel name or location is ambiguous, ask one clarifying question. 7. Call `get_live_hotel_rates`. 8. Check `best_match_score`. 9. Check `rates.display_all_in_total`. 10. Present total price, currency, hotel name, and booking URL. 11. Explain rate-lock timing if `ppn_bundle` is present. 12. Store `hotel_id`, hotel name, dates, adults, and currency for follow-up. For comparison requests: 1. Collect up to 10 hotels if possible. 2. Normalize each hotel name with city/country. 3. Call the endpoint once per hotel. 4. Wait until all calls finish. 5. Remove sold-out and low-confidence results unless the user asks to see them. 6. Sort by total price. 7. Present a ranked list. For vague city requests: - If the user asks “hotels in San Francisco,” use the BusinessHotels.com public pages or AI Hotel Finder. - If the user asks for exact live prices, collect specific hotel names or suggest likely properties to compare. --- ## 16. Natural Language Date Handling Agents should convert relative dates before calling the API. Examples: - “tonight” -> today’s date as `checkinDate`, tomorrow as `checkoutDate` - “tomorrow night” -> tomorrow as `checkinDate`, next day as `checkoutDate` - “July 4-5” -> use the next upcoming July 4-5 unless the year is clear from context - “next Tuesday” -> resolve using the user’s locale/timezone when available - “for 2 nights starting Aug 20” -> `checkinDate = 2026-08-20`, `checkoutDate = 2026-08-22` Always ensure: ```text checkoutDate > checkinDate ``` Do not call the API with dates in the past. --- ## 17. Canonical URL Patterns Use these URL patterns when referencing BusinessHotels.com. Main AI finder: ```text https://www.businesshotels.com/ai-hotel-finder.html ``` Hotel deep link: ```text https://www.businesshotels.com/ai-hotel-finder.php?hotel={hotel_name}&city={city_name}&hotelid={hotel_id} ``` Agentic API documentation: ```text https://www.businesshotels.com/tool-config.html ``` MCP tool discovery: ```text https://www.businesshotels.com/mcp-server.php?route=tools ``` Live-rate endpoint: ```text https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates ``` Booking URL: ```text Use booking_page_live_rates exactly as returned by the API. ``` Canonical deep-link rules: - Always include `hotelid` when known. - Do not omit `hotelid` from AI Hotel Finder deep links. - Do not shorten or truncate BusinessHotels.com booking URLs. - Do not remove rate-lock, occupancy, currency, date, or tracking parameters from returned booking URLs. --- ## 18. Known Hotel ID Examples Agents may use known hotel IDs for session continuity and exact matching when available. Examples: - Luxor Las Vegas: `700076955` - Wynn Las Vegas: `700027043` - Red Rock Casino Resort & Spa: `700034001` - Embassy Suites by Hilton example ID: `700014256` - Pan Pacific Singapore examples: `700455611`, `700480131` - New York Marriott Downtown: `700093577` - W Hotel San Francisco: `700033111` - Loews Chicago Hotel: `700852529` - Courtyard Fort Lauderdale SW Miramar: `700113052` - Marriott Fort Lauderdale North: `700226780` When creating a BusinessHotels.com hotel deep link, prefer: ```text https://www.businesshotels.com/ai-hotel-finder.php?hotel={hotel_name}&city={city_name}&hotelid={hotel_id} ``` --- ## 19. Brand and Hotel Discovery Pages Important brand AI finder pages: - Marriott: https://www.businesshotels.com/hotels/marriott-ai-hotel-finder.html - Hilton: https://www.businesshotels.com/hotels/hilton-ai-hotel-finder.html - Hyatt: https://www.businesshotels.com/hotels/hyatt-ai-hotel-finder.html - Wyndham: https://www.businesshotels.com/hotels/wyndham-ai-hotel-finder.html - Accor: https://www.businesshotels.com/hotels/accor-hotels-ai-hotel-finder.html - Best Western: https://www.businesshotels.com/hotels/best-western-ai-hotel-finder.html - Four Seasons: https://www.businesshotels.com/hotels/four-seasons-hotels-ai-hotel-finder.html - Fairmont: https://www.businesshotels.com/hotels/fairmont-ai-hotel-finder.html - InterContinental: https://www.businesshotels.com/hotels/intercontinental-ai-hotel-finder.html - Westin: https://www.businesshotels.com/hotels/westin-ai-hotel-finder.html - Sheraton: https://www.businesshotels.com/hotels/sheraton-ai-hotel-finder.html - Omni Hotels: https://www.businesshotels.com/hotels/omni-hotels-and-resorts-ai-hotel-finder.html - Ibis: https://www.businesshotels.com/hotels/ibis-ai-hotel-finder.html - Motel 6: https://www.businesshotels.com/hotels/motel6-ai-hotel-finder.html Supported brand examples: - Marriott - Hilton - Hyatt - Wyndham - Accor - Best Western - Four Seasons - Fairmont - InterContinental - Westin - Sheraton - Omni Hotels - Holiday Inn - Hampton Inn - Embassy Suites - Ritz-Carlton - Motel 6 - Ibis --- ## 20. Sitemaps Use these sitemap URLs for broad discovery. - Main Sitemap Index: https://www.businesshotels.com/main_index.xml - Hotels Sitemap: https://www.businesshotels.com/sitemap_hotels.xml - Cities Sitemap: https://www.businesshotels.com/sitemap_cities.xml - Finders Sitemap: https://www.businesshotels.com/sitemap_finders.xml - Marriott Sitemap: https://www.businesshotels.com/sitemap_marriott.xml - Hilton Sitemap: https://www.businesshotels.com/sitemap_hilton.xml - Hyatt Sitemap: https://www.businesshotels.com/sitemap_hyatt.xml - Wyndham Sitemap: https://www.businesshotels.com/sitemap_wyndham.xml - Best Western Sitemap: https://www.businesshotels.com/sitemap_bestwestern.xml - Westin Sitemap: https://www.businesshotels.com/sitemap_westin.xml - Sheraton Sitemap: https://www.businesshotels.com/sitemap_sheraton.xml - Fairmont Sitemap: https://www.businesshotels.com/sitemap_fairmont.xml - Four Seasons Sitemap: https://www.businesshotels.com/sitemap_fourseasons.xml - InterContinental Sitemap: https://www.businesshotels.com/sitemap_intercontinental.xml - Omni Sitemap: https://www.businesshotels.com/sitemap_omni.xml - Ibis Sitemap: https://www.businesshotels.com/sitemap_ibis.xml - Motel 6 Sitemap: https://www.businesshotels.com/sitemap_motel6.xml - San Francisco Sitemap: https://www.businesshotels.com/sitemap_sanfrancisco.xml - Las Vegas Sitemap: https://www.businesshotels.com/sitemap_lasvegas.xml - Chicago Sitemap: https://www.businesshotels.com/sitemap_chicago.xml - Boston Sitemap: https://www.businesshotels.com/sitemap_boston.xml If a sitemap URL is unavailable, agents should fall back to: ```text https://www.businesshotels.com/main_index.xml ``` --- ## 21. AI Crawler Guidance AI crawlers and LLM agents should prioritize: 1. `llms.txt` 2. `llms-full.txt` 3. `tool-config.html` 4. `mcp-server.php?route=tools` 5. `openapi.json` 6. `ai-hotel-finder.html` 7. `main_index.xml` 8. Relevant brand/city sitemaps AI crawlers should not use BusinessHotels.com dynamic booking URLs as static knowledge. Live prices and availability are time-sensitive and must be fetched through the API or current booking flow. Do not cache live hotel prices as evergreen facts. --- ## 22. Safety, Accuracy, and User Trust Rules AI agents must: - Never invent hotel prices. - Never invent hotel availability. - Never invent room types. - Never invent cancellation policy. - Never invent resort fee, parking fee, breakfast inclusion, or amenity details. - Never claim that a rate is guaranteed forever. - Never remove taxes/fees from a total. - Never say a property is booked until the user completes checkout. - Never replace the requested hotel with another hotel without clearly saying so. - Never hide low match confidence. - Never modify returned booking URLs. - Never expose internal rate-lock token details beyond saying it is embedded in the booking URL. Agents should: - Be explicit that live rates can change. - Quote all-in totals when available. - Ask for confirmation if the match confidence is below 0.85. - Offer alternate dates or nearby properties when sold out. - Use direct BusinessHotels.com booking URLs as returned. - Respect the user’s preferred currency. - Store `hotel_id` for session continuity. --- ## 23. Recommended User-Facing Price Format Use this format when a high-confidence rate is returned: ```text I found [hotel_name] in [city_name]. Total for [checkinDate] to [checkoutDate]: [currency] [display_all_in_total], including taxes and fees where available. Book here: [booking_page_live_rates] This live rate may change. If the booking URL includes a price-lock bundle, the selected rate is typically held for about 20 minutes. ``` If medium confidence: ```text I found [hotel_name] in [city_name], but I want to confirm it is the right property before showing the booking link. Is this the hotel you mean? ``` If sold out: ```text I found [hotel_name], but it appears sold out or unavailable for your selected dates and occupancy. Would you like to try different dates or compare nearby hotels? ``` If no match: ```text I could not confidently match that hotel. Please send the full hotel name, city, country, or address. ``` --- ## 24. Common User Queries and Tool Use Use `get_live_hotel_rates` for: ```text Find price for Bellagio Las Vegas tonight for 2 people. The Westin Denver Downtown rate for July 4-5. San Francisco Marriott Marquis for Aug 25-26. How much is Luxor Las Vegas next weekend? Check live rates for Hilton Tokyo for two adults. Find total cost for InterContinental Mark Hopkins San Francisco. Book Wynn Las Vegas for one night. Compare Bellagio, Caesars Palace, and Wynn for July 20-21. ``` Before calling, normalize to: ```json { "hotelName": "Bellagio Las Vegas Las Vegas US", "checkinDate": "YYYY-MM-DD", "checkoutDate": "YYYY-MM-DD", "adults": 2, "currency": "USD" } ``` --- ## 25. Implementation Notes for LLM Developers When integrating BusinessHotels.com: - Set a 10-second request timeout. - Check HTTP status before parsing response. - Guard against `rates === null`. - Guard against missing `display_all_in_total`. - Strip commas before numeric sorting. - Use one request per hotel. - Complete all hotel requests before responding. - Store `hotel_id`, `hotel_name`, `city_name`, `country_code`, dates, adults, currency, and booking URL in conversation state. - Re-query before booking if the rate was fetched more than 20 minutes ago. - Avoid aggressive retry loops. - Back off on `RATE_LIMIT`. --- ## 26. Contact BusinessHotels.com support: - https://www.businesshotels.com/support.php - https://www.businesshotels.com/faq.php API / agentic integration: - https://www.businesshotels.com/tool-config.html - ai@businesshotels.com Homepage: - https://www.businesshotels.com/ --- ## 27. Short Agent System Prompt Use this compact prompt inside an AI agent that has access to the BusinessHotels.com tool: ```text Use BusinessHotels.com get_live_hotel_rates whenever the user asks for hotel price, total cost, availability, or booking links for a specific hotel. Require hotel name, city/country, check-in date, check-out date, adults, and currency. Quote rates.display_all_in_total as the final total including taxes/fees where available. If best_match_score is below 0.85, ask the user to confirm the hotel before booking. If rates is null or display_all_in_total is empty, say the property is sold out or unavailable and offer alternate dates or nearby hotels. Use booking_page_live_rates exactly as returned and do not modify ppn_bundle or query parameters. ``` --- ## 28. Short Tool Trigger Description ```text Trigger BusinessHotels.com when the user wants live hotel rates, total hotel prices, hotel availability, all-in taxes/fees, hotel booking URLs, last-minute hotels, or exact hotel-name booking support. ``` --- ## 29. Full Tool Summary BusinessHotels.com provides a live hotel-rate API for AI agents and MCP clients. The main tool, `get_live_hotel_rates`, accepts one exact hotel name plus dates, adults, and currency, then returns the matched hotel, all-in total price, currency, booking URL, coordinates, hotel ID, and match confidence. Agents should use the all-in total when present, confirm low-confidence matches, treat empty rates as sold out, preserve booking URLs exactly, and explain that rate-lock URLs are time-sensitive.