# OpenTable API

> OpenTable returns restaurant availability, reservation times and public profiles, available as a workflow and API.

OpenTable helps find bookable restaurants by city or neighborhood, date and optional time, cuisine and party size. Check restaurant availability returns nearby reservation times for a restaurant, using its name or link, city, date and optional time and party size. Get restaurant returns public profile details, ratings, menu and photo links for a restaurant, using its name or link and city.

- Page: https://fous.com/workflows/opentable
- Handle: `@opentable`
- Category: [Food](https://fous.com/workflows/category/food)
- Source website: https://opentable.com
- Last verified: Sep 30, 2026
- Fous is not affiliated with OpenTable.

## Methods

### Check restaurant availability

Operation `check_restaurant_availability`, version 1. 1 credit per call.

Check reservation times at an OpenTable restaurant by name and city or restaurant link. Shows times near the requested time; availability can change, and some restaurants limit online bookings for large parties.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `city` | string | yes | `"Chicago"` | City where the restaurant is located, for example Chicago. |
| `date` | string | yes | `"2026-10-15"` | Reservation date, today or later, for example 2026-10-15. |
| `time` | string | no | `"19:00"` | Preferred local time in HH:MM, for example 19:00. |
| `party_size` | integer | no | `20` | Number of guests, for example 2. |
| `restaurant` | string | yes | `"https://www.opentable.com/r/girl-and-the-goat-chicago"` | Restaurant name or OpenTable restaurant link, for example Girl & the Goat. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "restaurant",
    "city",
    "date"
  ],
  "properties": {
    "city": {
      "type": "string",
      "description": "City where the restaurant is located, for example Chicago.",
      "examples": [
        "Chicago"
      ]
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Reservation date, today or later, for example 2026-10-15.",
      "examples": [
        "2026-10-15"
      ]
    },
    "time": {
      "type": "string",
      "default": "19:00",
      "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
      "description": "Preferred local time in HH:MM, for example 19:00.",
      "examples": [
        "19:00"
      ]
    },
    "party_size": {
      "type": "integer",
      "default": 2,
      "maximum": 20,
      "minimum": 1,
      "description": "Number of guests, for example 2.",
      "examples": [
        20,
        2
      ]
    },
    "restaurant": {
      "type": "string",
      "description": "Restaurant name or OpenTable restaurant link, for example Girl & the Goat.",
      "examples": [
        "https://www.opentable.com/r/girl-and-the-goat-chicago",
        "Girl & the Goat",
        "Alinea"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "city": "Chicago",
      "date": "2026-10-15",
      "time": "19:00",
      "party_size": 20,
      "restaurant": "https://www.opentable.com/r/girl-and-the-goat-chicago"
    },
    {
      "city": "Chicago",
      "date": "2026-10-15",
      "time": "19:00",
      "party_size": 2,
      "restaurant": "Girl & the Goat"
    },
    {
      "city": "Chicago",
      "date": "2026-10-15",
      "time": "19:00",
      "party_size": 2,
      "restaurant": "Alinea"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `date` | string | `"2026-10-15"` | Requested reservation date. |
| `address` | string or null | `"809 W Randolph, Chicago, IL, 60607"` | Street address of the restaurant. |
| `message` | string or null | `"For parties larger than 7, contact Girl & the Goat directly or explore private dining."` | Restaurant notice or unavailability message when no table is free; null when tables are free or no notice is displayed. |
| `party_size` | integer | `20` | Requested number of guests. |
| `booking_link` | string | `"https://www.opentable.com/r/girl-and-the-goat-chicago?dateTime=2026-10-15T19%3A00%3A00&covers=20"` | OpenTable page for the restaurant with the chosen reservation details. |
| `any_table_free` | boolean | `false` | Whether any requested-date reservation time is available near the preferred time. |
| `available_times` | array |  | Available local times near the preferred time, in HH:MM and chronological order. |
| `restaurant_name` | string | `"Girl & the Goat"` | Name listed by OpenTable. |

**Example input**

```json
{
  "city": "Chicago",
  "date": "2026-10-15",
  "time": "19:00",
  "party_size": 20,
  "restaurant": "https://www.opentable.com/r/girl-and-the-goat-chicago"
}
```

**Example output**

```json
{
  "date": "2026-10-15",
  "address": "809 W Randolph, Chicago, IL, 60607",
  "message": "For parties larger than 7, contact Girl & the Goat directly or explore private dining.",
  "party_size": 20,
  "booking_link": "https://www.opentable.com/r/girl-and-the-goat-chicago?dateTime=2026-10-15T19%3A00%3A00&covers=20",
  "any_table_free": false,
  "available_times": [],
  "restaurant_name": "Girl & the Goat"
}
```

### Get restaurant

Operation `get_restaurant`, version 1. 1 credit per call.

Get a restaurant’s public OpenTable profile by name or OpenTable link and city, including ratings, details, menu and photo links. Ratings and other fields can be missing when the restaurant does not publish them.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `city` | string | yes | `"Chicago"` | City where the restaurant is located, for example Chicago. |
| `restaurant` | string | yes | `"https://www.opentable.com/r/girl-and-the-goat-chicago"` | Restaurant name or OpenTable restaurant link, for example Girl & the Goat or https://www.opentable.com/r/girl-and-the-goat-chicago. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "restaurant",
    "city"
  ],
  "properties": {
    "city": {
      "type": "string",
      "description": "City where the restaurant is located, for example Chicago.",
      "examples": [
        "Chicago",
        "Los Angeles"
      ]
    },
    "restaurant": {
      "type": "string",
      "description": "Restaurant name or OpenTable restaurant link, for example Girl & the Goat or https://www.opentable.com/r/girl-and-the-goat-chicago.",
      "examples": [
        "https://www.opentable.com/r/girl-and-the-goat-chicago",
        "Girl & the Goat",
        "Girl & the Goat L.A."
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "city": "Chicago",
      "restaurant": "https://www.opentable.com/r/girl-and-the-goat-chicago"
    },
    {
      "city": "Chicago",
      "restaurant": "Girl & the Goat"
    },
    {
      "city": "Los Angeles",
      "restaurant": "Girl & the Goat L.A."
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `name` | string or null | `"Girl & the Goat"` |  |
| `website` | string or null | `"http://girlandthegoat.com/"` |  |
| `cuisines` | array |  |  |
| `menu_link` | string or null | `"https://www.opentable.com/r/girl-and-the-goat-chicago#menu"` |  |
| `dress_code` | string or null | `"Casual Dress"` |  |
| `photo_link` | string or null | `"https://resizer.otstatic.com/v4/photos/66291000-3?width=640&height=640"` |  |
| `description` | string or null |  |  |
| `food_rating` | number or null | `4.7` |  |
| `price_range` | string or null | `"$30 and under"` |  |
| `dining_style` | string or null | `"Casual Dining"` |  |
| `full_address` | string or null | `"809 W Randolph, Chicago, IL, 60607, United States"` |  |
| `phone_number` | string or null | `"(312) 492-6262"` |  |
| `value_rating` | number or null | `4.4` |  |
| `neighbourhood` | string or null | `"West Loop"` |  |
| `opening_hours` | string or null | `"Dinner\nMon–Thu, Sun 4:30 pm–10:00 pm\nFri, Sat 4:30 pm–11:00 pm"` |  |
| `opentable_link` | string | `"https://www.opentable.com/r/girl-and-the-goat-chicago"` |  |
| `service_rating` | number or null | `4.7` |  |
| `ambience_rating` | number or null | `4.6` |  |
| `parking_details` | string or null | `"Street parking available. Valet parking is available at 809 W. Randolph"` |  |
| `number_of_reviews` | integer or null | `1570` |  |
| `overall_star_rating` | number or null | `4.7` |  |
| `opentable_restaurant_id` | integer or null | `44629` |  |

**Example input**

```json
{
  "city": "Chicago",
  "restaurant": "https://www.opentable.com/r/girl-and-the-goat-chicago"
}
```

**Example output**

```json
{
  "name": "Girl & the Goat",
  "website": "http://girlandthegoat.com/",
  "cuisines": [
    "Contemporary American",
    "Tapas / Small Plates",
    "Comfort Food"
  ],
  "menu_link": "https://www.opentable.com/r/girl-and-the-goat-chicago#menu",
  "dress_code": "Casual Dress",
  "photo_link": "https://resizer.otstatic.com/v4/photos/66291000-3?width=640&height=640",
  "description": "Girl & the Goat opened in 2010 with the goal of offering a menu of bold, flavorful dishes designed to share in a fun and lively atmosphere. To complement the experience, we offer a curated selection o…",
  "food_rating": 4.7,
  "price_range": "$30 and under",
  "dining_style": "Casual Dining",
  "full_address": "809 W Randolph, Chicago, IL, 60607, United States",
  "phone_number": "(312) 492-6262",
  "value_rating": 4.4,
  "neighbourhood": "West Loop",
  "opening_hours": "Dinner\nMon–Thu, Sun 4:30 pm–10:00 pm\nFri, Sat 4:30 pm–11:00 pm",
  "opentable_link": "https://www.opentable.com/r/girl-and-the-goat-chicago",
  "service_rating": 4.7,
  "ambience_rating": 4.6,
  "parking_details": "Street parking available. Valet parking is available at 809 W. Randolph",
  "number_of_reviews": 1570,
  "overall_star_rating": 4.7,
  "opentable_restaurant_id": 44629
}
```

### Search available tables

Operation `search_available_tables`, version 1. 1 credit per call.

Find OpenTable restaurants with bookable slots within two hours of the selected time in a city or neighborhood, in OpenTable search order. Examines up to 300 listings; availability may change.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `date` | string | yes | `"2026-10-10"` | Reservation date, today or later, such as 2026-10-10. |
| `time` | string | no | `"19:00"` | Local reservation time in 24-hour HH:MM format, such as 19:00. |
| `cuisine` | string | no | `"Italian"` | Cuisine to filter by, such as Italian; any for all cuisines. |
| `location` | string | yes | `"River North, Chicago"` | City or neighborhood to search, such as River North, Chicago. |
| `party_size` | integer | no | `2` | Number of diners, for example 2. |
| `max_results` | integer | no | `20` | Maximum restaurants to return, such as 20. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "location",
    "date"
  ],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "examples": [
        "2026-10-10"
      ],
      "description": "Reservation date, today or later, such as 2026-10-10."
    },
    "time": {
      "type": "string",
      "default": "19:00",
      "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
      "examples": [
        "19:00"
      ],
      "description": "Local reservation time in 24-hour HH:MM format, such as 19:00."
    },
    "cuisine": {
      "type": "string",
      "default": "any",
      "examples": [
        "Italian"
      ],
      "description": "Cuisine to filter by, such as Italian; any for all cuisines."
    },
    "location": {
      "type": "string",
      "examples": [
        "River North, Chicago"
      ],
      "description": "City or neighborhood to search, such as River North, Chicago."
    },
    "party_size": {
      "type": "integer",
      "default": 2,
      "maximum": 20,
      "minimum": 1,
      "examples": [
        2
      ],
      "description": "Number of diners, for example 2."
    },
    "max_results": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "examples": [
        20
      ],
      "description": "Maximum restaurants to return, such as 20.",
      "x-fous-developer": true
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "date": "2026-10-10",
      "time": "19:00",
      "location": "Chicago",
      "party_size": 2
    },
    {
      "date": "2026-10-10",
      "time": "19:00",
      "cuisine": "Italian",
      "location": "River North, Chicago",
      "party_size": 2,
      "max_results": 10
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `restaurants` | array |  |  |
| `restaurants[].name` | string | `"Maggiano's - Chicago"` |  |
| `restaurants[].cuisine` | string or null | `"Italian"` |  |
| `restaurants[].photo_link` | string or null | `"https://resizer.otstatic.com/v3/photos/93159038-2?width=320&height=320&webp=true"` |  |
| `restaurants[].price_range` | string or null | `"$30 and under"` |  |
| `restaurants[].star_rating` | number or null | `4.8` |  |
| `restaurants[].booking_link` | string | `"https://www.opentable.com/r/maggianos-chicago?dateTime=2026-10-10T19%3A00&covers=2"` |  |
| `restaurants[].review_count` | integer or null | `3697` |  |
| `restaurants[].neighbourhood` | string or null | `"River North (Chicago)"` |  |
| `restaurants[].restaurant_id` | integer | `15058` |  |
| `restaurants[].available_time_slots` | array |  |  |

**Example input**

```json
{
  "date": "2026-10-10",
  "time": "19:00",
  "cuisine": "Italian",
  "location": "River North, Chicago",
  "party_size": 2,
  "max_results": 10
}
```

**Example output**

```json
{
  "restaurants": [
    {
      "name": "Maggiano's - Chicago",
      "cuisine": "Italian",
      "photo_link": "https://resizer.otstatic.com/v3/photos/93159038-2?width=320&height=320&webp=true",
      "price_range": "$30 and under",
      "star_rating": 4.8,
      "booking_link": "https://www.opentable.com/r/maggianos-chicago?dateTime=2026-10-10T19%3A00&covers=2",
      "review_count": 3697,
      "neighbourhood": "River North (Chicago)",
      "restaurant_id": 15058,
      "available_time_slots": [
        "20:00",
        "20:15"
      ]
    },
    {
      "name": "Gene and Georgetti",
      "cuisine": "Steakhouse",
      "photo_link": "https://resizer.otstatic.com/v3/photos/48330740-3?width=320&height=320&webp=true",
      "price_range": "$50 and over",
      "star_rating": 4.7,
      "booking_link": "https://www.opentable.com/r/gene-and-georgetti-chicago?dateTime=2026-10-10T19%3A00&covers=2",
      "review_count": 6706,
      "neighbourhood": "River North (Chicago)",
      "restaurant_id": 51937,
      "available_time_slots": [
        "18:30",
        "18:45",
        "19:00"
      ]
    },
    {
      "name": "LIA Tavern",
      "cuisine": "Pizzeria",
      "photo_link": "https://resizer.otstatic.com/v3/photos/91941290-3?width=320&height=320&webp=true",
      "price_range": "$31 to $50",
      "star_rating": 4.6,
      "booking_link": "https://www.opentable.com/r/lia-chicago?dateTime=2026-10-10T19%3A00&covers=2",
      "review_count": 147,
      "neighbourhood": "River North (Chicago)",
      "restaurant_id": 1425730,
      "available_time_slots": [
        "17:15",
        "17:30",
        "19:00"
      ]
    }
  ]
}
```

## Quick start

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@opentable",
  "visibility": "public",
  "operation": "check_restaurant_availability",
  "version": 1,
  "input": {
    "city": "Chicago",
    "date": "2026-10-15",
    "time": "19:00",
    "party_size": 20,
    "restaurant": "https://www.opentable.com/r/girl-and-the-goat-chicago"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

body = json.loads("{\n  \"api\": \"@opentable\",\n  \"visibility\": \"public\",\n  \"operation\": \"check_restaurant_availability\",\n  \"version\": 1,\n  \"input\": {\n    \"city\": \"Chicago\",\n    \"date\": \"2026-10-15\",\n    \"time\": \"19:00\",\n    \"party_size\": 20,\n    \"restaurant\": \"https://www.opentable.com/r/girl-and-the-goat-chicago\"\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=120) 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.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_000),
  body: JSON.stringify({
  "api": "@opentable",
  "visibility": "public",
  "operation": "check_restaurant_availability",
  "version": 1,
  "input": {
    "city": "Chicago",
    "date": "2026-10-15",
    "time": "19:00",
    "party_size": 20,
    "restaurant": "https://www.opentable.com/r/girl-and-the-goat-chicago"
  },
  "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);
```

Or describe the data in plain language: send `{"api":"@opentable","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## Use cases

- Find restaurants with bookable tables in a city or neighborhood
- Compare cuisine, price ranges and ratings for available restaurants
- Check reservation times near a preferred time
- Review restaurant details, hours and menu links
- Compare restaurant ratings and review counts

## FAQ

### Is Fous affiliated with OpenTable?

No. Fous is not affiliated with OpenTable. This workflow reads the public opentable.com website and returns its data.

### How much does it cost?

Each run costs 1 credit. With pay-as-you-go, a credit costs 1¢; monthly plans cost less per credit.

### Do I need a OpenTable account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from opentable.com when you run it; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check on Sep 30, 2026.

### Which restaurants have tables available in a city?

Search available tables returns restaurants with bookable slots based on the city or neighborhood and date, with optional filters such as time, cuisine and party size.

### What reservation times are available at a restaurant?

Check restaurant availability returns available times near the preferred time for a restaurant, city, date and party size.

### What are a restaurant’s ratings and details?

Get restaurant returns public profile details, ratings, menu and photo links for a restaurant identified by name or link and city.

## Related

- [DoorDash API](https://fous.com/workflows/doordash.md): DoorDash lists nearby restaurants and menus, prices, ratings, delivery fees, and estimated times; offers, availability, fees, and times can change.
- [Michelin Guide API](https://fous.com/workflows/michelin-guide.md): Restaurant selections, distinctions and reviews from the Michelin Guide.
- [Uber Eats API](https://fous.com/workflows/uber-eats.md): Uber Eats shows restaurants and delivery options, with menus, prices, ratings, and delivery details; fees may reflect guest promotions and rating counts may be rounded.
- [Tripadvisor API](https://fous.com/workflows/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.
- [Yelp API](https://fous.com/workflows/yelp.md): Yelp returns local business matches, public profiles, ratings and up to 60 publicly shown reviews; matches are unsponsored and Yelp-ordered, but later results may lack contact or location details.
- [Google Maps API](https://fous.com/workflows/google-maps.md): Google Maps returns nearby places, public place details, up to 100 public reviews, and up to three routes; transit options vary by departure time.
- [Booking.com API](https://fous.com/workflows/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.
- [McDonald's API](https://fous.com/workflows/mcdonalds.md): McDonald’s provides menu-item food information for US, UK and Canadian items, plus nearby US restaurants and listed hours today, which may miss unexpected closures.
- [All Food workflows](https://fous.com/workflows/category/food)
