{
  "openapi": "3.0.1",
  "info": {
    "title": "Hostelworld Rate & Availability Monitor",
    "description": "Forward-dated hostel rate calendar: price, dorm/private split, promo stack, organic ranking position and commission split per property per date. Delta mode returns only what moved. No login, no API key, no browser.",
    "version": "0.1",
    "x-build-id": "K6BbN94QEZ9r5jSi4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zhorex~hostelworld-rate-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zhorex-hostelworld-rate-monitor",
        "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/zhorex~hostelworld-rate-monitor/runs": {
      "post": {
        "operationId": "runs-sync-zhorex-hostelworld-rate-monitor",
        "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/zhorex~hostelworld-rate-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-zhorex-hostelworld-rate-monitor",
        "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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "rate_calendar",
              "city_index"
            ],
            "type": "string",
            "description": "'Rate calendar' builds the priced comp set: one row per property per arrival date per guest configuration, with price, promo stack, organic ranking position and Hostelworld's own commission split. 'City index' is the lookup utility — give it a country id and it returns that country's cities with their ids, so you can find the cityIds you need.",
            "default": "rate_calendar"
          },
          "cityIds": {
            "title": "City IDs",
            "type": "array",
            "description": "Hostelworld city ids to sweep. London = 3, Munich = 20. Don't know yours? Run mode 'City index' with a countryId first (England = 237). One request is issued per city per arrival date, and a whole city fits in a single request — London returns 83 properties at once.",
            "items": {
              "type": "string"
            }
          },
          "countryIds": {
            "title": "Country IDs (city-index mode only)",
            "type": "array",
            "description": "Only used by 'City index' mode. England = 237. Returns each country's cities with ids and coordinates.",
            "items": {
              "type": "string"
            }
          },
          "startDaysAhead": {
            "title": "First arrival date (days from today)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "How far ahead the calendar starts. 1 = tomorrow. Rates for tonight behave differently from forward rates, so most comp-set work starts at 1 or 7.",
            "default": 1
          },
          "horizonDays": {
            "title": "Horizon (number of days to cover)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "How many arrival dates to price, counting from the first. 30 gives a month-long forward calendar per city. Rows = cities x dates, one request each, so 1 city x 30 dates is 30 requests and roughly 2,500 rows for a big city.",
            "default": 30
          },
          "dateStepDays": {
            "title": "Date step",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "1 = every day (a full calendar). 7 = same weekday each week, which is the cheap way to watch a long season without paying for every date.",
            "default": 1
          },
          "guests": {
            "title": "Guests",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Guest count the prices are quoted for. Dorm pricing barely moves with this; private-room pricing does.",
            "default": 2
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of stay. This matters: length-of-stay promotions (promo type LOS) only appear at the night counts they apply to, so sweep the stay lengths your own guests actually book.",
            "default": 2
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO code, e.g. EUR, USD, GBP. Leave empty to take Hostelworld's default for the city. Fixing one currency makes a multi-country comp set comparable."
          },
          "deltaMode": {
            "title": "Delta mode — only what MOVED since the last run",
            "type": "boolean",
            "description": "Turn this on for a scheduled monitor. The first run records a baseline; every later run returns and bills ONLY cells that changed — price up or down, promo stack changed, organic position moved — plus properties that vanished from a date they were previously priced on, which is how sold-out shows up on this data (there is no availability flag). Unchanged cells are never charged, so a quiet day costs almost nothing.",
            "default": false
          },
          "deltaStateKey": {
            "title": "Delta stream name",
            "type": "string",
            "description": "Names an independent delta stream so several monitors don't collide (e.g. 'london-compset' vs 'iberia-summer'). Only used when Delta mode is on.",
            "default": "default"
          },
          "proxyConfiguration": {
            "title": "Proxy (optional — not required)",
            "type": "object",
            "description": "This data needs no proxy: it is served keyless to ordinary datacenter IPs, verified with 25 rapid requests and no throttling. Leave it off unless you specifically want your traffic routed. Turning it on costs proxy usage without improving results.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}