BusinessHotels.com | Universal Agentic API (MCP/UCP/REST)

🏨 BusinessHotels Universal Agentic API

MCP (Model Context Protocol) 1.0 UCP (Universal Control Protocol) READY RESTful

Optimized for Model Context Protocol (MCP) & 2M+ Property Inventory

● API Online
Production v1.3.9

πŸ€– Universal Agent Instructions

Execute POST for travel intent. Crucial Requirement: To ensure a unique property match, you must pass the hotelName as a descriptive string including "Hotel Name, City, Country".

πŸ’‘ Precision-Matching Tip: Always include the City and Country.
βœ… Good: "Luxor, Las Vegas, US"
❌ Bad: "Luxor"

πŸ“‘ Global Production Endpoint

Use this endpoint for all live rate lookups. Average latency: ~650ms.

POST https://www.businesshotels.com/mcp-server.php?route=tools/get_live_hotel_rates

Header: X-API-KEY: test-live-hotel-rates2025
Content-Type: application/json

πŸ’‘ Production Ready: This key is ready for AI agent integration and general use. For enterprise deployments or commercial applications, contact ai@businesshotels.com for dedicated support.

πŸ› οΈ Request Tool Schema (MCP/OpenAI)

Use this schema in LLM tool definitions or function calling (OpenAI, Gemini, Claude, etc.).

Tool Definition
{
  "name": "get_live_hotel_rates",
  "description": "Retrieve real-time rates for a specific hotel from a 2 million property database. Best for: Exact hotel matches with price-locked booking links.",
  "parameters": {
    "type": "object",
    "properties": {
      "hotelName": {
        "type": "string",
        "description": "REQUIRED. Detailed name + City + Country. Example: 'InterContinental Mark Hopkins, San Francisco, US'. Providing the country code ensures 99.9% match accuracy."
      },
      "checkinDate": {
        "type": "string",
        "format": "date",
        "description": "Check-in date in YYYY-MM-DD format."
      },
      "checkoutDate": {
        "type": "string",
        "format": "date",
        "description": "Check-out date in YYYY-MM-DD format."
      },
      "adults": {
        "type": "integer",
        "default": 1,
        "description": "Number of adult guests (1–4)."
      },
      "currency": {
        "type": "string",
        "default": "USD",
        "description": "3-letter ISO code (USD, EUR, GBP)."
      }
    },
    "required": ["hotelName", "checkinDate", "checkoutDate"],
    "additionalProperties": false
  }
}

🧩 MCP Tools Array Example

Use this JSON in your MCP server’s tools/list response to register the tool via inputSchema.

MCP tools entry
{
  "tools": [
    {
      "name": "get_live_hotel_rates",
      "title": "BusinessHotels Live Hotel Rates",
      "description": "Retrieve real-time rates for a specific hotel from a 2M+ property database, returning a booking URL with a price-locked ppn_bundle.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "hotelName": {
            "type": "string",
            "description": "REQUIRED. Detailed name + City + Country. Example: 'InterContinental Mark Hopkins, San Francisco, US'."
          },
          "checkinDate": {
            "type": "string",
            "format": "date",
            "description": "Check-in date in YYYY-MM-DD format."
          },
          "checkoutDate": {
            "type": "string",
            "format": "date",
            "description": "Check-out date in YYYY-MM-DD format."
          },
          "adults": {
            "type": "integer",
            "default": 1,
            "description": "Number of adult guests (1–4)."
          },
          "currency": {
            "type": "string",
            "default": "USD",
            "description": "3-letter ISO code (USD, EUR, GBP)."
          }
        },
        "required": ["hotelName", "checkinDate", "checkoutDate"],
        "additionalProperties": false
      }
    }
  ]
}

πŸ“– Intelligent Response Mapping

Response Key Agent Instruction / Logical Mapping
hotel_name Confirm this identity with the user.
hotel_address Display for logistical clarity (Street, City, Zip).
latitude / longitude Map Trigger: Use for map pins/distance calculation.
display_all_in_total Display as the single, all-inclusive "Final Price".
booking_page_live_rates Present as the primary checkout action.
ppn_bundle Internal inventory token. Locked for 20 minutes.
best_match_score If score < 0.85, clarify hotel identity with user.

πŸ“– Response Data Model

Field Type Agent Action
hotel_id String (9-digit) Store for session persistence.
display_all_in_total Float Quote as the Final Price (includes all taxes).
booking_page_live_rates URL Present as a direct booking button/link.

🧠 Match Verification Logic

⚠️ Critical Error Handling

If the API returns a 400 Validation Error, verify that hotelName is present. The system always requires a name string, even if a hotel_id is known internally.

πŸ’‘ Agent Reasoning Tip: When the API returns a booking_page_live_rates URL, the ppn_bundle is already embedded. Tell the user their rate is locked and provide the link as a clear "Book Now" action.

πŸ› οΈ Quick Integration Steps

  1. Authentication: Pass your key via api_key in the JSON body or X-API-KEY in the header.
  2. Date Formatting: Convert relative dates (e.g., "next Friday") into YYYY-MM-DD strings.
  3. Rich Data: Use latitude and longitude to display maps or nearby POIs.
  4. Booking Handoff: Always use the booking_page_live_rates URL; it contains the ppn_bundle which locks the rate for 20 minutes.

πŸ’» Code Examples

Test the API in your preferred language. All examples demonstrate the same request with identical parameters.

Bash / Terminal – Copy and paste into your terminal (macOS/Linux/WSL).

cURL
curl -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": "Luxor Las Vegas, Las Vegas, US",
    "checkinDate": "2026-02-15",
    "checkoutDate": "2026-02-17",
    "adults": 2,
    "currency": "USD"
  }'
πŸ’‘ Platform-specific notes:
  • Windows CMD: Replace single quotes with double quotes and escape inner quotes.
  • PowerShell: Use backtick ` for line continuation instead of backslash \.
  • Multi-line JSON: Keeping JSON on a single line avoids shell parsing issues.

πŸ“¦ Expected Response:

JSON Response (200 OK)
{
    "hotel_id": "700076955",
  "hotel_name": "Luxor",
  "hotel_address": "3900 Las Vegas Boulevard South",
  "city_name": "Las Vegas",
  "state_code": "NV",
  "country_code": "US",
  "postal_code": "89119",
  "latitude": "36.096806",
  "longitude": "-115.173001",
  "booking_page_live_rates": "https://www.businesshotels.com/reservation.php?hotel-id=...",
  "rates": {
    "display_all_in_total": "356.06",
    "currency": "USD",
    "price_info": "Price includes all tax and fees",
    "ppn_bundle": "HEA_OqStb8TUtNnSS-nry..."
  },
  "best_match_score": 0.87
}