{
  "openapi": "3.0.1",
  "info": {
    "title": "MSC Cruises scraper - Complete Cruise Data Extractor",
    "description": "Why Choose This Scraper?\n  ✅ Extract from 5 MSC markets (US, UK, IT, DE, AT)\n  ✅ Complete cruise data with multi-cabin pricing (Interior, Oceanview, Balcony, Suite, Yacht Club)\n  ✅ Filter by 25 destination regions\n  ✅ Three API strategies for maximum coverage\n  ✅ Apify/custom proxy support",
    "version": "0.0",
    "x-build-id": "twbZKuQi9qQEtcL3t"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sercul~msc-cruises-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sercul-msc-cruises-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/sercul~msc-cruises-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sercul-msc-cruises-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/sercul~msc-cruises-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sercul-msc-cruises-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": "Region",
            "enum": [
              "en_US",
              "en_GB",
              "it_IT",
              "de_DE",
              "de_AT",
              "fr_FR",
              "es_ES"
            ],
            "type": "string",
            "description": "MSC market to scrape. Each region uses different currency and pricing.",
            "default": "en_US"
          },
          "maxRows": {
            "title": "Maximum Cruises",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of unique cruises to fetch (global cap, after de-duplication). The full US catalog is ~6,200 cruises; EU markets may return multiple hits per cruise for cabin variants.",
            "default": 500
          },
          "destinations": {
            "title": "Destinations",
            "type": "array",
            "description": "Filter by destination areas. Leave empty to scrape all destinations.",
            "items": {
              "type": "string",
              "enum": [
                "MED",
                "WEE",
                "EME",
                "MEW",
                "FIO",
                "NOR",
                "CUK",
                "BAC",
                "CAR",
                "SOC",
                "NCA",
                "BHM",
                "ALA",
                "EMW",
                "DUB",
                "SOA",
                "TRA",
                "ASI",
                "FAE",
                "AFR",
                "WOR",
                "PAN",
                "POS",
                "INW",
                "NOA"
              ],
              "enumTitles": [
                "Mediterranean",
                "Western Mediterranean",
                "Eastern Mediterranean",
                "Mediterranean West",
                "Northern Europe & Fjords",
                "Northern Europe",
                "Cruises from UK",
                "British Isles & Atlantic Coast",
                "Caribbean",
                "Southern Caribbean",
                "Northern Caribbean",
                "Bahamas",
                "Alaska",
                "Dubai & Middle East (US)",
                "Middle East & Dubai (EU)",
                "South America",
                "Transatlantic",
                "Asia",
                "Far East Asia",
                "Africa",
                "World Cruise",
                "Panama Canal",
                "Grand Voyages",
                "Indian Ocean",
                "North America"
              ]
            }
          },
          "cabinTiers": {
            "title": "Cabin Price Tiers (EU/UK markets)",
            "type": "array",
            "description": "EU/UK markets only. Which cabin tiers to fetch prices for. Each tier is a separate request, so more tiers = proportionally more requests (high volume can reduce reliability). Leave EMPTY for a single lead/'from' price (recommended — ~5x lighter). Select tiers to enable per-cabin enrichment. Ignored for the en_US market, which always returns all tiers.",
            "items": {
              "type": "string",
              "enum": [
                "INS",
                "OUT",
                "BAL",
                "SUI",
                "YTC"
              ],
              "enumTitles": [
                "Interior",
                "Oceanview",
                "Balcony",
                "Suite",
                "Yacht Club"
              ]
            },
            "default": []
          },
          "enrichCabinPrices": {
            "title": "Enrich Cabin Prices from B2C (EU/UK markets)",
            "type": "boolean",
            "description": "EU/UK markets only. Fetches per-cabin prices from MSC's B2C pricing service and fills in cabin types the main sweep did not return (typically raising coverage from ~1 to ~6 cabin types per sailing). Requires a RESIDENTIAL proxy. Purely additive: prices already collected are never overwritten. Adds ~37 requests per run. Not available for Germany and Spain.",
            "default": false
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum retries for failed requests",
            "default": 5
          },
          "euRequestDelayMs": {
            "title": "EU api-search delay (ms)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "EU/UK only. Delay between search calls (jittered ±20%) to keep the request rate low during a full sweep. Raise for smaller markets (AT/IT) if you see errors; 0 disables.",
            "default": 700
          },
          "tailRotationNearWeeks": {
            "title": "Rotate the far-future sweep (EU/UK markets)",
            "minimum": 0,
            "maximum": 52,
            "type": "integer",
            "description": "EU/UK only. Leave empty for the standard sweep. When set, each run collects the next N weeks of departures in full, then spends the rest of maxRows on later departures, starting where the previous run stopped. Use it when maxRows is smaller than the full catalogue (about 7,500 sailings per market) and you run on a schedule: a few consecutive runs then refresh every sailing instead of always the same nearest ones. maxRows must leave at least 250 sailings after the near weeks (about 70 per week). Ignored when destinations are set."
          },
          "tailCursorNamespace": {
            "title": "Rotation position name",
            "pattern": "^[A-Za-z0-9_-]{1,40}$",
            "maxLength": 40,
            "type": "string",
            "description": "Optional. Runs that share a name continue from the same saved position. Give test or one-off runs their own name (for example \"test\") so they don't move your scheduled runs' position. Letters, digits, \"_\" and \"-\", up to 40 characters."
          },
          "useApifyProxy": {
            "title": "Use Apify Proxy",
            "type": "boolean",
            "description": "Use Apify RESIDENTIAL proxy with country matching the selected region. A residential proxy is required. Set false only when supplying a custom residential proxyUrl.",
            "default": true
          },
          "apifyProxyCountryCode": {
            "title": "Apify Proxy Country Code",
            "type": "string",
            "description": "Override proxy country (e.g., GB, US, IT, DE). Leave empty to auto-match from region."
          },
          "proxyUrl": {
            "title": "Custom Proxy URL",
            "type": "string",
            "description": "Custom proxy URL (only when Apify Proxy is disabled). Format: http[s]://user:pass@host:port"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}