{
  "openapi": "3.0.1",
  "info": {
    "title": "Royal Caribbean Scraper",
    "description": "Scrape Royal Caribbean cruises: every sailing with ship, itinerary, ports with times, and per-cabin prices, discounts and category codes across 16 markets.",
    "version": "1.0",
    "x-build-id": "FFfgwYBsn4UEOTS5d"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/parsebird~royal-caribbean-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-parsebird-royal-caribbean-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/parsebird~royal-caribbean-scraper/runs": {
      "post": {
        "operationId": "runs-sync-parsebird-royal-caribbean-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/parsebird~royal-caribbean-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-parsebird-royal-caribbean-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",
        "required": [
          "region"
        ],
        "properties": {
          "region": {
            "title": "Market",
            "enum": [
              "USA",
              "CAN",
              "GBR",
              "IRL",
              "AUS",
              "NZL",
              "SGP",
              "DEU",
              "ITA",
              "FRA",
              "ESP",
              "NLD",
              "NOR",
              "SWE",
              "MEX",
              "BRA"
            ],
            "type": "string",
            "description": "Choose the Royal Caribbean market. It sets the prices, currency, and booking links, the same as picking a country on royalcaribbean.com.",
            "default": "USA"
          },
          "maxRows": {
            "title": "Max sailings",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Set the maximum number of sailings (dated departures) to save. One row = one sailing. A whole market has about 3,200 sailings.",
            "default": 500
          },
          "destinations": {
            "title": "Destinations",
            "type": "array",
            "description": "Pick destinations. Leave empty for all. Codes mirror Royal Caribbean's own search filters.",
            "items": {
              "type": "string",
              "enum": [
                "ALCAN",
                "FAR.E",
                "AUSTL",
                "BAHAM",
                "BERMU",
                "ATLCO",
                "CARIB",
                "EUROP",
                "HAWAI",
                "MEXCO",
                "PACIF",
                "T.PAN",
                "ISLAN",
                "SOPAC",
                "T.ATL",
                "TPACI"
              ],
              "enumTitles": [
                "Alaska (ALCAN)",
                "Asia (FAR.E)",
                "Australia & New Zealand (AUSTL)",
                "Bahamas (BAHAM)",
                "Bermuda (BERMU)",
                "Canada & New England (ATLCO)",
                "Caribbean (CARIB)",
                "Europe (EUROP)",
                "Hawaii (HAWAI)",
                "Mexico (MEXCO)",
                "Pacific Northwest (PACIF)",
                "Panama Canal (T.PAN)",
                "Repositioning (ISLAN)",
                "South Pacific (SOPAC)",
                "Transatlantic (T.ATL)",
                "Transpacific (TPACI)"
              ]
            },
            "default": []
          },
          "departurePorts": {
            "title": "Departure ports",
            "type": "array",
            "description": "Pick home ports. Leave empty for all. Royal Caribbean's port line-up is seasonal, so a port can return no sailings.",
            "items": {
              "type": "string",
              "enum": [
                "MIA",
                "FLL",
                "PCN",
                "TPA",
                "GAL",
                "MSY",
                "SJU",
                "BYE",
                "BWI",
                "SEA",
                "LAX",
                "SAN",
                "HNL",
                "SWD",
                "YVR",
                "STH",
                "BCN",
                "ROM",
                "BLQ",
                "ATH",
                "IST",
                "LIS",
                "CTG",
                "ONX",
                "SYD",
                "BNE",
                "SIN",
                "HKG",
                "BAO",
                "YOK"
              ],
              "enumTitles": [
                "Miami, FL (MIA)",
                "Fort Lauderdale, FL (FLL)",
                "Orlando (Port Canaveral), FL (PCN)",
                "Tampa, FL (TPA)",
                "Galveston, TX (GAL)",
                "New Orleans, LA (MSY)",
                "San Juan, Puerto Rico (SJU)",
                "Cape Liberty (New York), NJ (BYE)",
                "Baltimore, MD (BWI)",
                "Seattle, WA (SEA)",
                "Los Angeles, CA (LAX)",
                "San Diego, CA (SAN)",
                "Oahu (Honolulu), HI (HNL)",
                "Seward, AK (SWD)",
                "Vancouver, Canada (YVR)",
                "Southampton, England (STH)",
                "Barcelona, Spain (BCN)",
                "Rome (Civitavecchia), Italy (ROM)",
                "Ravenna (Venice), Italy (BLQ)",
                "Athens (Piraeus), Greece (ATH)",
                "Istanbul, Turkey (IST)",
                "Lisbon, Portugal (LIS)",
                "Cartagena, Colombia (CTG)",
                "Colón, Panama (ONX)",
                "Sydney, Australia (SYD)",
                "Brisbane, Australia (BNE)",
                "Singapore (SIN)",
                "Hong Kong (HKG)",
                "Shanghai (Baoshan), China (BAO)",
                "Tokyo (Yokohama), Japan (YOK)"
              ]
            },
            "default": []
          },
          "ships": {
            "title": "Ships",
            "type": "array",
            "description": "Pick ships. Leave empty for the whole fleet.",
            "items": {
              "type": "string",
              "enum": [
                "AD",
                "AL",
                "AN",
                "BR",
                "EN",
                "EX",
                "FR",
                "GR",
                "HM",
                "HE",
                "IC",
                "ID",
                "JW",
                "LE",
                "LB",
                "MA",
                "NV",
                "OA",
                "OY",
                "OV",
                "QN",
                "RD",
                "RH",
                "SR",
                "SC",
                "ST",
                "SY",
                "UT",
                "VI",
                "VY",
                "WN"
              ],
              "enumTitles": [
                "Adventure of the Seas (AD)",
                "Allure of the Seas (AL)",
                "Anthem of the Seas (AN)",
                "Brilliance of the Seas (BR)",
                "Enchantment of the Seas (EN)",
                "Explorer of the Seas (EX)",
                "Freedom of the Seas (FR)",
                "Grandeur of the Seas (GR)",
                "Harmony of the Seas (HM)",
                "Hero of the Seas (HE)",
                "Icon of the Seas (IC)",
                "Independence of the Seas (ID)",
                "Jewel of the Seas (JW)",
                "Legend of the Seas (LE)",
                "Liberty of the Seas (LB)",
                "Mariner of the Seas (MA)",
                "Navigator of the Seas (NV)",
                "Oasis of the Seas (OA)",
                "Odyssey of the Seas (OY)",
                "Ovation of the Seas (OV)",
                "Quantum of the Seas (QN)",
                "Radiance of the Seas (RD)",
                "Rhapsody of the Seas (RH)",
                "Serenade of the Seas (SR)",
                "Spectrum of the Seas (SC)",
                "Star of the Seas (ST)",
                "Symphony of the Seas (SY)",
                "Utopia of the Seas (UT)",
                "Vision of the Seas (VI)",
                "Voyager of the Seas (VY)",
                "Wonder of the Seas (WN)"
              ]
            },
            "default": []
          },
          "portsOfCall": {
            "title": "Ports of call",
            "type": "array",
            "description": "Enter port codes the cruise must visit, e.g. <code>PCC</code> (Perfect Day at CocoCay), <code>NAS</code> (Nassau), <code>CZM</code> (Cozumel). Codes appear in the <code>portCode</code> field of <code>rcPortsDetailedInfo</code>.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minNights": {
            "title": "Min nights",
            "minimum": 1,
            "maximum": 999,
            "type": "integer",
            "description": "Only sailings of at least this many nights."
          },
          "maxNights": {
            "title": "Max nights",
            "minimum": 1,
            "maximum": 999,
            "type": "integer",
            "description": "Only sailings of at most this many nights."
          },
          "sailDateFrom": {
            "title": "Sailing from",
            "type": "string",
            "description": "Only sailings departing on or after this date (YYYY-MM-DD)."
          },
          "sailDateTo": {
            "title": "Sailing to",
            "type": "string",
            "description": "Only sailings departing on or before this date (YYYY-MM-DD)."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "RECOMMENDED",
              "PRICE_LOW_TO_HIGH",
              "PRICE_HIGH_TO_LOW",
              "SAIL_DATE",
              "DURATION_LOW_TO_HIGH",
              "DURATION_HIGH_TO_LOW"
            ],
            "type": "string",
            "description": "Order of cruise groups, as on Royal Caribbean's search page. Sailings of one cruise group stay together.",
            "default": "RECOMMENDED"
          },
          "seniorRate": {
            "title": "Senior rates (55+)",
            "type": "boolean",
            "description": "Show prices with senior (55+) rates applied, like ticking that box on Royal Caribbean's cruise search.",
            "default": false
          },
          "militaryRate": {
            "title": "Military rates",
            "type": "boolean",
            "description": "Show prices with military rates applied.",
            "default": false
          },
          "policeRate": {
            "title": "Police & firefighter rates",
            "type": "boolean",
            "description": "Show prices with police and firefighter rates applied.",
            "default": false
          },
          "residentState": {
            "title": "State of residence",
            "enum": [
              "AL",
              "AK",
              "AE",
              "AZ",
              "AR",
              "CA",
              "CO",
              "CT",
              "DE",
              "DC",
              "FL",
              "GA",
              "HI",
              "ID",
              "IL",
              "IN",
              "IA",
              "KS",
              "KY",
              "LA",
              "ME",
              "MD",
              "MA",
              "MI",
              "MN",
              "MS",
              "MO",
              "MT",
              "NE",
              "NV",
              "NH",
              "NJ",
              "NM",
              "NY",
              "NC",
              "ND",
              "OH",
              "OK",
              "OR",
              "PA",
              "PR",
              "RI",
              "SC",
              "SD",
              "TN",
              "TX",
              "UT",
              "VT",
              "VA",
              "WA",
              "WV",
              "WI",
              "WY"
            ],
            "type": "string",
            "description": "Show prices with resident rates for a US state, like the state-of-residence option on Royal Caribbean's US site."
          },
          "nameLanguage": {
            "title": "Port and destination names",
            "enum": [
              "english",
              "local"
            ],
            "type": "string",
            "description": "English keeps port and destination names identical in every market (e.g. 'Athens (Piraeus)'). Market language keeps the names Royal Caribbean shows in that market (e.g. 'Athen (Piräus)' in Germany). Port codes are always included.",
            "default": "english"
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries for a failed request.",
            "default": 5
          },
          "minConcurrency": {
            "title": "Min concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Parallel requests to start with. Grows toward Max concurrency while requests succeed.",
            "default": 1
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Upper limit of parallel requests.",
            "default": 10
          },
          "requestHandlerTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 300,
            "type": "integer",
            "description": "Timeout for one request.",
            "default": 30
          },
          "useApifyProxy": {
            "title": "Use Apify Proxy",
            "type": "boolean",
            "description": "Send requests through Apify Proxy. Not needed in most runs; turn it on if requests get blocked.",
            "default": false
          },
          "proxyUrl": {
            "title": "Custom proxy URL",
            "type": "string",
            "description": "Your own proxy, e.g. <code>http://user:pass@host:port</code>. Takes priority over Apify Proxy."
          },
          "apifyProxyGroups": {
            "title": "Apify Proxy groups",
            "type": "array",
            "description": "Apify Proxy groups used when Use Apify Proxy is on.",
            "default": [
              "RESIDENTIAL"
            ],
            "items": {
              "type": "string"
            }
          },
          "apifyProxyCountryCode": {
            "title": "Apify Proxy country",
            "type": "string",
            "description": "Two-letter proxy country (e.g. US, GB, AU). Leave empty to match the market automatically."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}