{"id":"bce9aeba-52b7-4490-af76-4c3c4c5630a6","entityType":"agent","slug":"clawhub-crawlora-org-travel-hotel-research","name":"travel-hotel-research","canonicalUrl":"https://www.xpersona.co/agent/clawhub-crawlora-org-travel-hotel-research","canonicalPath":"/agent/clawhub-crawlora-org-travel-hotel-research","generatedAt":"2026-10-11T11:27:07.687Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T08:58:42.133Z","emptyReason":null},"description":"Researches hotels, flights, attractions, short-term rentals, and live events via the Crawlora API — Booking.com, Expedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster — returning clean JSON. Use when the user wants to search or compare hotel/stay prices and reviews, look up flight options, find attractions/things-to-do or concerts/events, or research an Airbnb host or listing.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:travel-hotel-research","sourceUrl":"https://clawhub.ai/crawlora-org/travel-hotel-research","homepage":"https://clawhub.ai/crawlora-org/skills/travel-hotel-research","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/crawlora-org/travel-hotel-research","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/crawlora-org/skills/travel-hotel-research","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"travel-hotel-research technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T08:58:42.133Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T08:58:42.133Z","emptyReason":null},"stars":null,"forks":null,"downloads":1106,"packageName":null,"latestVersion":"1.0.19","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T08:58:41.984Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T08:58:42.133Z","lastCrawledAt":"2026-10-11T08:58:41.984Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T08:58:41.984Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.19","createdAt":"2026-10-05T01:26:51.468Z","changelog":"Sync skill instructions, references, and helper from GitHub 83bb98ef1362f25cecb5ddd4bc1ea0e564555d97","fileCount":5,"zipByteSize":16901},{"version":"1.0.18","createdAt":"2026-09-21T01:57:49.583Z","changelog":"Sync skill instructions, references, and helper from GitHub 0cfbceba40b050ba434a0a3f4945ca97b668c805","fileCount":5,"zipByteSize":17077},{"version":"1.0.17","createdAt":"2026-09-17T10:21:11.197Z","changelog":"Security hardening: generated helpers now enforce exact routes, methods, and credential-safe curl behavior.","fileCount":5,"zipByteSize":17062},{"version":"1.0.16","createdAt":"2026-09-14T02:17:36.863Z","changelog":"Sync skill instructions, references, and helper from GitHub 902f58316c643ffbcabc57fc6f15f59d27ec063d","fileCount":5,"zipByteSize":16436},{"version":"1.0.15","createdAt":"2026-09-10T12:37:35.605Z","changelog":"Validate API keys before curl config","fileCount":5,"zipByteSize":16173},{"version":"1.0.14","createdAt":"2026-09-10T12:17:56.920Z","changelog":"Keep API keys out of process arguments","fileCount":5,"zipByteSize":16150},{"version":"1.0.13","createdAt":"2026-09-10T12:08:44.275Z","changelog":"Reject curl local-file query syntax","fileCount":5,"zipByteSize":15771},{"version":"1.0.12","createdAt":"2026-09-10T11:56:28.031Z","changelog":"Stream helper request bodies through curl stdin","fileCount":5,"zipByteSize":15820}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:travel-hotel-research","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:travel-hotel-research` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/crawlora-org/travel-hotel-research before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-travel-hotel-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-travel-hotel-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-travel-hotel-research/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-travel-hotel-research/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-travel-hotel-research/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-travel-hotel-research/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T11:27:07.680Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-travel-hotel-research/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-travel-hotel-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-travel-hotel-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-travel-hotel-research/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T08:58:42.133Z","emptyReason":null},"readme":"Skill: travel-hotel-research\n\nOwner: crawlora-org\n\nSummary: Researches hotels, flights, attractions, short-term rentals, and live events via the Crawlora API — Booking.com, Expedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster — returning clean JSON. Use when the user wants to search or compare hotel/stay prices and reviews, look up flight options, find attractions/things-to-do or concerts/events, or research an Airbnb host or listing.\n\nTags: latest:1.0.19\n\nVersion history:\n\nv1.0.19 | 2026-10-05T01:26:51.468Z | user\n\nSync skill instructions, references, and helper from GitHub 83bb98ef1362f25cecb5ddd4bc1ea0e564555d97\n\nv1.0.18 | 2026-09-21T01:57:49.583Z | user\n\nSync skill instructions, references, and helper from GitHub 0cfbceba40b050ba434a0a3f4945ca97b668c805\n\nv1.0.17 | 2026-09-17T10:21:11.197Z | user\n\nSecurity hardening: generated helpers now enforce exact routes, methods, and credential-safe curl behavior.\n\nv1.0.16 | 2026-09-14T02:17:36.863Z | user\n\nSync skill instructions, references, and helper from GitHub 902f58316c643ffbcabc57fc6f15f59d27ec063d\n\nv1.0.15 | 2026-09-10T12:37:35.605Z | user\n\nValidate API keys before curl config\n\nv1.0.14 | 2026-09-10T12:17:56.920Z | user\n\nKeep API keys out of process arguments\n\nv1.0.13 | 2026-09-10T12:08:44.275Z | user\n\nReject curl local-file query syntax\n\nv1.0.12 | 2026-09-10T11:56:28.031Z | user\n\nStream helper request bodies through curl stdin\n\nv1.0.11 | 2026-09-10T11:44:20.621Z | user\n\nScope helper routes and remove secret-shaped key examples\n\nv1.0.10 | 2026-09-10T07:15:19.835Z | user\n\nMigrate publisher from tonywangcn to crawlora-org for brand consistency with the plugins\n\nv1.0.9 | 2026-09-08T04:37:48.412Z | user\n\nRefresh stale REST examples, endpoint references, and Bash helper from crawlora-skills 1.17.1.\n\nv1.0.8 | 2026-09-07T13:31:02.664Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.7 | 2026-09-07T08:15:23.559Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.6 | 2026-09-07T06:39:14.714Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.5 | 2026-08-24T07:16:50.418Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.4 | 2026-08-24T06:29:02.553Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.3 | 2026-08-24T05:11:12.111Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.2 | 2026-08-14T18:28:24.983Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.1 | 2026-08-10T18:34:31.271Z | user\n\nSet categories\n\nv1.0.0 | 2026-08-10T18:05:50.049Z | auto\n\n- Initial release of the travel-hotel-research skill.\n- Search and compare hotels, flights, attractions, short-term rentals, and live events across Booking.com, Expedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster using the Crawlora API.\n- Returns clean, normalized JSON results—no page scraping needed.\n- Supports price comparison, reviews lookup, flight search, attraction/event discovery, and Airbnb listing/host research.\n- Includes setup instructions for the Crawlora API key and usage examples for each supported travel platform.\n\nArchive index:\n\nArchive v1.0.19: 5 files, 16901 bytes\n\nFiles: reference/endpoints.md (41319b), scripts/crawlora.sh (10720b), skill-card.md (1762b), SKILL.md (6378b), _meta.json (141b)\n\nFile v1.0.19:SKILL.md\n\n---\nname: travel-hotel-research\ndescription: Researches hotels, flights, attractions, short-term rentals, and live events via the Crawlora API — Booking.com, Expedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster — returning clean JSON. Use when the user wants to search or compare hotel/stay prices and reviews, look up flight options, find attractions/things-to-do or concerts/events, or research an Airbnb host or listing.\n---\n\n# Travel & hotel research\n\nSearch and compare hotels, flights, attractions, short-term rentals, and\nlive events across seven travel platforms as normalized JSON from the\nCrawlora API — no scraping OTA search-result pages.\n\n## When to use this skill\n\n- \"Find hotels in <city> for <dates>\" / compare prices across OTAs.\n- \"What are the reviews like for this hotel/attraction?\"\n- \"Search flights from <origin> to <destination>.\"\n- \"What's there to do in <city>?\" (attractions/tours, or concerts/events).\n- \"Look up this Airbnb host/listing\" (reviews, calendar, other listings).\n- \"Find tickets/events for <artist> in <city>\" (Ticketmaster).\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Hotels** — `/booking/search` (params `query`, `checkin`, `checkout`),\n   `/agoda/hotels/search`, `/tripcom/hotels/search` (GET, by city) or\n   `POST /expedia/properties/search` (Expedia's Stays API is POST-only —\n   its exact request-body field names are undocumented, see below); detail\n   via `/booking/hotel-detail`, `/agoda/hotels/{property_id}`,\n   `POST /expedia/properties/detail`; reviews via `/booking/reviews`,\n   `POST /expedia/properties/reviews`.\n2. **Flights** — `/agoda/flights/search` (GET) and `POST /expedia/flights/search`\n   / `/booking-flights/search`; use each platform's `.../autocomplete` or\n   `.../search-locations` endpoint first to resolve city/airport codes.\n3. **Attractions & things-to-do** — `/booking-attractions/search`,\n   `POST /expedia/activities/search`, `/agoda/activities/search`,\n   `/tripadvisor/search` (hotels, restaurants, and attractions all in one).\n4. **TripAdvisor** — `/tripadvisor/autocomplete` to resolve a place, then\n   `/tripadvisor/place` for the profile and `/tripadvisor/reviews` for guest\n   reviews (works for hotels, restaurants, and attractions).\n5. **Airbnb** — `/airbnb/search` to find stays; `/airbnb/room/{id}` for a\n   listing (+ `/calendar`, `/reviews`); `/airbnb/host/{id}` for the host\n   profile (+ `/listings`, `/reviews`).\n6. **Ticketmaster** — `/ticketmaster/search-events` (`q`) or\n   `/ticketmaster/discover-city-events` (`city`) to find events;\n   `/ticketmaster/event` for detail, `/ticketmaster/venue` (+ `/venue-events`)\n   for a venue, `/ticketmaster/attraction` (+ `/attraction-events`) for a\n   performer/team's full schedule.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Hotel search (GET):\nscripts/crawlora.sh /booking/search query=\"Lisbon\" checkin=2026-09-10 checkout=2026-09-14 | jq '.'\nscripts/crawlora.sh /agoda/hotels/search city=\"Lisbon\" | jq '.'\n\n# Expedia (POST — exact body field names are unconfirmed, see Notes below):\nscripts/crawlora.sh -X POST /expedia/properties/search '{\"destination\":\"Lisbon\",\"checkIn\":\"2026-09-10\",\"checkOut\":\"2026-09-14\"}' | jq '.'\n\n# Airbnb:\nscripts/crawlora.sh /airbnb/search location=\"Lisbon\" | jq '.'\nscripts/crawlora.sh /airbnb/room/12345678 | jq '.'\n\n# Ticketmaster:\nscripts/crawlora.sh /ticketmaster/search-events q=\"Coldplay\" | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every Booking,\nExpedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster endpoint\nthis skill uses.\n\n## Examples\n\n- **Cross-OTA price compare:** search the same destination/dates on\n  `/booking/search`, `/agoda/hotels/search`, and `POST /expedia/properties/search`,\n  then diff nightly rates for comparable hotels.\n- **Stay vs. hotel:** `/airbnb/search` against `/booking/search` for the\n  same city to compare short-term-rental vs. hotel pricing.\n- **Trip planning:** `/tripadvisor/search` for attractions in a city, then\n  `/tripadvisor/reviews` on the top few to check recent visitor sentiment.\n- **Host due diligence:** `/airbnb/host/{id}` + `/airbnb/host/{id}/reviews`\n  before booking, or `/airbnb/host/{id}/listings` to see their full portfolio.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public search/listing/review pages; no booking or\n  payment actions are performed.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **Expedia and some Agoda endpoints are `POST` with a JSON body** — remember\n  `-X POST` when calling `scripts/crawlora.sh`. Most Booking/Agoda/Trip.com/\n  Airbnb/TripAdvisor endpoints are plain `GET` with query params.\n- **Expedia's exact request-body field names are unconfirmed** — the tool\n  schema only exposes an opaque `option` object (destination, dates,\n  occupancy, filters expected inside), and live-testing ruled out both a\n  `{\"option\": {...}}` wrapper and several plausible flat field-name guesses\n  (`checkInDate`/`checkOutDate`, `checkIn`/`checkOut`). Confirm the current\n  shape at [crawlora.net/docs](https://crawlora.net/docs?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  or the [playground](https://crawlora.net/playground?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  before relying on the Expedia endpoints — every other endpoint in this\n  skill is live-verified, Expedia's POST body shape is the one exception.\n- Location/city ids are platform-specific — always resolve with the\n  platform's own autocomplete/locations-search endpoint first.\n\nFile v1.0.19:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"travel-hotel-research\",\n  \"version\": \"1.0.19\",\n  \"publishedAt\": 1791163611468\n}\n\nFile v1.0.19:reference/endpoints.md\n\n# travel-hotel-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**71 endpoints across 10 platform group(s).**\n\n## Booking (8)\n\n### `booking_attractions_detail`\n\n- **HTTP:** `GET /booking-attractions/detail`\n- **What:** Booking.com attraction detail. Returns a Booking.com attraction's detail page.\n- **Params:** `slug` (string, **required**) — Attraction slug, from a prior attraction search result\n\n### `booking_attractions_reviews`\n\n- **HTTP:** `GET /booking-attractions/reviews`\n- **What:** Booking.com attraction reviews. Returns normalized guest reviews for a Booking.com attraction.\n- **Params:** `limit` (integer, optional) — Reviews per page, 1-50, default 10; `page` (integer, optional) — 1-based result page, default 1; `product_id` (string, **required**) — Attraction product id, from a prior attraction search result\n\n### `booking_attractions_search`\n\n- **HTTP:** `GET /booking-attractions/search`\n- **What:** Search Booking.com attractions. Returns normalized Booking.com attractions/things-to-do search results for a destination and date range, with an optional category/subcategory filter and a discoverable category taxonomy.\n- **Params:** `category` (string, optional) — Optional top-level category tagname filter, from a prior response's categories; `end_date` (string, optional) — Availability end date, YYYY-MM-DD, defaults to start_date; `limit` (integer, optional) — Results per page, 1-30, default 15; `page` (integer, optional) — 1-based result page, default 1; `query` (string, **required**) — Destination name or city; `start_date` (string, **required**) — Availability start date, YYYY-MM-DD; `subcategory` (string, optional) — Optional subcategory tagname filter, from a prior response's categories\n\n### `booking_flights_autocomplete`\n\n- **HTTP:** `GET /booking-flights/autocomplete`\n- **What:** Booking.com flight autocomplete. Returns Booking.com flight-search location suggestions (airports/cities) for a query string.\n- **Params:** `origin` (string, optional) — Optional origin location code, biases results by proximity; `origin_type` (string, optional) — Origin location type; `query` (string, **required**) — City or airport name/code to search; `type` (string, optional) — Location role, default to\n\n### `booking_flights_search`\n\n- **HTTP:** `GET /booking-flights/search`\n- **What:** Search Booking.com flights. Returns normalized round-trip or one-way flight offers between two Booking.com flight-search locations.\n- **Params:** `adults` (integer, optional) — Number of adults, 1-9, default 1; `cabin_class` (string, optional) — Cabin class, default ECONOMY; `children` (integer, optional) — Number of children, 0-9; `depart` (string, **required**) — Departure date, YYYY-MM-DD; `from` (string, **required**) — Origin location id, e.g. SGN.AIRPORT, from a prior autocomplete result; `from_country` (string, optional) — Origin country code; `return` (string, optional) — Return date, YYYY-MM-DD, required when type is ROUNDTRIP; `sort` (string, optional) — Result sort order, default BEST; `to` (string, **required**) — Destination location id, same composite format as from; `to_country` (string, optional) — Destination country code; `type` (string, optional) — Trip type, default ROUNDTRIP\n\n### `booking_hotel_detail`\n\n- **HTTP:** `GET /booking/hotel-detail`\n- **What:** Booking.com hotel detail. Returns a Booking.com hotel's core detail page: rating, facilities, highlights, house rules, cover photos, and rooms with their own photos.\n- **Params:** `hotel_id` (integer, **required**) — Booking.com hotel id, from a prior search's property id\n\n### `booking_reviews`\n\n- **HTTP:** `GET /booking/reviews`\n- **What:** Booking.com hotel reviews. Returns normalized guest reviews for a Booking.com hotel, with an optional free-text search over review content.\n- **Params:** `destination_id` (integer, optional) — Destination id (ufi), from a prior search response; `hotel_country_code` (string, **required**) — Hotel's country code, from a prior search response; `hotel_id` (integer, **required**) — Booking.com hotel id, from a prior search's property id; `hotel_score` (number, optional) — Hotel's overall review score; `limit` (integer, optional) — Reviews per page, 1-25, default 10; `page` (integer, optional) — 1-based result page, default 1; `search_text` (string, optional) — Optional free-text search over review content\n\n### `booking_search`\n\n- **HTTP:** `GET /booking/search`\n- **What:** Search Booking.com hotels. Returns normalized Booking.com hotel search results for a destination and date range.\n- **Params:** `adults` (integer, optional) — Number of adults, 1-9, default 2; `checkin` (string, **required**) — Check-in date, YYYY-MM-DD; `checkout` (string, **required**) — Check-out date, YYYY-MM-DD; `children` (integer, optional) — Number of children, 0-9; `page` (integer, optional) — 1-based result page, default 1; `query` (string, **required**) — Destination name or city; `rooms` (integer, optional) — Number of rooms, 1-8, default 1\n\n## Expedia (7)\n\n### `expedia_activities_search`\n\n- **HTTP:** `POST /expedia/activities/search`\n- **What:** Search Expedia activities. Returns normalized Expedia Things To Do (activities/tours) search results for a free-text destination and date range.\n- **Params:** `option` (object, **required**) — Activity search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_flights_search`\n\n- **HTTP:** `POST /expedia/flights/search`\n- **What:** Search Expedia flights. Returns normalized Expedia Flights search results (departing-leg offers) for an origin/destination IATA pair and date range.\n- **Params:** `option` (object, **required**) — Flights search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_locations_search`\n\n- **HTTP:** `POST /expedia/locations/search`\n- **What:** Search Expedia destinations. Returns normalized destination/property typeahead suggestions (cities, airports, neighborhoods, hotels) for a free-text term.\n- **Params:** `option` (object, **required**) — Location search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_detail`\n\n- **HTTP:** `POST /expedia/properties/detail`\n- **What:** Expedia Stays property detail. Returns a hotel's detail summary (name, star rating, address/coordinates, top amenities) for a known property id.\n- **Params:** `option` (object, **required**) — Property detail payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_filters`\n\n- **HTTP:** `POST /expedia/properties/filters`\n- **What:** Expedia search filters. Returns the sort and filter facets (amenities, star rating, neighborhood, nightly price range, sort options) available for a Stays search.\n- **Params:** `option` (object, **required**) — Property filters payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_reviews`\n\n- **HTTP:** `POST /expedia/properties/reviews`\n- **What:** Expedia Stays property guest reviews. Returns a hotel's overall rating and highlighted/recent guest reviews (reviewer, date, rating, message) for a known property id.\n- **Params:** `option` (object, **required**) — Property reviews payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_search`\n\n- **HTTP:** `POST /expedia/properties/search`\n- **What:** Search Expedia Stays properties. Returns normalized Expedia Stays (hotel) search results for a free-text destination and date range. Promotional banners and sponsored ad slots are dropped, so every returned property has an id and name.\n- **Params:** `option` (object, **required**) — Property search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n## Agoda (8)\n\n### `agoda_activities_search`\n\n- **HTTP:** `GET /agoda/activities/search`\n- **What:** Search Agoda activities. Returns Agoda activities (tours, attractions, experiences) matching a free-text keyword and/or a city. When keyword is omitted, the resolved city's name is used instead to return a general listing of activities in that city. Callers may supply a known Agoda city id or a free-text city name for the city filter; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own destination search.\n- **Params:** `city` (string, optional) — Free-text city name, used directly as the search text when keyword is omitted, and to resolve a city id filter.; `city_id` (integer, optional) — Numeric Agoda city id to filter results to. Optional if keyword is supplied; city_id takes precedence over city when both are supplied.; `keyword` (string, optional) — Free-text activity search keyword. When omitted, the resolved city's name is used instead.\n\n### `agoda_activity_detail`\n\n- **HTTP:** `GET /agoda/activities/{activity_id}`\n- **What:** Get Agoda activity detail. Returns full activity detail from Agoda: title, description, stated duration, categories, and content images. Credential-free public data from Agoda's own activity content source.\n- **Params:** `activity_id` (string, **required**) — Numeric Agoda activity id, from a prior activities search call's activity_id field\n\n### `agoda_flights_itinerary_amenities`\n\n- **HTTP:** `POST /agoda/flights/itinerary-amenities`\n- **What:** Get Agoda flight segment amenities. Returns real-content amenities (aircraft type, seat layout, meals, entertainment, wifi) for one or more flight segments. Copy the segments straight from a flight search response's own segment fields. Credential-free public data from Agoda's own flight content service.\n- **Params:** `body` (object, **required**) — One or more flight segments to fetch amenities for\n- **REST body:** Send the value of the MCP argument `body` directly as the JSON body; do not wrap it in a `body` property.\n\n### `agoda_flights_search`\n\n- **HTTP:** `GET /agoda/flights/search`\n- **What:** Search Agoda one-way flights. Returns bookable one-way flight itineraries between two IATA airport codes for a departure date, including per-segment flight number, airline, times, layovers, aircraft type, and price. Resolve free-text city/airport names to codes first via the flight destination search endpoint. Credential-free public data from Agoda's own flight search.\n- **Params:** `adults` (integer, optional) — Adult passengers (age 12+), defaults to 1; `cabin_class` (string, optional) — Cabin class, defaults to Economy; `children` (integer, optional) — Child passengers (age 2-11), defaults to 0; `departure_date` (string, **required**) — Departure date, YYYY-MM-DD; `destination` (string, **required**) — Destination IATA airport code; `infants` (integer, optional) — Infant passengers (under age 2), defaults to 0; `origin` (string, **required**) — Origin IATA airport code; `page` (integer, optional) — 1-indexed result page, defaults to 1\n\n### `agoda_flights_search_locations`\n\n- **HTTP:** `GET /agoda/flights/search-locations`\n- **What:** Search Agoda flight destinations/airports. Resolves a free-text city or airport name into IATA airport codes for flight search, with each city's direct and nearby airports. Credential-free public data from Agoda's own flight destination search.\n- **Params:** `keyword` (string, **required**) — Free-text city or airport name\n\n### `agoda_homes_search`\n\n- **HTTP:** `GET /agoda/homes/search`\n- **What:** Search Agoda Homes & Apartments by city. Returns Homes & Apartments results for an Agoda city: full listing detail for every matching property whose accommodation type is Apartment, drawn from the same city search as hotel search and filtered to non-hotel accommodation types. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own hotel/home search.\n- **Params:** `city` (string, optional) — Free-text city name, resolved to a numeric city id via Agoda's own destination search. Ignored when city_id is also supplied.; `city_id` (integer, optional) — Numeric Agoda city id, e.g. 9395 for Bangkok. Either city_id or city is required; city_id takes precedence when both are supplied.; `limit` (integer, optional) — Candidate listings fetched per page before filtering to homes/apartments, defaults to 10, maximum 50; `page` (integer, optional) — 1-indexed result page over the underlying city search, defaults to 1\n\n### `agoda_hotel_detail`\n\n- **HTTP:** `GET /agoda/hotels/{property_id}`\n- **What:** Get Agoda hotel detail. Returns full hotel detail from Agoda: identity (name, any former name), an accommodation type code, address (street address, postal code, city, country), guest rating, a main photo, room count, hotel chain id, a long and short description, and short-form policy statements (minimum age, adult/child definitions, extra-bed and additional-room booking policy). Credential-free public data from Agoda's own hotel content source.\n- **Params:** `property_id` (string, **required**) — Numeric Agoda property id, from a prior search call's property_id field or the id embedded in an Agoda hotel URL\n\n### `agoda_hotels_search`\n\n- **HTTP:** `GET /agoda/hotels/search`\n- **What:** Search Agoda hotels by city. Returns hotel search results for an Agoda city: the matching property ids for that city plus a direct link to each property's listing page. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own hotel search.\n- **Params:** `city` (string, optional) — Free-text city name, resolved to a numeric city id via Agoda's own destination search. Ignored when city_id is also supplied.; `city_id` (integer, optional) — Numeric Agoda city id, e.g. 9395 for Bangkok. Either city_id or city is required; city_id takes precedence when both are supplied.; `limit` (integer, optional) — Results per page, defaults to 10, maximum 50; `page` (integer, optional) — 1-indexed result page, defaults to 1\n\n## TripAdvisor (6)\n\n### `tripadvisor_autocomplete`\n\n- **HTTP:** `GET /tripadvisor/autocomplete`\n- **What:** Autocomplete TripAdvisor locations and places. Returns normalized TripAdvisor public typeahead candidates from the credential-free GraphQL endpoint.\n- **Params:** `limit` (integer, optional) — Maximum results; `locale` (string, optional) — TripAdvisor locale; `q` (string, **required**) — Autocomplete query; `route_uid` (string, optional) — Optional captured route uid; `scope_geo_id` (integer, optional) — Optional scoped geo id; `search_session_id` (string, optional) — Optional captured search session id; `type` (string, optional) — Optional result type hint; `typeahead_id` (string, optional) — Optional captured typeahead id\n\n### `tripadvisor_enums`\n\n- **HTTP:** `GET /tripadvisor/enums`\n- **What:** Get TripAdvisor enum metadata. Returns supported TripAdvisor enum values for place/listing filters, including locales, currencies, languages, listing types, filters, amenities, and category ids.\n- **Params:** _none_\n\n### `tripadvisor_hotels`\n\n- **HTTP:** `GET /tripadvisor/hotels`\n- **What:** Search TripAdvisor hotels. Returns normalized TripAdvisor hotel listing results from public credential-free GraphQL listing data.\n- **Params:** `amenities` (array, optional) — Amenity filter ids; `class` (integer, optional) — Hotel class filter; `currency` (string, optional) — Currency code; `filter_id` (string, optional) — Optional filter id such as class or ufe; `geo_id` (integer, **required**) — TripAdvisor geo id; `limit` (integer, optional) — Maximum results; `offset` (integer, optional) — Zero-based result offset; `price_max` (integer, optional) — Maximum price filter; `price_min` (integer, optional) — Minimum price filter; `pricing_mode` (string, optional) — Pricing mode; `sort` (string, optional) — Sort value; `travelers_choice` (boolean, optional) — Filter Travelers' Choice properties; `travelers_choice_botb` (boolean, optional) — Filter Best of the Best properties\n\n### `tripadvisor_place`\n\n- **HTTP:** `GET /tripadvisor/place`\n- **What:** Get TripAdvisor place. Returns a rich normalized TripAdvisor place profile. Destination and bookable tour/experience pages resolve through a faster dedicated lookup; everything else comes from public place HTML, using configured browser fallbacks when direct HTML is blocked.\n- **Params:** `id` (string, optional) — TripAdvisor location id fallback; `url` (string, optional) — TripAdvisor place URL\n\n### `tripadvisor_reviews`\n\n- **HTTP:** `GET /tripadvisor/reviews`\n- **What:** Get TripAdvisor reviews. Returns normalized TripAdvisor public reviews from credential-free GraphQL review data. Pass either id or url.\n- **Params:** `do_machine_translation` (boolean, optional) — Enable upstream machine translation; `id` (string, optional) — TripAdvisor location id; `language` (string, optional) — Review language; `limit` (integer, optional) — Maximum reviews; `page` (integer, optional) — 1-based review page; `photos_per_review_limit` (integer, optional) — Maximum photos per review; `ratings` (array, optional) — Rating filters; `sort_by` (string, optional) — Legacy sort field; DATE selects newest first, FAVORABLE_RATING uses upstream order; `sort_type` (string, optional) — Legacy sort type; DEFAULT selects newest first, ML_SORTED uses upstream order unless sort_by is DATE; `url` (string, optional) — TripAdvisor place URL\n\n### `tripadvisor_search`\n\n- **HTTP:** `GET /tripadvisor/search`\n- **What:** Search TripAdvisor places. Returns normalized TripAdvisor place listings for hotels, restaurants, attractions, and supported attraction category types.\n- **Params:** `amenities` (array, optional) — Hotel amenity filter ids; `class` (integer, optional) — Hotel class filter; `currency` (string, optional) — Currency code; `establishment_types` (array, optional) — Restaurant establishment type ids; `filter_id` (string, optional) — Optional hotel filter id; `geo_id` (integer, **required**) — TripAdvisor geo id; `limit` (integer, optional) — Maximum results; `locale` (string, optional) — TripAdvisor locale; `offset` (integer, optional) — Zero-based result offset; `online_options` (array, optional) — Restaurant online option ids; `price_max` (integer, optional) — Maximum hotel price filter; `price_min` (integer, optional) — Minimum hotel price filter; `pricing_mode` (string, optional) — Hotel pricing mode; `restaurant_date` (string, optional) — Restaurant availability date; `restaurant_guests` (integer, optional) — Restaurant guest count; `restaurant_time` (string, optional) — Restaurant availability time; `sort` (string, optional) — Sort value; `travelers_choice` (boolean, optional) — Filter Travelers' Choice hotels; `travelers_choice_botb` (boolean, optional) — Filter Best of the Best hotels; `type` (string, **required**) — Listing type\n\n## Trip.com (2)\n\n### `tripcom_hotel_detail`\n\n- **HTTP:** `GET /tripcom/hotels/{id}`\n- **What:** Get Trip.com hotel detail. Returns a normalized Trip.com hotel-detail page: identity (name, local name, star rating, city/province/country), location (address, zone, latitude/longitude, nearby-transport description), guest rating (overall score plus cleanliness/amenities/location/service breakdown), images, description, check-in/check-out and child policy summaries, and popular facilities. Credential-free public data sourced from Trip.com's own server-rendered hotel-detail page. Pricing is not included: Trip.com's detail page only returns per-night rates alongside check-in/check-out dates, which this endpoint does not take as input -- use the search endpoint for a city's current display prices.\n- **Params:** `id` (string, **required**) — Trip.com hotel id, from a prior search call's hotel_id field; `slug` (string, optional) — Optional slug segment for a nicer canonical source URL (e.g. the district/city slug from a search result's url). Not required and not validated by Trip.com.\n\n### `tripcom_hotels_search`\n\n- **HTTP:** `GET /tripcom/hotels/search`\n- **What:** Search Trip.com hotels by city. Returns Trip.com's own top-hotels page for a city: normalized hotel summaries (name, location, star rating, guest rating, review count, image, display price) for the hotels Trip.com features on that city's hotel-list page. Trip.com does not expose a credential-free free-text city search, so callers supply the exact city_slug and city_id pair from a known Trip.com hotel-list URL of the form https://www.trip.com/hotels/{city_slug}-hotels-list-{city_id}/. Credential-free public data sourced from Trip.com's own server-rendered hotel-list page.\n- **Params:** `city_id` (string, **required**) — Trip.com numeric city id, the trailing number of a /hotels/{city_slug}-hotels-list-{city_id}/ URL; `city_slug` (string, **required**) — Trip.com city slug, the text segment of a /hotels/{city_slug}-hotels-list-{city_id}/ URL\n\n## Airbnb (7)\n\n### `airbnb_host`\n\n- **HTTP:** `GET /airbnb/host/{id}`\n- **What:** Get Airbnb host profile. Returns a normalized Airbnb public host profile — display name, Superhost and identity-verification status, location, bio, hosting tenure, total guest-review count, and total listing count.\n- **Params:** `id` (string, **required**) — Host id (numeric)\n\n### `airbnb_host_listings`\n\n- **HTTP:** `GET /airbnb/host/{id}/listings`\n- **What:** Get Airbnb host listings. Returns the listings an Airbnb host manages, paginated. Page 1 comes from the host profile; deeper pages page through the host's full portfolio.\n- **Params:** `id` (string, **required**) — Host id (numeric); `page` (integer, optional) — 1-based page\n\n### `airbnb_host_reviews`\n\n- **HTTP:** `GET /airbnb/host/{id}/reviews`\n- **What:** Get Airbnb host reviews. Returns reviews guests left for an Airbnb host, paginated, including the reviewer name and location.\n- **Params:** `id` (string, **required**) — Host id (numeric); `page` (integer, optional) — 1-based page\n\n### `airbnb_room`\n\n- **HTTP:** `GET /airbnb/room/{id}`\n- **What:** Get Airbnb room. Returns normalized Airbnb public room details.\n- **Params:** `id` (string, **required**) — Room id\n\n### `airbnb_room_calendar`\n\n- **HTTP:** `GET /airbnb/room/{id}/calendar`\n- **What:** Get Airbnb room calendar. Returns public calendar month hints parsed from Airbnb room bootstrap data.\n- **Params:** `id` (string, **required**) — Room id\n\n### `airbnb_room_reviews`\n\n- **HTTP:** `GET /airbnb/room/{id}/reviews`\n- **What:** Get Airbnb room reviews. Returns normalized Airbnb public review snippets.\n- **Params:** `id` (string, **required**) — Room id; `page` (integer, optional) — 1-based page\n\n### `airbnb_search`\n\n- **HTTP:** `GET /airbnb/search`\n- **What:** Search Airbnb stays. Returns normalized Airbnb public web search results.\n- **Params:** `adults` (integer, optional) — Adult guests; `check_in` (string, optional) — Check-in date; `check_out` (string, optional) — Check-out date; `currency` (string, optional) — Currency for bounded map search; `location` (string, **required**) — Location; `ne_lat` (number, optional) — Northeast latitude for bounded map search; `ne_lng` (number, optional) — Northeast longitude for bounded map search; `page` (integer, optional) — 1-based page; `sw_lat` (number, optional) — Southwest latitude for bounded map search; `sw_lng` (number, optional) — Southwest longitude for bounded map search; `zoom` (integer, optional) — Map zoom for bounded map search\n\n## Ticketmaster (15)\n\n### `ticketmaster_attraction`\n\n- **HTTP:** `GET /ticketmaster/attraction`\n- **What:** Get a Ticketmaster attraction. Returns normalized details for one Ticketmaster artist, team, or other attraction.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id\n\n### `ticketmaster_attraction_events`\n\n- **HTTP:** `GET /ticketmaster/attraction-events`\n- **What:** List an attraction's Ticketmaster events. Returns upcoming Ticketmaster events for one attraction. The sort enum accepts `relevance` and `date`.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id; `page` (integer, optional) — Zero-based page (0-49); `sort` (string, optional) — Result order\n\n### `ticketmaster_attraction_related`\n\n- **HTTP:** `GET /ticketmaster/attraction-related`\n- **What:** List a Ticketmaster attraction's related attractions. Returns the \"Fans Also Viewed\" attractions shown on one attraction's own page. An attraction with no recommendation data returns a valid empty list.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id\n\n### `ticketmaster_attraction_reviews`\n\n- **HTTP:** `GET /ticketmaster/attraction-reviews`\n- **What:** List a Ticketmaster attraction's fan reviews. Returns paginated fan reviews for one attraction, including its aggregate rating and Ticketmaster's own AI-generated review summary.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id; `limit` (integer, optional) — Reviews per page (10-50); `offset` (integer, optional) — Result offset (0-9995)\n\n### `ticketmaster_discover_categories`\n\n- **HTTP:** `GET /ticketmaster/discover-categories`\n- **What:** List Ticketmaster discover categories. Lists every current Concerts, Sports, Arts & Theater, and Family category with pagination. Section accepts `all`, `concerts`, `sports`, `arts-theater`, and `family`.\n- **Params:** `page` (integer, optional) — One-based page; `per_page` (integer, optional) — Categories per page; `section` (string, optional) — Discover section\n\n### `ticketmaster_discover_category_events`\n\n- **HTTP:** `GET /ticketmaster/discover-category-events`\n- **What:** List events in a Ticketmaster discover category. Returns a zero-based paginated event feed for any category returned by ticketmaster-discover-categories.\n- **Params:** `category_id` (string, **required**) — Ticketmaster discover category id; `page` (integer, optional) — Zero-based page\n\n### `ticketmaster_discover_cities`\n\n- **HTTP:** `GET /ticketmaster/discover-cities`\n- **What:** List Ticketmaster discover cities. Lists Ticketmaster city discovery destinations for a country with pagination.\n- **Params:** `country` (string, optional) — Two-letter country code; `page` (integer, optional) — One-based page; `per_page` (integer, optional) — Cities per page\n\n### `ticketmaster_discover_city_events`\n\n- **HTTP:** `GET /ticketmaster/discover-city-events`\n- **What:** List events in a Ticketmaster discover city. Returns a zero-based paginated event feed for a city slug returned by ticketmaster-discover-cities.\n- **Params:** `city` (string, **required**) — Ticketmaster discover city slug; `country` (string, optional) — Two-letter country code matching the selected city; `page` (integer, optional) — Zero-based page\n\n### `ticketmaster_event`\n\n- **HTTP:** `GET /ticketmaster/event`\n- **What:** Get a Ticketmaster event. Returns normalized details for one Ticketmaster event, including its venue, attractions, timing, availability flags, and classification.\n- **Params:** `id` (string, **required**) — Ticketmaster event id\n\n### `ticketmaster_search_events`\n\n- **HTTP:** `GET /ticketmaster/search-events`\n- **What:** Search Ticketmaster events. Searches Ticketmaster events by artist, event, team, or venue. A zero total with an empty events list is a valid no-results response. The sort enum accepts `relevance` and `date`.\n- **Params:** `page` (integer, optional) — Zero-based page (0-49); `q` (string, **required**) — Artist, event, team, or venue query; `sort` (string, optional) — Result order\n\n### `ticketmaster_suggest`\n\n- **HTTP:** `GET /ticketmaster/suggest`\n- **What:** Suggest Ticketmaster artists, events, and venues. Returns autocomplete suggestions for a partial query.\n- **Params:** `q` (string, **required**) — Partial artist, event, team, or venue query\n\n### `ticketmaster_trending_attractions`\n\n- **HTTP:** `GET /ticketmaster/trending-attractions`\n- **What:** List trending Ticketmaster attractions. Returns a ranked list of currently-trending attractions across every segment (music, sports, arts and theater, family), not scoped to one category or city.\n- **Params:** _none_\n\n### `ticketmaster_venue`\n\n- **HTTP:** `GET /ticketmaster/venue`\n- **What:** Get a Ticketmaster venue. Returns normalized details and visitor information for one Ticketmaster venue.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster venue id\n\n### `ticketmaster_venue_enhanced_details`\n\n- **HTTP:** `GET /ticketmaster/venue-enhanced-details`\n- **What:** Get a Ticketmaster venue's enhanced branding details. Returns header branding imagery and external links (the venue's own site, resident teams) for major venues. Smaller venues without enhanced content return 404.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster venue id\n\n### `ticketmaster_venue_events`\n\n- **HTTP:** `GET /ticketmaster/venue-events`\n- **What:** List a venue's Ticketmaster events. Returns upcoming Ticketmaster events at one venue. The sort enum accepts `relevance` and `date`.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster venue id; `page` (integer, optional) — Zero-based page (0-49); `sort` (string, optional) — Result order\n\n## TicketWeb (3)\n\n### `ticketweb_event`\n\n- **HTTP:** `GET /ticketweb/event`\n- **What:** Get a TicketWeb event. Returns normalized details for one TicketWeb event: venue, dates, age restriction, delivery methods, and per-tier ticket pricing (base price, fee breakdown, and total) when tickets are on sale. `has_tickets` is false and `sections` is empty for a free/RSVP event with no paid tickets, a sold-out event, or an access-code-gated event -- TicketWeb's own data does not reliably distinguish these three cases at this level, so the response reports the shared observable state (no purchasable sections) rather than guessing which applies.\n- **Params:** `id` (string, **required**) — Numeric TicketWeb event id\n\n### `ticketweb_search`\n\n- **HTTP:** `GET /ticketweb/search`\n- **What:** Search TicketWeb events. Searches TicketWeb events by artist, event, or venue. A zero count with an empty events list is a valid no-results response. availability is one of `in_stock`, `sold_out`, `unknown` per event.\n- **Params:** `page` (integer, optional) — One-based result page, 1-50; `q` (string, **required**) — Artist, event, or venue query\n\n### `ticketweb_venue`\n\n- **HTTP:** `GET /ticketweb/venue`\n- **What:** Get a TicketWeb venue. Returns one TicketWeb venue's detail (name, address) plus one page of its upcoming events. A zero count with an empty events list on page 1 is a valid \"no upcoming events\" response.\n- **Params:** `id` (string, **required**) — Numeric TicketWeb venue id; `page` (integer, optional) — One-based page of upcoming events, 1-50\n\n## Accor (8)\n\n### `accor_amenities`\n\n- **HTTP:** `GET /accor/amenities`\n- **What:** Accor amenity reference catalog. Returns the anonymous public Accor amenity catalog with stable amenity codes, labels, categories, and display ordering. It is reference data for interpreting hotel search facets; booking, rates, rooms, reviews, and account data are excluded.\n- **Params:** _none_\n\n### `accor_brands`\n\n- **HTTP:** `GET /accor/brands`\n- **What:** Accor brand directory. Returns the Accor brand directory published on the public brands page, with each brand's name, slug, and source URL. Booking, rates, rooms, reviews, contacts, and location are excluded.\n- **Params:** _none_\n\n### `accor_catalog_hotels`\n\n- **HTTP:** `GET /accor/catalog/hotels`\n- **What:** Search the Accor hotel catalog. Searches Accor's anonymous public hotel catalog by text, hotel code, or latitude/longitude radius. Results contain static property identity and broad location metadata plus catalog relevance/distance; contact details, precise hotel coordinates, payment, loyalty, media, rates, rooms, reviews, and booking data are excluded.\n- **Params:** `hotel_id` (string, optional) — Four-character Accor hotel code; `latitude` (number, optional) — Search-center latitude (-90 to 90); `limit` (integer, optional) — Results per request (1 to 50); `longitude` (number, optional) — Search-center longitude (-180 to 180); `offset` (integer, optional) — Zero-based result offset (0 to 300); `query` (string, optional) — Destination or hotel text (at least two characters); `radius_km` (number, optional) — Search radius in kilometers (0.1 to 100; defaults to 10 for coordinate searches)\n\n### `accor_destination_hotels`\n\n- **HTTP:** `GET /accor/destination/hotels`\n- **What:** Accor hotels in a destination. Returns the static list of hotels published on one Accor destination directory page (world, continent, country, region, department, city, district, or place), optionally narrowed by a theme facet. Each hotel carries its code, name, source URL, and broad city/country. Booking, rates, rooms, reviews, contacts, and precise location are excluded.\n- **Params:** `destination_type` (string, **required**) — Destination level: world, continent, country, region, department, city, district, or place; `slug` (string, optional) — Destination page slug, e.g. hotels-dusseldorf-v1158. Required for every type except world.; `theme` (string, optional) — Optional theme facet: 4-stars, 5-stars, apart-hotel, breakfast, budget-friendly, business, eco-certified, family-friendly, fitness, luxury, meetings-and-events, parking, pet-friendly, pool, resorts, or spa\n\n### `accor_property`\n\n- **HTTP:** `GET /accor/property`\n- **What:** Accor hotel metadata. Returns static public metadata for one Accor hotel code, including name, brand, city/country, explicitly listed amenities, and published check-in/check-out times. Booking, rates, rooms, reviews, contacts, and precise location are excluded.\n- **Params:** `hotel_code` (string, **required**) — Four-character Accor hotel code\n\n### `accor_search`\n\n- **HTTP:** `GET /accor/search`\n- **What:** Search Accor hotels. Searches the public Accor hotel index by destination or hotel name, with optional country, city, brand, star, page, and page-size filters. Results contain static hotel identity, location labels, ratings, and source URLs; booking, rates, rooms, reviews, loyalty, and payment flows are excluded.\n- **Params:** `brand` (string, optional) — Accor brand code facet; `city` (string, optional) — City facet; `country` (string, optional) — Country facet; `language` (string, optional) — Index locale; `limit` (integer, optional) — Results per page, 1-100; `page` (integer, optional) — Zero-based result page; `query` (string, **required**) — Destination or hotel query (at least two characters); `stars` (integer, optional) — Exact star facet\n\n### `accor_search_details`\n\n- **HTTP:** `GET /accor/search/details`\n- **What:** Accor place coordinates and viewport. Resolves an anonymous Accor search suggestion identifier to its description, coordinates, viewport, radius, and address components. It uses the same public place-details source as the Accor search box; booking, rates, rooms, reviews, and account data are excluded.\n- **Params:** `id` (string, **required**) — Identifier returned by Accor search suggestions; `language` (string, optional) — Optional locale; `source` (string, **required**) — Suggestion source\n\n### `accor_search_suggest`\n\n- **HTTP:** `GET /accor/search/suggest`\n- **What:** Accor destination and hotel search suggestions. Returns anonymous Accor typeahead suggestions for a partial destination or hotel query, including destination/place and hotel identifiers, types, labels, and match metadata. It uses the public search-box suggestion source only; booking, rates, rooms, reviews, and result-list requests are excluded.\n- **Params:** `language` (string, optional) — Optional locale used by the suggestion source; `query` (string, **required**) — Partial destination or hotel query (at least two characters)\n\n## Hotels.com (7)\n\n### `hotels_autocomplete`\n\n- **HTTP:** `GET /hotels/autocomplete`\n- **What:** Get Hotels.com destination suggestions. Returns anonymous Hotels.com search-box suggestions for a partial destination or property name. Availability and prices are not included.\n- **Params:** `q` (string, **required**) — Partial destination or property name\n\n### `hotels_offers`\n\n- **HTTP:** `POST /hotels/offers`\n- **What:** Get Hotels.com room offers. Returns the public room/unit offer summaries shown for one Hotels.com property and date range, including room labels and non-transactional offer messages. Booking, checkout, payment, and reservation tokens are never returned. property_id is the numeric global property id from a Search response.\n- **Params:** `request` (object, **required**) — Room offers request\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\n### `hotels_property`\n\n- **HTTP:** `POST /hotels/property`\n- **What:** Get Hotels.com property details. Returns public static metadata from one canonical Hotels.com property page, including name, address, rating, images, and amenities. Date-bound availability, prices, booking, and review content are excluded.\n- **Params:** `request` (object, **required**) — Canonical Hotels.com property URL\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\n### `hotels_rates`\n\n- **HTTP:** `POST /hotels/rates`\n- **What:** Get Hotels.com rates for one property. Returns one Hotels.com property's date-bound rates and availability: the same normalized property card Search returns, with the live per-night and per-stay prices Hotels.com shows for the requested dates. property_id is the numeric global property id from a Search response's properties[].id; it is distinct from the legacy /ho<id>/ URL id.\n- **Params:** `request` (object, **required**) — Rates request\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\n### `hotels_reviews`\n\n- **HTTP:** `POST /hotels/reviews`\n- **What:** Get Hotels.com guest reviews. Returns one Hotels.com property's review overview: the overall rating (0-10) with its descriptive label, the per-category sub-ratings (cleanliness, service, amenities, and so on), and a bounded set of highlighted guest reviews with reviewer, date, rating label, text, and verified-stay flag. property_id is the numeric global property id from a Search response's properties[].id. This mirrors the property page's Guest reviews section; the full paginated review archive is not exposed.\n- **Params:** `request` (object, **required**) — Reviews request\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\n### `hotels_reviews_archive`\n\n- **HTTP:** `POST /hotels/reviews/archive`\n- **What:** List Hotels.com guest reviews. Returns one page of public guest reviews for a Hotels.com property, including reviewer, date, traveler type, rating label, title, and message. Use page and page_size to walk the archive; the response reports whether another page is available. property_id is the numeric global property id from a Search response's properties[].id. Booking, account, and private review data are not included.\n- **Params:** `request` (object, **required**) — Review archive request\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\n### `hotels_search`\n\n- **HTTP:** `POST /hotels/search`\n- **What:** Search Hotels.com hotels. Returns a page of date-bound Hotels.com hotel search results for either a free-text destination or a numeric Hotels.com region_id: normalized property cards with per-night and per-stay prices, review score and count, location, thumbnail, amenities, and promotional badges. Provide exactly one of query or region_id; region_id skips destination typeahead resolution. Prices are the live rates Hotels.com shows for the requested check-in and check-out dates.\n- **Params:** `request` (object, **required**) — Search request\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\nFile v1.0.19:skill-card.md\n\n## Description:\n\nResearches hotels, flights, attractions, short-term rentals, and live events through Crawlora, returning structured travel results.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nTravelers and travel-planning assistants use this skill to compare stays and flights, inspect public reviews and listings, and find attractions or events.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Travel searches may disclose private trip details to Crawlora.\n\nMitigation: Avoid sharing sensitive itinerary details unless you trust Crawlora to process them.\n\nRisk: Exposing the Crawlora API key could permit unauthorized API use.\n\nMitigation: Keep the key in the environment; do not hardcode, publish, or include it in travel queries.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/crawlora-org/skills/travel-hotel-research)\n- [Crawlora API documentation](https://crawlora.net/docs)\n- [Endpoint reference](artifact/reference/endpoints.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, JSON]\n\n**Output Format:** [Travel research summaries with structured JSON results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a Crawlora API key; searches public travel listings and reviews without booking or payment actions.]\n\n## Skill Version(s):\n\n1.0.19 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.18: 5 files, 17077 bytes\n\nFiles: reference/endpoints.md (41170b), scripts/crawlora.sh (10720b), skill-card.md (2430b), SKILL.md (6378b), _meta.json (141b)\n\nFile v1.0.18:SKILL.md\n\n---\nname: travel-hotel-research\ndescription: Researches hotels, flights, attractions, short-term rentals, and live events via the Crawlora API — Booking.com, Expedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster — returning clean JSON. Use when the user wants to search or compare hotel/stay prices and reviews, look up flight options, find attractions/things-to-do or concerts/events, or research an Airbnb host or listing.\n---\n\n# Travel & hotel research\n\nSearch and compare hotels, flights, attractions, short-term rentals, and\nlive events across seven travel platforms as normalized JSON from the\nCrawlora API — no scraping OTA search-result pages.\n\n## When to use this skill\n\n- \"Find hotels in <city> for <dates>\" / compare prices across OTAs.\n- \"What are the reviews like for this hotel/attraction?\"\n- \"Search flights from <origin> to <destination>.\"\n- \"What's there to do in <city>?\" (attractions/tours, or concerts/events).\n- \"Look up this Airbnb host/listing\" (reviews, calendar, other listings).\n- \"Find tickets/events for <artist> in <city>\" (Ticketmaster).\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Hotels** — `/booking/search` (params `query`, `checkin`, `checkout`),\n   `/agoda/hotels/search`, `/tripcom/hotels/search` (GET, by city) or\n   `POST /expedia/properties/search` (Expedia's Stays API is POST-only —\n   its exact request-body field names are undocumented, see below); detail\n   via `/booking/hotel-detail`, `/agoda/hotels/{property_id}`,\n   `POST /expedia/properties/detail`; reviews via `/booking/reviews`,\n   `POST /expedia/properties/reviews`.\n2. **Flights** — `/agoda/flights/search` (GET) and `POST /expedia/flights/search`\n   / `/booking-flights/search`; use each platform's `.../autocomplete` or\n   `.../search-locations` endpoint first to resolve city/airport codes.\n3. **Attractions & things-to-do** — `/booking-attractions/search`,\n   `POST /expedia/activities/search`, `/agoda/activities/search`,\n   `/tripadvisor/search` (hotels, restaurants, and attractions all in one).\n4. **TripAdvisor** — `/tripadvisor/autocomplete` to resolve a place, then\n   `/tripadvisor/place` for the profile and `/tripadvisor/reviews` for guest\n   reviews (works for hotels, restaurants, and attractions).\n5. **Airbnb** — `/airbnb/search` to find stays; `/airbnb/room/{id}` for a\n   listing (+ `/calendar`, `/reviews`); `/airbnb/host/{id}` for the host\n   profile (+ `/listings`, `/reviews`).\n6. **Ticketmaster** — `/ticketmaster/search-events` (`q`) or\n   `/ticketmaster/discover-city-events` (`city`) to find events;\n   `/ticketmaster/event` for detail, `/ticketmaster/venue` (+ `/venue-events`)\n   for a venue, `/ticketmaster/attraction` (+ `/attraction-events`) for a\n   performer/team's full schedule.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Hotel search (GET):\nscripts/crawlora.sh /booking/search query=\"Lisbon\" checkin=2026-09-10 checkout=2026-09-14 | jq '.'\nscripts/crawlora.sh /agoda/hotels/search city=\"Lisbon\" | jq '.'\n\n# Expedia (POST — exact body field names are unconfirmed, see Notes below):\nscripts/crawlora.sh -X POST /expedia/properties/search '{\"destination\":\"Lisbon\",\"checkIn\":\"2026-09-10\",\"checkOut\":\"2026-09-14\"}' | jq '.'\n\n# Airbnb:\nscripts/crawlora.sh /airbnb/search location=\"Lisbon\" | jq '.'\nscripts/crawlora.sh /airbnb/room/12345678 | jq '.'\n\n# Ticketmaster:\nscripts/crawlora.sh /ticketmaster/search-events q=\"Coldplay\" | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every Booking,\nExpedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster endpoint\nthis skill uses.\n\n## Examples\n\n- **Cross-OTA price compare:** search the same destination/dates on\n  `/booking/search`, `/agoda/hotels/search`, and `POST /expedia/properties/search`,\n  then diff nightly rates for comparable hotels.\n- **Stay vs. hotel:** `/airbnb/search` against `/booking/search` for the\n  same city to compare short-term-rental vs. hotel pricing.\n- **Trip planning:** `/tripadvisor/search` for attractions in a city, then\n  `/tripadvisor/reviews` on the top few to check recent visitor sentiment.\n- **Host due diligence:** `/airbnb/host/{id}` + `/airbnb/host/{id}/reviews`\n  before booking, or `/airbnb/host/{id}/listings` to see their full portfolio.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public search/listing/review pages; no booking or\n  payment actions are performed.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **Expedia and some Agoda endpoints are `POST` with a JSON body** — remember\n  `-X POST` when calling `scripts/crawlora.sh`. Most Booking/Agoda/Trip.com/\n  Airbnb/TripAdvisor endpoints are plain `GET` with query params.\n- **Expedia's exact request-body field names are unconfirmed** — the tool\n  schema only exposes an opaque `option` object (destination, dates,\n  occupancy, filters expected inside), and live-testing ruled out both a\n  `{\"option\": {...}}` wrapper and several plausible flat field-name guesses\n  (`checkInDate`/`checkOutDate`, `checkIn`/`checkOut`). Confirm the current\n  shape at [crawlora.net/docs](https://crawlora.net/docs?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  or the [playground](https://crawlora.net/playground?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  before relying on the Expedia endpoints — every other endpoint in this\n  skill is live-verified, Expedia's POST body shape is the one exception.\n- Location/city ids are platform-specific — always resolve with the\n  platform's own autocomplete/locations-search endpoint first.\n\nFile v1.0.18:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"travel-hotel-research\",\n  \"version\": \"1.0.18\",\n  \"publishedAt\": 1789955869583\n}\n\nFile v1.0.18:reference/endpoints.md\n\n# travel-hotel-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**71 endpoints across 10 platform group(s).**\n\n## Booking (8)\n\n### `booking_attractions_detail`\n\n- **HTTP:** `GET /booking-attractions/detail`\n- **What:** Booking.com attraction detail. Returns a Booking.com attraction's detail page.\n- **Params:** `slug` (string, **required**) — Attraction slug, from a prior attraction search result\n\n### `booking_attractions_reviews`\n\n- **HTTP:** `GET /booking-attractions/reviews`\n- **What:** Booking.com attraction reviews. Returns normalized guest reviews for a Booking.com attraction.\n- **Params:** `limit` (integer, optional) — Reviews per page, 1-50, default 10; `page` (integer, optional) — 1-based result page, default 1; `product_id` (string, **required**) — Attraction product id, from a prior attraction search result\n\n### `booking_attractions_search`\n\n- **HTTP:** `GET /booking-attractions/search`\n- **What:** Search Booking.com attractions. Returns normalized Booking.com attractions/things-to-do search results for a destination and date range, with an optional category/subcategory filter and a discoverable category taxonomy.\n- **Params:** `category` (string, optional) — Optional top-level category tagname filter, from a prior response's categories; `end_date` (string, optional) — Availability end date, YYYY-MM-DD, defaults to start_date; `limit` (integer, optional) — Results per page, 1-30, default 15; `page` (integer, optional) — 1-based result page, default 1; `query` (string, **required**) — Destination name or city; `start_date` (string, **required**) — Availability start date, YYYY-MM-DD; `subcategory` (string, optional) — Optional subcategory tagname filter, from a prior response's categories\n\n### `booking_flights_autocomplete`\n\n- **HTTP:** `GET /booking-flights/autocomplete`\n- **What:** Booking.com flight autocomplete. Returns Booking.com flight-search location suggestions (airports/cities) for a query string.\n- **Params:** `origin` (string, optional) — Optional origin location code, biases results by proximity; `origin_type` (string, optional) — Origin location type; `query` (string, **required**) — City or airport name/code to search; `type` (string, optional) — Location role, default to\n\n### `booking_flights_search`\n\n- **HTTP:** `GET /booking-flights/search`\n- **What:** Search Booking.com flights. Returns normalized round-trip or one-way flight offers between two Booking.com flight-search locations.\n- **Params:** `adults` (integer, optional) — Number of adults, 1-9, default 1; `cabin_class` (string, optional) — Cabin class, default ECONOMY; `children` (integer, optional) — Number of children, 0-9; `depart` (string, **required**) — Departure date, YYYY-MM-DD; `from` (string, **required**) — Origin location id, e.g. SGN.AIRPORT, from a prior autocomplete result; `from_country` (string, optional) — Origin country code; `return` (string, optional) — Return date, YYYY-MM-DD, required when type is ROUNDTRIP; `sort` (string, optional) — Result sort order, default BEST; `to` (string, **required**) — Destination location id, same composite format as from; `to_country` (string, optional) — Destination country code; `type` (string, optional) — Trip type, default ROUNDTRIP\n\n### `booking_hotel_detail`\n\n- **HTTP:** `GET /booking/hotel-detail`\n- **What:** Booking.com hotel detail. Returns a Booking.com hotel's core detail page: rating, facilities, highlights, house rules, cover photos, and rooms with their own photos.\n- **Params:** `hotel_id` (integer, **required**) — Booking.com hotel id, from a prior search's property id\n\n### `booking_reviews`\n\n- **HTTP:** `GET /booking/reviews`\n- **What:** Booking.com hotel reviews. Returns normalized guest reviews for a Booking.com hotel, with an optional free-text search over review content.\n- **Params:** `destination_id` (integer, optional) — Destination id (ufi), from a prior search response; `hotel_country_code` (string, **required**) — Hotel's country code, from a prior search response; `hotel_id` (integer, **required**) — Booking.com hotel id, from a prior search's property id; `hotel_score` (number, optional) — Hotel's overall review score; `limit` (integer, optional) — Reviews per page, 1-25, default 10; `page` (integer, optional) — 1-based result page, default 1; `search_text` (string, optional) — Optional free-text search over review content\n\n### `booking_search`\n\n- **HTTP:** `GET /booking/search`\n- **What:** Search Booking.com hotels. Returns normalized Booking.com hotel search results for a destination and date range.\n- **Params:** `adults` (integer, optional) — Number of adults, 1-9, default 2; `checkin` (string, **required**) — Check-in date, YYYY-MM-DD; `checkout` (string, **required**) — Check-out date, YYYY-MM-DD; `children` (integer, optional) — Number of children, 0-9; `page` (integer, optional) — 1-based result page, default 1; `query` (string, **required**) — Destination name or city; `rooms` (integer, optional) — Number of rooms, 1-8, default 1\n\n## Expedia (7)\n\n### `expedia_activities_search`\n\n- **HTTP:** `POST /expedia/activities/search`\n- **What:** Search Expedia activities. Returns normalized Expedia Things To Do (activities/tours) search results for a free-text destination and date range.\n- **Params:** `option` (object, **required**) — Activity search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_flights_search`\n\n- **HTTP:** `POST /expedia/flights/search`\n- **What:** Search Expedia flights. Returns normalized Expedia Flights search results (departing-leg offers) for an origin/destination IATA pair and date range.\n- **Params:** `option` (object, **required**) — Flights search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_locations_search`\n\n- **HTTP:** `POST /expedia/locations/search`\n- **What:** Search Expedia destinations. Returns normalized destination/property typeahead suggestions (cities, airports, neighborhoods, hotels) for a free-text term.\n- **Params:** `option` (object, **required**) — Location search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_detail`\n\n- **HTTP:** `POST /expedia/properties/detail`\n- **What:** Expedia Stays property detail. Returns a hotel's detail summary (name, star rating, address/coordinates, top amenities) for a known property id.\n- **Params:** `option` (object, **required**) — Property detail payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_filters`\n\n- **HTTP:** `POST /expedia/properties/filters`\n- **What:** Expedia search filters. Returns the sort and filter facets (amenities, star rating, neighborhood, nightly price range, sort options) available for a Stays search.\n- **Params:** `option` (object, **required**) — Property filters payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_reviews`\n\n- **HTTP:** `POST /expedia/properties/reviews`\n- **What:** Expedia Stays property guest reviews. Returns a hotel's overall rating and highlighted/recent guest reviews (reviewer, date, rating, message) for a known property id.\n- **Params:** `option` (object, **required**) — Property reviews payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_search`\n\n- **HTTP:** `POST /expedia/properties/search`\n- **What:** Search Expedia Stays properties. Returns normalized Expedia Stays (hotel) search results for a free-text destination and date range. Promotional banners and sponsored ad slots are dropped, so every returned property has an id and name.\n- **Params:** `option` (object, **required**) — Property search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n## Agoda (8)\n\n### `agoda_activities_search`\n\n- **HTTP:** `GET /agoda/activities/search`\n- **What:** Search Agoda activities. Returns Agoda activities (tours, attractions, experiences) matching a free-text keyword and/or a city. When keyword is omitted, the resolved city's name is used instead to return a general listing of activities in that city. Callers may supply a known Agoda city id or a free-text city name for the city filter; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own destination search.\n- **Params:** `city` (string, optional) — Free-text city name, used directly as the search text when keyword is omitted, and to resolve a city id filter.; `city_id` (integer, optional) — Numeric Agoda city id to filter results to. Optional if keyword is supplied; city_id takes precedence over city when both are supplied.; `keyword` (string, optional) — Free-text activity search keyword. When omitted, the resolved city's name is used instead.\n\n### `agoda_activity_detail`\n\n- **HTTP:** `GET /agoda/activities/{activity_id}`\n- **What:** Get Agoda activity detail. Returns full activity detail from Agoda: title, description, stated duration, categories, and content images. Credential-free public data from Agoda's own activity content source.\n- **Params:** `activity_id` (string, **required**) — Numeric Agoda activity id, from a prior activities search call's activity_id field\n\n### `agoda_flights_itinerary_amenities`\n\n- **HTTP:** `POST /agoda/flights/itinerary-amenities`\n- **What:** Get Agoda flight segment amenities. Returns real-content amenities (aircraft type, seat layout, meals, entertainment, wifi) for one or more flight segments. Copy the segments straight from a flight search response's own segment fields. Credential-free public data from Agoda's own flight content service.\n- **Params:** `body` (object, **required**) — One or more flight segments to fetch amenities for\n- **REST body:** Send the value of the MCP argument `body` directly as the JSON body; do not wrap it in a `body` property.\n\n### `agoda_flights_search`\n\n- **HTTP:** `GET /agoda/flights/search`\n- **What:** Search Agoda one-way flights. Returns bookable one-way flight itineraries between two IATA airport codes for a departure date, including per-segment flight number, airline, times, layovers, aircraft type, and price. Resolve free-text city/airport names to codes first via the flight destination search endpoint. Credential-free public data from Agoda's own flight search.\n- **Params:** `adults` (integer, optional) — Adult passengers (age 12+), defaults to 1; `cabin_class` (string, optional) — Cabin class, defaults to Economy; `children` (integer, optional) — Child passengers (age 2-11), defaults to 0; `departure_date` (string, **required**) — Departure date, YYYY-MM-DD; `destination` (string, **required**) — Destination IATA airport code; `infants` (integer, optional) — Infant passengers (under age 2), defaults to 0; `origin` (string, **required**) — Origin IATA airport code; `page` (integer, optional) — 1-indexed result page, defaults to 1\n\n### `agoda_flights_search_locations`\n\n- **HTTP:** `GET /agoda/flights/search-locations`\n- **What:** Search Agoda flight destinations/airports. Resolves a free-text city or airport name into IATA airport codes for flight search, with each city's direct and nearby airports. Credential-free public data from Agoda's own flight destination search.\n- **Params:** `keyword` (string, **required**) — Free-text city or airport name\n\n### `agoda_homes_search`\n\n- **HTTP:** `GET /agoda/homes/search`\n- **What:** Search Agoda Homes & Apartments by city. Returns Homes & Apartments results for an Agoda city: full listing detail for every matching property whose accommodation type is Apartment, drawn from the same city search as hotel search and filtered to non-hotel accommodation types. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own hotel/home search.\n- **Params:** `city` (string, optional) — Free-text city name, resolved to a numeric city id via Agoda's own destination search. Ignored when city_id is also supplied.; `city_id` (integer, optional) — Numeric Agoda city id, e.g. 9395 for Bangkok. Either city_id or city is required; city_id takes precedence when both are supplied.; `limit` (integer, optional) — Candidate listings fetched per page before filtering to homes/apartments, defaults to 10, maximum 50; `page` (integer, optional) — 1-indexed result page over the underlying city search, defaults to 1\n\n### `agoda_hotel_detail`\n\n- **HTTP:** `GET /agoda/hotels/{property_id}`\n- **What:** Get Agoda hotel detail. Returns full hotel detail from Agoda: identity (name, any former name), an accommodation type code, address (street address, postal code, city, country), guest rating, a main photo, room count, hotel chain id, a long and short description, and short-form policy statements (minimum age, adult/child definitions, extra-bed and additional-room booking policy). Credential-free public data from Agoda's own hotel content source.\n- **Params:** `property_id` (string, **required**) — Numeric Agoda property id, from a prior search call's property_id field or the id embedded in an Agoda hotel URL\n\n### `agoda_hotels_search`\n\n- **HTTP:** `GET /agoda/hotels/search`\n- **What:** Search Agoda hotels by city. Returns hotel search results for an Agoda city: the matching property ids for that city plus a direct link to each property's listing page. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own hotel search.\n- **Params:** `city` (string, optional) — Free-text city name, resolved to a numeric city id via Agoda's own destination search. Ignored when city_id is also supplied.; `city_id` (integer, optional) — Numeric Agoda city id, e.g. 9395 for Bangkok. Either city_id or city is required; city_id takes precedence when both are supplied.; `limit` (integer, optional) — Results per page, defaults to 10, maximum 50; `page` (integer, optional) — 1-indexed result page, defaults to 1\n\n## TripAdvisor (6)\n\n### `tripadvisor_autocomplete`\n\n- **HTTP:** `GET /tripadvisor/autocomplete`\n- **What:** Autocomplete TripAdvisor locations and places. Returns normalized TripAdvisor public typeahead candidates from the credential-free GraphQL endpoint.\n- **Params:** `limit` (integer, optional) — Maximum results; `locale` (string, optional) — TripAdvisor locale; `q` (string, **required**) — Autocomplete query; `route_uid` (string, optional) — Optional captured route uid; `scope_geo_id` (integer, optional) — Optional scoped geo id; `search_session_id` (string, optional) — Optional captured search session id; `type` (string, optional) — Optional result type hint; `typeahead_id` (string, optional) — Optional captured typeahead id\n\n### `tripadvisor_enums`\n\n- **HTTP:** `GET /tripadvisor/enums`\n- **What:** Get TripAdvisor enum metadata. Returns supported TripAdvisor enum values for place/listing filters, including locales, currencies, languages, listing types, filters, amenities, and category ids.\n- **Params:** _none_\n\n### `tripadvisor_hotels`\n\n- **HTTP:** `GET /tripadvisor/hotels`\n- **What:** Search TripAdvisor hotels. Returns normalized TripAdvisor hotel listing results from public credential-free GraphQL listing data.\n- **Params:** `amenities` (array, optional) — Amenity filter ids; `class` (integer, optional) — Hotel class filter; `currency` (string, optional) — Currency code; `filter_id` (string, optional) — Optional filter id such as class or ufe; `geo_id` (integer, **required**) — TripAdvisor geo id; `limit` (integer, optional) — Maximum results; `offset` (integer, optional) — Zero-based result offset; `price_max` (integer, optional) — Maximum price filter; `price_min` (integer, optional) — Minimum price filter; `pricing_mode` (string, optional) — Pricing mode; `sort` (string, optional) — Sort value; `travelers_choice` (boolean, optional) — Filter Travelers' Choice properties; `travelers_choice_botb` (boolean, optional) — Filter Best of the Best properties\n\n### `tripadvisor_place`\n\n- **HTTP:** `GET /tripadvisor/place`\n- **What:** Get TripAdvisor place. Returns a rich normalized TripAdvisor place profile. Destination and bookable tour/experience pages resolve through a faster dedicated lookup; everything else comes from public place HTML, using configured browser fallbacks when direct HTML is blocked.\n- **Params:** `id` (string, optional) — TripAdvisor location id fallback; `url` (string, optional) — TripAdvisor place URL\n\n### `tripadvisor_reviews`\n\n- **HTTP:** `GET /tripadvisor/reviews`\n- **What:** Get TripAdvisor reviews. Returns normalized TripAdvisor public reviews from credential-free GraphQL review data. Pass either id or url.\n- **Params:** `do_machine_translation` (boolean, optional) — Enable upstream machine translation; `id` (string, optional) — TripAdvisor location id; `language` (string, optional) — Review language; `limit` (integer, optional) — Maximum reviews; `page` (integer, optional) — 1-based review page; `photos_per_review_limit` (integer, optional) — Maximum photos per review; `ratings` (array, optional) — Rating filters; `sort_by` (string, optional) — Review sort field; `sort_type` (string, optional) — Review sort type; `url` (string, optional) — TripAdvisor place URL\n\n### `tripadvisor_search`\n\n- **HTTP:** `GET /tripadvisor/search`\n- **What:** Search TripAdvisor places. Returns normalized TripAdvisor place listings for hotels, restaurants, attractions, and supported attraction category types.\n- **Params:** `amenities` (array, optional) — Hotel amenity filter ids; `class` (integer, optional) — Hotel class filter; `currency` (string, optional) — Currency code; `establishment_types` (array, optional) — Restaurant establishment type ids; `filter_id` (string, optional) — Optional hotel filter id; `geo_id` (integer, **required**) — TripAdvisor geo id; `limit` (integer, optional) — Maximum results; `locale` (string, optional) — TripAdvisor locale; `offset` (integer, optional) — Zero-based result offset; `online_options` (array, optional) — Restaurant online option ids; `price_max` (integer, optional) — Maximum hotel price filter; `price_min` (integer, optional) — Minimum hotel price filter; `pricing_mode` (string, optional) — Hotel pricing mode; `restaurant_date` (string, optional) — Restaurant availability date; `restaurant_guests` (integer, optional) — Restaurant guest count; `restaurant_time` (string, optional) — Restaurant availability time; `sort` (string, optional) — Sort value; `travelers_choice` (boolean, optional) — Filter Travelers' Choice hotels; `travelers_choice_botb` (boolean, optional) — Filter Best of the Best hotels; `type` (string, **required**) — Listing type\n\n## Trip.com (2)\n\n### `tripcom_hotel_detail`\n\n- **HTTP:** `GET /tripcom/hotels/{id}`\n- **What:** Get Trip.com hotel detail. Returns a normalized Trip.com hotel-detail page: identity (name, local name, star rating, city/province/country), location (address, zone, latitude/longitude, nearby-transport description), guest rating (overall score plus cleanliness/amenities/location/service breakdown), images, description, check-in/check-out and child policy summaries, and popular facilities. Credential-free public data sourced from Trip.com's own server-rendered hotel-detail page. Pricing is not included: Trip.com's detail page only returns per-night rates alongside check-in/check-out dates, which this endpoint does not take as input -- use the search endpoint for a city's current display prices.\n- **Params:** `id` (string, **required**) — Trip.com hotel id, from a prior search call's hotel_id field; `slug` (string, optional) — Optional slug segment for a nicer canonical source URL (e.g. the district/city slug from a search result's url). Not required and not validated by Trip.com.\n\n### `tripcom_hotels_search`\n\n- **HTTP:** `GET /tripcom/hotels/search`\n- **What:** Search Trip.com hotels by city. Returns Trip.com's own top-hotels page for a city: normalized hotel summaries (name, location, star rating, guest rating, review count, image, display price) for the hotels Trip.com features on that city's hotel-list page. Trip.com does not expose a credential-free free-text city search, so callers supply the exact city_slug and city_id pair from a known Trip.com hotel-list URL of the form https://www.trip.com/hotels/{city_slug}-hotels-list-{city_id}/. Credential-free public data sourced from Trip.com's own server-rendered hotel-list page.\n- **Params:** `city_id` (string, **required**) — Trip.com numeric city id, the trailing number of a /hotels/{city_slug}-hotels-list-{city_id}/ URL; `city_slug` (string, **required**) — Trip.com city slug, the text segment of a /hotels/{city_slug}-hotels-list-{city_id}/ URL\n\n## Airbnb (7)\n\n### `airbnb_host`\n\n- **HTTP:** `GET /airbnb/host/{id}`\n- **What:** Get Airbnb host profile. Returns a normalized Airbnb public host profile — display name, Superhost and identity-verification status, location, bio, hosting tenure, total guest-review count, and total listing count.\n- **Params:** `id` (string, **required**) — Host id (numeric)\n\n### `airbnb_host_listings`\n\n- **HTTP:** `GET /airbnb/host/{id}/listings`\n- **What:** Get Airbnb host listings. Returns the listings an Airbnb host manages, paginated. Page 1 comes from the host profile; deeper pages page through the host's full portfolio.\n- **Params:** `id` (string, **required**) — Host id (numeric); `page` (integer, optional) — 1-based page\n\n### `airbnb_host_reviews`\n\n- **HTTP:** `GET /airbnb/host/{id}/reviews`\n- **What:** Get Airbnb host reviews. Returns reviews guests left for an Airbnb host, paginated, including the reviewer name and location.\n- **Params:** `id` (string, **required**) — Host id (numeric); `page` (integer, optional) — 1-based page\n\n### `airbnb_room`\n\n- **HTTP:** `GET /airbnb/room/{id}`\n- **What:** Get Airbnb room. Returns normalized Airbnb public room details.\n- **Params:** `id` (string, **required**) — Room id\n\n### `airbnb_room_calendar`\n\n- **HTTP:** `GET /airbnb/room/{id}/calendar`\n- **What:** Get Airbnb room calendar. Returns public calendar month hints parsed from Airbnb room bootstrap data.\n- **Params:** `id` (string, **required**) — Room id\n\n### `airbnb_room_reviews`\n\n- **HTTP:** `GET /airbnb/room/{id}/reviews`\n- **What:** Get Airbnb room reviews. Returns normalized Airbnb public review snippets.\n- **Params:** `id` (string, **required**) — Room id; `page` (integer, optional) — 1-based page\n\n### `airbnb_search`\n\n- **HTTP:** `GET /airbnb/search`\n- **What:** Search Airbnb stays. Returns normalized Airbnb public web search results.\n- **Params:** `adults` (integer, optional) — Adult guests; `check_in` (string, optional) — Check-in date; `check_out` (string, optional) — Check-out date; `currency` (string, optional) — Currency for bounded map search; `location` (string, **required**) — Location; `ne_lat` (number, optional) — Northeast latitude for bounded map search; `ne_lng` (number, optional) — Northeast longitude for bounded map search; `page` (integer, optional) — 1-based page; `sw_lat` (number, optional) — Southwest latitude for bounded map search; `sw_lng` (number, optional) — Southwest longitude for bounded map search; `zoom` (integer, optional) — Map zoom for bounded map search\n\n## Ticketmaster (15)\n\n### `ticketmaster_attraction`\n\n- **HTTP:** `GET /ticketmaster/attraction`\n- **What:** Get a Ticketmaster attraction. Returns normalized details for one Ticketmaster artist, team, or other attraction.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id\n\n### `ticketmaster_attraction_events`\n\n- **HTTP:** `GET /ticketmaster/attraction-events`\n- **What:** List an attraction's Ticketmaster events. Returns upcoming Ticketmaster events for one attraction. The sort enum accepts `relevance` and `date`.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id; `page` (integer, optional) — Zero-based page (0-49); `sort` (string, optional) — Result order\n\n### `ticketmaster_attraction_related`\n\n- **HTTP:** `GET /ticketmaster/attraction-related`\n- **What:** List a Ticketmaster attraction's related attractions. Returns the \"Fans Also Viewed\" attractions shown on one attraction's own page. An attraction with no recommendation data returns a valid empty list.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id\n\n### `ticketmaster_attraction_reviews`\n\n- **HTTP:** `GET /ticketmaster/attraction-reviews`\n- **What:** List a Ticketmaster attraction's fan reviews. Returns paginated fan reviews for one attraction, including its aggregate rating and Ticketmaster's own AI-generated review summary.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id; `limit` (integer, optional) — Reviews per page (10-50); `offset` (integer, optional) — Result offset (0-9995)\n\n### `ticketmaster_discover_categories`\n\n- **HTTP:** `GET /ticketmaster/discover-categories`\n- **What:** List Ticketmaster discover categories. Lists every current Concerts, Sports, Arts & Theater, and Family category with pagination. Section accepts `all`, `concerts`, `sports`, `arts-theater`, and `family`.\n- **Params:** `page` (integer, optional) — One-based page; `per_page` (integer, optional) — Categories per page; `section` (string, optional) — Discover section\n\n### `ticketmaster_discover_category_events`\n\n- **HTTP:** `GET /ticketmaster/discover-category-events`\n- **What:** List events in a Ticketmaster discover category. Returns a zero-based paginated event feed for any category returned by ticketmaster-discover-categories.\n- **Params:** `category_id` (string, **required**) — Ticketmaster discover category id; `page` (integer, optional) — Zero-based page\n\n### `ticketmaster_discover_cities`\n\n- **HTTP:** `GET /ticketmaster/discover-cities`\n- **What:** List Ticketmaster discover cities. Lists Ticketmaster city discovery destinations for a country with pagination.\n- **Params:** `country` (string, optional) — Two-letter country code; `page` (integer, optional) — One-based page; `per_page` (integer, optional) — Cities per page\n\n### `ticketmaster_discover_city_events`\n\n- **HTTP:** `GET /ticketmaster/discover-city-events`\n- **What:** List events in a Ticketmaster discover city. Returns a zero-based paginated event feed for a city slug returned by ticketmaster-discover-cities.\n- **Params:** `city` (string, **required**) — Ticketmaster discover city slug; `country` (string, optional) — Two-letter country code matching the selected city; `page` (integer, optional) — Zero-based page\n\n### `ticketmaster_event`\n\n- **HTTP:** `GET /ticketmaster/event`\n- **What:** Get a Ticketmaster event. Returns normalized details for one Ticketmaster event, including its venue, attractions, timing, availability flags, and classification.\n- **Params:** `id` (string, **required**) — Ticketmaster event id\n\n### `ticketmaster_search_events`\n\n- **HTTP:** `GET /ticketmaster/search-events`\n- **What:** Search Ticketmaster events. Searches Ticketmaster events by artist, event, team, or venue. A zero total with an empty events list is a valid no-results response. The sort enum accepts `relevance` and `date`.\n- **Params:** `page` (integer, optional) — Zero-based page (0-49); `q` (string, **required**) — Artist, event, team, or venue query; `sort` (string, optional) — Result order\n\n### `ticketmaster_suggest`\n\n- **HTTP:** `GET /ticketmaster/suggest`\n- **What:** Suggest Ticketmaster artists, events, and venues. Returns autocomplete suggestions for a partial query.\n- **Params:** `q` (string, **required**) — Partial artist, event, team, or venue query\n\n### `ticketmaster_trending_attractions`\n\n- **HTTP:** `GET /ticketmaster/trending-attractions`\n- **What:** List trending Ticketmaster attractions. Returns a ranked list of currently-trending attractions across every segment (music, sports, arts and theater, family), not scoped to one category or city.\n- **Params:** _none_\n\n### `ticketmaster_venue`\n\n- **HTTP:** `GET /ticketmaster/venue`\n- **What:** Get a Ticketmaster venue. Returns normalized details and visitor information for one Ticketmaster venue.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster venue id\n\n### `ticketmaster_venue_enhanced_details`\n\n- **HTTP:** `GET /ticketmaster/venue-enhanced-details`\n- **What:** Get a Ticketmaster venue's enhanced branding details. Returns header branding imagery and external links (the venue's own site, resident teams) for major venues. Smaller venues without enhanced content return 404.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster venue id\n\n### `ticketmaster_venue_events`\n\n- **HTTP:** `GET /ticketmaster/venue-events`\n- **What:** List a venue's Ticketmaster events. Returns upcoming Ticketmaster events at one venue. The sort enum accepts `relevance` and `date`.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster venue id; `page` (integer, optional) — Zero-based page (0-49); `sort` (string, optional) — Result order\n\n## TicketWeb (3)\n\n### `ticketweb_event`\n\n- **HTTP:** `GET /ticketweb/event`\n- **What:** Get a TicketWeb event. Returns normalized details for one TicketWeb event: venue, dates, age restriction, delivery methods, and per-tier ticket pricing (base price, fee breakdown, and total) when tickets are on sale. `has_tickets` is false and `sections` is empty for a free/RSVP event with no paid tickets, a sold-out event, or an access-code-gated event -- TicketWeb's own data does not reliably distinguish these three cases at this level, so the response reports the shared observable state (no purchasable sections) rather than guessing which applies.\n- **Params:** `id` (string, **required**) — Numeric TicketWeb event id\n\n### `ticketweb_search`\n\n- **HTTP:** `GET /ticketweb/search`\n- **What:** Search TicketWeb events. Searches TicketWeb events by artist, event, or venue. A zero count with an empty events list is a valid no-results response. availability is one of `in_stock`, `sold_out`, `unknown` per event.\n- **Params:** `page` (integer, optional) — One-based result page, 1-50; `q` (string, **required**) — Artist, event, or venue query\n\n### `ticketweb_venue`\n\n- **HTTP:** `GET /ticketweb/venue`\n- **What:** Get a TicketWeb venue. Returns one TicketWeb venue's detail (name, address) plus one page of its upcoming events. A zero count with an empty events list on page 1 is a valid \"no upcoming events\" response.\n- **Params:** `id` (string, **required**) — Numeric TicketWeb venue id; `page` (integer, optional) — One-based page of upcoming events, 1-50\n\n## Accor (8)\n\n### `accor_amenities`\n\n- **HTTP:** `GET /accor/amenities`\n- **What:** Accor amenity reference catalog. Returns the anonymous public Accor amenity catalog with stable amenity codes, labels, categories, and display ordering. It is reference data for interpreting hotel search facets; booking, rates, rooms, reviews, and account data are excluded.\n- **Params:** _none_\n\n### `accor_brands`\n\n- **HTTP:** `GET /accor/brands`\n- **What:** Accor brand directory. Returns the Accor brand directory published on the public brands page, with each brand's name, slug, and source URL. Booking, rates, rooms, reviews, contacts, and location are excluded.\n- **Params:** _none_\n\n### `accor_catalog_hotels`\n\n- **HTTP:** `GET /accor/catalog/hotels`\n- **What:** Search the Accor hotel catalog. Searches Accor's anonymous public hotel catalog by text, hotel code, or latitude/longitude radius. Results contain static property identity and broad location metadata plus catalog relevance/distance; contact details, precise hotel coordinates, payment, loyalty, media, rates, rooms, reviews, and booking data are excluded.\n- **Params:** `hotel_id` (string, optional) — Four-character Accor hotel code; `latitude` (number, optional) — Search-center latitude (-90 to 90); `limit` (integer, optional) — Results per request (1 to 50); `longitude` (number, optional) — Search-center longitude (-180 to 180); `offset` (integer, optional) — Zero-based result offset (0 to 300); `query` (string, optional) — Destination or hotel text (at least two characters); `radius_km` (number, optional) — Search radius in kilometers (0.1 to 100; defaults to 10 for coordinate searches)\n\n### `accor_destination_hotels`\n\n- **HTTP:** `GET /accor/destination/hotels`\n- **What:** Accor hotels in a destination. Returns the static list of hotels published on one Accor destination directory page (world, continent, country, region, department, city, district, or place), optionally narrowed by a theme facet. Each hotel carries its code, name, source URL, and broad city/country. Booking, rates, rooms, reviews, contacts, and precise location are excluded.\n- **Params:** `destination_type` (string, **required**) — Destination level: world, continent, country, region, department, city, district, or place; `slug` (string, optional) — Destination page slug, e.g. hotels-dusseldorf-v1158. Required for every type except world.; `theme` (string, optional) — Optional theme facet: 4-stars, 5-stars, apart-hotel, breakfast, budget-friendly, business, eco-certified, family-friendly, fitness, luxury, meetings-and-events, parking, pet-friendly, pool, resorts, or spa\n\n### `accor_property`\n\n- **HTTP:** `GET /accor/property`\n- **What:** Accor hotel metadata. Returns static public metadata for one Accor hotel code, including name, brand, city/country, explicitly listed amenities, and published check-in/check-out times. Booking, rates, rooms, reviews, contacts, and precise location are excluded.\n- **Params:** `hotel_code` (string, **required**) — Four-character Accor hotel code\n\n### `accor_search`\n\n- **HTTP:** `GET /accor/search`\n- **What:** Search Accor hotels. Searches the public Accor hotel index by destination or hotel name, with optional country, city, brand, star, page, and page-size filters. Results contain static hotel identity, location labels, ratings, and source URLs; booking, rates, rooms, reviews, loyalty, and payment flows are excluded.\n- **Params:** `brand` (string, optional) — Accor brand code facet; `city` (string, optional) — City facet; `country` (string, optional) — Country facet; `language` (string, optional) — Index locale; `limit` (integer, optional) — Results per page, 1-100; `page` (integer, optional) — Zero-based result page; `query` (string, **required**) — Destination or hotel query (at least two characters); `stars` (integer, optional) — Exact star facet\n\n### `accor_search_details`\n\n- **HTTP:** `GET /accor/search/details`\n- **What:** Accor place coordinates and viewport. Resolves an anonymous Accor search suggestion identifier to its description, coordinates, viewport, radius, and address components. It uses the same public place-details source as the Accor search box; booking, rates, rooms, reviews, and account data are excluded.\n- **Params:** `id` (string, **required**) — Identifier returned by Accor search suggestions; `language` (string, optional) — Optional locale; `source` (string, **required**) — Suggestion source\n\n### `accor_search_suggest`\n\n- **HTTP:** `GET /accor/search/suggest`\n- **What:** Accor destination and hotel search suggestions. Returns anonymous Accor typeahead suggestions for a partial destination or hotel query, including destination/place and hotel identifiers, types, labels, and match metadata. It uses the public search-box suggestion source only; booking, rates, rooms, reviews, and result-list requests are excluded.\n- **Params:** `language` (string, optional) — Optional locale used by the suggestion source; `query` (string, **required**) — Partial destination or hotel query (at least two characters)\n\n## Hotels.com (7)\n\n### `hotels_autocomplete`\n\n- **HTTP:** `GET /hotels/autocomplete`\n- **What:** Get Hotels.com destination suggestions. Returns anonymous Hotels.com search-box suggestions for a partial destination or property name. Availability and prices are not included.\n- **Params:** `q` (string, **required**) — Partial destination or property name\n\n### `hotels_offers`\n\n- **HTTP:** `POST /hotels/offers`\n- **What:** Get Hotels.com room offers. Returns the public room/unit offer summaries shown for one Hotels.com property and date range, including room labels and non-transactional offer messages. Booking, checkout, payment, and reservation tokens are never returned. property_id is the numeric global property id from a Search response.\n- **Params:** `request` (object, **required**) — Room offers request\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\n### `hotels_property`\n\n- **HTTP:** `POST /hotels/property`\n- **What:** Get Hotels.com property details. Returns public static metadata from one canonical Hotels.com property page, including name, address, rating, images, and amenities. Date-bound availability, prices, booking, and review content are excluded.\n- **Params:** `request` (object, **required**) — Canonical Hotels.com property URL\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\n### `hotels_rates`\n\n- **HTTP:** `POST /hotels/rates`\n- **What:** Get Hotels.com rates for one property. Returns one Hotels.com property's date-bound rates and availability: the same normalized property card Search returns, with the live per-night and per-stay prices Hotels.com shows for the requested dates. property_id is the numeric global property id from a Search response's properties[].id; it is distinct from the legacy /ho<id>/ URL id.\n- **Params:** `request` (object, **required**) — Rates request\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\n### `hotels_reviews`\n\n- **HTTP:** `POST /hotels/reviews`\n- **What:** Get Hotels.com guest reviews. Returns one Hotels.com property's review overview: the overall rating (0-10) with its descriptive label, the per-category sub-ratings (cleanliness, service, amenities, and so on), and a bounded set of highlighted guest reviews with reviewer, date, rating label, text, and verified-stay flag. property_id is the numeric global property id from a Search response's properties[].id. This mirrors the property page's Guest reviews section; the full paginated review archive is not exposed.\n- **Params:** `request` (object, **required**) — Reviews request\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\n### `hotels_reviews_archive`\n\n- **HTTP:** `POST /hotels/reviews/archive`\n- **What:** List Hotels.com guest reviews. Returns one page of public guest reviews for a Hotels.com property, including reviewer, date, traveler type, rating label, title, and message. Use page and page_size to walk the archive; the response reports whether another page is available. property_id is the numeric global property id from a Search response's properties[].id. Booking, account, and private review data are not included.\n- **Params:** `request` (object, **required**) — Review archive request\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\n### `hotels_search`\n\n- **HTTP:** `POST /hotels/search`\n- **What:** Search Hotels.com hotels. Returns a page of date-bound Hotels.com hotel search results for either a free-text destination or a numeric Hotels.com region_id: normalized property cards with per-night and per-stay prices, review score and count, location, thumbnail, amenities, and promotional badges. Provide exactly one of query or region_id; region_id skips destination typeahead resolution. Prices are the live rates Hotels.com shows for the requested check-in and check-out dates.\n- **Params:** `request` (object, **required**) — Search request\n- **REST body:** Send the value of the MCP argument `request` directly as the JSON body; do not wrap it in a `request` property.\n\nFile v1.0.18:skill-card.md\n\n## Description:\n\nResearches hotels, flights, attractions, short-term rentals, and live events through the Crawlora API across Booking.com, Expedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster, returning normalized JSON for comparison and review workflows.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to research travel options and live events, compare prices and reviews, and retrieve normalized JSON for trip-planning or due-diligence workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Travel queries, dates, destinations, and POST bodies are sent to the third-party Crawlora API.\n\nMitigation: Avoid confidential personal details in search terms or request bodies, and install only when third-party API use is acceptable.\n\nRisk: The skill requires a Crawlora API key for requests.\n\nMitigation: Store CRAWLORA_API_KEY in the environment and do not hardcode, pass, or commit the key.\n\nRisk: The skill provides research data only and does not complete bookings or payments.\n\nMitigation: Treat returned travel and event data as research input and verify details before booking or purchase decisions.\n\n## Reference(s):\n\n- [Endpoint reference](reference/endpoints.md)\n- [Crawlora API documentation](https://crawlora.net/docs?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n- [Crawlora playground](https://crawlora.net/playground?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n- [ClawHub skill page](https://clawhub.ai/crawlora-org/skills/travel-hotel-research)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, shell commands, configuration, code, text]\n\n**Output Format:** [Markdown guidance with shell command examples and JSON API responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires CRAWLORA_API_KEY; helper requests public travel, stay, attraction, review, and event data from Crawlora endpoints.]\n\n## Skill Version(s):\n\n1.0.18 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.17: 5 files, 17062 bytes\n\nFiles: reference/endpoints.md (41067b), scripts/crawlora.sh (10720b), skill-card.md (2585b), SKILL.md (6378b), _meta.json (141b)\n\nFile v1.0.17:SKILL.md\n\n---\nname: travel-hotel-research\ndescription: Researches hotels, flights, attractions, short-term rentals, and live events via the Crawlora API — Booking.com, Expedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster — returning clean JSON. Use when the user wants to search or compare hotel/stay prices and reviews, look up flight options, find attractions/things-to-do or concerts/events, or research an Airbnb host or listing.\n---\n\n# Travel & hotel research\n\nSearch and compare hotels, flights, attractions, short-term rentals, and\nlive events across seven travel platforms as normalized JSON from the\nCrawlora API — no scraping OTA search-result pages.\n\n## When to use this skill\n\n- \"Find hotels in <city> for <dates>\" / compare prices across OTAs.\n- \"What are the reviews like for this hotel/attraction?\"\n- \"Search flights from <origin> to <destination>.\"\n- \"What's there to do in <city>?\" (attractions/tours, or concerts/events).\n- \"Look up this Airbnb host/listing\" (reviews, calendar, other listings).\n- \"Find tickets/events for <artist> in <city>\" (Ticketmaster).\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Hotels** — `/booking/search` (params `query`, `checkin`, `checkout`),\n   `/agoda/hotels/search`, `/tripcom/hotels/search` (GET, by city) or\n   `POST /expedia/properties/search` (Expedia's Stays API is POST-only —\n   its exact request-body field names are undocumented, see below); detail\n   via `/booking/hotel-detail`, `/agoda/hotels/{property_id}`,\n   `POST /expedia/properties/detail`; reviews via `/booking/reviews`,\n   `POST /expedia/properties/reviews`.\n2. **Flights** — `/agoda/flights/search` (GET) and `POST /expedia/flights/search`\n   / `/booking-flights/search`; use each platform's `.../autocomplete` or\n   `.../search-locations` endpoint first to resolve city/airport codes.\n3. **Attractions & things-to-do** — `/booking-attractions/search`,\n   `POST /expedia/activities/search`, `/agoda/activities/search`,\n   `/tripadvisor/search` (hotels, restaurants, and attractions all in one).\n4. **TripAdvisor** — `/tripadvisor/autocomplete` to resolve a place, then\n   `/tripadvisor/place` for the profile and `/tripadvisor/reviews` for guest\n   reviews (works for hotels, restaurants, and attractions).\n5. **Airbnb** — `/airbnb/search` to find stays; `/airbnb/room/{id}` for a\n   listing (+ `/calendar`, `/reviews`); `/airbnb/host/{id}` for the host\n   profile (+ `/listings`, `/reviews`).\n6. **Ticketmaster** — `/ticketmaster/search-events` (`q`) or\n   `/ticketmaster/discover-city-events` (`city`) to find events;\n   `/ticketmaster/event` for detail, `/ticketmaster/venue` (+ `/venue-events`)\n   for a venue, `/ticketmaster/attraction` (+ `/attraction-events`) for a\n   performer/team's full schedule.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Hotel search (GET):\nscripts/crawlora.sh /booking/search query=\"Lisbon\" checkin=2026-09-10 checkout=2026-09-14 | jq '.'\nscripts/crawlora.sh /agoda/hotels/search city=\"Lisbon\" | jq '.'\n\n# Expedia (POST — exact body field names are unconfirmed, see Notes below):\nscripts/crawlora.sh -X POST /expedia/properties/search '{\"destination\":\"Lisbon\",\"checkIn\":\"2026-09-10\",\"checkOut\":\"2026-09-14\"}' | jq '.'\n\n# Airbnb:\nscripts/crawlora.sh /airbnb/search location=\"Lisbon\" | jq '.'\nscripts/crawlora.sh /airbnb/room/12345678 | jq '.'\n\n# Ticketmaster:\nscripts/crawlora.sh /ticketmaster/search-events q=\"Coldplay\" | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every Booking,\nExpedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster endpoint\nthis skill uses.\n\n## Examples\n\n- **Cross-OTA price compare:** search the same destination/dates on\n  `/booking/search`, `/agoda/hotels/search`, and `POST /expedia/properties/search`,\n  then diff nightly rates for comparable hotels.\n- **Stay vs. hotel:** `/airbnb/search` against `/booking/search` for the\n  same city to compare short-term-rental vs. hotel pricing.\n- **Trip planning:** `/tripadvisor/search` for attractions in a city, then\n  `/tripadvisor/reviews` on the top few to check recent visitor sentiment.\n- **Host due diligence:** `/airbnb/host/{id}` + `/airbnb/host/{id}/reviews`\n  before booking, or `/airbnb/host/{id}/listings` to see their full portfolio.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public search/listing/review pages; no booking or\n  payment actions are performed.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **Expedia and some Agoda endpoints are `POST` with a JSON body** — remember\n  `-X POST` when calling `scripts/crawlora.sh`. Most Booking/Agoda/Trip.com/\n  Airbnb/TripAdvisor endpoints are plain `GET` with query params.\n- **Expedia's exact request-body field names are unconfirmed** — the tool\n  schema only exposes an opaque `option` object (destination, dates,\n  occupancy, filters expected inside), and live-testing ruled out both a\n  `{\"option\": {...}}` wrapper and several plausible flat field-name guesses\n  (`checkInDate`/`checkOutDate`, `checkIn`/`checkOut`). Confirm the current\n  shape at [crawlora.net/docs](https://crawlora.net/docs?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  or the [playground](https://crawlora.net/playground?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills)\n  before relying on the Expedia endpoints — every other endpoint in this\n  skill is live-verified, Expedia's POST body shape is the one exception.\n- Location/city ids are platform-specific — always resolve with the\n  platform's own autocomplete/locations-search endpoint first.\n\nFile v1.0.17:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"travel-hotel-research\",\n  \"version\": \"1.0.17\",\n  \"publishedAt\": 1789640471197\n}\n\nFile v1.0.17:reference/endpoints.md\n\n# travel-hotel-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**71 endpoints across 10 platform group(s).**\n\n## Booking (8)\n\n### `booking_attractions_detail`\n\n- **HTTP:** `GET /booking-attractions/detail`\n- **What:** Booking.com attraction detail. Returns a Booking.com attraction's detail page.\n- **Params:** `slug` (string, **required**) — Attraction slug, from a prior attraction search result\n\n### `booking_attractions_reviews`\n\n- **HTTP:** `GET /booking-attractions/reviews`\n- **What:** Booking.com attraction reviews. Returns normalized guest reviews for a Booking.com attraction.\n- **Params:** `limit` (integer, optional) — Reviews per page, 1-50, default 10; `page` (integer, optional) — 1-based result page, default 1; `product_id` (string, **required**) — Attraction product id, from a prior attraction search result\n\n### `booking_attractions_search`\n\n- **HTTP:** `GET /booking-attractions/search`\n- **What:** Search Booking.com attractions. Returns normalized Booking.com attractions/things-to-do search results for a destination and date range, with an optional category/subcategory filter and a discoverable category taxonomy.\n- **Params:** `category` (string, optional) — Optional top-level category tagname filter, from a prior response's categories; `end_date` (string, optional) — Availability end date, YYYY-MM-DD, defaults to start_date; `limit` (integer, optional) — Results per page, 1-30, default 15; `page` (integer, optional) — 1-based result page, default 1; `query` (string, **required**) — Destination name or city; `start_date` (string, **required**) — Availability start date, YYYY-MM-DD; `subcategory` (string, optional) — Optional subcategory tagname filter, from a prior response's categories\n\n### `booking_flights_autocomplete`\n\n- **HTTP:** `GET /booking-flights/autocomplete`\n- **What:** Booking.com flight autocomplete. Returns Booking.com flight-search location suggestions (airports/cities) for a query string.\n- **Params:** `origin` (string, optional) — Optional origin location code, biases results by proximity; `origin_type` (string, optional) — Origin location type; `query` (string, **required**) — City or airport name/code to search; `type` (string, optional) — Location role, default to\n\n### `booking_flights_search`\n\n- **HTTP:** `GET /booking-flights/search`\n- **What:** Search Booking.com flights. Returns normalized round-trip or one-way flight offers between two Booking.com flight-search locations.\n- **Params:** `adults` (integer, optional) — Number of adults, 1-9, default 1; `cabin_class` (string, optional) — Cabin class, default ECONOMY; `children` (integer, optional) — Number of children, 0-9; `depart` (string, **required**) — Departure date, YYYY-MM-DD; `from` (string, **required**) — Origin location id, e.g. SGN.AIRPORT, from a prior autocomplete result; `from_country` (string, optional) — Origin country code; `return` (string, optional) — Return date, YYYY-MM-DD, required when type is ROUNDTRIP; `sort` (string, optional) — Result sort order, default BEST; `to` (string, **required**) — Destination location id, same composite format as from; `to_country` (string, optional) — Destination country code; `type` (string, optional) — Trip type, default ROUNDTRIP\n\n### `booking_hotel_detail`\n\n- **HTTP:** `GET /booking/hotel-detail`\n- **What:** Booking.com hotel detail. Returns a Booking.com hotel's core detail page: rating, facilities, highlights, house rules, cover photos, and rooms with their own photos.\n- **Params:** `hotel_id` (integer, **required**) — Booking.com hotel id, from a prior search's property id\n\n### `booking_reviews`\n\n- **HTTP:** `GET /booking/reviews`\n- **What:** Booking.com hotel reviews. Returns normalized guest reviews for a Booking.com hotel, with an optional free-text search over review content.\n- **Params:** `destination_id` (integer, optional) — Destination id (ufi), from a prior search response; `hotel_country_code` (string, **required**) — Hotel's country code, from a prior search response; `hotel_id` (integer, **required**) — Booking.com hotel id, from a prior search's property id; `hotel_score` (number, optional) — Hotel's overall review score; `limit` (integer, optional) — Reviews per page, 1-25, default 10; `page` (integer, optional) — 1-based result page, default 1; `search_text` (string, optional) — Optional free-text search over review content\n\n### `booking_search`\n\n- **HTTP:** `GET /booking/search`\n- **What:** Search Booking.com hotels. Returns normalized Booking.com hotel search results for a destination and date range.\n- **Params:** `adults` (integer, optional) — Number of adults, 1-9, default 2; `checkin` (string, **required**) — Check-in date, YYYY-MM-DD; `checkout` (string, **required**) — Check-out date, YYYY-MM-DD; `children` (integer, optional) — Number of children, 0-9; `page` (integer, optional) — 1-based result page, default 1; `query` (string, **required**) — Destination name or city; `rooms` (integer, optional) — Number of rooms, 1-8, default 1\n\n## Expedia (7)\n\n### `expedia_activities_search`\n\n- **HTTP:** `POST /expedia/activities/search`\n- **What:** Search Expedia activities. Returns normalized Expedia Things To Do (activities/tours) search results for a free-text destination and date range.\n- **Params:** `option` (object, **required**) — Activity search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_flights_search`\n\n- **HTTP:** `POST /expedia/flights/search`\n- **What:** Search Expedia flights. Returns normalized Expedia Flights search results (departing-leg offers) for an origin/destination IATA pair and date range.\n- **Params:** `option` (object, **required**) — Flights search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_locations_search`\n\n- **HTTP:** `POST /expedia/locations/search`\n- **What:** Search Expedia destinations. Returns normalized destination/property typeahead suggestions (cities, airports, neighborhoods, hotels) for a free-text term.\n- **Params:** `option` (object, **required**) — Location search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_detail`\n\n- **HTTP:** `POST /expedia/properties/detail`\n- **What:** Expedia Stays property detail. Returns a hotel's detail summary (name, star rating, address/coordinates, top amenities) for a known property id.\n- **Params:** `option` (object, **required**) — Property detail payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_filters`\n\n- **HTTP:** `POST /expedia/properties/filters`\n- **What:** Expedia search filters. Returns the sort and filter facets (amenities, star rating, neighborhood, nightly price range, sort options) available for a Stays search.\n- **Params:** `option` (object, **required**) — Property filters payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_reviews`\n\n- **HTTP:** `POST /expedia/properties/reviews`\n- **What:** Expedia Stays property guest reviews. Returns a hotel's overall rating and highlighted/recent guest reviews (reviewer, date, rating, message) for a known property id.\n- **Params:** `option` (object, **required**) — Property reviews payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n### `expedia_properties_search`\n\n- **HTTP:** `POST /expedia/properties/search`\n- **What:** Search Expedia Stays properties. Returns normalized Expedia Stays (hotel) search results for a free-text destination and date range.\n- **Params:** `option` (object, **required**) — Property search payload\n- **REST body:** Send the value of the MCP argument `option` directly as the JSON body; do not wrap it in a `option` property.\n\n## Agoda (8)\n\n### `agoda_activities_search`\n\n- **HTTP:** `GET /agoda/activities/search`\n- **What:** Search Agoda activities. Returns Agoda activities (tours, attractions, experiences) matching a free-text keyword and/or a city. When keyword is omitted, the resolved city's name is used instead to return a general listing of activities in that city. Callers may supply a known Agoda city id or a free-text city name for the city filter; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own destination search.\n- **Params:** `city` (string, optional) — Free-text city name, used directly as the search text when keyword is omitted, and to resolve a city id filter.; `city_id` (integer, optional) — Numeric Agoda city id to filter results to. Optional if keyword is supplied; city_id takes precedence over city when both are supplied.; `keyword` (string, optional) — Free-text activity search keyword. When omitted, the resolved city's name is used instead.\n\n### `agoda_activity_detail`\n\n- **HTTP:** `GET /agoda/activities/{activity_id}`\n- **What:** Get Agoda activity detail. Returns full activity detail from Agoda: title, description, stated duration, categories, and content images. Credential-free public data from Agoda's own activity content source.\n- **Params:** `activity_id` (string, **required**) — Numeric Agoda activity id, from a prior activities search call's activity_id field\n\n### `agoda_flights_itinerary_amenities`\n\n- **HTTP:** `POST /agoda/flights/itinerary-amenities`\n- **What:** Get Agoda flight segment amenities. Returns real-content amenities (aircraft type, seat layout, meals, entertainment, wifi) for one or more flight segments. Copy the segments straight from a flight search response's own segment fields. Credential-free public data from Agoda's own flight content service.\n- **Params:** `body` (object, **required**) — One or more flight segments to fetch amenities for\n- **REST body:** Send the value of the MCP argument `body` directly as the JSON body; do not wrap it in a `body` property.\n\n### `agoda_flights_search`\n\n- **HTTP:** `GET /agoda/flights/search`\n- **What:** Search Agoda one-way flights. Returns bookable one-way flight itineraries between two IATA airport codes for a departure date, including per-segment flight number, airline, times, layovers, aircraft type, and price. Resolve free-text city/airport names to codes first via the flight destination search endpoint. Credential-free public data from Agoda's own flight search.\n- **Params:** `adults` (integer, optional) — Adult passengers (age 12+), defaults to 1; `cabin_class` (string, optional) — Cabin class, defaults to Economy; `children` (integer, optional) — Child passengers (age 2-11), defaults to 0; `departure_date` (string, **required**) — Departure date, YYYY-MM-DD; `destination` (string, **required**) — Destination IATA airport code; `infants` (integer, optional) — Infant passengers (under age 2), defaults to 0; `origin` (string, **required**) — Origin IATA airport code; `page` (integer, optional) — 1-indexed result page, defaults to 1\n\n### `agoda_flights_search_locations`\n\n- **HTTP:** `GET /agoda/flights/search-locations`\n- **What:** Search Agoda flight destinations/airports. Resolves a free-text city or airport name into IATA airport codes for flight search, with each city's direct and nearby airports. Credential-free public data from Agoda's own flight destination search.\n- **Params:** `keyword` (string, **required**) — Free-text city or airport name\n\n### `agoda_homes_search`\n\n- **HTTP:** `GET /agoda/homes/search`\n- **What:** Search Agoda Homes & Apartments by city. Returns Homes & Apartments results for an Agoda city: full listing detail for every matching property whose accommodation type is Apartment, drawn from the same city search as hotel search and filtered to non-hotel accommodation types. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own hotel/home search.\n- **Params:** `city` (string, optional) — Free-text city name, resolved to a numeric city id via Agoda's own destination search. Ignored when city_id is also supplied.; `city_id` (integer, optional) — Numeric Agoda city id, e.g. 9395 for Bangkok. Either city_id or city is required; city_id takes precedence when both are supplied.; `limit` (integer, optional) — Candidate listings fetched per page before filtering to homes/apartments, defaults to 10, maximum 50; `page` (integer, optional) — 1-indexed result page over the underlying city search, defaults to 1\n\n### `agoda_hotel_detail`\n\n- **HTTP:** `GET /agoda/hotels/{property_id}`\n- **What:** Get Agoda hotel detail. Returns full hotel detail from Agoda: identity (name, any former name), an accommodation type code, address (street address, postal code, city, country), guest rating, a main photo, room count, hotel chain id, a long and short description, and short-form policy statements (minimum age, adult/child definitions, extra-bed and additional-room booking policy). Credential-free public data from Agoda's own hotel content source.\n- **Params:** `property_id` (string, **required**) — Numeric Agoda property id, from a prior search call's property_id field or the id embedded in an Agoda hotel URL\n\n### `agoda_hotels_search`\n\n- **HTTP:** `GET /agoda/hotels/search`\n- **What:** Search Agoda hotels by city. Returns hotel search results for an Agoda city: the matching property ids for that city plus a direct link to each property's listing page. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own hotel search.\n- **Params:** `city` (string, optional) — Free-text city name, resolved to a numeric city id via Agoda's own destination search. Ignored when city_id is also supplied.; `city_id` (integer, optional) — Numeric Agoda city id, e.g. 9395 for Bangkok. Either city_id or city is required; city_id takes precedence when both are supplied.; `limit` (integer, optional) — Results per page, defaults to 10, maximum 50; `page` (integer, optional) — 1-indexed result page, defaults to 1\n\n## TripAdvisor (6)\n\n### `tripadvisor_autocomplete`\n\n- **HTTP:** `GET /tripadvisor/autocomplete`\n- **What:** Autocomplete TripAdvisor locations and places. Returns normalized TripAdvisor public typeahead candidates from the credential-free GraphQL endpoint.\n- **Params:** `limit` (integer, optional) — Maximum results; `locale` (string, optional) — TripAdvisor locale; `q` (string, **required**) — Autocomplete query; `route_uid` (string, optional) — Optional captured route uid; `scope_geo_id` (integer, optional) — Optional scoped geo id; `search_session_id` (string, optional) — Optional captured search session id; `type` (string, optional) — Optional result type hint; `typeahead_id` (string, optional) — Optional captured typeahead id\n\n### `tripadvisor_enums`\n\n- **HTTP:** `GET /tripadvisor/enums`\n- **What:** Get TripAdvisor enum metadata. Returns supported TripAdvisor enum values for place/listing filters, including locales, currencies, languages, listing types, filters, amenities, and category ids.\n- **Params:** _none_\n\n### `tripadvisor_hotels`\n\n- **HTTP:** `GET /tripadvisor/hotels`\n- **What:** Search TripAdvisor hotels. Returns normalized TripAdvisor hotel listing results from public credential-free GraphQL listing data.\n- **Params:** `amenities` (array, optional) — Amenity filter ids; `class` (integer, optional) — Hotel class filter; `currency` (string, optional) — Currency code; `filter_id` (string, optional) — Optional filter id such as class or ufe; `geo_id` (integer, **required**) — TripAdvisor geo id; `limit` (integer, optional) — Maximum results; `offset` (integer, optional) — Zero-based result offset; `price_max` (integer, optional) — Maximum price filter; `price_min` (integer, optional) — Minimum price filter; `pricing_mode` (string, optional) — Pricing mode; `sort` (string, optional) — Sort value; `travelers_choice` (boolean, optional) — Filter Travelers' Choice properties; `travelers_choice_botb` (boolean, optional) — Filter Best of the Best properties\n\n### `tripadvisor_place`\n\n- **HTTP:** `GET /tripadvisor/place`\n- **What:** Get TripAdvisor place. Returns a rich normalized TripAdvisor place profile. Destination and bookable tour/experience pages resolve through a faster dedicated lookup; everything else comes from public place HTML, using configured browser fallbacks when direct HTML is blocked.\n- **Params:** `id` (string, optional) — TripAdvisor location id fallback; `url` (string, optional) — TripAdvisor place URL\n\n### `tripadvisor_reviews`\n\n- **HTTP:** `GET /tripadvisor/reviews`\n- **What:** Get TripAdvisor reviews. Returns normalized TripAdvisor public reviews from credential-free GraphQL review data. Pass either id or url.\n- **Params:** `do_machine_translation` (boolean, optional) — Enable upstream machine translation; `id` (string, optional) — TripAdvisor location id; `language` (string, optional) — Review language; `limit` (integer, optional) — Maximum reviews; `page` (integer, optional) — 1-based review page; `photos_per_review_limit` (integer, optional) — Maximum photos per review; `ratings` (array, optional) — Rating filters; `sort_by` (string, optional) — Review sort field; `sort_type` (string, optional) — Review sort type; `url` (string, optional) — TripAdvisor place URL\n\n### `tripadvisor_search`\n\n- **HTTP:** `GET /tripadvisor/search`\n- **What:** Search TripAdvisor places. Returns normalized TripAdvisor place listings for hotels, restaurants, attractions, and supported attraction category types.\n- **Params:** `amenities` (array, optional) — Hotel amenity filter ids; `class` (integer, optional) — Hotel class filter; `currency` (string, optional) — Currency code; `establishment_types` (array, optional) — Restaurant establishment type ids; `filter_id` (string, optional) — Optional hotel filter id; `geo_id` (integer, **required**) — TripAdvisor geo id; `limit` (integer, optional) — Maximum results; `locale` (string, optional) — TripAdvisor locale; `offset` (integer, optional) — Zero-based result offset; `online_options` (array, optional) — Restaurant online option ids; `price_max` (integer, optional) — Maximum hotel price filter; `price_min` (integer, optional) — Minimum hotel price filter; `pricing_mode` (string, optional) — Hotel pricing mode; `restaurant_date` (string, optional) — Restaurant availability date; `restaurant_guests` (integer, optional) — Restaurant guest count; `restaurant_time` (string, optional) — Restaurant availability time; `sort` (string, optional) — Sort value; `travelers_choice` (boolean, optional) — Filter Travelers' Choice hotels; `travelers_choice_botb` (boolean, optional) — Filter Best of the Best hotels; `type` (string, **required**) — Listing type\n\n## Trip.com (2)\n\n### `tripcom_hotel_detail`\n\n- **HTTP:** `GET /tripcom/hotels/{id}`\n- **What:** Get Trip.com hotel detail. Returns a normalized Trip.com hotel-detail page: identity (name, local name, star rating, city/province/country), location (address, zone, latitude/longitude, nearby-transport description), guest rating (overall score plus cleanliness/amenities/location/service breakdown), images, description, check-in/check-out and child policy summaries, and popular facilities. Credential-free public data sourced from Trip.com's own server-rendered hotel-detail page. Pricing is not included: Trip.com's detail page only returns per-night rates alongside check-in/check-out dates, which this endpoint does not take as input -- use the search endpoint for a city's current display prices.\n- **Params:** `id` (string, **required**) — Trip.com hotel id, from a prior search call's hotel_id field; `slug` (string, optional) — Optional slug segment for a nicer canonical source URL (e.g. the district/city slug from a search result's url). Not required and not validated by Trip.com.\n\n### `tripcom_hotels_search`\n\n- **HTTP:** `GET /tripcom/hotels/search`\n- **What:** Search Trip.com hotels by city. Returns Trip.com's own top-hotels page for a city: normalized hotel summaries (name, location, star rating, guest rating, review count, image, display price) for the hotels Trip.com features on that city's hotel-list page. Trip.com does not expose a credential-free free-text city search, so callers supply the exact city_slug and city_id pair from a known Trip.com hotel-list URL of the form https://www.trip.com/hotels/{city_slug}-hotels-list-{city_id}/. Credential-free public data sourced from Trip.com's own server-rendered hotel-list page.\n- **Params:** `city_id` (string, **required**) — Trip.com numeric city id, the trailing number of a /hotels/{city_slug}-hotels-list-{city_id}/ URL; `city_slug` (string, **required**) — Trip.com city slug, the text segment of a /hotels/{city_slug}-hotels-list-{city_id}/ URL\n\n## Airbnb (7)\n\n### `airbnb_host`\n\n- **HTTP:** `GET /airbnb/host/{id}`\n- **What:** Get Airbnb host profile. Returns a normalized Airbnb public host profile — display name, Superhost and identity-verification status, location, bio, hosting tenure, total guest-review count, and total listing count.\n- **Params:** `id` (string, **required**) — Host id (numeric)\n\n### `airbnb_host_listings`\n\n- **HTTP:** `GET /airbnb/host/{id}/listings`\n- **What:** Get Airbnb host listings. Returns the listings an Airbnb host manages, paginated. Page 1 comes from the host profile; deeper pages page through the host's full portfolio.\n- **Params:** `id` (string, **required**) — Host id (numeric); `page` (integer, optional) — 1-based page\n\n### `airbnb_host_reviews`\n\n- **HTTP:** `GET /airbnb/host/{id}/reviews`\n- **What:** Get Airbnb host reviews. Returns reviews guests left for an Airbnb host, paginated, including the reviewer name and location.\n- **Params:** `id` (string, **required**) — Host id (numeric); `page` (integer, optional) — 1-based page\n\n### `airbnb_room`\n\n- **HTTP:** `GET /airbnb/room/{id}`\n- **What:** Get Airbnb room. Returns normalized Airbnb public room details.\n- **Params:** `id` (string, **required**) — Room id\n\n### `airbnb_room_calendar`\n\n- **HTTP:** `GET /airbnb/room/{id}/calendar`\n- **What:** Get Airbnb room calendar. Returns public calendar month hints parsed from Airbnb room bootstrap data.\n- **Params:** `id` (string, **required**) — Room id\n\n### `airbnb_room_reviews`\n\n- **HTTP:** `GET /airbnb/room/{id}/reviews`\n- **What:** Get Airbnb room reviews. Returns normalized Airbnb public review snippets.\n- **Params:** `id` (string, **required**) — Room id; `page` (integer, optional) — 1-based page\n\n### `airbnb_search`\n\n- **HTTP:** `GET /airbnb/search`\n- **What:** Search Airbnb stays. Returns normalized Airbnb public web search results.\n- **Params:** `adults` (integer, optional) — Adult guests; `check_in` (string, optional) — Check-in date; `check_out` (string, optional) — Check-out date; `currency` (string, optional) — Currency for bounded map search; `location` (string, **required**) — Location; `ne_lat` (number, optional) — Northeast latitude for bounded map search; `ne_lng` (number, optional) — Northeast longitude for bounded map search; `page` (integer, optional) — 1-based page; `sw_lat` (number, optional) — Southwest latitude for bounded map search; `sw_lng` (number, optional) — Southwest longitude for bounded map search; `zoom` (integer, optional) — Map zoom for bounded map search\n\n## Ticketmaster (15)\n\n### `ticketmaster_attraction`\n\n- **HTTP:** `GET /ticketmaster/attraction`\n- **What:** Get a Ticketmaster attraction. Returns normalized details for one Ticketmaster artist, team, or other attraction.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id\n\n### `ticketmaster_attraction_events`\n\n- **HTTP:** `GET /ticketmaster/attraction-events`\n- **What:** List an attraction's Ticketmaster events. Returns upcoming Ticketmaster events for one attraction. The sort enum accepts `relevance` and `date`.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id; `page` (integer, optional) — Zero-based page (0-49); `sort` (string, optional) — Result order\n\n### `ticketmaster_attraction_related`\n\n- **HTTP:** `GET /ticketmaster/attraction-related`\n- **What:** List a Ticketmaster attraction's related attractions. Returns the \"Fans Also Viewed\" attractions shown on one attraction's own page. An attraction with no recommendation data returns a valid empty list.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id\n\n### `ticketmaster_attraction_reviews`\n\n- **HTTP:** `GET /ticketmaster/attraction-reviews`\n- **What:** List a Ticketmaster attraction's fan reviews. Returns paginated fan reviews for one attraction, including its aggregate rating and Ticketmaster's own AI-generated review summary.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster attraction id; `limit` (integer, optional) — Reviews per page (10-50); `offset` (integer, optional) — Result offset (0-9995)\n\n### `ticketmaster_discover_categories`\n\n- **HTTP:** `GET /ticketmaster/discover-categories`\n- **What:** List Ticketmaster discover categories. Lists every current Concerts, Sports, Arts & Theater, and Family category with pagination. Section accepts `all`, `concerts`, `sports`, `arts-theater`, and `family`.\n- **Params:** `page` (integer, optional) — One-based page; `per_page` (integer, optional) — Categories per page; `section` (string, optional) — Discover section\n\n### `ticketmaster_discover_category_events`\n\n- **HTTP:** `GET /ticketmaster/discover-category-events`\n- **What:** List events in a Ticketmaster discover category. Returns a zero-based paginated event feed for any category returned by ticketmaster-discover-categories.\n- **Params:** `category_id` (string, **required**) — Ticketmaster discover category id; `page` (integer, optional) — Zero-based page\n\n### `ticketmaster_discover_cities`\n\n- **HTTP:** `GET /ticketmaster/discover-cities`\n- **What:** List Ticketmaster discover cities. Lists Ticketmaster city discovery destinations for a country with pagination.\n- **Params:** `country` (string, optional) — Two-letter country code; `page` (integer, optional) — One-based page; `per_page` (integer, optional) — Cities per page\n\n### `ticketmaster_discover_city_events`\n\n- **HTTP:** `GET /ticketmaster/discover-city-events`\n- **What:** List events in a Ticketmaster discover city. Returns a zero-based paginated event feed for a city slug returned by ticketmaster-discover-cities.\n- **Params:** `city` (string, **required**) — Ticketmaster discover city slug; `country` (string, optional) — Two-letter country code matching the selected city; `page` (integer, optional) — Zero-based page\n\n### `ticketmaster_event`\n\n- **HTTP:** `GET /ticketmaster/event`\n- **What:** Get a Ticketmaster event. Returns normalized details for one Ticketmaster event, including its venue, attractions, timing, availability flags, and classification.\n- **Params:** `id` (string, **required**) — Ticketmaster event id\n\n### `ticketmaster_search_events`\n\n- **HTTP:** `GET /ticketmaster/search-events`\n- **What:** Search Ticketmaster events. Searches Ticketmaster events by artist, event, team, or venue. A zero total with an empty events list is a valid no-results response. The sort enum accepts `relevance` and `date`.\n- **Params:** `page` (integer, optional) — Zero-based page (0-49); `q` (string, **required**) — Artist, event, team, or venue query; `sort` (string, optional) — Result order\n\n### `ticketmaster_suggest`\n\n- **HTTP:** `GET /ticketmaster/suggest`\n- **What:** Suggest Ticketmaster artists, events, and venues. Returns autocomplete suggestions for a partial query.\n- **Params:** `q` (string, **required**) — Partial artist, event, team, or venue query\n\n### `ticketmaster_trending_attractions`\n\n- **HTTP:** `GET /ticketmaster/trending-attractions`\n- **What:** List trending Ticketmaster attractions. Returns a ranked list of currently-trending attractions across every segment (music, sports, arts and theater, family), not scoped to one category or city.\n- **Params:** _none_\n\n### `ticketmaster_venue`\n\n- **HTTP:** `GET /ticketmaster/venue`\n- **What:** Get a Ticketmaster venue. Returns normalized details and visitor information for one Ticketmaster venue.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster venue id\n\n### `ticketmaster_venue_enhanced_details`\n\n- **HTTP:** `GET /ticketmaster/venue-enhanced-details`\n- **What:** Get a Ticketmaster venue's enhanced branding details. Returns header branding imagery and external links (the venue's own site, resident teams) for major venues. Smaller venues without enhanced content return 404.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster venue id\n\n### `ticketmaster_venue_events`\n\n- **HTTP:** `GET /ticketmaster/venue-events`\n- **What:** List a venue's Ticketmaster events. Returns upcoming Ticketmaster events at one venue. The sort enum accepts `relevance` and `date`.\n- **Params:** `id` (string, **required**) — Numeric Ticketmaster venue id; `page` (integer, optional) — Zero-based page (0-49); `sort` (string, optional) — Result order\n\n## TicketWeb (3)\n\n### `ticketweb_event`\n\n- **HTTP:** `GET /ticketweb/event`\n- **What:** Get a TicketWeb event. Returns normalized details for one TicketWeb event: venue, dates, age restriction, delivery methods, and per-tier ticket pricing (base price, fee breakdown, and total) when tickets are on sale. `has_tickets` is false and `sections` is empty for a free/RSVP event with no paid tickets, a sold-out event, or an access-code-gated event -- TicketWeb's own data does not reliably distinguish these three cases at this level, so the response reports the shared observable state (no purchasable sections) rather than guessing which applies.\n- **Params:** `id` (string, **required**) — Numeric TicketWeb event id\n\n### `ticketweb_search`\n\n- **HTTP:** `GET /ticketweb/search`\n- **What:** Search TicketWeb events. Searches TicketWeb events by artist, event, or venue. A zero count with an empty events list is a valid no-results response. availability is one of `in_stock`, `sold_out`, `unknown` per event.\n- **Params:** `page` (integer, optional) — One-based result page, 1-50; `q` (string, **required**) — Artist, event, or venue query\n\n### `ticketweb_venue`\n\n- **HTTP:** `GET /ticketweb/venue`\n- **What:** Get a TicketWeb venue. Returns one TicketWeb venue's detail (name, address) plus one page of its upcoming events. A zero count with an empty events list on page 1 is a valid \"no upcoming events\" response.\n- **Params:** `id` (string, **required**) — Numeric TicketWeb venue id; `page` (integer, optional) — One-based page of upcoming events, 1-50\n\n## Accor (8)\n\n### `accor_amenities`\n\n- **HTTP:** `GET /accor/amenities`\n- **What:** Accor amenity reference catalog. Returns the anonymous public Accor amenity catalog with stable amenity codes, labels, categories, and display ordering. It is reference data for interpreting hotel search facets; booking, rates, rooms, reviews, and account data are excluded.\n- **Params:** _none_\n\n### `accor_brands`\n\n- **HTTP:** `GET /accor/brands`\n- **What:** Accor brand directory. Returns the Accor brand directory published on the public brands page, with each brand's name, slug, and source URL. Booking, rates, rooms, reviews, contacts, and location are excluded.\n- **Params:** _none_\n\n### `accor_catalog_hotels`\n\n- **HTTP:** `GET /accor/catalog/hotels`\n- **What:** Search the Accor hotel catalog. Searches Accor's anonymous public hotel catalog by text, hotel code, or latitude/longitude radius. Results contain static property identity and broad location metadata plus catalog relevance/distance; contact details, precise hotel coordinates, payment, loyalty, media, rates, rooms, reviews, and booking data are excluded.\n- **Params:** `hotel_id` (string, optional) — Four-character Accor hotel code; `latitude` (number, optional) — Search-center latitude (-90 to 90); `limit` (integer, optional) — Results per request (1 to 50); `longitude` (number, optional) — Search-center longitude (-180 to 180); `offset` (integer, optional) — Zero-based result offset (0 to 300); `query` (string, optional) — Destination or hotel text (at least two characters); `radius_km` (number, optional) — Search radius in kilometers (0.1 to 100; defaults to 10 for coordinate searches)\n\n### `accor_destination_hotels`\n\n- **HTTP:** `GET /accor/destination/hotels`\n- **What:** Accor hotels in a destination. Returns the static list of hotels published on one Accor destination directory page (world, continent, country, region, department, city, district, or place), optionally narrowed by a theme facet. Each hotel carries its code, name, source URL, and broad city/country. Booking, rates, rooms, reviews, contacts, and precise location are excluded.\n- **Params:** `destination_type` (string, **required**) — Destination level: world, continent, country, region, department, city, district, or place; `slug` (string, optional) — Destination page slug, e.g. hotels-dusseldorf-v1158. Required for every type except world.; `theme` (string, optional) — Optional theme facet: 4-stars, 5-stars, apart-hotel, breakfast, budget-friendly, business, eco-certified, family-friendly, fitness, luxury, meetings-and-events, parking, pet-friendly, pool, resorts, or spa\n\n### `accor_property`\n\n- **HTTP:** `GET /accor/property`\n- **What:** Accor hotel metadata. Returns static public metadata for one Accor hotel code, including name, brand, city/country, explicitly listed amenities, and published check-in/check-out times. Booking, rates, rooms, reviews, contacts, and precise location are excluded.\n- **Params:** `hotel_code` (string, **required**) — Four-character Accor hotel code\n\n### `accor_search`\n\n- **HTTP:** `GET /accor/search`\n- **What:** Search Accor hotels. Searches the public Accor hotel index by destination or hotel name, with optional country, city, brand, star, page, and page-size filters. Results contain static hotel identity, location labels, ratings, and source URLs; booking, rates, rooms, reviews, loyalty, and payment flows are excluded.\n- **Params:** `brand` (string, optional) — Accor brand code facet; `city` (string\n\nArchive v1.0.16: 5 files, 16436 bytes\n\nFiles: reference/endpoints.md (41067b), scripts/crawlora.sh (7518b), skill-card.md (2479b), SKILL.md (6378b), _meta.json (141b)\n\nArchive v1.0.15: 5 files, 16173 bytes\n\nFiles: reference/endpoints.md (41067b), scripts/crawlora.sh (5813b), skill-card.md (2422b), SKILL.md (6378b), _meta.json (141b)\n\nArchive v1.0.14: 5 files, 16150 bytes\n\nFiles: reference/endpoints.md (41067b), scripts/crawlora.sh (5556b), skill-card.md (2599b), SKILL.md (6378b), _meta.json (141b)\n\nArchive v1.0.13: 5 files, 15771 bytes\n\nFiles: reference/endpoints.md (41067b), scripts/crawlora.sh (5231b), skill-card.md (2025b), SKILL.md (6417b), _meta.json (141b)\n\nArchive v1.0.12: 5 files, 15820 bytes\n\nFiles: reference/endpoints.md (41067b), scripts/crawlora.sh (4931b), skill-card.md (2500b), SKILL.md (6417b), _meta.json (141b)\n\nArchive v1.0.11: 5 files, 15728 bytes\n\nFiles: reference/endpoints.md (41067b), scripts/crawlora.sh (4883b), skill-card.md (2294b), SKILL.md (6417b), _meta.json (141b)\n\nArchive v1.0.10: 5 files, 14944 bytes\n\nFiles: reference/endpoints.md (41067b), scripts/crawlora.sh (2005b), skill-card.md (2370b), SKILL.md (6391b), _meta.json (141b)","readmeExcerpt":"Skill: travel-hotel-research Owner: crawlora-org Summary: Researches hotels, flights, attractions, short-term rentals, and live events via the Crawlora API — Booking.com, Expedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster — returning clean JSON. Use when the user wants to search or compare hotel/stay prices and reviews, look up flight options, find attractions/things-to-do or concerts/events, or research","codeSnippets":[],"executableExamples":[{"language":"sh","snippet":"# Hotel search (GET):\nscripts/crawlora.sh /booking/search query=\"Lisbon\" checkin=2026-09-10 checkout=2026-09-14 | jq '.'\nscripts/crawlora.sh /agoda/hotels/search city=\"Lisbon\" | jq '.'\n\n# Expedia (POST — exact body field names are unconfirmed, see Notes below):\nscripts/crawlora.sh -X POST /expedia/properties/search '{\"destination\":\"Lisbon\",\"checkIn\":\"2026-09-10\",\"checkOut\":\"2026-09-14\"}' | jq '.'\n\n# Airbnb:\nscripts/crawlora.sh /airbnb/search location=\"Lisbon\" | jq '.'\nscripts/crawlora.sh /airbnb/room/12345678 | jq '.'\n\n# Ticketmaster:\nscripts/crawlora.sh /ticketmaster/search-events q=\"Coldplay\" | jq '.'"},{"language":"sh","snippet":"# Hotel search (GET):\nscripts/crawlora.sh /booking/search query=\"Lisbon\" checkin=2026-09-10 checkout=2026-09-14 | jq '.'\nscripts/crawlora.sh /agoda/hotels/search city=\"Lisbon\" | jq '.'\n\n# Expedia (POST — exact body field names are unconfirmed, see Notes below):\nscripts/crawlora.sh -X POST /expedia/properties/search '{\"destination\":\"Lisbon\",\"checkIn\":\"2026-09-10\",\"checkOut\":\"2026-09-14\"}' | jq '.'\n\n# Airbnb:\nscripts/crawlora.sh /airbnb/search location=\"Lisbon\" | jq '.'\nscripts/crawlora.sh /airbnb/room/12345678 | jq '.'\n\n# Ticketmaster:\nscripts/crawlora.sh /ticketmaster/search-events q=\"Coldplay\" | jq '.'"},{"language":"sh","snippet":"# Hotel search (GET):\nscripts/crawlora.sh /booking/search query=\"Lisbon\" checkin=2026-09-10 checkout=2026-09-14 | jq '.'\nscripts/crawlora.sh /agoda/hotels/search city=\"Lisbon\" | jq '.'\n\n# Expedia (POST — exact body field names are unconfirmed, see Notes below):\nscripts/crawlora.sh -X POST /expedia/properties/search '{\"destination\":\"Lisbon\",\"checkIn\":\"2026-09-10\",\"checkOut\":\"2026-09-14\"}' | jq '.'\n\n# Airbnb:\nscripts/crawlora.sh /airbnb/search location=\"Lisbon\" | jq '.'\nscripts/crawlora.sh /airbnb/room/12345678 | jq '.'\n\n# Ticketmaster:\nscripts/crawlora.sh /ticketmaster/search-events q=\"Coldplay\" | jq '.'"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: travel-hotel-research\ndescription: Researches hotels, flights, attractions, short-term rentals, and live events via the Crawlora API — Booking.com, Expedia, Agoda, TripAdvisor, Trip.com, Airbnb, and Ticketmaster — returning clean JSON. Use when the user wants to search or compare hotel/stay prices and reviews, look up flight options, find attractions/things-to-do or concerts/events, or research an Airbnb host or listing.\n---\n\n# Travel & hotel research\n\nSearch and compare hotels, flights, attractions, short-term rentals, and\nlive events across seven travel platforms as normalized JSON from the\nCrawlora API — no scraping OTA search-result pages.\n\n## When to use this skill\n\n- \"Find hotels in <city> for <dates>\" / compare prices across OTAs.\n- \"What are the reviews like for this hotel/attraction?\"\n- \"Search flights from <origin> to <destination>.\"\n- \"What's there to do in <city>?\" (attractions/tours, or concerts/events).\n- \"Look up this Airbnb host/listing\" (reviews, calendar, other listings).\n- \"Find tickets/events for <artist> in <city>\" (Ticketmaster).\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Hotels** — `/booking/search` (params `query`, `checkin`, `checkout`),\n   `/agoda/hotels/search`, `/tripcom/hotels/search` (GET, by city) or\n   `POST /expedia/properties/search` (Expedia's Stays API is POST-only —\n   its exact request-body field names are undocumented, see below); detail\n   via `/booking/hotel-detail`, `/agoda/hotels/{property_id}`,\n   `POST /expedia/properties/detail`; reviews via `/booking/reviews`,\n   `POST /expedia/properties/reviews`.\n2. **Flights** — `/agoda/flights/search` (GET) and `POST /expedia/flights/search`\n   / `/booking-flights/search`; use each platform's `.../autocomplete` or\n   `.../search-locations` endpoint first to resolve city/airport codes.\n3. **Attractions & things-to-do** — `/booking-attractions/search`,\n   `POST /expedia/activities/search`, `/agoda/activities/search`,\n   `/tripadvisor/search` (hotels, restaurants, and attractions all in one).\n4. **TripAdvisor** — `/tripadvisor/autocomplete` to resolve a place, then\n   `/tripadvisor/place` for the profile and `/tripadvisor/reviews` for guest\n   reviews (works for hotels, restaurants, and attractions).\n5. **Airbnb** — `/airbnb/search` to find stays; `/airbnb/room/{id}` for a\n   listing (+ `/calendar`, `/reviews`); `/airbnb/host/{id}` for the host\n   profile (+ `/listings`, `/reviews`).\n6. **Ticketmaster** — `/ticketmaster/search-events` (`q`) or\n   `/ticketmaster/discover-city-events` (`city`) to find events;\n   `/ticketmaster/event` for detail, `/ticketmaster/venue` (+ `/v"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"travel-hotel-research\",\n  \"version\": \"1.0.19\",\n  \"publishedAt\": 1791163611468\n}"},{"path":"reference/endpoints.md","content":"# travel-hotel-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**71 endpoints across 10 platform group(s).**\n\n## Booking (8)\n\n### `booking_attractions_detail`\n\n- **HTTP:** `GET /booking-attractions/detail`\n- **What:** Booking.com attraction detail. Returns a Booking.com attraction's detail page.\n- **Params:** `slug` (string, **required**) — Attraction slug, from a prior attraction search result\n\n### `booking_attractions_reviews`\n\n- **HTTP:** `GET /booking-attractions/reviews`\n- **What:** Booking.com attraction reviews. Returns normalized guest reviews for a Booking.com attraction.\n- **Params:** `limit` (integer, optional) — Reviews per page, 1-50, default 10; `page` (integer, optional) — 1-based result page, default 1; `product_id` (string, **required**) — Attraction product id, from a prior attraction search result\n\n### `booking_attractions_search`\n\n- **HTTP:** `GET /booking-attractions/search`\n- **What:** Search Booking.com attractions. Returns normalized Booking.com attractions/things-to-do search results for a destination and date range, with an optional category/subcategory filter and a discoverable category taxonomy.\n- **Params:** `category` (string, optional) — Optional top-level category tagname filter, from a prior response's categories; `end_date` (string, optional) — Availability end date, YYYY-MM-DD, defaults to start_date; `limit` (integer, optional) — Results per page, 1-30, default 15; `page` (integer, optional) — 1-based result page, default 1; `query` (string, **required**) — Destination name or city; `start_date` (string, **required**) — Availability start date, YYYY-MM-DD; `subcategory` (string, optional) — Optional subcategory tagname filter, from a prior response's categories\n\n### `booking_flights_autocomplete`\n\n- **HTTP:** `GET /booking-flights/autocomplete`\n- **What:** Booking.com flight autocomplete. Returns Booking.com flight-search location suggestions (airports/cities) for a query string.\n- **Params:** `origin` (string, optional) — Optional origin location code, biases results by proximity; `origin_type` (string, optional) — Origin location type; `query` (string, **required**) — City or airport name/code to search; `type` (string, optional) — Location role, default to\n\n### `booking_flights_search`\n\n- **HTTP:** `GET /booking-flights/search`\n- **What:** Search Booking.com flights. Returns normalized round-trip or one-way flight offers between two Booking.com flight-search locations.\n- **Params:** `adults` (integer, optional) — Number of adults, 1-9, default 1; `cabin_class` (string, optional) — Cabin clas"},{"path":"skill-card.md","content":"## Description:\n\nResearches hotels, flights, attractions, short-term rentals, and live events through Crawlora, returning structured travel results.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nTravelers and travel-planning assistants use this skill to compare stays and flights, inspect public reviews and listings, and find attractions or events.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Travel searches may disclose private trip details to Crawlora.\n\nMitigation: Avoid sharing sensitive itinerary details unless you trust Crawlora to process them.\n\nRisk: Exposing the Crawlora API key could permit unauthorized API use.\n\nMitigation: Keep the key in the environment; do not hardcode, publish, or include it in travel queries.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/crawlora-org/skills/travel-hotel-research)\n- [Crawlora API documentation](https://crawlora.net/docs)\n- [Endpoint reference](artifact/reference/endpoints.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, JSON]\n\n**Output Format:** [Travel research summaries with structured JSON results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a Crawlora API key; searches public travel listings and reviews without booking or payment actions.]\n\n## Skill Version(s):\n\n1.0.19 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1502,"uniquenessScore":39,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T08:58:42.133Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T08:58:42.133Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:27:07.687Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}