{
  "ok": true,
  "service": "hotel-rates",
  "version": "2.3.0",
  "purpose": "Internal travel-agency quoting aid. All figures are indicative; confirm and book in the GDS (Sabre).",
  "discovery": "GET /capabilities for a machine-readable view of what's configured, plus the tool and endpoint map.",
  "endpoints": {
    "capabilities": "GET /capabilities  -> what's configured (providers, DB, authorized-code counts) + tool/endpoint map",
    "health": "GET /health  -> liveness",
    "mcp": "/mcp?token=...  -> MCP Streamable HTTP (tools: check_hotel_rates, validate_corp_code, compare_corp_rates, quote_hotels, resolve_property_code, list_authorized_codes, list_searches, set_search_watch, get_capabilities)",
    "rates": "GET|POST /rates  { chain, hotel|url, checkin?, checkout?, corp?, adults?, rooms?, kids? }  -> one property, with/without a code",
    "validate": "GET|POST /validate  { chain, corp }  -> is a code real (tested on sample conference hotels)",
    "quote": "POST /quote  { chain, hotels:[code|name|url,...], codes?:[...], checkIn?, checkOut? }  -> compare a shortlist of specific hotels across codes (live render)",
    "search": "POST /search  { chain, city, checkIn?, checkOut?, codes?:[...], maxPages?, maxCodes?, includePublic?, watch? }  -> city-wide comparison (dates & codes optional)",
    "searches": "GET|POST /searches  { chain?, watch?, limit? }  -> list stored comparisons",
    "searchGet": "GET /search/:id  -> a stored comparison",
    "searchHistory": "GET /search/:id/history  { propertyId? }  -> rate history across refreshes",
    "searchWatch": "POST /search/:id/watch  { watch }  -> toggle scheduled auto-refresh",
    "refresh": "POST /refresh/:id  -> re-run and store fresh rates",
    "resolveCode": "GET|POST /resolve-code  { chain, q|query, city? }  -> hotel name to property code (also /hyatt-code)",
    "codes": "GET|POST /codes  { chain?, find? }  -> authorized codes; find=CODE reverse-looks-up which brands hold it"
  },
  "chains": {
    "hyatt": "Hyatt spirit code (4-7 chars, e.g. bosrc)",
    "marriott": "Marriott MARSHA property code (5-7 chars, e.g. bosgp)",
    "hilton": "Hilton CTYHOCN code (exactly 7 chars, e.g. nycnhhh)",
    "ihg": "IHG hotel mnemonic (4-6 chars, e.g. bosms)"
  },
  "auth": "Append ?token=... or send Authorization: Bearer <token> on every endpoint except / and /health."
}