{
  "openapi": "3.0.1",
  "info": {
    "title": "Hotel Rates, Award Points & OTA Parity — Marriott, Hilton, IHG",
    "description": "Live room rates, member rates and award points from 11 hotel chains' own booking systems (Marriott Bonvoy, Hilton Honors, World of Hyatt, IHG One Rewards, Choice, Radisson, Wyndham and more), plus the same hotel's price on Booking.com, Expedia, Hotels.com, Trip.com and Agoda: rate parity in one run.",
    "version": "0.2",
    "x-build-id": "ryR6gnbrg6iLTj6za"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mu0i~hotel-rates-award-points/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mu0i-hotel-rates-award-points",
        "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/mu0i~hotel-rates-award-points/runs": {
      "post": {
        "operationId": "runs-sync-mu0i-hotel-rates-award-points",
        "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/mu0i~hotel-rates-award-points/run-sync": {
      "post": {
        "operationId": "run-sync-mu0i-hotel-rates-award-points",
        "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",
        "required": [
          "chain"
        ],
        "properties": {
          "mode": {
            "title": "What to fetch",
            "enum": [
              "rates",
              "award",
              "calendar",
              "compset",
              "compset_award",
              "parity",
              "stay",
              "find_hotels"
            ],
            "type": "string",
            "description": "**Rates** = every room × rate plan for one stay (cash + member). **Award** = points options, points+cash, cents-per-point and the free-night certificates that cover the night. **Calendar** = lowest rate per night over a window. **Comp set** = lowest rate for up to 25 hotels in one call. **Comp set (award)** = lowest points for up to 25 hotels. **Parity** = the chain's direct rate beside Booking.com, Expedia, Hotels.com, Trip.com and Agoda for the same hotel, with the gap and the verdict. **Stay** = a 2–14 night stay sold as one versus each night priced alone, and whether a split booking is possible. **Find hotel codes** = turn a city or a point on the map into the chain's own property codes, which every other mode takes as input.",
            "default": "rates"
          },
          "chain": {
            "title": "Hotel chain or OTA",
            "enum": [
              "marriott",
              "hilton",
              "hyatt",
              "ihg",
              "choice",
              "melia",
              "premierinn",
              "iprefer",
              "radisson",
              "bestwestern",
              "wyndham",
              "booking",
              "expedia",
              "hotelscom",
              "ctrip",
              "agoda"
            ],
            "type": "string",
            "description": "Each hotel chain is shopped on its own brand-direct system: Marriott Bonvoy, Hilton Honors, World of Hyatt, IHG One Rewards, Choice Privileges, Meliá Rewards, Premier Inn, I Prefer, Radisson Rewards, Best Western Rewards, Wyndham Rewards. The five OTAs at the end are channels: Rates, Calendar and Comp set work on them with the OTA's own hotel id (the number in its URL, or the `channel_id` a Parity run returns); they have no award points and no hotel-code search. Parity takes a hotel chain here and compares it against the OTAs.",
            "default": "marriott"
          },
          "hotelCodes": {
            "title": "Hotel codes",
            "type": "array",
            "description": "The chain's own property codes, one per line — e.g. Marriott `CHIRL` (Chicago Marriott Downtown), Hyatt `CHIZP`, IHG `CHIMM`, Hilton `CHITDHX`. For an OTA, its hotel id (Booking.com `708601`, Expedia/Hotels.com `553946`, Agoda `2458383`). In Rates/Award/Calendar/Parity/Stay mode each code is a separate lookup; in comp-set mode up to 25 codes are answered in one call. Don't know the codes? Run **Find hotel codes** mode with a city name first. Not used in that mode.",
            "items": {
              "type": "string"
            }
          },
          "channels": {
            "title": "OTA channels (Parity mode)",
            "uniqueItems": true,
            "type": "array",
            "description": "Parity mode only: which OTAs to shop beside the chain's direct rate. Leave empty for all five. Each channel shopped costs one Rates call on that OTA ($0.012 live); a channel with no id for the hotel costs nothing.",
            "items": {
              "type": "string",
              "enum": [
                "booking",
                "expedia",
                "hotelscom",
                "ctrip",
                "agoda"
              ],
              "enumTitles": [
                "Booking.com",
                "Expedia",
                "Hotels.com",
                "Trip.com",
                "Agoda"
              ]
            },
            "default": []
          },
          "place": {
            "title": "Place to search (Find hotel codes mode)",
            "type": "string",
            "description": "City, address or landmark — e.g. `Chicago, IL`, `Shibuya, Tokyo`, `LHR airport`. Used only in **Find hotel codes** mode; the chain resolves it to a point and returns its hotels around it with their codes."
          },
          "radius": {
            "title": "Search radius (miles)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Find hotel codes mode only. 1–100 miles around the resolved point.",
            "default": 30
          },
          "checkin": {
            "title": "Check-in date",
            "type": "string",
            "description": "YYYY-MM-DD. Leave empty for 30 days from today. In Calendar mode this is the first night of the window. A date already in the past is refused — no chain sells a stay that has started."
          },
          "los": {
            "title": "Nights (length of stay)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Nights per stay, 1–30 (1–7 in Calendar mode, 2–14 in Stay mode).",
            "default": 1
          },
          "calendarDays": {
            "title": "Calendar window (nights)",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Calendar mode only: how many consecutive check-in dates to price, starting at the check-in date. 1–60.",
            "default": 30
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Adults per room, 1–8. Chains price by occupancy, so this changes the rate you get back.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children (ages)",
            "type": "array",
            "description": "One age per child, e.g. [4, 9]. Leave empty for none.",
            "default": []
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Rooms to quote, 1–8. More than one room returns the rate for that room count, not a sum.",
            "default": 1
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO 4217 code. Chains that price only in the property's currency return that currency instead.",
            "default": "USD"
          },
          "compsetRates": {
            "title": "Comp-set rate depth",
            "enum": [
              "lowest",
              "member"
            ],
            "type": "string",
            "description": "Comp-set modes only. **Lowest** = lowest public rate, plus the member rate where the chain returns it for free. **Member** = guarantee the lowest member rate. It costs extra only on the chains where it needs extra upstream calls: +$0.030 per hotel on Radisson, +$0.066 on Wyndham and +$0.006 on Best Western. No extra on the others.",
            "default": "lowest"
          },
          "maxCredits": {
            "title": "Stop after N credits",
            "minimum": 1,
            "type": "integer",
            "description": "Safety cap: stop the run once this many API credits have been spent. It is checked between calls, not inside one, so a single large call — a long Calendar window, or a comp set on Radisson, Wyndham or Best Western, a Parity run against five channels — can carry past the cap before the run stops. For a hard ceiling, set Apify's own per-run charge limit when you start the run. Leave empty for no cap. On the Apify Free plan a run stops once 5 credits are spent regardless; any paid plan runs the whole list."
          },
          "lat": {
            "title": "Latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "Find hotel codes mode: search around this point instead of a place name (use with lng)."
          },
          "lng": {
            "title": "Longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "Find hotel codes mode: longitude of the search point."
          },
          "maxAgeSec": {
            "title": "Max cache age (seconds)",
            "minimum": 0,
            "type": "integer",
            "description": "Comp-set, Parity and Stay modes. Caps how stale a cached rate may be. 0 forces a live shop at full price. Leave empty to accept any fresh cached result at the cheaper cached rate."
          },
          "concurrency": {
            "title": "Parallel lookups",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many hotels to look up at once. Higher is not faster — the API paces each chain's upstream itself.",
            "default": 2
          },
          "apiBaseUrl": {
            "title": "API base URL",
            "type": "string",
            "description": "Development only. On the Apify platform this is ignored unless it points at the same host as the Actor's configured API, because the Actor's API key is only ever sent to that host."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}