cruise-itinerary-com Cruise Itinerary Data API

The Cruise Itinerary Data API API from cruise-itinerary-com — 0 operation(s) for cruise itinerary data api.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cruise-itinerary-com:cruise-itinerary-com-cruise-itinerary-data-api-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

cruise-itinerary-com-cruise-itinerary-data-api-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cruise Itinerary Data API
  version: 1.0.0
  summary: Cruise reference data, weekly fares, itineraries on the calendar, port traffic and a change feed.
  description: 'Reference data and weekly fare snapshots for cruise lines, ships, ports and sailings, refreshed every Monday. Fares are snapshots from an inventory feed, not live bookable prices. A null fare means the cabin is not offered or is sold out; the feed does not distinguish.


    **Authentication.** Send `Authorization: Bearer ` or `X-API-Key: `. Every endpoint needs a key, and a Free key costs nothing but an email address. A request without one gets 401 `key_required`. A malformed, unknown or revoked key is a 401, never a silent downgrade.


    **Plans.** Each endpoint lists the lowest plan that can call it in `x-required-plan`. Rate limits are per minute and some plans have a monthly call quota; both are reported in response headers. See /pricing for the current numbers.


    **Envelope.** Single objects come back as `{"data": {...}, "meta": {...}}`, lists as `{"data": [...], "meta": {as_of, page, per_page, total, has_more}}`, errors as `{"error": {status, code, message}}`. Every key is always present; absent values are null. Dates are YYYY-MM-DD. Money is whole US dollars.


    **Ids.** Lines, ships, ports, destinations, regions and cruises use slugs. Sailings use their integer id.


    **Caching.** Anonymous responses from open endpoints are cacheable for an hour and carry an ETag. Everything keyed is `private, no-store`.


    **Counting.** A keyed request that returns 2xx counts toward the monthly quota; errors do not.'
  termsOfService: https://cruise-itinerary.com/terms
  contact:
    name: Cruise Itinerary
    url: https://cruise-itinerary.com
servers:
- url: https://cruise-itinerary.com
  description: Production
security:
- {}
- bearerAuth: []
- apiKeyHeader: []
tags:
- name: Cruise Itinerary Data API
paths: {}
webhooks:
  changes.batch:
    post:
      summary: Change events after a weekly load
      operationId: webhookChangesBatch
      x-required-plan: business
      description: 'Business plans and above can subscribe an HTTPS URL from the dashboard, with optional kind, ship, line and port filters. After each weekly load we POST the matching change events, up to 1,000 per delivery (`page` of `pages`). Respond with any 2xx within 10 seconds. Otherwise we retry after 5 minutes, 30 minutes, 2, 6, 12 and 24 hours, and 24 hours again (8 attempts), then mark the delivery failed; an endpoint with 20 consecutive failed deliveries is disabled. URLs that resolve to private, loopback or link-local addresses are refused.


        `X-CI-Signature: t=,v1=` where `v1 = HMAC_SHA256(secret, ".")`, hex encoded, using the endpoint secret shown in the dashboard. Reject requests whose timestamp is far from your clock. The dashboard''s "send test" delivers a `ping` with an empty `events` list.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookBatch'
            example:
              id: 1
              type: changes.batch
              detected_on: '2026-09-28'
              previous_on: '2026-09-21'
              page: 1
              pages: 1
              events:
              - id: 813554
                detected_on: '2026-10-19'
                previous_on: '2026-10-12'
                kind: price_drop
                sailing_id: 14026501
                cruise_id: 21-night-panama-canal-nieuw-amsterdam-6d1d00
                previous_cruise_id: null
                ship:
                  id: nieuw-amsterdam
                  name: Nieuw Amsterdam
                line:
                  id: holland-america-line
                  name: Holland America Line
                departure_date: '2027-04-11'
                cabin: inside
                old_value: 2199
                new_value: 2099
                currency: USD
      responses:
        2XX:
          description: Delivered.
      tags:
      - Cruise Itinerary Data API
components:
  schemas:
    Ref:
      type: object
      properties:
        id:
          type: string
          description: Slug.
        name:
          type: string
      required:
      - id
      - name
      additionalProperties: false
    WebhookBatch:
      type: object
      properties:
        id:
          type: integer
          description: Delivery id; the same on every retry of this delivery.
        type:
          type: string
          enum:
          - changes.batch
          - ping
        detected_on:
          oneOf:
          - type: string
            format: date
          - type: 'null'
        previous_on:
          oneOf:
          - type: string
            format: date
          - type: 'null'
        page:
          type: integer
        pages:
          type: integer
          description: Deliveries for this load; each holds up to 1,000 events.
        events:
          type: array
          items:
            $ref: '#/components/schemas/ChangeEvent'
      required:
      - id
      - type
      - detected_on
      - previous_on
      - page
      - pages
      - events
      additionalProperties: false
    ChangeEvent:
      type: object
      properties:
        id:
          type: integer
        detected_on:
          type: string
          description: Load that revealed the change.
          format: date
        previous_on:
          type: string
          description: Load it was compared against.
          format: date
        kind:
          type: string
          description: '`schedule_changed`: the sailing''s route is the same but port days moved, were added or removed, or estimated days were confirmed by the line''s own itinerary; re-fetch the sailing for its new days. It covers every rebuild of the day-by-day itineraries since the previous load, nightly ones included.'
          enum:
          - price_drop
          - price_rise
          - cabin_unavailable
          - cabin_available
          - sailing_added
          - sailing_removed
          - itinerary_changed
          - schedule_changed
        sailing_id:
          type: integer
        cruise_id:
          oneOf:
          - type: string
            description: Cruise slug.
          - type: 'null'
        previous_cruise_id:
          oneOf:
          - type: string
            description: 'For itinerary_changed: the cruise it replaced.'
          - type: 'null'
        ship:
          oneOf:
          - $ref: '#/components/schemas/Ref'
          - type: 'null'
        line:
          oneOf:
          - $ref: '#/components/schemas/Ref'
          - type: 'null'
        departure_date:
          type: string
          format: date
        cabin:
          oneOf:
          - type: string
            enum:
            - inside
            - outside
            - balcony
            - suite
          - type: 'null'
        old_value:
          oneOf:
          - type: integer
            description: 'Fare before, USD. For schedule_changed: port days whose date moved, or that were added or removed.'
          - type: 'null'
        new_value:
          oneOf:
          - type: integer
            description: 'Fare after, USD. For schedule_changed: estimated days now exact.'
          - type: 'null'
        currency:
          type: string
          enum:
          - USD
      required:
      - id
      - detected_on
      - previous_on
      - kind
      - sailing_id
      - cruise_id
      - previous_cruise_id
      - ship
      - line
      - departure_date
      - cabin
      - old_value
      - new_value
      - currency
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Key from the dashboard: ci_live_ followed by 32 letters and digits.'
    apiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: The same key, as a header.