{
  "openapi": "3.0.1",
  "info": {
    "title": "Resy API Scraper",
    "description": "Scrape Resy restaurant data: search venues by city/cuisine/neighborhood, full venue detail (rating, price, contact, images, geo), and public reservation availability (open slots by day). Read-only public data, no account, no booking.",
    "version": "0.0",
    "x-build-id": "JhJ9Rfe6pmVzyeLOH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rl1987~resy-api-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rl1987-resy-api-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/rl1987~resy-api-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rl1987-resy-api-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/rl1987~resy-api-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rl1987-resy-api-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "venueDetail",
              "availability"
            ],
            "type": "string",
            "description": "What to scrape. 'Search venues' returns restaurants for a city/cuisine/keyword (optionally only those with open slots on a date); 'Venue detail' fetches full records for given venue IDs; 'Availability calendar' returns open-reservation days for given venue IDs.",
            "default": "search"
          },
          "location": {
            "title": "City / market",
            "enum": [
              "ny",
              "la",
              "sf",
              "chi",
              "dc",
              "mia",
              "bos",
              "atl",
              "hou",
              "dfw",
              "las",
              "sea",
              "den",
              "sd",
              "phx",
              "pdx",
              "no",
              "bna",
              "chs",
              "clt",
              "orl",
              "det",
              "pit",
              "cin",
              "cle",
              "slc",
              "kc",
              "ind",
              "mke",
              "sac",
              "stl",
              "ric",
              "sav",
              "rdu",
              "jax",
              "mem",
              "hnl",
              "boi",
              "okc",
              "abq",
              "nj",
              "tor",
              "mtl"
            ],
            "type": "string",
            "description": "Search mode: the Resy market to search. Pick a city; use the Neighborhood field to narrow within it.",
            "default": "ny"
          },
          "query": {
            "title": "Search query",
            "type": "string",
            "description": "Search mode: free-text keyword or restaurant name (optional; leave blank to browse the whole location)."
          },
          "cuisine": {
            "title": "Cuisine",
            "enum": [
              "American",
              "American Fusion",
              "Asian",
              "Asian American",
              "Australian",
              "BBQ",
              "Bar Bites",
              "Bistro",
              "Brazilian",
              "Brunch",
              "Cajun",
              "Californian",
              "Canadian",
              "Caribbean",
              "Chinese",
              "Cocktail Bar",
              "Contemporary American",
              "Creole",
              "Cuban",
              "European",
              "Farm to Table",
              "French",
              "Fusion",
              "Greek",
              "Indian",
              "International",
              "Italian",
              "Italian & Pizza",
              "Italian American",
              "Japanese",
              "Japanese-Italian",
              "Korean",
              "Lounge",
              "Mediterranean",
              "Mexican",
              "Natural Wine",
              "New American",
              "Omakase",
              "Pizza",
              "Polynesian",
              "Seafood",
              "Southern",
              "Steakhouse",
              "Sushi",
              "Thai",
              "Vietnamese",
              "Wine Bar"
            ],
            "type": "string",
            "description": "Search mode: filter by cuisine (optional). Pick from Resy's cuisine list; for anything not listed, use the free-text Search query field."
          },
          "neighborhood": {
            "title": "Neighborhood",
            "type": "string",
            "description": "Search mode: filter by neighborhood, e.g. 'Chelsea', 'Midtown East' (optional)."
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode: roughly how many venues to return (0 = a sensible default of 40). Resy search pages are 20 venues.",
            "default": 40
          },
          "availability": {
            "title": "Only venues with open slots",
            "type": "boolean",
            "description": "Search mode: attach live open reservation slots and keep only venues that have availability on the chosen day/party size.",
            "default": false
          },
          "includeVenueDetails": {
            "title": "Fetch full venue details",
            "type": "boolean",
            "description": "Search mode: for each result, also fetch the full venue record (address, website, menu URL, min party size, richer rating) and merge it into the row. Adds one request per venue.",
            "default": false
          },
          "day": {
            "title": "Date",
            "type": "string",
            "description": "Search (with availability) mode: reservation date. Absolute (YYYY-MM-DD) or relative ('3 days'). Defaults to today."
          },
          "partySize": {
            "title": "Party size",
            "minimum": 1,
            "type": "integer",
            "description": "Number of seats for availability lookups (search-with-availability, availability calendar, find).",
            "default": 2
          },
          "venueIds": {
            "title": "Venue IDs",
            "type": "array",
            "description": "Venue detail / Availability calendar modes: one or more numeric Resy venue IDs (the 'venue_id' field returned by a search).",
            "items": {
              "type": "string"
            }
          },
          "startDate": {
            "title": "Calendar start date",
            "type": "string",
            "description": "Availability calendar mode: first day. Absolute or relative. Defaults to today."
          },
          "endDate": {
            "title": "Calendar end date",
            "type": "string",
            "description": "Availability calendar mode: last day. Absolute or relative. Defaults to 30 days from today."
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Max requests processed in parallel.",
            "default": 5
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "type": "integer",
            "description": "Retries per request before it is marked failed.",
            "default": 5
          },
          "maxSessionRotations": {
            "title": "Max session rotations",
            "minimum": 0,
            "type": "integer",
            "description": "Retries for a blocked/rate-limited status, each with a fresh session/proxy.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Resy's public API is not bot-gated; a proxy is not required but a US IP is recommended.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}