cruise-itinerary-com Reference data API

The Reference data API from cruise-itinerary-com — 8 operation(s) for reference data.

Operations 8

GET /v1/lines List cruise lines #
GET /v1/lines/{id} Get a cruise line #
GET /v1/ships List ships #
GET /v1/ships/{id} Get a ship #
GET /v1/ports List ports #
GET /v1/ports/{id} Get a port #
GET /v1/destinations List destinations #
GET /v1/regions List regions #

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-reference-data-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-reference-data-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cruise Itinerary Data Reference 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: Reference data
paths:
  /v1/lines:
    get:
      tags:
      - Reference data
      summary: List cruise lines
      description: Every cruise line, alphabetical, with how many ships and upcoming sailings each has.
      operationId: listLines
      x-required-plan: free
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/per_page'
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Line'
                  meta:
                    $ref: '#/components/schemas/ListMeta'
              example:
                data:
                - id: amawaterways
                  name: AmaWaterways
                  ship_count: 41
                  sailing_count: 3478
                - id: american-cruise-lines
                  name: American Cruise Lines
                  ship_count: 23
                  sailing_count: 690
                meta:
                  as_of: '2026-10-19'
                  page: 1
                  per_page: 2
                  total: 45
                  has_more: true
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '404':
          $ref: '#/components/responses/E404'
        '429':
          $ref: '#/components/responses/E429'
        '500':
          $ref: '#/components/responses/E500'
      security:
      - bearerAuth: []
      - apiKeyHeader: []
  /v1/lines/{id}:
    get:
      tags:
      - Reference data
      summary: Get a cruise line
      description: One line by slug.
      operationId: getLine
      x-required-plan: free
      parameters:
      - name: id
        in: path
        required: true
        description: Line slug.
        schema:
          type: string
        example: holland-america-line
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    $ref: '#/components/schemas/Line'
                  meta:
                    $ref: '#/components/schemas/Meta'
              example:
                data:
                  id: holland-america-line
                  name: Holland America Line
                  ship_count: 13
                  sailing_count: 1215
                meta:
                  as_of: '2026-10-19'
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '404':
          $ref: '#/components/responses/E404'
        '429':
          $ref: '#/components/responses/E429'
        '500':
          $ref: '#/components/responses/E500'
      security:
      - bearerAuth: []
      - apiKeyHeader: []
  /v1/ships:
    get:
      tags:
      - Reference data
      summary: List ships
      description: Ships, alphabetical. `q` matches part of the name or an exact IMO number.
      operationId: listShips
      x-required-plan: free
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/per_page'
      - name: line
        in: query
        required: false
        description: Only ships of this line (slug).
        schema:
          type: string
        example: holland-america-line
      - name: q
        in: query
        required: false
        description: Name contains, or exact IMO.
        schema:
          type: string
        example: eurodam
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Ship'
                  meta:
                    $ref: '#/components/schemas/ListMeta'
              example:
                data:
                - id: eurodam
                  name: Eurodam
                  line:
                    id: holland-america-line
                    name: Holland America Line
                  imo: '9378448'
                  mmsi: '245206000'
                  passengers: 2104
                  crew: 929
                  gross_tonnage: 86273
                  decks: 11
                  length_ft: 936
                  width_ft: 106
                  maiden_voyage: '2008-07-05'
                  launched: '2008-01-01'
                  refurbished: null
                  adults_only: false
                - id: koningsdam
                  name: Koningsdam
                  line:
                    id: holland-america-line
                    name: Holland America Line
                  imo: '9692557'
                  mmsi: '244830547'
                  passengers: 2650
                  crew: 1025
                  gross_tonnage: 99500
                  decks: 12
                  length_ft: 935
                  width_ft: 115
                  maiden_voyage: '2016-04-04'
                  launched: null
                  refurbished: null
                  adults_only: false
                meta:
                  as_of: '2026-10-19'
                  page: 1
                  per_page: 2
                  total: 13
                  has_more: true
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '404':
          $ref: '#/components/responses/E404'
        '429':
          $ref: '#/components/responses/E429'
        '500':
          $ref: '#/components/responses/E500'
      security:
      - bearerAuth: []
      - apiKeyHeader: []
  /v1/ships/{id}:
    get:
      tags:
      - Reference data
      summary: Get a ship
      description: One ship by slug.
      operationId: getShip
      x-required-plan: free
      parameters:
      - name: id
        in: path
        required: true
        description: Ship slug.
        schema:
          type: string
        example: eurodam
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    $ref: '#/components/schemas/Ship'
                  meta:
                    $ref: '#/components/schemas/Meta'
              example:
                data:
                  id: eurodam
                  name: Eurodam
                  line:
                    id: holland-america-line
                    name: Holland America Line
                  imo: '9378448'
                  mmsi: '245206000'
                  passengers: 2104
                  crew: 929
                  gross_tonnage: 86273
                  decks: 11
                  length_ft: 936
                  width_ft: 106
                  maiden_voyage: '2008-07-05'
                  launched: '2008-01-01'
                  refurbished: null
                  adults_only: false
                meta:
                  as_of: '2026-10-19'
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '404':
          $ref: '#/components/responses/E404'
        '429':
          $ref: '#/components/responses/E429'
        '500':
          $ref: '#/components/responses/E500'
      security:
      - bearerAuth: []
      - apiKeyHeader: []
  /v1/ports:
    get:
      tags:
      - Reference data
      summary: List ports
      description: Ports and scenic stops. Use `has_calls=true` for ports a ship is scheduled to visit. For matching free text to a port, use `/v1/resolve`.
      operationId: listPorts
      x-required-plan: free
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/per_page'
      - name: q
        in: query
        required: false
        description: Name or alias contains.
        schema:
          type: string
        example: miami
      - name: destination
        in: query
        required: false
        description: Destination slug.
        schema:
          type: string
        example: miami
      - name: region
        in: query
        required: false
        description: Region slug.
        schema:
          type: string
        example: caribbean
      - name: has_calls
        in: query
        required: false
        description: 'true: only ports with scheduled calls; false: only those without.'
        schema:
          type: string
          enum:
          - 'true'
          - 'false'
      - name: kind
        in: query
        required: false
        description: port, scenic or transit.
        schema:
          type: string
          enum:
          - port
          - scenic
          - transit
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Port'
                  meta:
                    $ref: '#/components/schemas/ListMeta'
              example:
                data:
                - id: miami
                  name: Miami
                  kind: port
                  latitude: 25.7741566
                  longitude: -80.1935973
                  destination:
                    id: miami
                    name: Miami
                  region:
                    id: united-states
                    name: United States
                  aliases: []
                  upcoming_calls: 2377
                meta:
                  as_of: '2026-10-19'
                  page: 1
                  per_page: 2
                  total: 1
                  has_more: false
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '404':
          $ref: '#/components/responses/E404'
        '429':
          $ref: '#/components/responses/E429'
        '500':
          $ref: '#/components/responses/E500'
      security:
      - bearerAuth: []
      - apiKeyHeader: []
  /v1/ports/{id}:
    get:
      tags:
      - Reference data
      summary: Get a port
      description: One port by slug. The numeric id of a port that was merged into another also works and returns the surviving port, with `meta.resolved_from` set to the id you sent.
      operationId: getPort
      x-required-plan: free
      parameters:
      - name: id
        in: path
        required: true
        description: Port slug, or the numeric id of a merged legacy port.
        schema:
          type: string
        example: miami
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    $ref: '#/components/schemas/Port'
                  meta:
                    $ref: '#/components/schemas/Meta'
              example:
                data:
                  id: miami
                  name: Miami
                  kind: port
                  latitude: 25.7741566
                  longitude: -80.1935973
                  destination:
                    id: miami
                    name: Miami
                  region:
                    id: united-states
                    name: United States
                  aliases: []
                  upcoming_calls: 2377
                meta:
                  as_of: '2026-10-19'
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '404':
          $ref: '#/components/responses/E404'
        '429':
          $ref: '#/components/responses/E429'
        '500':
          $ref: '#/components/responses/E500'
      security:
      - bearerAuth: []
      - apiKeyHeader: []
  /v1/destinations:
    get:
      tags:
      - Reference data
      summary: List destinations
      description: Destinations with their region and a representative coordinate.
      operationId: listDestinations
      x-required-plan: free
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/per_page'
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Destination'
                  meta:
                    $ref: '#/components/schemas/ListMeta'
              example:
                data:
                - id: abu-dhabi
                  name: Abu Dhabi
                  region:
                    id: middle-east
                    name: Middle East
                  latitude: 24.453884
                  longitude: 54.3773438
                - id: acapulco
                  name: Acapulco
                  region:
                    id: mexico-region
                    name: Mexico region
                  latitude: 16.863611
                  longitude: -99.8825
                meta:
                  as_of: '2026-10-19'
                  page: 1
                  per_page: 2
                  total: 379
                  has_more: true
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '404':
          $ref: '#/components/responses/E404'
        '429':
          $ref: '#/components/responses/E429'
        '500':
          $ref: '#/components/responses/E500'
      security:
      - bearerAuth: []
      - apiKeyHeader: []
  /v1/regions:
    get:
      tags:
      - Reference data
      summary: List regions
      description: The 18 top-level regions.
      operationId: listRegions
      x-required-plan: free
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/per_page'
      responses:
        '200':
          description: OK
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Region'
                  meta:
                    $ref: '#/components/schemas/ListMeta'
              example:
                data:
                - id: africa
                  name: Africa
                - id: alaska-region
                  name: Alaska region
                meta:
                  as_of: '2026-10-19'
                  page: 1
                  per_page: 2
                  total: 18
                  has_more: true
        '400':
          $ref: '#/components/responses/E400'
        '401':
          $ref: '#/components/responses/E401'
        '404':
          $ref: '#/components/responses/E404'
        '429':
          $ref: '#/components/responses/E429'
        '500':
          $ref: '#/components/responses/E500'
      security:
      - bearerAuth: []
      - apiKeyHeader: []
components:
  responses:
    E429:
      description: Per-minute rate limit (`rate_limited`, with `Retry-After`) or monthly quota (`quota_exceeded`) reached.
      headers:
        Retry-After:
          description: Seconds until the rate window resets.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              status: 429
              code: rate_limited
              message: Rate limit of 60 requests per minute exceeded. Retry in 31 seconds.
    E401:
      description: No key was sent (`key_required`; a free key is one email away at /signup), or the key is malformed, unknown or revoked (`invalid_key`). A bad key is never treated as anonymous.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              status: 401
              code: key_required
              message: 'This endpoint needs an API key. Get a free one at https://cruise-itinerary.com/signup and send it as "Authorization: Bearer <key>".'
              required_plan: free
    E400:
      description: 'Bad request: an unknown or malformed parameter. The message names it.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              status: 400
              code: bad_request
              message: 'Parameter ''cabin'' must be one of: inside, outside, balcony, suite.'
    E500:
      description: Internal error. Safe to retry.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              status: 500
              code: internal
              message: Internal error. Try again; if it persists, contact support.
    E404:
      description: No such entity or endpoint.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              status: 404
              code: not_found
              message: No such ship.
  schemas:
    Ship:
      type: object
      properties:
        id:
          type: string
          description: Slug.
        name:
          type: string
        line:
          oneOf:
          - $ref: '#/components/schemas/Ref'
          - type: 'null'
        imo:
          oneOf:
          - type: string
            description: IMO number, 7 digits.
          - type: 'null'
        mmsi:
          oneOf:
          - type: string
            description: MMSI, 9 digits.
          - type: 'null'
        passengers:
          oneOf:
          - type: integer
            description: Lower-berth capacity. Real headcount runs 10 to 20 percent higher.
          - type: 'null'
        crew:
          oneOf:
          - type: integer
          - type: 'null'
        gross_tonnage:
          oneOf:
          - type: integer
          - type: 'null'
        decks:
          oneOf:
          - type: integer
          - type: 'null'
        length_ft:
          oneOf:
          - type: number
          - type: 'null'
        width_ft:
          oneOf:
          - type: number
          - type: 'null'
        maiden_voyage:
          oneOf:
          - type: string
            format: date
          - type: 'null'
        launched:
          oneOf:
          - type: string
            format: date
          - type: 'null'
        refurbished:
          oneOf:
          - type: string
            format: date
          - type: 'null'
        adults_only:
          oneOf:
          - type: boolean
          - type: 'null'
      required:
      - id
      - name
      - line
      - imo
      - mmsi
      - passengers
      - crew
      - gross_tonnage
      - decks
      - length_ft
      - width_ft
      - maiden_voyage
      - launched
      - refurbished
      - adults_only
      additionalProperties: false
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - status
          - code
          - message
          properties:
            status:
              type: integer
            code:
              type: string
              enum:
              - bad_request
              - key_required
              - invalid_key
              - account_suspended
              - plan_required
              - not_found
              - rate_limited
              - quota_exceeded
              - method_not_allowed
              - internal
            message:
              type: string
              description: Human-readable explanation; safe to show to a developer, not a stable string to match on.
            required_plan:
              type: string
              description: 'Present on plan_required and key_required: the lowest plan that can call the endpoint.'
              enum:
              - free
              - developer
              - business
              - platform
    ListMeta:
      type: object
      properties:
        as_of:
          oneOf:
          - type: string
            description: Date of the latest inventory load the response reflects.
            format: date
          - type: 'null'
        page:
          type: integer
          description: Current page, from 1.
        per_page:
          type: integer
          description: Rows per page.
        total:
          type: integer
          description: Rows matching the query across all pages.
        has_more:
          type: boolean
          description: True when a later page exists.
      required:
      - as_of
      - page
      - per_page
      - total
      - has_more
      additionalProperties: false
    Port:
      type: object
      properties:
        id:
          type: string
          description: Slug.
        name:
          type: string
        kind:
          type: string
          description: scenic marks a stretch of cruising the feed lists as a stop, such as a glacier; transit marks a travel leg or unnamed stop (a train, a transfer, Captain's Choice). Neither is a port call.
          enum:
          - port
          - scenic
          - transit
        latitude:
          oneOf:
          - type: number
          - type: 'null'
        longitude:
          oneOf:
          - type: number
          - type: 'null'
        destination:
          oneOf:
          - $ref: '#/components/schemas/Ref'
          - type: 'null'
        region:
          oneOf:
          - $ref: '#/components/schemas/Ref'
          - type: 'null'
        aliases:
          type: array
          items:
            type: string
        upcoming_calls:
          type: integer
          description: Future days on which a ship is scheduled at this port.
      required:
      - id
      - name
      - kind
      - latitude
      - longitude
      - destination
      - region
      - aliases
      - upcoming_calls
      additionalProperties: false
    Destination:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        region:
          oneOf:
          - $ref: '#/components/schemas/Ref'
          - type: 'null'
        latitude:
          oneOf:
          - type: number
          - type: 'null'
        longitude:
          oneOf:
          - type: number
          - type: 'null'
      required:
      - id
      - name
      - region
      - latitude
      - longitude
      additionalProperties: false
    Line:
      type: object
      properties:
        id:
          type: string
          description: Slug.
        name:
          type: string
        ship_count:
          type: integer
        sailing_count:
          type: integer
          description: Upcoming sailings.
      required:
      - id
      - name
      - ship_count
      - sailing_count
      additionalProperties: false
    Ref:
      type: object
      properties:
        id:
          type: string
          description: Slug.
        name:
          type: string
      required:
      - id
      - name
      additionalProperties: false
    Meta:
      type: object
      properties:
        as_of:
          oneOf:
          - type: string
            description: Date of the latest inventory load the response reflects.
            format: date
          - type: 'null'
      required:
      - as_of
      additionalProperties: false
    Region:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
      required:
      - id
      - name
      additionalProperties: false
  headers:
    X-RateLimit-Limit:
      description: Requests allowed per one-minute window.
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Requests left in the current window.
      schema:
        type: integer
  parameters:
    page:
      name: page
      in: query
      description: Page number, from 1. Pages deeper than 100,000 rows are refused.
      schema:
        type: integer
        minimum: 1
        default: 1
    per_page:
      name: per_page
      in: query
      description: Rows per page, 1 to 200.
      schema:
        type: integer
        minimum: 1
        maximum: 200
        default: 50
  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.