# OpenTable Availability Checker | Real-Time Slots (`clearpath/opentable-availability-api`) Actor

Check real-time reservation availability for OpenTable restaurants: every bookable time, seating and card policy for any date and party size. Schedule runs to monitor hard-to-book restaurants. From Oct 21, 2026: $2.99 per 1,000 checks. Passes bought before then stay valid until they end.

- **URL**: https://apify.com/clearpath/opentable-availability-api.md
- **Developed by:** [ClearPath](https://apify.com/clearpath) (community)
- **Categories:** Travel, Automation, Lead generation
- **Features:** Limited permissions
- **Stats:** 46 total users, 18 monthly users, 95.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 availability checks

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## OpenTable Availability Checker | Real-Time Reservation Slots (2026)

[![Find available tables at hard-to-book restaurants. Reservation times. Seating types. Your party size.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/opentable-availability-api-readme-hero-v1.png)](https://console.apify.com/actors/seL7kyUfmf6qnj5ZO/input)

From <strong>Clearpath</strong>, creators of <a href="https://apify.com/clearpath/opentable-booker">OpenTable Booker</a>, <a href="https://apify.com/clearpath/resy-availability-api">Resy Availability Checker</a> and <a href="https://apify.com/clearpath/resy-booker">Resy Booker</a>. Restaurant availability and booking tools from the same team.

### Why choose this actor?

<strong>Watch your restaurant shortlist.</strong> Check up to 10 OpenTable restaurant pages for your date and party size. Collect current reservation options together instead of checking each page by hand.

<strong>See the time, seating type and card requirement.</strong> Returned slots include reservation times, seating options and whether a credit card is required. Where available, the card policy identifies a hold or deposit.

<strong>Keep checking as tables open up.</strong> Schedule repeat runs in Apify and connect results to your own alerts. Each restaurant record includes the requested date, party size and check timestamp, making repeated checks easy to track.

<a href="https://console.apify.com/actors/seL7kyUfmf6qnj5ZO/input"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/opentable-availability-api-readme-cta-v1.svg" width="258" height="48" alt="Check available tables"/></a>

### Quick start

Check available tables for two at Providence in Los Angeles today:

```json
{
  "startUrls": [
    "https://www.opentable.com/r/providence-los-angeles"
  ],
  "partySize": 2
}
```

Omitting <code>date</code> uses today. <a href="https://console.apify.com/actors/seL7kyUfmf6qnj5ZO/input">Open actor input</a> to select another date, change the party size or add up to 10 restaurant URLs. Each restaurant returns every bookable time for that date. Use JSON to preserve nested slots. Scheduled monitoring and notifications need separate setup; this actor checks availability and does not book tables.

<table><tr><td colspan="5" style="background:#DA3743;color:#FFFFFF;padding:10px 14px;font-size:13px;font-weight:700">Clearpath · Restaurant & Reservation Tools</td></tr><tr><td style="background:#FFDED8;padding:8px 10px;border:1px solid #EDCBC5;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-seL7kyUfmf6qnj5ZO-7Tc46618O2-opentable-mcp-server-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;<a href="https://console.apify.com/actors/seL7kyUfmf6qnj5ZO/input" style="color:#241613;text-decoration:none;font-weight:700;font-size:13px">OpenTable Slots</a></span><br><span style="color:#66433B;font-size:12px;white-space:nowrap">You are here</span></td><td style="background:#FFF0EE;padding:8px 10px;border:1px solid #EDCBC5;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-gGWfIJqbEiBKDgTAe-BtlunR0UXD-opentable-mcp-server-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;<a href="https://apify.com/clearpath/opentable-booker" style="color:#241613;text-decoration:none;font-weight:700;font-size:13px">OpenTable Booker</a></span><br><span style="color:#66433B;font-size:12px;white-space:nowrap">AI reservations</span></td><td style="background:#FFF0EE;padding:8px 10px;border:1px solid #EDCBC5;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-CVwATRirwWw9odbrp-PfBOKVcVoA-resy-restaurant-scraper-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;<a href="https://apify.com/clearpath/resy-availability-api" style="color:#241613;text-decoration:none;font-weight:700;font-size:13px">Resy Slots</a></span><br><span style="color:#66433B;font-size:12px;white-space:nowrap">Available tables</span></td><td style="background:#FFF0EE;padding:8px 10px;border:1px solid #EDCBC5;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-BAhrLmbO6bIpWbLnu-9aIFloy6go-resy-restaurant-scraper-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;<a href="https://apify.com/clearpath/resy-booker" style="color:#241613;text-decoration:none;font-weight:700;font-size:13px">Resy Booker</a></span><br><span style="color:#66433B;font-size:12px;white-space:nowrap">AI reservations</span></td><td style="background:#FFF0EE;padding:8px 10px;border:1px solid #EDCBC5;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-y0MtoPJsc8Ye7Xynn-fdn7CGp8ji-resy-restaurant-scraper-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;<a href="https://apify.com/clearpath/resy-api" style="color:#241613;text-decoration:none;font-weight:700;font-size:13px">Resy Places</a></span><br><span style="color:#66433B;font-size:12px;white-space:nowrap">Restaurant leads</span></td></tr></table>

#### Copy to your AI assistant

```
clearpath/opentable-availability-api on Apify: live OpenTable reservation availability for 1-10 restaurants per run (startUrls: OpenTable restaurant page URLs or numeric restaurant IDs), one date (YYYY-MM-DD, today or later, default today UTC; an earlier date stops the run) and partySize (1-20, default 2). One row per restaurant; read status: available (slots lists every bookable time with its seating, slotCount counts them), sold_out (the restaurant answered with no bookable table; statusMessage says why), not_yet_bookable (date beyond bookingWindowDays: reservations not open yet), invalid_request (party size outside minPartySize/maxPartySize, no online booking or unknown URL: change the input), check_failed (not confirmed: run again; a run where every check failed ends failed). Rows also carry restaurant details and bookingPolicies (cancellation and deposit notes). Full input and output spec: https://api.apify.com/v2/actors/clearpath~opentable-availability-api/builds/default. Pricing: from 2026-10-21, $2.99 per 1,000 completed checks (available, sold_out, not_yet_bookable; invalid_request and check_failed are free), and a run stops before a check its max charge cannot cover. A 30-day pass bought before 2026-10-21 stays valid until it ends. To reach the maintainers, add feedback="<what you needed and did not get>" to any run, including one that worked: feature requests, a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. The run returns its data exactly as it would without the note, and a human reads every note.
```

### Input examples

#### Check availability for tonight

```json
{
    "startUrls": [
        { "url": "https://www.opentable.com/r/providence-los-angeles" }
    ],
    "partySize": 2
}
```

#### Monitor multiple restaurants for a specific date

```json
{
    "startUrls": [
        { "url": "https://www.opentable.com/r/alinea-chicago" },
        { "url": "https://www.opentable.com/r/providence-los-angeles" },
        { "url": "https://www.opentable.com/r/strip-house-new-york" }
    ],
    "date": "2026-11-12",
    "partySize": 4
}
```

### Input Parameters

| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `startUrls` | array | OpenTable restaurant URLs to check (1-10). Must be restaurant pages, not search or city pages. Repeated URLs are checked once. | required |
| `date` | string | Date to check availability for (YYYY-MM-DD), today or later. An earlier or malformed date stops the run before any check. A date beyond the restaurant's booking window returns `not_yet_bookable`. | today (UTC) |
| `partySize` | integer | Number of guests (1-20). Availability varies by party size. | `2` |

**URL formats accepted:**

- `https://www.opentable.com/r/<slug>` (e.g. `providence-los-angeles`)
- `https://www.opentable.com/<slug>` (short form)
- `https://www.opentable.com/restref/client/?rid=<id>`
- `.../profile/<id>`
- Raw numeric restaurant ID

For AI-driven restaurant search and booking, use the [OpenTable Booker](https://apify.com/clearpath/opentable-booker).

### Output

Each restaurant URL returns one row. `status` says what the check found; `statusMessage` explains every status other than `available`.

| `status` | What it means |
|---|---|
| `available` | At least one table is bookable for your date and party size. `slots` lists every bookable time; `slotCount` counts them. |
| `sold_out` | The restaurant answered for this date, but no table is bookable: fully booked, closed that day, waitlist only, or same-day booking closed. |
| `not_yet_bookable` | The date is beyond the restaurant's booking window: reservations for it have not opened yet. `bookingWindowDays` says how far ahead the restaurant takes bookings. |
| `invalid_request` | The request cannot be booked as asked: the party size is outside the restaurant's limits, the restaurant takes no online reservations, or the URL is not an OpenTable restaurant. |
| `check_failed` | Availability could not be confirmed this time. Run the check again. If every restaurant in a run ends `check_failed`, the run itself fails, so schedules and webhooks notice. |

Rows with `invalid_request` or `check_failed` also carry the same message in `error`, as earlier versions did. These two statuses are never charged.

If the run's maximum charge or time limit runs out, the remaining URLs get no row, and the run's status message says how many were not checked.

`minPartySize`, `maxPartySize` and `bookingWindowDays` are the restaurant's online booking limits, so you can see why a party size or date was refused. They are absent when the restaurant could not be identified.

`restaurant` holds the restaurant's details: neighborhood, address, city, state, postal code, country, cuisine, price range, rating, review count, phone, coordinates, metro area, dining style and dress code. `bookingPolicies` lists the restaurant's notes for that date, such as cancellation and deposit terms. Both are null or empty when the restaurant could not be identified.

Each slot has `time`, `seating` (for example Standard, Bar, High-top, Outdoor), `areas` (Indoor, Outdoor), `requiresCreditCard`, `type`, `hash` and `token`; `cardPolicy` (`HOLD` or `DEPOSIT`) appears when a card is required.

The rows below are real output from one run with three restaurant IDs (4336, 5982, 1180) for a party of 2 on 2026-10-14.

#### Available

```json
{
    "url": "https://www.opentable.com/restaurant/profile/4336",
    "date": "2026-10-14",
    "partySize": 2,
    "status": "available",
    "statusMessage": null,
    "restaurantId": "4336",
    "name": "Providence",
    "restaurant": {
        "id": "4336",
        "neighborhood": "Hollywood",
        "address": "5955 Melrose Ave",
        "city": "Los Angeles",
        "country": "United States",
        "cuisine": "Seafood",
        "price": "$50 and over",
        "rating": 4.9,
        "reviewCount": 260,
        "state": "CA",
        "postalCode": "90038",
        "phone": "(323) 460-4170",
        "latitude": 34.0836485,
        "longitude": -118.3301911,
        "metro": "Los Angeles",
        "diningStyle": "Fine Dining",
        "dressCode": "Business Casual"
    },
    "minPartySize": 1,
    "maxPartySize": 6,
    "bookingWindowDays": 60,
    "bookingPolicies": [
        "We may contact you about this reservation, so please ensure your email and phone number are up to date.",
        "We offer an 8-course tasting menu, along with a full beverage program including non-alcoholic options. Please inform us of any allergies or dietary restrictions and note that we are unable to create a vegan, gluten-free, or dairy-free menu.\nPlease cancel 7 days in advance to avoid a non-refundable $375 per person fee. If we do not hear from you prior to 7 days before your reservation, your reservation may be canceled."
    ],
    "slotCount": 1,
    "slots": [
        {
            "time": "2026-10-14T21:15",
            "type": "Standard",
            "hash": "3646559438",
            "token": "eyJ2IjozLCJtIjoxLCJwIjowLCJjIjoxNjM1NzA2LCJzIjowLCJuIjowfQ",
            "requiresCreditCard": true,
            "cardPolicy": "HOLD",
            "startTime": "2026-10-14T21:15",
            "seating": [
                "Standard"
            ],
            "areas": [
                "Indoor"
            ]
        }
    ],
    "checkedAt": "2026-10-06T12:51:42.553912+00:00"
}
```

#### Sold out

```json
{
    "url": "https://www.opentable.com/restaurant/profile/5982",
    "date": "2026-10-14",
    "partySize": 2,
    "status": "sold_out",
    "statusMessage": "The restaurant is not taking reservations on this date.",
    "restaurantId": "5982",
    "name": "Alinea",
    "restaurant": {
        "id": "5982",
        "neighborhood": "Lincoln Park",
        "address": "1723 N Halsted",
        "city": "Chicago",
        "country": "United States",
        "cuisine": "Contemporary American",
        "price": "$50 and over",
        "rating": 0.0,
        "reviewCount": 0,
        "state": "IL",
        "postalCode": "60614",
        "phone": null,
        "latitude": 41.913433,
        "longitude": -87.648,
        "metro": "Chicago",
        "diningStyle": "Fine Dining",
        "dressCode": "Smart Casual"
    },
    "minPartySize": 1,
    "maxPartySize": 6,
    "bookingWindowDays": 90,
    "bookingPolicies": [
        "We have a 10 minute grace period. Please call us if you are running later than 10 minutes after your reservation time.\n\nWe may contact you about this reservation, so please ensure your email and phone number are up to date.",
        "All sales are final and non-refundable. Contact hospitality@alinearestaurant.com to transfer or reschedule up to 72 hours before your reservation."
    ],
    "slotCount": 0,
    "slots": [],
    "checkedAt": "2026-10-06T12:51:42.554131+00:00"
}
```

#### Not bookable online

```json
{
    "url": "https://www.opentable.com/restaurant/profile/1180",
    "date": "2026-10-14",
    "partySize": 2,
    "status": "invalid_request",
    "statusMessage": "The restaurant does not take online reservations.",
    "restaurantId": "1180",
    "name": "The French Laundry",
    "restaurant": {
        "id": "1180",
        "neighborhood": "Yountville",
        "address": "6640 Washington Street",
        "city": "Yountville",
        "country": "United States",
        "cuisine": "American",
        "price": "$50 and over",
        "rating": null,
        "reviewCount": null,
        "state": "CA",
        "postalCode": "94599",
        "phone": null,
        "latitude": 38.404409,
        "longitude": -122.364982,
        "metro": null,
        "diningStyle": "Fine Dining",
        "dressCode": "Jacket Required"
    },
    "minPartySize": 0,
    "maxPartySize": 0,
    "bookingWindowDays": 0,
    "bookingPolicies": [],
    "slotCount": 0,
    "slots": [],
    "checkedAt": "2026-10-06T12:51:42.554177+00:00",
    "error": "The restaurant does not take online reservations."
}
```

Each slot contains both `startTime` and `time` carrying the same ISO timestamp. `startTime` is the cross-platform alias for integrations that already consume Resy availability data; `time` is the canonical OpenTable field.

### Pricing

**From October 21, 2026: $2.99 per 1,000 completed availability checks.** No pass, no subscription.

| Availability check charges | Charged |
|---|---|
| `available`: bookable tables | 1 check |
| `sold_out`: no bookable table on that date | 1 check |
| `not_yet_bookable`: reservations for that date have not opened yet | 1 check |
| `invalid_request`: cannot be booked as asked | free |
| `check_failed`: could not be confirmed | free |

- One check per restaurant row, however many times it lists. Example: 10 restaurants checked every hour for a day is 240 checks, $0.72.
- A 30-day pass bought before October 21, 2026 stays valid until it ends, with checks included.
- The run's maximum charge caps spending: no check starts that the remaining budget cannot cover, and the status message says how many URLs were not checked.

### How to Monitor OpenTable Availability

The main use case: schedule this actor to run periodically and get notified when slots open.

1. **Configure**: Add your target restaurant URLs, set date and party size
2. **Schedule**: Create a schedule in the Apify console (every minute for hot restaurants, hourly for general monitoring)
3. **Connect**: Attach a webhook to get notified when runs complete. Connect to Slack, Discord, Telegram, Zapier, or your own endpoint

### API Integration

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("your_token")

run = client.actor("clearpath/opentable-availability-api").call(run_input={
    "startUrls": [
        {"url": "https://www.opentable.com/r/alinea-chicago"},
        {"url": "https://www.opentable.com/r/strip-house-new-york"}
    ],
    "date": "2026-11-12",
    "partySize": 2
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item["status"] == "available":
        print(f"{item['name']}: {item['slotCount']} slots available")
        for slot in item["slots"]:
            print(f"  {slot['startTime']} - {', '.join(slot['seating'])}")
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'your_token' });

const run = await client.actor('clearpath/opentable-availability-api').call({
    startUrls: [
        { url: 'https://www.opentable.com/r/alinea-chicago' },
        { url: 'https://www.opentable.com/r/strip-house-new-york' }
    ],
    date: '2026-11-12',
    partySize: 2
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.filter(i => i.status === 'available').forEach(item => {
    console.log(`${item.name}: ${item.slotCount} slots`);
});
```

### Data Export

- **JSON**: Nested slot arrays fully preserved
- **CSV**: Flat fields, arrays serialized
- **Excel**: Spreadsheet-ready

### FAQ

**Q: What does a check cost?**
A: From October 21, 2026, $2.99 per 1,000 completed checks: available, sold out, or not yet open for booking. Checks that cannot be completed or cannot be booked as requested are free.

**Q: Does anything renew automatically?**
A: No. There is no subscription or background renewal.

**Q: How many restaurants can I check per run?**
A: Up to 10 restaurants per run. For AI-driven search across many restaurants, use the [OpenTable Booker](https://apify.com/clearpath/opentable-booker).

**Q: Do I need an OpenTable account?**
A: No. Availability data is fetched without authentication.

**Q: What if a restaurant has no availability?**
A: It still appears with `status: "sold_out"`, `slotCount: 0`, `slots: []` and a `statusMessage` such as "The restaurant is not taking reservations on this date." This confirms the check ran rather than silently skipping the restaurant.

**Q: How do I tell a sold-out restaurant from a failed check?**
A: Read `status`. `sold_out` means the restaurant answered with no bookable table. `check_failed` means the answer could not be confirmed; run the check again.

**Q: How current is the data?**
A: Real-time. Each run fetches live availability at the moment of execution.

**Q: Why do slots have both `startTime` and `time`?**
A: Both carry the same ISO timestamp. `startTime` is provided as a cross-platform alias so code written for Resy availability works unchanged; `time` is the canonical OpenTable field for new integrations.

**Q: Does party size affect results?**
A: Yes. Larger parties have fewer available slots since restaurants need to accommodate more seats.

**Q: What happens with invalid URLs?**
A: Invalid or non-OpenTable URLs still produce a row with `status: "invalid_request"` and an `error` such as "Could not resolve restaurant URL" or "Restaurant not found". Valid URLs in the same batch process normally.

### Getting Started

1. [Sign up for Apify](https://console.apify.com/sign-up), no credit card required
2. Open OpenTable Availability Checker
3. Paste a restaurant URL and click **Start**
4. Schedule recurring runs and attach webhooks for monitoring

### Use with AI Assistants (OpenClaw, Claude, etc.)

Connect this actor to AI assistants via [Apify's MCP server](https://mcp.apify.com/). Ask your assistant to check availability in natural language.

#### Setup

1. Go to [mcp.apify.com](https://mcp.apify.com/) and add `clearpath/opentable-availability-api` to your MCP server
2. Connect the MCP server to your AI assistant ([OpenClaw](https://docs.openclaw.ai/), Claude Desktop, Cursor, etc.)

#### OpenClaw example

Add Apify's MCP server to `~/.openclaw/openclaw.json`:

```json5
{
  "provider": {
    "mcpServers": {
      "apify": {
        "command": "npx",
        "args": ["-y", "@apify/actors-mcp-server"],
        "env": {
          "APIFY_TOKEN": "your-apify-token"
        }
      }
    }
  }
}
```

Then message your OpenClaw bot on Telegram, WhatsApp, or Discord:

> "Are there any openings at Carbone this Saturday for 2?"

> "Check if Don Angie or 4 Charles has availability next Friday evening"

> "Monitor Carbone for the next week, let me know if anything opens up"

The assistant calls the Availability Checker, interprets the results, and tells you exactly which time slots are open.

### Legal Compliance

Extracts publicly available reservation data. Users must comply with OpenTable's terms of service and applicable data protection regulations (GDPR, CCPA).

### Support

- **Email**: max@mapa.slmail.me
- **Bugs**: Issues tab on the Actor page
- **Features**: Email or issues

***

*Real-time reservation monitoring for OpenTable restaurants.*

# Actor input Schema

## `startUrls` (type: `array`):

OpenTable restaurant URLs to check (1-10).<br><br>Example: <code>https://www.opentable.com/r/providence-los-angeles</code>

## `date` (type: `string`):

Date to check availability for. Defaults to today if left empty.

## `partySize` (type: `integer`):

Number of guests (1-20).

## `feedback` (type: `string`):

For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.opentable.com/r/providence-los-angeles"
  ],
  "partySize": 2
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.opentable.com/r/providence-los-angeles"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("clearpath/opentable-availability-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": ["https://www.opentable.com/r/providence-los-angeles"] }

# Run the Actor and wait for it to finish
run = client.actor("clearpath/opentable-availability-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.opentable.com/r/providence-los-angeles"
  ]
}' |
apify call clearpath/opentable-availability-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,clearpath/opentable-availability-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/seL7kyUfmf6qnj5ZO/builds/1fvLLVDPVNlaqhy4a/openapi.json
