Itinerary feed contains cruise sailing information. Each itinerary has a set of
trips. Each trip contains details of the trip such as ports, arrival and
departure times and dates, sail duration of each phase of the journey and
description of each trip. You can upload itinerary feeds in CSV format.

## Key components

The itinerary feed has required fields that are case insensitive. Some fields
are optional and may be left blank. Sending optional data improves data quality.

It has the following mandatory fields:

- **`sail_id`** : A unique sailing identifier for a specific trip.
- **`stop_index`** : A unique stop identifier for each departure port.

  > [!IMPORTANT]
  > **Key Point:** `sail_id` and `stop_index` are concatenated to form a composite primary key and must be unique.

- **`port_of_call`**: The port of call or the location where the cruise stops.

- **`itinerary_desc`**: Description of the itinerary.

- **`arrival_dt`**: Arrival date and time in the port's Coordinated Universal
  time(UTC).

- **`departure_dt`**: Departure date and time in the port's Coordinated
  Universal time (UTC).

- **`ship_name`**: The name of the ship.

- **`sail_duration`**: The duration or number of sailing days.

## Fields

The following table describes all the available fields in the itinerary feed:

| Field name | Required? | Type | Description |
|---|---|---|---|
| sail_id | Required | string | Unique sailing identifier for a particular trip in the itinerary with start and end date. For example, for an itinerary of 5 nights which has 3 stops, the `sail_id` is unique and remains the same for all 3 stops. An example of `sail_id` is `ABC12345`. **Note:** `sail_id` and `stop_index` are concatenated to form a composite primary key and must be unique. |
| stop_index | Required | integer | Unique index identifier for each stop in the cruise itinerary. It starts with index zero for the first stop. Zero represents the first departure port. For example, the `stop_index` is represented as `0`. **Note:** `sail_id` and `stop_index` are concatenated to form a composite primary key and must be unique. |
| port_of_call | Required | string | Location with the city name and country where the cruise stops. For example, the `port_of_call` can be represented as `Venice,Italy`. Quotes (`"`) are explicitly not required. |
| itinerary_desc | Required | string | Description of the itinerary. It starts with "X-night" where X is the number of nights in the itinerary. It is not case sensitive. For example, the `itinerary_desc` can be `7-night greek isles & eastern med`. |
| arrival_dt | Required | datetime | Arrival date and time in the port's Coordinated Universal time(UTC). The `arrival_dt` for the first port must be empty and the `stop_index` must be zero. For example the `arrival_dt` is represented as `2025-01-22T06:00:00+01:00`. |
| departure_dt | Required | datetime | Departure date and time in the port's Coordinated Universal time(UTC). The `departure_dt` for the last port must be empty. The `stop_index` must be the last night of the itinerary. For example the `departure_dt` is represented as `2025-01-23T18:00:00+01:00`. |
| ship_name | Required | string | The name of the ship. It is not case sensitive. For example, the `ship_name` can be represented as `NORWEGIAN Escape`. |
| sail_duration | Required | integer | The duration of the voyage or the number of sailing nights. For example, for 5 sailing nights the `sail_duration` is represented as `5`. |
| itinerary_id | Required | string | Identifies the itinerary. The `itinerary_id` distinguishes itineraries from each other. All trips that visit the same ports of call share the same `itinerary_id`, allowing for the grouping and organization of trips. For example, If the port of call is through San Francisco for two different itineraries then the itinerary ID is same for both the itineraries. It is represented as `XYZ12345`. |
| latitude | Optional | decimal | The latitude of this port of call. It should be specified in `https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84` notation. This information is useful for precisely locating the port of call entity. For example, the latitude coordinates for Trieste, Italy is `45.64665541364354`. The following are unsupported: - TOKYO - GCJ-02 |
| longitude | Optional | decimal | The longitude of this port of call. It should be specified in the `https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84` notation. This information is useful for precisely locating the port of call entity. For example, the longitude coordinates for Trieste, Italy is `13.76188003458354`. The following are unsupported: - TOKYO - GCJ-02 |
| image_url | Optional | URL | The URL of an image representing the port of call. For example, `https://partner.com/images/XXXXX.jpg` |
| updated_at | Optional | datetime | The date and time at which this entry was last updated in the Coordinated Universal time(UTC). This information is useful for identifying stale data. It should follow [ISO 8601](https://www.ietf.org/rfc/rfc8601.txt) format. For example the `updated_at` is `2025-01-22T00:00:00+00:00`. |

## Examples

The following is a basic example of an itinerary feed for two sails where one
sail is a one-way trip and the other is a round-trip.

The examples show both `CSV` and `JSON` formats. The `sail_id`, `stop_index`
fields are concatenated to form the composite primary key and must be unique for
each row.

> [!IMPORTANT]
> **Key Point:** Don't use `JSON` format; it is for informational purposes only. All feeds must be in `CSV` format.

### CSV

### One-way trip (Required)

The first sail or itinerary is a one-way from San Francisco to Canada for
4 nights. The following example illustrates only the mandatory fields:

    sail_id, stop_index, port_of_call, itinerary_desc, arrival_dt, departure_dt,ship_name,sail_duration,itinerary_id
    54321, 0, "Seattle, Washington", 4 Night Alaska Cruise Trip, NULL,2025-05-23 15:00:00, Floating Home, 04, 888888
    54321, 1, "Ketchikan, Alaska", 4 Night Alaska Cruise Trip,2025-05-25 18:00:00, 2025-05-25 7:00:00, Floating Home, 04, 888888
    54321, 2, "Vancouver (Canada Place), British Columbia", 4 Night Alaska Cruise Trip, 2025-05-27 7:30:00, NULL, Floating Home, 04, 888888

### One-way trip (All)

The following example illustrates all the available fields for a
one-way trip:

    sail_id, stop_index, port_of_call, itinerary_desc, arrival_dt, departure_dt, ship_name,sail_duration, itinerary_id, latitude, longitude, image_url, updated_at
    54321, 0, "Seattle, Washington", 4 Night Alaska Cruise Trip, NULL, 2025-05-23 15:00:00, Floating Home,04, 888888, 47.608013, -122.335167, https://partner.com/images/XXXXX.jpg, 2025-05-23T00:00:00+00:00
    54321, 1, "Ketchikan, Alaska", 4 Night Alaska Cruise Trip, 2025-05-25 18:00:00, 2025-05-25 7:00:00,Floating Home, 04, 888888, 55.341808, -131.647507, https://partner.com/images/XXXXX.jpg, 2025-05-25T00:00:00+00:00
    54321, 2, "Vancouver (Canada Place), British Columbia", 4 Night Alaska Cruise Trip, 2025-05-27 7:30:00, NULL, Floating Home, 04, 888888, 49.246292, -123.116226, https://partner.com/images/XXXXX.jpg, 2025-05-27T00:00:00+00:00

### Round trip (Required)

The second sail is a round-trip from San Francisco covering Alaska and
Canada for 14 nights. The following example illustrates only the mandatory
fields:

    sail_id, stop_index, port_of_call, itinerary_desc, arrival_dt, departure_dt, ship_name,sail_duration, itinerary_id
    12345, 0, "San Francisco, California", 14 Night Alaska Cruise with Glacier Bay National Park, NULL,2025-06-06 16:00:00, Beautiful Ship, 14, 888888
    12345, 1, "Ketchikan, Alaska", 14 Night Alaska Cruise with Glacier Bay National Park, 2025-06-09 21:00:00, 2025-06-10 5:00:00, Beautiful Ship, 14, 888888
    12345, 2, "Vancouver (Canada Place), British Columbia", 14 Night Alaska Cruise with Glacier Bay   National Park, 2025-06-13 14:00:00, 2025-06-14 20:00:00, Beautiful Ship, 14, 888888
    12345, 3, "Victoria, British Columbia", 14 Night Alaska Cruise with Glacier Bay National Park 2025-06-15 21:00:00, 2025-06-16 6:00:00, Beautiful Ship, 14, 888888
    12345, 4, "San Francisco, California", 14 Night Alaska Cruise with Glacier Bay National Park 2025-06-20 7:00:00, NULL, Beautiful Ship, 14, 888888

### Round trip (All)

The following example illustrates all the available fields for round trip:

    sail_id, stop_index, port_of_call, itinerary_desc, arrival_dt, departure_dt, ship_name, sail_duration, itinerary_id, latitude, longitude, image_url, updated_at
    12345, 0, "San Francisco, California", 14 Night Alaska Cruise with Glacier Bay National Park, NULL, 2025-06-06 16:00:00, Beautiful Ship, 14, 888888, 37.773972, -122.431297, https://partner.com/images/XXXXX.jpg, 2025-06-06T00:00:00+00:00
    12345, 1, "Ketchikan, Alaska", 14 Night Alaska Cruise with Glacier Bay National Park, 2025-06-09 21:00:00, 2025-06-10 5:00:00, Beautiful Ship, 14, 888888, 55.341808, -131.647507, https://partner.com/images/XXXXX.jpg,  2025-06-09T00:00:00+00:00
    12345, 2, "Vancouver (Canada Place), British Columbia", 14 Night Alaska Cruise with Glacier Bay National Park, 2025-06-13 14:00:00, 2025-06-14 20:00:00, Beautiful Ship, 14, 888888, 49.246292, -123.116226, https://partner.com/images/XXXXX.jpg, 2025-06-13T00:00:00+00:00
    12345, 3, "Victoria, British Columbia", 14 Night Alaska Cruise with Glacier Bay National Park, 2025-06-15 21:00:00, 2025-06-16 6:00:00, Beautiful Ship, 14, 888888, 48.407326, -123.329773, https://partner.com/images/XXXXX.jpg, 2025-06-15T00:00:00+00:00
    12345, 4, "San Francisco, California", 14 Night Alaska Cruise with Glacier Bay National Park,2025-06-20 7:00:00, NULL, Beautiful Ship, 14, 888888, 37.773972, -122.431297, https://partner.com/images/XXXXX.jpg, 2025-06-20T00:00:00+00:00

### JSON (for informational purposes)

### One-way trip (Required)

The first sail or itinerary is a one-way from San Francisco to Canada for
4 nights. The following example illustrates only the mandatory fields:

    [
      {
        "sail_id": "54321",
        "stop_index": "0",
        "port_of_call": "Seattle, Washington",
        "itinerary_desc": "4 Night Alaska Cruise Trip",
        "arrival_dt": null,
        "departure_dt": "2025-05-23 15:00:00",
        "ship_name": "Floating Home",
        "sail_duration": 4,
        "itinerary_id": "888888"
      },
      ---
      {
        "sail_id": "54321",
        "stop_index": "2",
        "port_of_call": "Vancouver (Canada Place), British Columbia",
        "itinerary_desc": "4 Night Alaska Cruise Trip",
        "arrival_dt": "2025-05-27 7:30:00",
        "departure_dt": null,
        "ship_name": "Floating Home",
        "sail_duration": 4,
        "itinerary_id": "888888"
      }
    ]

> [!NOTE]
> **Note:** All feeds should be in CSV format. Don't use JSON format.

### One-way trip (All)

The following example illustrates all the available fields for one-way trip:

    [
      {
        "sail_id": "54321",
        "stop_index": "0",
        "port_of_call": "Seattle, Washington",
        "itinerary_desc": "4 Night Alaska Cruise Trip",
        "arrival_dt": "2025-05-23 15:00:00",
        "departure_dt": null,
        "ship_name": "Floating Home",
        "sail_duration": 4,
        "itinerary_id": "888888",
        "latitude": "47.608013",
        "longitude": "-122.335167",
        "image_url": "https://partner.com/images/XXXXX.jpg",
        "updated_at": "2025-05-23T00:00:00+00:00"
      },
      ---
      {
        "sail_id": "54321",
        "stop_index": "2",
        "port_of_call": "Vancouver (Canada Place), British Columbia",
        "itinerary_desc": "4 Night Alaska Cruise Trip",
        "arrival_dt": null,
        "departure_dt": "2025-05-27 7:30:00",
        "ship_name": "Floating Home",
        "sail_duration": 4,
        "itinerary_id": "888888",
        "latitude": "49.246292",
        "longitude": "-123.116226",
        "image_url": "https://partner.com/images/XXXXX.jpg",
        "updated_at": "2025-05-27T00:00:00+00:00"
      }
    ]

> [!NOTE]
> **Note:** All feeds should be in CSV format. Don't use JSON format.

### Round trip (Required)

The second sail is a round-trip from San Francisco covering Alaska and
Canada for 14 nights. The following example illustrates only the mandatory
fields:

    [
      {
        "sail_id": "12345",
        "stop_index": "0",
        "port_of_call": "San Francisco, California",
        "itinerary_desc": "14 Night Alaska Cruise with Glacier Bay National Park",
        "arrival_dt": null,
        "departure_dt": "2025-06-06 16:00:00",
        "ship_name": "Beautiful Ship",
        "sail_duration": 14,
        "itinerary_id": "888888"
      },
      {
        "sail_id": "12345",
        "stop_index": "1",
        "port_of_call": "Ketchikan, Alaska",
        "itinerary_desc": "14 Night Alaska Cruise with Glacier Bay National Park",
        "arrival_dt": "2025-06-09 21:00:00",
        "departure_dt": "2025-06-10 5:00:00",
        "ship_name": "Beautiful Ship",
        "sail_duration": 14,
        "itinerary_id": "888888"
      },
      ---
      {
        "sail_id": "12345",
        "stop_index": "4",
        "port_of_call": "San Francisco, California",
        "itinerary_desc": "14 Night Alaska Cruise with Glacier Bay National Park",
        "arrival_dt": "2025-06-20 7:00:00",
        "departure_dt": null,
        "ship_name": "Beautiful Ship",
        "sail_duration": 14,
        "itinerary_id": "888888"
      }
    ]

> [!NOTE]
> **Note:** All feeds should be in CSV format. Don't use JSON format.

### Round trip (All)

The following example illustrates all the available fields for round trip:

    [
      {
        "sail_id": "12345",
        "stop_index": "0",
        "port_of_call": "San Francisco, California",
        "itinerary_desc": "14 Night Alaska Cruise with Glacier Bay National Park",
        "arrival_dt": null,
        "departure_dt": "2025-06-06 16:00:00",
        "ship_name": "Beautiful Ship",
        "sail_duration": 14,
        "itinerary_id": "888888",
        "latitude": "37.773972",
        "longitude": "-122.335167",
        "image_url": "https://partner.com/images/XXXXX.jpg",
        "updated_at": "2025-06-06T00:00:00+00:00"
      },
      {
        "sail_id": "12345",
        "stop_index": "1",
        "port_of_call": "Ketchikan, Alaska",
        "itinerary_desc": "14 Night Alaska Cruise with Glacier Bay National Park",
        "arrival_dt": "2025-06-09 21:00:00",
        "departure_dt": "2025-06-10 5:00:00",
        "ship_name": "Beautiful Ship",
        "sail_duration": 14,
        "itinerary_id": "888888",
        "latitude": "55.341808",
        "longitude": "-131.647507",
        "image_url": "https://partner.com/images/XXXXX.jpg",
        "updated_at": "2025-06-09T00:00:00+00:00"
      },
      ---
      {
        "sail_id": "12345",
        "stop_index": "4",
        "port_of_call": "San Francisco, California",
        "itinerary_desc": "14 Night Alaska Cruise with Glacier Bay National Park",
        "arrival_dt": "2025-06-20 7:00:00",
        "departure_dt": null,
        "ship_name": "Beautiful Ship",
        "sail_duration": 14,
        "itinerary_id": "888888",
        "latitude": "37.773972",
        "longitude": "-122.431297",
        "image_url": "https://partner.com/images/XXXXX.jpg",
        "updated_at": "2025-06-20T00:00:00+00:00"
      }
    ]

> [!NOTE]
> **Note:** All feeds should be in CSV format. Don't use JSON format.