# Viator API

> Viator returns tour listings and starting prices as a workflow and API.

Viator returns city tour listings through Search tours, using a required city and optional date, topic, currency, sorting, and result count. Listings include titles, ratings, durations, review counts, cancellation details, and starting prices.

- Page: https://fous.com/tools/viator
- Handle: `@viator`
- Category: [Travel](https://fous.com/tools/category/travel)
- Source website: https://viator.com
- Last verified: Sep 29, 2026

## Methods

### Search tours

Operation `search_tours`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Find tours and experiences in a city, with optional keywords, date, currency, and sorting. Prices are starting prices; available dates and prices can change.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `city` | string | yes | `"Paris"` | City to explore, e.g. Paris. |
| `date` | string | no | `"2026-10-18"` | Day tours should be available, e.g. 2026-10-18. |
| `sort` | string | no | `"featured"` | Order of tours, e.g. featured. |
| `query` | string | no | `"Eiffel Tower"` | Tour topic or attraction, e.g. Eiffel Tower. Leave blank for any tours. |
| `currency` | string | no | `"EUR"` | Three-letter price currency, e.g. EUR. |
| `max_results` | integer | no | `5` | Maximum tours to return, e.g. 20. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "city"
  ],
  "properties": {
    "city": {
      "type": "string",
      "description": "City to explore, e.g. Paris.",
      "examples": [
        "Paris",
        "Rome"
      ]
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Day tours should be available, e.g. 2026-10-18.",
      "examples": [
        "2026-10-18"
      ]
    },
    "sort": {
      "enum": [
        "featured",
        "price_low_to_high",
        "rating"
      ],
      "type": "string",
      "default": "featured",
      "description": "Order of tours, e.g. featured.",
      "examples": [
        "featured",
        "rating",
        "price_low_to_high"
      ]
    },
    "query": {
      "type": "string",
      "default": "",
      "description": "Tour topic or attraction, e.g. Eiffel Tower. Leave blank for any tours.",
      "examples": [
        "Eiffel Tower",
        "Seine cruise",
        "zzznotourmatch999"
      ]
    },
    "currency": {
      "type": "string",
      "default": "USD",
      "description": "Three-letter price currency, e.g. EUR.",
      "examples": [
        "EUR",
        "USD"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "description": "Maximum tours to return, e.g. 20.",
      "x-fous-developer": true,
      "examples": [
        5,
        6,
        3
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "city": "Paris"
    },
    {
      "city": "Paris",
      "date": "2026-10-18",
      "sort": "featured",
      "query": "Eiffel Tower",
      "currency": "EUR",
      "max_results": 5
    },
    {
      "city": "Paris",
      "sort": "rating",
      "query": "Seine cruise",
      "max_results": 5
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `tours` | array |  | Tours matching the city and filters. |
| `tours[].link` | string | `"https://www.viator.com/tours/Paris/Golden-Versailles-Palace-and-Garden-Tour/d479-67584P2"` | Viator tour page link. |
| `tours[].title` | string | `"Versailles Palace and Gardens Tour from Paris"` | Tour title. |
| `tours[].badges` | array |  | Badges shown on the listing. |
| `tours[].rating` | number or null | `4.4` | Rating out of five. |
| `tours[].currency` | string | `"USD"` | Price currency. |
| `tours[].duration` | string or null | `"3 hours to 3 hours 30 minutes"` | Tour duration. |
| `tours[].product_code` | string | `"67584P2"` | Viator product code. |
| `tours[].review_count` | integer or null | `4577` | Number of reviews. |
| `tours[].free_cancellation` | boolean or null | `true` | Whether cancellation is free. |
| `tours[].short_description` | string or null | `"On this eminently civilized guided tour with a round trip transportation from Paris. Your guide will show you the most ` | Short description when shown. |
| `tours[].starting_price_per_person` | number or null | `74.11` | Starting price per person. |

**Example input**

```json
{
  "city": "Paris"
}
```

**Example output**

```json
{
  "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 A…",
      "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…",
      "starting_price_per_person": 45.16
    }
  ]
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@viator",
  "visibility": "public",
  "operation": "search_tours",
  "version": 1,
  "input": {
    "city": "Paris"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@viator\",\n  \"visibility\": \"public\",\n  \"operation\": \"search_tours\",\n  \"version\": 1,\n  \"input\": {\n    \"city\": \"Paris\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@viator",
  "visibility": "public",
  "operation": "search_tours",
  "version": 1,
  "input": {
    "city": "Paris"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/viator`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `search_tours`: Search tours. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-viator https://api.fous.com/mcp/tools/viator --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Compare tour ratings and review counts by city.
- Find tours for a specific date or attraction.
- Review starting prices and currencies for city tours.
- Identify tours with free cancellation.
- Sort tour listings for travel planning.

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this Viator tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a Viator account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from viator.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### What tours are available in a city?

Search tours returns matching tours when you provide a city, with optional filters such as date, topic, currency, and sorting.

### What is the starting price of a tour?

Search tours returns starting prices per person and their currency. Prices and available dates can change.

### Which tours offer free cancellation?

Search tours returns whether free cancellation is available for each listed tour.

## Related

- [GetYourGuide API](https://fous.com/tools/getyourguide.md): Tours, tickets and activities in destinations around the world.
- [Tripadvisor API](https://fous.com/tools/tripadvisor.md): Tripadvisor provides traveler-ranked first-page city listings of attractions, restaurants and hotels, plus latest reviews; hotel prices and booking sites depend on supplied stay dates and availability.
- [Trip.com API](https://fous.com/tools/trip-com.md): Trip.com offers hotel and flight bookings, with hotel listings limited to initial public results and prices and fares subject to change.
- [Klook API](https://fous.com/tools/klook.md): Activities, attraction tickets, tours and travel passes.
- [Expedia API](https://fous.com/tools/expedia.md): Expedia helps travelers find hotels, vacation stays, and travel deals, with hotel prices and flight options for selected destinations and dates; flight listings may be limited.
- [FlixBus API](https://fous.com/tools/flixbus.md): Find and book bus and train trips on FlixBus.
- [Airbnb API](https://fous.com/tools/airbnb.md): Airbnb returns public stays, listing details, dated trip prices, and night availability, which depend on dates and may be limited, unavailable, or change.
- [Booking.com API](https://fous.com/tools/booking-com.md): Booking.com helps find stays, property details and public guest reviews; prices and cancellation terms depend on selected dates, and displayed prices may exclude taxes and fees.
- [All Travel tools](https://fous.com/tools/category/travel)
