{
  "openapi": "3.0.1",
  "info": {
    "title": "Trip.com Room Rates Scraper",
    "description": "Scrape every room and rate plan Trip.com is selling for a hotel and your dates. Just add hotel IDs or Trip.com hotel URLs and get room name, bed setup, size, floor, nightly price, stay total, meals, cancellation deadline, payment terms and photos. $3.50 per 1,000 priced hotel-stays.",
    "version": "1.0",
    "x-build-id": "f3n1clArrae9PHokb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/boncross~tripcom-room-rates/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-boncross-tripcom-room-rates",
        "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/boncross~tripcom-room-rates/runs": {
      "post": {
        "operationId": "runs-sync-boncross-tripcom-room-rates",
        "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/boncross~tripcom-room-rates/run-sync": {
      "post": {
        "operationId": "run-sync-boncross-tripcom-room-rates",
        "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": {
          "hotels": {
            "title": "Hotels",
            "type": "array",
            "description": "Trip.com hotel IDs or hotel page URLs. A hotel page URL looks like https://www.trip.com/hotels/detail/?hotelId=2193746: paste the whole link or just the number.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Trip.com hotel page links, pasted or bulk-loaded from a file or Google Sheet. Use this instead of the list above when you have many hotels.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Maximum hotel-stays for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "A run-wide ceiling on hotel-stays, across every hotel and stay. One hotel-stay is its whole room and rate-plan grid. Zero means no limit. Rows that report a request Trip.com did not answer are not counted here and are never charged for.",
            "default": 0
          },
          "maxRows": {
            "title": "Maximum rows for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "A run-wide ceiling on rows. A hotel-stay is one row per rate plan, so the last stay is cut to fit, keeping its cheapest plans, and is still charged as one hotel-stay. Works alongside Maximum hotel-stays: the run stops at whichever is reached first. Zero means no limit.",
            "default": 0
          },
          "maxRatePlansPerStay": {
            "title": "Maximum rate plans per hotel and stay",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "Keep only the cheapest N rate plans for each hotel and stay, from 1 to 300. Defaults to 200, which keeps every plan most hotels offer; a very busy hotel can offer more.",
            "default": 200
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "Check-in date as YYYY-MM-DD, for example 2026-11-12."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "Check-out date as YYYY-MM-DD, for example 2026-11-14."
          },
          "checkInDaysAhead": {
            "title": "Or: days ahead to check in",
            "minimum": 0,
            "type": "integer",
            "description": "Used only when no check-in date is given. The stay starts this many days from the day the run starts, which keeps a scheduled run pointed at a moving window.",
            "default": 30
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "type": "integer",
            "description": "Length of the stay when the dates are computed from \"days ahead\".",
            "default": 1
          },
          "stays": {
            "title": "Several stays at once",
            "type": "array",
            "description": "Price more than one date range per hotel. Each entry is \"YYYY-MM-DD_YYYY-MM-DD\", for example \"2026-11-12_2026-11-14\".",
            "items": {
              "type": "string"
            }
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "type": "integer",
            "description": "Adults per room. Applied the way Trip.com's own hotel page applies it (the adults of all rooms together); one adult or a larger party can change the plans offered. Check maxOccupancy on each plan.",
            "default": 2
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "type": "integer",
            "description": "How many rooms to price as one booking. Prices cover every room.",
            "default": 1
          },
          "childAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "One age per child, for example [4, 9]. Leave empty for an adults-only stay. A child can change which plans are offered.",
            "items": {
              "type": "string"
            }
          },
          "freeCancellationOnly": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Keep only rate plans that can be cancelled free of charge.",
            "default": false
          },
          "mealIncludedOnly": {
            "title": "Meals included only",
            "type": "boolean",
            "description": "Keep only rate plans where a meal is part of the rate, dropping plans that merely offer breakfast to buy.",
            "default": false
          },
          "maxPricePerNight": {
            "title": "Maximum price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Drop rate plans above this nightly price, in the currency selected below. 0 means no limit.",
            "default": 0
          },
          "includeRoomImages": {
            "title": "Include room photos",
            "type": "boolean",
            "description": "Add up to 12 photo URLs for the room each rate plan belongs to.",
            "default": true
          },
          "includeRoomFacilities": {
            "title": "Include room amenities",
            "type": "boolean",
            "description": "Add the amenity list of the room each rate plan belongs to, for example toiletries, bathtub, kettle and air conditioning (15 to 30 items a room).",
            "default": false
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Three-letter currency code for every price in the output.",
            "default": "USD"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Locale for room names, meal and cancellation text, for example en-GB, en-US, de-DE or ja-JP.",
            "default": "en-GB"
          },
          "priceStoreName": {
            "title": "Price memory store",
            "type": "string",
            "description": "Name of a storage area that remembers the cheapest price seen for each hotel and stay, so a later run can tell what changed. Leave empty to remember nothing."
          },
          "onlyNewOrChanged": {
            "title": "Only new or changed prices",
            "type": "boolean",
            "description": "Skip a hotel and stay whose cheapest price is the same as last run. Needs a price memory store.",
            "default": false
          },
          "delayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional pause before each call, in milliseconds. 0 (the default) runs as fast as the parallel limit allows. Values above 2000 are treated as 2000.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 32,
            "type": "integer",
            "description": "How many requests run at once across the whole run. The default is the fastest level measured clean; lower it only if a run reports refusals or errors.",
            "default": 16
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}