{
  "openapi": "3.0.1",
  "info": {
    "title": "Booking.com Room Offers & Cancellation Policies",
    "description": "Get every property's cheapest bookable offer for your exact dates and party: stay price, price per night, taxes, board, room setup — plus the cancellation terms. Free-cancellation deadline, hours of flexibility before check-in, refundable true/false, and market-wide refundability shares.",
    "version": "0.0",
    "x-build-id": "FgZJ9sKH32UlcuncD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apt_marble~booking-room-offers-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apt_marble-booking-room-offers-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/apt_marble~booking-room-offers-scraper/runs": {
      "post": {
        "operationId": "runs-sync-apt_marble-booking-room-offers-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/apt_marble~booking-room-offers-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-apt_marble-booking-room-offers-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": {
          "destinations": {
            "title": "Destinations",
            "maxItems": 100,
            "type": "array",
            "description": "Where to look for offers. Enter a city (Austin), a region or country (Tuscany, Portugal), a district, a landmark or airport name, or a latitude,longitude pair (30.2672,-97.7431). One entry per line, up to 100.",
            "default": [
              "Austin"
            ],
            "items": {
              "type": "string"
            }
          },
          "destinationType": {
            "title": "Destination type",
            "enum": [
              "CITY",
              "REGION",
              "COUNTRY",
              "DISTRICT",
              "AIRPORT",
              "LANDMARK",
              "LATLONG"
            ],
            "type": "string",
            "description": "What kind of place the entries are. A latitude,longitude pair is always treated as coordinates whatever you choose here.",
            "default": "CITY"
          },
          "checkIn": {
            "title": "Check-in",
            "type": "string",
            "description": "First night of the stay, as YYYY-MM-DD. Leave both dates blank for a rolling two-night stay 30 days from the run date, which keeps scheduled runs useful without editing. Booking.com shows no availability for dates in the past.",
            "default": ""
          },
          "checkOut": {
            "title": "Check-out",
            "type": "string",
            "description": "Departure day, as YYYY-MM-DD. Must be at least one night after check-in; if it is not, two nights are used.",
            "default": ""
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Adults per room. Offers are priced for exactly the party you ask for, so changing this changes every price.",
            "default": 2
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many rooms the party needs.",
            "default": 1
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Children in the party. Add their ages below — Booking.com prices children by age, and without ages the offers may not be the ones you would be quoted.",
            "default": 0
          },
          "childrenAges": {
            "title": "Children's ages",
            "maxItems": 10,
            "type": "array",
            "description": "One age (0-17) per child, one per line. When you fill this in it also sets the number of children.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "refundableOnly": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Keep only offers that can be cancelled free of charge up to a deadline. Turning this on lifts the share of rows carrying a cancellation deadline to effectively all of them.",
            "default": false
          },
          "noPrepaymentOnly": {
            "title": "No prepayment only",
            "type": "boolean",
            "description": "Keep only offers you do not have to pay for up front.",
            "default": false
          },
          "mealPlanFilter": {
            "title": "Board basis",
            "enum": [
              "any",
              "breakfast",
              "halfBoard",
              "kitchen"
            ],
            "type": "string",
            "description": "Keep only offers with the board you want. The option is matched against the labels the destination itself publishes; when a destination does not offer it, the run says so and returns offers without that filter.",
            "default": "any"
          },
          "minStars": {
            "title": "Minimum star rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only properties with at least this official star rating. 0 keeps everything, including properties with no star rating.",
            "default": 0
          },
          "minReviewScore": {
            "title": "Minimum review score",
            "enum": [
              "any",
              "6",
              "7",
              "8",
              "9"
            ],
            "type": "string",
            "description": "Keep only properties whose guest review score is at least this good. The bands are the ones Booking.com itself publishes for the destination.",
            "default": "any"
          },
          "extraFilters": {
            "title": "Extra Booking.com filters",
            "maxItems": 12,
            "type": "array",
            "description": "Advanced. Any additional Booking.com filter ids, one per line, in the form group=value — for example hotelfacility=107 (pool) or ht_id=204 (hotels only). Up to 12.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minDiscountPercent": {
            "title": "Minimum discount %",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep only offers whose price is genuinely below the property's own pre-discount price by at least this much. Most offers carry no discount at all, so anything above 0 is a strict filter.",
            "default": 0
          },
          "offerVariants": {
            "title": "Extra offer passes",
            "maxItems": 6,
            "type": "array",
            "description": "Booking.com shows one to two offers per property for a given search. To see more of a property's inventory, add filter ids here (for example fc=2 for free cancellation, mealplan=1 for breakfast included) and the destination is read again under each one, returning that property's best offer within that constraint. Each entry roughly doubles the run's work. Up to 6.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Result order",
            "enum": [
              "price",
              ""
            ],
            "type": "string",
            "description": "Price order keeps a market comparable between runs and surfaces more refundable inventory. Booking.com's own ranking mixes in materially more non-refundable offers.",
            "default": "price"
          },
          "maxPropertiesPerDestination": {
            "title": "Max properties per destination",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many properties to read per destination, per pass. Booking.com itself stops showing more than about 1,000 properties for any single search, so that is the ceiling.",
            "default": 100
          },
          "emitMarketRefundabilityRow": {
            "title": "Add a market summary row",
            "type": "boolean",
            "description": "Saves one extra row per destination with the share of properties offering free cancellation, the share needing no prepayment, and how many properties the destination had in total.",
            "default": true
          },
          "maxRequests": {
            "title": "Maximum work per run",
            "minimum": 1,
            "maximum": 8000,
            "type": "integer",
            "description": "A hard ceiling on how much reading the run may do. The projected amount is printed before work starts and the run stops cleanly when the ceiling is reached.",
            "default": 800
          },
          "maxConcurrency": {
            "title": "Destinations at a time",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many destinations to work through in parallel. Higher is faster on long lists; 4 is a good balance.",
            "default": 4
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Three-letter currency code every price is returned in, for example USD, EUR or GBP. Keep it the same between runs or a price series cannot be compared.",
            "default": "USD"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Booking.com language code for names and labels, for example en-us, de or fr.",
            "default": "en-us"
          },
          "proxyCountry": {
            "title": "Browse from",
            "type": "string",
            "description": "Country to appear to browse from, as a two-letter code such as us, gb or de. Leave blank for the default. Booking.com tailors availability and promotions by country, so this can change which offers appear.",
            "default": ""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}