Viator API: Search tours
Finds tours and experiences in a city on Viator, with optional keywords, date, currency and sorting. Prices are starting prices.
Unofficial. Not affiliated with or endorsed by Viator.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- City, required
city City to explore, e.g. Paris.
Paris
- Date optional
date Day tours should be available (YYYY-MM-DD), e.g. 2026-10-18.
Not set
- Sort optional
sort Order of tours, e.g. featured.
featured (default)
One of
featured,price_low_to_high,rating.- Query optional
query Tour topic or attraction, e.g. Eiffel Tower. Leave blank for any tours.
(default)
- Currency optional
currency Three-letter price currency, e.g. EUR.
USD (default)
Exactly 3 characters.
- Max Results optional
max_results Maximum tours to return, e.g. 20.
20 (default)
Whole number from 1 to 50.
Input as JSON
{ "city": "Paris"}Output
{ "tours": [ { "link": "https://www.viator.com/tours/Paris/Golden-Versailles-Palace-and-Garden-Tour/d479-67584P2" , "title": "Versailles Palace and Gardens Tour from Paris", "badges": [ "Best Seller" ], "rating": 4.4, "currency": "USD", "duration": "3 hours to 3 hours 30 minutes", "product_code": "67584P2", "review_count": 4577, "free_cancellation": true, "short_description": "On this eminently civilized guided tour with a round trip transportation from Paris. Your guide will show you the most magnificent of the 2,000 rooms, including the Hall of Mirrors, the King’s State Apartments, and the King’s Private Apartments, then introduce you to the magical 2,000-acre (800-hect…", "starting_price_per_person": 74.11 }, { "link": "https://www.viator.com/tours/Paris/Aperitif-Cruise-on-the-Seine-River/d479-9511P47" , "title": "Paris Seine River Sunset & Evening Champagne Cruises", "badges": [ "Likely to Sell Out" ], "rating": 4.1, "currency": "USD", "duration": "1 hour", "product_code": "9511P47", "review_count": 633, "free_cancellation": true, "short_description": "Skip your usual land-lubber evening drink with this River Seine sunset cruise with an aperitif. Meet near Pont Neuf just before sunset and hop aboard a river boat with a terrace—take a seat and cruise past Notre-Dame Cathedral, the Louvre, Musée d’Orsay, and the Eiffel Tower with a glass of organic …", "starting_price_per_person": 45.16 }, { "link": "https://www.viator.com/tours/Paris/Paris-in-A-Day-Louvre-Eiffel-Tower-Notre-Dame-and-Seine-Cruise/d479-46018P3" , "title": "Paris in A Day Louvre Eiffel Tower Notre Dame and Seine Cruise", "badges": [], "rating": 4.8, "currency": "USD", "duration": "4 hours to 9 hours", "product_code": "46018P3", "review_count": 2552, "free_cancellation": true, "short_description": "Discover Paris' most iconic landmarks in a single day on this time-saving tour. In addition to getting an included ticket to the Louvre Museum (if option selected), you'll also explore neighborhoods including Montmartre and Île de la Cité on guided walks. Cover more ground in the city than you could…", "starting_price_per_person": 114.63 } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"viator.com/search_tours","input":{"city":"Paris"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "viator.com/search_tours" , "input": { "city": "Paris" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "viator.com/search_tours" , "input": { "city": "Paris" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run viator.com/search_tours# with {"city":"Paris"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "city" ], "properties": { "city": { "type": "string", "minLength": 1, "description": "City to explore, e.g. Paris." }, "date": { "type": "string", "description": "Day tours should be available (YYYY-MM-DD), e.g. 2026-10-18." }, "sort": { "enum": [ "featured", "price_low_to_high", "rating" ], "type": "string", "default": "featured", "description": "Order of tours, e.g. featured." }, "query": { "type": "string", "default": "", "description": "Tour topic or attraction, e.g. Eiffel Tower. Leave blank for any tours." }, "currency": { "type": "string", "default": "USD", "maxLength": 3, "minLength": 3, "description": "Three-letter price currency, e.g. EUR." }, "max_results": { "type": "integer", "default": 20, "maximum": 50, "minimum": 1, "description": "Maximum tours to return, e.g. 20." } }}Output schema
{ "type": "object", "required": [ "tours" ], "properties": { "tours": { "type": "array", "items": { "type": "object", "required": [ "link", "title", "badges", "rating", "currency", "duration", "product_code", "review_count", "free_cancellation", "short_description", "starting_price_per_person" ], "properties": { "link": { "type": "string", "description": "Viator tour page link." }, "title": { "type": "string", "description": "Tour title." }, "badges": { "type": "array", "items": { "type": "string" }, "description": "Badges shown on the listing." }, "rating": { "type": [ "number", "null" ], "description": "Rating out of five." }, "currency": { "type": "string", "description": "Price currency." }, "duration": { "type": [ "string", "null" ], "description": "Tour duration." }, "product_code": { "type": "string", "description": "Viator product code." }, "review_count": { "type": [ "integer", "null" ], "description": "Number of reviews." }, "free_cancellation": { "type": [ "boolean", "null" ], "description": "Whether cancellation is free." }, "short_description": { "type": [ "string", "null" ], "description": "Short description when shown." }, "starting_price_per_person": { "type": [ "number", "null" ], "description": "Starting price per person." } } }, "description": "Tours matching the city and filters." } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
viator.com/search_tours- Returns
- title, rating, review count, starting price, currency, duration, free cancellation, badges, short description, link, product code
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method viator.com/search_tours with the inputs above.
Ask your agent
- Find food tours in Rome available on 2026-05-14, sorted by rating, prices in EUR
- What are the cheapest things to do in Lisbon? Show me 10 options lowest price first.
- Search Viator for Sagrada Familia skip-the-line tours in Barcelona, top 15 by rating
- I'm in Kyoto on 2026-11-03 — list tours I can book that day with prices in JPY, and tell me which have free cancellation
- Pull up featured experiences on viator.com for New York City, snorkeling or boat trips not needed, just general tours, max 25 results in USD
See more
Finds GetYourGuide tours, tickets and activities in a city, optionally matching words, available on a day, sorted by popularity, price or rating, with prices, ratings and booking features.
getyourguide.com/search_activitiesFinds Klook activities, tickets, tours and passes in a city, with ratings, booking counts, prices and booking policies. Keyword matches are ranked by Klook and may include related activities.
klook.com/search_activitiesLists Tripadvisor's ranked things to do in a city from the first results page, for all attractions or one category (tours, museums, sights and landmarks, nature and parks), with rating, review count, category, and the description or neighbourhood when shown.
tripadvisor.com/list_top_attractionsFinds hotels in a city on Trip.com for given dates, with prices, guest ratings, reviews and booking links. Only the initial public listing is read, so large limits may return fewer hotels.
trip.com/search_hotelsLists Tripadvisor's ranked restaurants in a city from the first results page, optionally filtered by cuisine and price category. Sponsored listings are left out; up to 30 restaurants with rating, review count, cuisines, price range and address.
tripadvisor.com/list_top_restaurantsFinds available Agoda stays in a city for your dates, with prices before taxes and fees, star and guest ratings, and free-cancellation status.
agoda.com/search_hotelsFinds available hostels, hotels and guesthouses on Hostelworld in a city for given dates, with per-night dorm and private room prices, ratings, facilities and booking links.
hostelworld.com/search_hostelsGets the latest traveler reviews for a hotel, restaurant or attraction in a city (by name or Tripadvisor listing link), with the place's overall rating and review count. Dates of visit show the month and year when provided.
tripadvisor.com/get_reviews