{
  "item": [
    {
      "name": "Schedules",
      "description": "",
      "item": [
        {
          "id": "e5ae938c-8bb6-4de8-8939-89d33ff82696",
          "name": "Upcoming published sailings on a lane (API key required)",
          "request": {
            "name": "Upcoming published sailings on a lane (API key required)",
            "description": {
              "content": "Upcoming sailings on a lane from the carriers' own schedules, one per carrier offer, soonest departure first. Response time depends on the line and on load, up to a few minutes. Paged: follow `next` until it is null; an empty lane is a 200 with no sailings, and free.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "sailings"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                    "type": "text/plain"
                  },
                  "key": "origin",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                    "type": "text/plain"
                  },
                  "key": "destination",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "First departure date to consider, YYYY-MM-DD; default today's date in UTC. Matched against each sailing's departure date in its port's local time, so with the default a sailing stays in the answer until the UTC date passes its departure date. A date before today (UTC) is refused `DATE_IN_PAST`.",
                    "type": "text/plain"
                  },
                  "key": "from",
                  "value": "<date>"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "Window length in weeks from `from`: 4, 8 or 12, default 4. The end is exclusive, and a window longer than one page continues through `next`. (This can only be one of 4,8,12)",
                    "type": "text/plain"
                  },
                  "key": "weeks",
                  "value": "4"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "One or more four-character SCAC codes, comma-separated or repeated; omitted means every carrier. A code also finds the line's sailings filed under its other codes, and the answer echoes the code you sent.",
                    "type": "text/plain"
                  },
                  "key": "carrier",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "`true` for sailings with transshipment, `false` for direct sailings only, omitted for both; any other value is refused. (This can only be one of true,false)",
                    "type": "text/plain"
                  },
                  "key": "transshipment",
                  "value": "false"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "Only sailings new to us, or whose published departure or arrival moved, since this moment; pass back the `as_of` of the first page of your last walk. A new sailing's `last_changed_at` can be null or earlier than this moment. Takes YYYY-MM-DD (midnight UTC) or a full date-time; cut-off and name changes and removals are not reported.",
                    "type": "text/plain"
                  },
                  "key": "changed_since",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "`all` returns every routing the line published for each departure, not just the main one. Extra routings come as separate sailings marked `is_alternative: true`. Not every line reports alternatives; for such a line each routing comes as a sailing of its own. Priced as a normal search. With `routings=all`, `limit` and `carriers[].count` count sailings as they do without the flag (with `transshipment`, a sailing counts when any of its routings fits), not routings, and alternatives come on top, so a page can hold more sailings than `limit`. `next` keeps `routings=all`; a cursor sent with the flag added or removed does not continue the walk and is billed as a new search. With `routings=all`, `changed_since` also returns a departure whose other routings changed; without the flag it does not, and `last_changed_at` moves only with the departure or arrival. With `routings=all`, `transshipment` judges each routing on its own legs: a departure is returned when any of its routings fits, and only the routings that fit are returned, so a departure can come with `is_alternative: true` alone. An alternative that repeats a routing already served for its departure except for the voyages (same ports, ships and times) is left out. A departure can come with two main routings (`is_alternative: false`) when the line offers two, or, until our next complete read of the lane, one the line has since dropped. (This can only be one of all)",
                    "type": "text/plain"
                  },
                  "key": "routings",
                  "value": "all"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "Sailings per page, 1 to 500, default 100; a value outside the range is refused, not clamped. With `routings=all`, alternatives come on top of it.",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "100"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "An opaque continuation token that `next` already carries; omit it on the first page and never build or edit it.",
                    "type": "text/plain"
                  },
                  "key": "cursor",
                  "value": "<string>"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "0e634e56-3e66-44e0-92a2-0eb9373639f2",
              "name": "Sailings for the lane",
              "originalRequest": {
                "url": {
                  "path": [
                    "sailings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                        "type": "text/plain"
                      },
                      "key": "origin",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                        "type": "text/plain"
                      },
                      "key": "destination",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "First departure date to consider, YYYY-MM-DD; default today's date in UTC. Matched against each sailing's departure date in its port's local time, so with the default a sailing stays in the answer until the UTC date passes its departure date. A date before today (UTC) is refused `DATE_IN_PAST`.",
                        "type": "text/plain"
                      },
                      "key": "from",
                      "value": "<date>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Window length in weeks from `from`: 4, 8 or 12, default 4. The end is exclusive, and a window longer than one page continues through `next`. (This can only be one of 4,8,12)",
                        "type": "text/plain"
                      },
                      "key": "weeks",
                      "value": "4"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "One or more four-character SCAC codes, comma-separated or repeated; omitted means every carrier. A code also finds the line's sailings filed under its other codes, and the answer echoes the code you sent.",
                        "type": "text/plain"
                      },
                      "key": "carrier",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`true` for sailings with transshipment, `false` for direct sailings only, omitted for both; any other value is refused. (This can only be one of true,false)",
                        "type": "text/plain"
                      },
                      "key": "transshipment",
                      "value": "false"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Only sailings new to us, or whose published departure or arrival moved, since this moment; pass back the `as_of` of the first page of your last walk. A new sailing's `last_changed_at` can be null or earlier than this moment. Takes YYYY-MM-DD (midnight UTC) or a full date-time; cut-off and name changes and removals are not reported.",
                        "type": "text/plain"
                      },
                      "key": "changed_since",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`all` returns every routing the line published for each departure, not just the main one. Extra routings come as separate sailings marked `is_alternative: true`. Not every line reports alternatives; for such a line each routing comes as a sailing of its own. Priced as a normal search. With `routings=all`, `limit` and `carriers[].count` count sailings as they do without the flag (with `transshipment`, a sailing counts when any of its routings fits), not routings, and alternatives come on top, so a page can hold more sailings than `limit`. `next` keeps `routings=all`; a cursor sent with the flag added or removed does not continue the walk and is billed as a new search. With `routings=all`, `changed_since` also returns a departure whose other routings changed; without the flag it does not, and `last_changed_at` moves only with the departure or arrival. With `routings=all`, `transshipment` judges each routing on its own legs: a departure is returned when any of its routings fits, and only the routings that fit are returned, so a departure can come with `is_alternative: true` alone. An alternative that repeats a routing already served for its departure except for the voyages (same ports, ships and times) is left out. A departure can come with two main routings (`is_alternative: false`) when the line offers two, or, until our next complete read of the lane, one the line has since dropped. (This can only be one of all)",
                        "type": "text/plain"
                      },
                      "key": "routings",
                      "value": "all"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Sailings per page, 1 to 500, default 100; a value outside the range is refused, not clamped. With `routings=all`, alternatives come on top of it.",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "An opaque continuation token that `next` already carries; omit it on the first page and never build or edit it.",
                        "type": "text/plain"
                      },
                      "key": "cursor",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"ok\": \"<boolean>\",\n  \"data\": {\n    \"origin\": \"<string>\",\n    \"origin_name\": \"<string>\",\n    \"destination\": \"<string>\",\n    \"destination_name\": \"<string>\",\n    \"from\": \"<string>\",\n    \"to\": \"<string>\",\n    \"weeks\": \"<integer>\",\n    \"count\": \"<integer>\",\n    \"carriers\": [\n      {\n        \"carrier_code\": \"<string>\",\n        \"carrier_name\": \"<string>\",\n        \"count\": \"<integer>\",\n        \"latest_departure\": \"<string>\",\n        \"status\": \"timeout\",\n        \"checked_at\": \"<dateTime>\",\n        \"covered_until\": \"<date>\",\n        \"error\": \"timeout\"\n      },\n      {\n        \"carrier_code\": \"<string>\",\n        \"carrier_name\": \"<string>\",\n        \"count\": \"<integer>\",\n        \"latest_departure\": \"<string>\",\n        \"status\": \"not_supported\",\n        \"checked_at\": \"<dateTime>\",\n        \"covered_until\": \"<date>\",\n        \"error\": \"timeout\"\n      }\n    ],\n    \"complete\": \"<boolean>\",\n    \"transshipment\": \"<boolean>\",\n    \"changed_since\": \"<dateTime>\",\n    \"latest_departure_held\": \"<string>\",\n    \"as_of\": \"<dateTime>\",\n    \"via_port_names\": {\n      \"key_0\": \"<string>\",\n      \"key_1\": \"<string>\"\n    },\n    \"limit\": \"<integer>\",\n    \"next\": \"<string>\",\n    \"sailings\": [\n      {\n        \"sailing_id\": \"<uuid>\",\n        \"carrier_code\": \"<string>\",\n        \"carrier_name\": \"<string>\",\n        \"service_name\": \"<string>\",\n        \"vessel_name\": \"<string>\",\n        \"voyage_number\": \"<string>\",\n        \"vessel_imo\": \"<string>\",\n        \"vessel\": {\n          \"teu\": \"<integer>\",\n          \"teu_estimated\": \"<boolean>\",\n          \"flag\": \"<string>\",\n          \"year_built\": \"<integer>\",\n          \"length_m\": \"<number>\"\n        },\n        \"published_departure\": \"<string>\",\n        \"published_arrival\": \"<string>\",\n        \"departure_precision\": \"minute\",\n        \"arrival_precision\": \"day\",\n        \"cy_cutoff\": \"<string>\",\n        \"doc_cutoff\": \"<string>\",\n        \"vgm_cutoff\": \"<string>\",\n        \"cutoffs\": [\n          {\n            \"type\": \"<string>\",\n            \"at\": \"<string>\",\n            \"label\": \"<string>\"\n          },\n          {\n            \"type\": \"<string>\",\n            \"at\": \"<string>\",\n            \"label\": \"<string>\"\n          }\n        ],\n        \"cutoff_status\": \"published\",\n        \"last_changed_at\": \"<dateTime>\",\n        \"is_alternative\": \"<boolean>\",\n        \"retrieved_at\": \"<dateTime>\",\n        \"transit_days\": \"<integer>\",\n        \"is_transshipment\": \"<boolean>\",\n        \"transship_via\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"route_legs\": [\n          {\n            \"leg\": \"<integer>\",\n            \"from\": \"<string>\",\n            \"from_name\": \"<string>\",\n            \"to\": \"<string>\",\n            \"to_name\": \"<string>\",\n            \"vessel\": \"<string>\",\n            \"mode\": \"rail\",\n            \"voyage\": \"<string>\",\n            \"service\": \"<string>\",\n            \"departure\": \"<string>\",\n            \"arrival\": \"<string>\"\n          },\n          {\n            \"leg\": \"<integer>\",\n            \"from\": \"<string>\",\n            \"from_name\": \"<string>\",\n            \"to\": \"<string>\",\n            \"to_name\": \"<string>\",\n            \"vessel\": \"<string>\",\n            \"mode\": \"water\",\n            \"voyage\": \"<string>\",\n            \"service\": \"<string>\",\n            \"departure\": \"<string>\",\n            \"arrival\": \"<string>\"\n          }\n        ],\n        \"routing_status\": \"known\"\n      },\n      {\n        \"sailing_id\": \"<uuid>\",\n        \"carrier_code\": \"<string>\",\n        \"carrier_name\": \"<string>\",\n        \"service_name\": \"<string>\",\n        \"vessel_name\": \"<string>\",\n        \"voyage_number\": \"<string>\",\n        \"vessel_imo\": \"<string>\",\n        \"vessel\": {\n          \"teu\": \"<integer>\",\n          \"teu_estimated\": \"<boolean>\",\n          \"flag\": \"<string>\",\n          \"year_built\": \"<integer>\",\n          \"length_m\": \"<number>\"\n        },\n        \"published_departure\": \"<string>\",\n        \"published_arrival\": \"<string>\",\n        \"departure_precision\": \"day\",\n        \"arrival_precision\": \"day\",\n        \"cy_cutoff\": \"<string>\",\n        \"doc_cutoff\": \"<string>\",\n        \"vgm_cutoff\": \"<string>\",\n        \"cutoffs\": [\n          {\n            \"type\": \"<string>\",\n            \"at\": \"<string>\",\n            \"label\": \"<string>\"\n          },\n          {\n            \"type\": \"<string>\",\n            \"at\": \"<string>\",\n            \"label\": \"<string>\"\n          }\n        ],\n        \"cutoff_status\": \"not_published\",\n        \"last_changed_at\": \"<dateTime>\",\n        \"is_alternative\": \"<boolean>\",\n        \"retrieved_at\": \"<dateTime>\",\n        \"transit_days\": \"<integer>\",\n        \"is_transshipment\": \"<boolean>\",\n        \"transship_via\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"route_legs\": [\n          {\n            \"leg\": \"<integer>\",\n            \"from\": \"<string>\",\n            \"from_name\": \"<string>\",\n            \"to\": \"<string>\",\n            \"to_name\": \"<string>\",\n            \"vessel\": \"<string>\",\n            \"mode\": \"inland\",\n            \"voyage\": \"<string>\",\n            \"service\": \"<string>\",\n            \"departure\": \"<string>\",\n            \"arrival\": \"<string>\"\n          },\n          {\n            \"leg\": \"<integer>\",\n            \"from\": \"<string>\",\n            \"from_name\": \"<string>\",\n            \"to\": \"<string>\",\n            \"to_name\": \"<string>\",\n            \"vessel\": \"<string>\",\n            \"mode\": \"feeder\",\n            \"voyage\": \"<string>\",\n            \"service\": \"<string>\",\n            \"departure\": \"<string>\",\n            \"arrival\": \"<string>\"\n          }\n        ],\n        \"routing_status\": \"known\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2269543c-755a-4a56-865f-f952ba5c2ddd",
              "name": "A query we refuse before reading anything, free. `error.parameter` names the input at fault where there is one. Codes: `MISSING_PARAMETER` (origin or destination), `INVALID_DATE_FORMAT` (from), `DATE_IN_PAST` (from), `INVALID_WEEKS`, `INVALID_SCAC` (carrier), `INVALID_TRANSSHIPMENT`, `INVALID_CHANGED_SINCE`, `CHANGED_SINCE_IN_FUTURE`, `INVALID_LIMIT`, `INVALID_CURSOR`, `BAD_REQUEST` (routings), `UNKNOWN_ORIGIN_PORT` / `UNKNOWN_DESTINATION_PORT` (a code not in our port list and on none of our sailings: no line is checked and the request is not charged; both unknown is `UNKNOWN_ORIGIN_PORT` naming both, without `parameter`). `from`, `weeks`, `transshipment`, `changed_since` or `routings` given twice is refused with that parameter's own code.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sailings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                        "type": "text/plain"
                      },
                      "key": "origin",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                        "type": "text/plain"
                      },
                      "key": "destination",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "First departure date to consider, YYYY-MM-DD; default today's date in UTC. Matched against each sailing's departure date in its port's local time, so with the default a sailing stays in the answer until the UTC date passes its departure date. A date before today (UTC) is refused `DATE_IN_PAST`.",
                        "type": "text/plain"
                      },
                      "key": "from",
                      "value": "<date>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Window length in weeks from `from`: 4, 8 or 12, default 4. The end is exclusive, and a window longer than one page continues through `next`. (This can only be one of 4,8,12)",
                        "type": "text/plain"
                      },
                      "key": "weeks",
                      "value": "4"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "One or more four-character SCAC codes, comma-separated or repeated; omitted means every carrier. A code also finds the line's sailings filed under its other codes, and the answer echoes the code you sent.",
                        "type": "text/plain"
                      },
                      "key": "carrier",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`true` for sailings with transshipment, `false` for direct sailings only, omitted for both; any other value is refused. (This can only be one of true,false)",
                        "type": "text/plain"
                      },
                      "key": "transshipment",
                      "value": "false"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Only sailings new to us, or whose published departure or arrival moved, since this moment; pass back the `as_of` of the first page of your last walk. A new sailing's `last_changed_at` can be null or earlier than this moment. Takes YYYY-MM-DD (midnight UTC) or a full date-time; cut-off and name changes and removals are not reported.",
                        "type": "text/plain"
                      },
                      "key": "changed_since",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`all` returns every routing the line published for each departure, not just the main one. Extra routings come as separate sailings marked `is_alternative: true`. Not every line reports alternatives; for such a line each routing comes as a sailing of its own. Priced as a normal search. With `routings=all`, `limit` and `carriers[].count` count sailings as they do without the flag (with `transshipment`, a sailing counts when any of its routings fits), not routings, and alternatives come on top, so a page can hold more sailings than `limit`. `next` keeps `routings=all`; a cursor sent with the flag added or removed does not continue the walk and is billed as a new search. With `routings=all`, `changed_since` also returns a departure whose other routings changed; without the flag it does not, and `last_changed_at` moves only with the departure or arrival. With `routings=all`, `transshipment` judges each routing on its own legs: a departure is returned when any of its routings fits, and only the routings that fit are returned, so a departure can come with `is_alternative: true` alone. An alternative that repeats a routing already served for its departure except for the voyages (same ports, ships and times) is left out. A departure can come with two main routings (`is_alternative: false`) when the line offers two, or, until our next complete read of the lane, one the line has since dropped. (This can only be one of all)",
                        "type": "text/plain"
                      },
                      "key": "routings",
                      "value": "all"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Sailings per page, 1 to 500, default 100; a value outside the range is refused, not clamped. With `routings=all`, alternatives come on top of it.",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "An opaque continuation token that `next` already carries; omit it on the first page and never build or edit it.",
                        "type": "text/plain"
                      },
                      "key": "cursor",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"parameter\": \"<string>\",\n    \"credits_required\": \"<integer,null>\",\n    \"credits_balance\": \"<integer,null>\",\n    \"top_up_url\": \"<string,null>\",\n    \"packages\": [\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      },\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b73ae754-17a7-4a9c-a39e-2ed52dfe0fad",
              "name": "`UNAUTHORIZED`: no `Authorization: Bearer` header, or a key that is unknown, revoked or expired.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sailings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                        "type": "text/plain"
                      },
                      "key": "origin",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                        "type": "text/plain"
                      },
                      "key": "destination",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "First departure date to consider, YYYY-MM-DD; default today's date in UTC. Matched against each sailing's departure date in its port's local time, so with the default a sailing stays in the answer until the UTC date passes its departure date. A date before today (UTC) is refused `DATE_IN_PAST`.",
                        "type": "text/plain"
                      },
                      "key": "from",
                      "value": "<date>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Window length in weeks from `from`: 4, 8 or 12, default 4. The end is exclusive, and a window longer than one page continues through `next`. (This can only be one of 4,8,12)",
                        "type": "text/plain"
                      },
                      "key": "weeks",
                      "value": "4"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "One or more four-character SCAC codes, comma-separated or repeated; omitted means every carrier. A code also finds the line's sailings filed under its other codes, and the answer echoes the code you sent.",
                        "type": "text/plain"
                      },
                      "key": "carrier",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`true` for sailings with transshipment, `false` for direct sailings only, omitted for both; any other value is refused. (This can only be one of true,false)",
                        "type": "text/plain"
                      },
                      "key": "transshipment",
                      "value": "false"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Only sailings new to us, or whose published departure or arrival moved, since this moment; pass back the `as_of` of the first page of your last walk. A new sailing's `last_changed_at` can be null or earlier than this moment. Takes YYYY-MM-DD (midnight UTC) or a full date-time; cut-off and name changes and removals are not reported.",
                        "type": "text/plain"
                      },
                      "key": "changed_since",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`all` returns every routing the line published for each departure, not just the main one. Extra routings come as separate sailings marked `is_alternative: true`. Not every line reports alternatives; for such a line each routing comes as a sailing of its own. Priced as a normal search. With `routings=all`, `limit` and `carriers[].count` count sailings as they do without the flag (with `transshipment`, a sailing counts when any of its routings fits), not routings, and alternatives come on top, so a page can hold more sailings than `limit`. `next` keeps `routings=all`; a cursor sent with the flag added or removed does not continue the walk and is billed as a new search. With `routings=all`, `changed_since` also returns a departure whose other routings changed; without the flag it does not, and `last_changed_at` moves only with the departure or arrival. With `routings=all`, `transshipment` judges each routing on its own legs: a departure is returned when any of its routings fits, and only the routings that fit are returned, so a departure can come with `is_alternative: true` alone. An alternative that repeats a routing already served for its departure except for the voyages (same ports, ships and times) is left out. A departure can come with two main routings (`is_alternative: false`) when the line offers two, or, until our next complete read of the lane, one the line has since dropped. (This can only be one of all)",
                        "type": "text/plain"
                      },
                      "key": "routings",
                      "value": "all"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Sailings per page, 1 to 500, default 100; a value outside the range is refused, not clamped. With `routings=all`, alternatives come on top of it.",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "An opaque continuation token that `next` already carries; omit it on the first page and never build or edit it.",
                        "type": "text/plain"
                      },
                      "key": "cursor",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"parameter\": \"<string>\",\n    \"credits_required\": \"<integer,null>\",\n    \"credits_balance\": \"<integer,null>\",\n    \"top_up_url\": \"<string,null>\",\n    \"packages\": [\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      },\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2bee25d9-f05b-4a97-a4c3-10636cda9549",
              "name": "`INSUFFICIENT_CREDITS`: Navo Tokens only (an MCP call from an account holding Navo Tokens). The balance could not pay for the answer once it was ready (it changed meanwhile, or the answer came from the one-minute cache). Nothing is charged and no data is returned. `error` carries `credits_required`, `credits_balance`, `top_up_url` and `packages`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sailings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                        "type": "text/plain"
                      },
                      "key": "origin",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                        "type": "text/plain"
                      },
                      "key": "destination",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "First departure date to consider, YYYY-MM-DD; default today's date in UTC. Matched against each sailing's departure date in its port's local time, so with the default a sailing stays in the answer until the UTC date passes its departure date. A date before today (UTC) is refused `DATE_IN_PAST`.",
                        "type": "text/plain"
                      },
                      "key": "from",
                      "value": "<date>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Window length in weeks from `from`: 4, 8 or 12, default 4. The end is exclusive, and a window longer than one page continues through `next`. (This can only be one of 4,8,12)",
                        "type": "text/plain"
                      },
                      "key": "weeks",
                      "value": "4"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "One or more four-character SCAC codes, comma-separated or repeated; omitted means every carrier. A code also finds the line's sailings filed under its other codes, and the answer echoes the code you sent.",
                        "type": "text/plain"
                      },
                      "key": "carrier",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`true` for sailings with transshipment, `false` for direct sailings only, omitted for both; any other value is refused. (This can only be one of true,false)",
                        "type": "text/plain"
                      },
                      "key": "transshipment",
                      "value": "false"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Only sailings new to us, or whose published departure or arrival moved, since this moment; pass back the `as_of` of the first page of your last walk. A new sailing's `last_changed_at` can be null or earlier than this moment. Takes YYYY-MM-DD (midnight UTC) or a full date-time; cut-off and name changes and removals are not reported.",
                        "type": "text/plain"
                      },
                      "key": "changed_since",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`all` returns every routing the line published for each departure, not just the main one. Extra routings come as separate sailings marked `is_alternative: true`. Not every line reports alternatives; for such a line each routing comes as a sailing of its own. Priced as a normal search. With `routings=all`, `limit` and `carriers[].count` count sailings as they do without the flag (with `transshipment`, a sailing counts when any of its routings fits), not routings, and alternatives come on top, so a page can hold more sailings than `limit`. `next` keeps `routings=all`; a cursor sent with the flag added or removed does not continue the walk and is billed as a new search. With `routings=all`, `changed_since` also returns a departure whose other routings changed; without the flag it does not, and `last_changed_at` moves only with the departure or arrival. With `routings=all`, `transshipment` judges each routing on its own legs: a departure is returned when any of its routings fits, and only the routings that fit are returned, so a departure can come with `is_alternative: true` alone. An alternative that repeats a routing already served for its departure except for the voyages (same ports, ships and times) is left out. A departure can come with two main routings (`is_alternative: false`) when the line offers two, or, until our next complete read of the lane, one the line has since dropped. (This can only be one of all)",
                        "type": "text/plain"
                      },
                      "key": "routings",
                      "value": "all"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Sailings per page, 1 to 500, default 100; a value outside the range is refused, not clamped. With `routings=all`, alternatives come on top of it.",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "An opaque continuation token that `next` already carries; omit it on the first page and never build or edit it.",
                        "type": "text/plain"
                      },
                      "key": "cursor",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Payment Required",
              "code": 402,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"parameter\": \"<string>\",\n    \"credits_required\": \"<integer,null>\",\n    \"credits_balance\": \"<integer,null>\",\n    \"top_up_url\": \"<string,null>\",\n    \"packages\": [\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      },\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e03cae50-9b35-4890-a93b-b6a53c009e6b",
              "name": "`FORBIDDEN`: the account has no Schedules API access, or the key is not enabled for Schedules. `ACCESS_EXPIRED`: the access period of the account, or of the key, has ended. An MCP call (an API-key call carrying `X-Schedules-Surface: mcp`, or a call signed in through an MCP client's OAuth sign-in; a website sign-in never is, whatever header it sends) is held by the account's MCP access, not its API access, and without MCP access it is refused `FORBIDDEN` with the message that Ship Schedules is not enabled for MCP on this account. Navo Tokens open Ship Schedules through MCP without MCP access: an account holding Navo Tokens is refused only when MCP access was closed for it.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sailings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                        "type": "text/plain"
                      },
                      "key": "origin",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                        "type": "text/plain"
                      },
                      "key": "destination",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "First departure date to consider, YYYY-MM-DD; default today's date in UTC. Matched against each sailing's departure date in its port's local time, so with the default a sailing stays in the answer until the UTC date passes its departure date. A date before today (UTC) is refused `DATE_IN_PAST`.",
                        "type": "text/plain"
                      },
                      "key": "from",
                      "value": "<date>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Window length in weeks from `from`: 4, 8 or 12, default 4. The end is exclusive, and a window longer than one page continues through `next`. (This can only be one of 4,8,12)",
                        "type": "text/plain"
                      },
                      "key": "weeks",
                      "value": "4"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "One or more four-character SCAC codes, comma-separated or repeated; omitted means every carrier. A code also finds the line's sailings filed under its other codes, and the answer echoes the code you sent.",
                        "type": "text/plain"
                      },
                      "key": "carrier",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`true` for sailings with transshipment, `false` for direct sailings only, omitted for both; any other value is refused. (This can only be one of true,false)",
                        "type": "text/plain"
                      },
                      "key": "transshipment",
                      "value": "false"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Only sailings new to us, or whose published departure or arrival moved, since this moment; pass back the `as_of` of the first page of your last walk. A new sailing's `last_changed_at` can be null or earlier than this moment. Takes YYYY-MM-DD (midnight UTC) or a full date-time; cut-off and name changes and removals are not reported.",
                        "type": "text/plain"
                      },
                      "key": "changed_since",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`all` returns every routing the line published for each departure, not just the main one. Extra routings come as separate sailings marked `is_alternative: true`. Not every line reports alternatives; for such a line each routing comes as a sailing of its own. Priced as a normal search. With `routings=all`, `limit` and `carriers[].count` count sailings as they do without the flag (with `transshipment`, a sailing counts when any of its routings fits), not routings, and alternatives come on top, so a page can hold more sailings than `limit`. `next` keeps `routings=all`; a cursor sent with the flag added or removed does not continue the walk and is billed as a new search. With `routings=all`, `changed_since` also returns a departure whose other routings changed; without the flag it does not, and `last_changed_at` moves only with the departure or arrival. With `routings=all`, `transshipment` judges each routing on its own legs: a departure is returned when any of its routings fits, and only the routings that fit are returned, so a departure can come with `is_alternative: true` alone. An alternative that repeats a routing already served for its departure except for the voyages (same ports, ships and times) is left out. A departure can come with two main routings (`is_alternative: false`) when the line offers two, or, until our next complete read of the lane, one the line has since dropped. (This can only be one of all)",
                        "type": "text/plain"
                      },
                      "key": "routings",
                      "value": "all"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Sailings per page, 1 to 500, default 100; a value outside the range is refused, not clamped. With `routings=all`, alternatives come on top of it.",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "An opaque continuation token that `next` already carries; omit it on the first page and never build or edit it.",
                        "type": "text/plain"
                      },
                      "key": "cursor",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"parameter\": \"<string>\",\n    \"credits_required\": \"<integer,null>\",\n    \"credits_balance\": \"<integer,null>\",\n    \"top_up_url\": \"<string,null>\",\n    \"packages\": [\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      },\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "92e61bb8-2234-4053-af8e-1f4df2375fd4",
              "name": "`QUOTA_EXCEEDED`: the monthly call limit of the account, or of the key where the key has its own, or the key's daily limit, is spent. `RATE_LIMITED`: over the key's pace (120 requests per 20 seconds, 60 for a test key), or too many failed key checks from one address. `SEARCH_LIMIT_REACHED`: a signed-in website search by an account without a Schedules subscription, past its searches for the month; resets with the month (UTC). On Navo Tokens (an MCP call from an account holding Navo Tokens), `QUOTA_EXCEEDED` means the balance cannot pay for this lookup; it is refused before any data is read, nothing is charged, and `error` carries `credits_required`, `credits_balance`, `top_up_url` and `packages`. A refused call is not counted.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sailings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                        "type": "text/plain"
                      },
                      "key": "origin",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                        "type": "text/plain"
                      },
                      "key": "destination",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "First departure date to consider, YYYY-MM-DD; default today's date in UTC. Matched against each sailing's departure date in its port's local time, so with the default a sailing stays in the answer until the UTC date passes its departure date. A date before today (UTC) is refused `DATE_IN_PAST`.",
                        "type": "text/plain"
                      },
                      "key": "from",
                      "value": "<date>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Window length in weeks from `from`: 4, 8 or 12, default 4. The end is exclusive, and a window longer than one page continues through `next`. (This can only be one of 4,8,12)",
                        "type": "text/plain"
                      },
                      "key": "weeks",
                      "value": "4"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "One or more four-character SCAC codes, comma-separated or repeated; omitted means every carrier. A code also finds the line's sailings filed under its other codes, and the answer echoes the code you sent.",
                        "type": "text/plain"
                      },
                      "key": "carrier",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`true` for sailings with transshipment, `false` for direct sailings only, omitted for both; any other value is refused. (This can only be one of true,false)",
                        "type": "text/plain"
                      },
                      "key": "transshipment",
                      "value": "false"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Only sailings new to us, or whose published departure or arrival moved, since this moment; pass back the `as_of` of the first page of your last walk. A new sailing's `last_changed_at` can be null or earlier than this moment. Takes YYYY-MM-DD (midnight UTC) or a full date-time; cut-off and name changes and removals are not reported.",
                        "type": "text/plain"
                      },
                      "key": "changed_since",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`all` returns every routing the line published for each departure, not just the main one. Extra routings come as separate sailings marked `is_alternative: true`. Not every line reports alternatives; for such a line each routing comes as a sailing of its own. Priced as a normal search. With `routings=all`, `limit` and `carriers[].count` count sailings as they do without the flag (with `transshipment`, a sailing counts when any of its routings fits), not routings, and alternatives come on top, so a page can hold more sailings than `limit`. `next` keeps `routings=all`; a cursor sent with the flag added or removed does not continue the walk and is billed as a new search. With `routings=all`, `changed_since` also returns a departure whose other routings changed; without the flag it does not, and `last_changed_at` moves only with the departure or arrival. With `routings=all`, `transshipment` judges each routing on its own legs: a departure is returned when any of its routings fits, and only the routings that fit are returned, so a departure can come with `is_alternative: true` alone. An alternative that repeats a routing already served for its departure except for the voyages (same ports, ships and times) is left out. A departure can come with two main routings (`is_alternative: false`) when the line offers two, or, until our next complete read of the lane, one the line has since dropped. (This can only be one of all)",
                        "type": "text/plain"
                      },
                      "key": "routings",
                      "value": "all"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Sailings per page, 1 to 500, default 100; a value outside the range is refused, not clamped. With `routings=all`, alternatives come on top of it.",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "An opaque continuation token that `next` already carries; omit it on the first page and never build or edit it.",
                        "type": "text/plain"
                      },
                      "key": "cursor",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"parameter\": \"<string>\",\n    \"credits_required\": \"<integer,null>\",\n    \"credits_balance\": \"<integer,null>\",\n    \"top_up_url\": \"<string,null>\",\n    \"packages\": [\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      },\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0db3f9f4-3ce0-443f-a223-b81cf601cdb0",
              "name": "`DB_ERROR`: our database did not answer. Free; retry.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sailings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                        "type": "text/plain"
                      },
                      "key": "origin",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                        "type": "text/plain"
                      },
                      "key": "destination",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "First departure date to consider, YYYY-MM-DD; default today's date in UTC. Matched against each sailing's departure date in its port's local time, so with the default a sailing stays in the answer until the UTC date passes its departure date. A date before today (UTC) is refused `DATE_IN_PAST`.",
                        "type": "text/plain"
                      },
                      "key": "from",
                      "value": "<date>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Window length in weeks from `from`: 4, 8 or 12, default 4. The end is exclusive, and a window longer than one page continues through `next`. (This can only be one of 4,8,12)",
                        "type": "text/plain"
                      },
                      "key": "weeks",
                      "value": "4"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "One or more four-character SCAC codes, comma-separated or repeated; omitted means every carrier. A code also finds the line's sailings filed under its other codes, and the answer echoes the code you sent.",
                        "type": "text/plain"
                      },
                      "key": "carrier",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`true` for sailings with transshipment, `false` for direct sailings only, omitted for both; any other value is refused. (This can only be one of true,false)",
                        "type": "text/plain"
                      },
                      "key": "transshipment",
                      "value": "false"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Only sailings new to us, or whose published departure or arrival moved, since this moment; pass back the `as_of` of the first page of your last walk. A new sailing's `last_changed_at` can be null or earlier than this moment. Takes YYYY-MM-DD (midnight UTC) or a full date-time; cut-off and name changes and removals are not reported.",
                        "type": "text/plain"
                      },
                      "key": "changed_since",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`all` returns every routing the line published for each departure, not just the main one. Extra routings come as separate sailings marked `is_alternative: true`. Not every line reports alternatives; for such a line each routing comes as a sailing of its own. Priced as a normal search. With `routings=all`, `limit` and `carriers[].count` count sailings as they do without the flag (with `transshipment`, a sailing counts when any of its routings fits), not routings, and alternatives come on top, so a page can hold more sailings than `limit`. `next` keeps `routings=all`; a cursor sent with the flag added or removed does not continue the walk and is billed as a new search. With `routings=all`, `changed_since` also returns a departure whose other routings changed; without the flag it does not, and `last_changed_at` moves only with the departure or arrival. With `routings=all`, `transshipment` judges each routing on its own legs: a departure is returned when any of its routings fits, and only the routings that fit are returned, so a departure can come with `is_alternative: true` alone. An alternative that repeats a routing already served for its departure except for the voyages (same ports, ships and times) is left out. A departure can come with two main routings (`is_alternative: false`) when the line offers two, or, until our next complete read of the lane, one the line has since dropped. (This can only be one of all)",
                        "type": "text/plain"
                      },
                      "key": "routings",
                      "value": "all"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Sailings per page, 1 to 500, default 100; a value outside the range is refused, not clamped. With `routings=all`, alternatives come on top of it.",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "An opaque continuation token that `next` already carries; omit it on the first page and never build or edit it.",
                        "type": "text/plain"
                      },
                      "key": "cursor",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"parameter\": \"<string>\",\n    \"credits_required\": \"<integer,null>\",\n    \"credits_balance\": \"<integer,null>\",\n    \"top_up_url\": \"<string,null>\",\n    \"packages\": [\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      },\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1111e43b-7a20-437d-b135-67531b12d945",
              "name": "`SERVICE_UNAVAILABLE`: the key or the account's access could not be checked just now. Free; retry after `Retry-After` seconds.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sailings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                        "type": "text/plain"
                      },
                      "key": "origin",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                        "type": "text/plain"
                      },
                      "key": "destination",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "First departure date to consider, YYYY-MM-DD; default today's date in UTC. Matched against each sailing's departure date in its port's local time, so with the default a sailing stays in the answer until the UTC date passes its departure date. A date before today (UTC) is refused `DATE_IN_PAST`.",
                        "type": "text/plain"
                      },
                      "key": "from",
                      "value": "<date>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Window length in weeks from `from`: 4, 8 or 12, default 4. The end is exclusive, and a window longer than one page continues through `next`. (This can only be one of 4,8,12)",
                        "type": "text/plain"
                      },
                      "key": "weeks",
                      "value": "4"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "One or more four-character SCAC codes, comma-separated or repeated; omitted means every carrier. A code also finds the line's sailings filed under its other codes, and the answer echoes the code you sent.",
                        "type": "text/plain"
                      },
                      "key": "carrier",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`true` for sailings with transshipment, `false` for direct sailings only, omitted for both; any other value is refused. (This can only be one of true,false)",
                        "type": "text/plain"
                      },
                      "key": "transshipment",
                      "value": "false"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Only sailings new to us, or whose published departure or arrival moved, since this moment; pass back the `as_of` of the first page of your last walk. A new sailing's `last_changed_at` can be null or earlier than this moment. Takes YYYY-MM-DD (midnight UTC) or a full date-time; cut-off and name changes and removals are not reported.",
                        "type": "text/plain"
                      },
                      "key": "changed_since",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "`all` returns every routing the line published for each departure, not just the main one. Extra routings come as separate sailings marked `is_alternative: true`. Not every line reports alternatives; for such a line each routing comes as a sailing of its own. Priced as a normal search. With `routings=all`, `limit` and `carriers[].count` count sailings as they do without the flag (with `transshipment`, a sailing counts when any of its routings fits), not routings, and alternatives come on top, so a page can hold more sailings than `limit`. `next` keeps `routings=all`; a cursor sent with the flag added or removed does not continue the walk and is billed as a new search. With `routings=all`, `changed_since` also returns a departure whose other routings changed; without the flag it does not, and `last_changed_at` moves only with the departure or arrival. With `routings=all`, `transshipment` judges each routing on its own legs: a departure is returned when any of its routings fits, and only the routings that fit are returned, so a departure can come with `is_alternative: true` alone. An alternative that repeats a routing already served for its departure except for the voyages (same ports, ships and times) is left out. A departure can come with two main routings (`is_alternative: false`) when the line offers two, or, until our next complete read of the lane, one the line has since dropped. (This can only be one of all)",
                        "type": "text/plain"
                      },
                      "key": "routings",
                      "value": "all"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Sailings per page, 1 to 500, default 100; a value outside the range is refused, not clamped. With `routings=all`, alternatives come on top of it.",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "An opaque continuation token that `next` already carries; omit it on the first page and never build or edit it.",
                        "type": "text/plain"
                      },
                      "key": "cursor",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"parameter\": \"<string>\",\n    \"credits_required\": \"<integer,null>\",\n    \"credits_balance\": \"<integer,null>\",\n    \"top_up_url\": \"<string,null>\",\n    \"packages\": [\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      },\n      {\n        \"plan\": \"<string>\",\n        \"credits\": \"<integer>\",\n        \"usd\": \"<number>\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "5c3c3d50-87aa-4b92-a60d-1c6de04860f2",
          "name": "Lanes with upcoming cached sailings",
          "request": {
            "name": "Lanes with upcoming cached sailings",
            "description": {},
            "url": {
              "path": [
                "sailings",
                "covered"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "691e5ae2-4582-45d3-8496-ba3f93f888ee",
              "name": "The busiest lanes with upcoming sailings, deepest first, each with a count. A lane carries origin and destination UN/LOCODEs plus origin_name and destination_name, which fall back to the locode where a port has no name on file. This is a picker, not an inventory: we hold sailings on tens of thousands of lanes and this answers with the deepest few hundred of them, so a lane's absence here says it is not among the busiest and not that we have nothing on it. Ask /public/schedules for any lane directly.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sailings",
                    "covered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "df1da202-c84f-4f20-ad09-c6f955f8768e",
              "name": "Rate limit exceeded (120 requests per 20 seconds per IP)",
              "originalRequest": {
                "url": {
                  "path": [
                    "sailings",
                    "covered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "58b784cd-4916-4220-9acb-05adaf393d4a",
          "name": "Carriers on a lane ranked by observed on-time reliability (API key required; empty answer free)",
          "request": {
            "name": "Carriers on a lane ranked by observed on-time reliability (API key required; empty answer free)",
            "description": {
              "content": "90-day on-time %, average/median/p90/max delay, berth precision in minutes, sample size, and a provisional flag for thin samples (observations below min_obs). Scores are measured against the schedule the carrier first declared.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "reliability",
                "lanes"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                    "type": "text/plain"
                  },
                  "key": "origin",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                    "type": "text/plain"
                  },
                  "key": "destination",
                  "value": "<string>"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "87fc05db-f42a-4abd-832e-56f89d3012e1",
              "name": "Ranked carriers for the lane",
              "originalRequest": {
                "url": {
                  "path": [
                    "reliability",
                    "lanes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                        "type": "text/plain"
                      },
                      "key": "origin",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                        "type": "text/plain"
                      },
                      "key": "destination",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"ok\": \"<boolean>\",\n  \"data\": {\n    \"origin\": \"<string>\",\n    \"destination\": \"<string>\",\n    \"min_obs\": \"<integer>\",\n    \"carriers\": [\n      {\n        \"carrier_code\": \"<string>\",\n        \"carrier_name\": \"<string>\",\n        \"on_time_pct\": \"<number,string>\",\n        \"avg_delay_hours\": \"<number,string,null>\",\n        \"median_delay_hours\": \"<number,string,null>\",\n        \"p90_delay_hours\": \"<number,string,null>\",\n        \"max_delay_hours\": \"<number,string,null>\",\n        \"observations\": \"<integer>\",\n        \"provisional\": \"<boolean>\",\n        \"dep_precision_p50_min\": \"<number,string,null>\",\n        \"berth_precision_p50_min\": \"<number,string,null>\",\n        \"delay_basis\": \"published_etd\"\n      },\n      {\n        \"carrier_code\": \"<string>\",\n        \"carrier_name\": \"<string>\",\n        \"on_time_pct\": \"<number,string>\",\n        \"avg_delay_hours\": \"<number,string,null>\",\n        \"median_delay_hours\": \"<number,string,null>\",\n        \"p90_delay_hours\": \"<number,string,null>\",\n        \"max_delay_hours\": \"<number,string,null>\",\n        \"observations\": \"<integer>\",\n        \"provisional\": \"<boolean>\",\n        \"dep_precision_p50_min\": \"<number,string,null>\",\n        \"berth_precision_p50_min\": \"<number,string,null>\",\n        \"delay_basis\": \"first_declared\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b44b9e80-9216-4c43-b29a-58fa38a078ae",
              "name": "origin and destination are required",
              "originalRequest": {
                "url": {
                  "path": [
                    "reliability",
                    "lanes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                        "type": "text/plain"
                      },
                      "key": "origin",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                        "type": "text/plain"
                      },
                      "key": "destination",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "c30d0a0e-2d6a-403d-8e87-4c657dda2a0a",
              "name": "Rate limit exceeded (120 requests per 20 seconds per IP)",
              "originalRequest": {
                "url": {
                  "path": [
                    "reliability",
                    "lanes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Origin port UN/LOCODE, e.g. CNSHA",
                        "type": "text/plain"
                      },
                      "key": "origin",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Destination port UN/LOCODE, e.g. NLRTM",
                        "type": "text/plain"
                      },
                      "key": "destination",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "92e09aeb-df47-4372-aa68-ddfbccbd355c",
          "name": "Lanes with reliability observations",
          "request": {
            "name": "Lanes with reliability observations",
            "description": {},
            "url": {
              "path": [
                "reliability",
                "covered"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "e478207b-1516-491a-a794-67b4e89a21df",
              "name": "Lanes with carrier and observation counts, most-observed first. Each lane carries origin/destination UN/LOCODEs plus origin_name/destination_name (the locode itself when a port has no name on file)",
              "originalRequest": {
                "url": {
                  "path": [
                    "reliability",
                    "covered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "5618d225-3d5d-4114-9309-f7751964a085",
              "name": "Rate limit exceeded (120 requests per 20 seconds per IP)",
              "originalRequest": {
                "url": {
                  "path": [
                    "reliability",
                    "covered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "1bab159c-70b9-46b6-85dc-48cf5e093970",
          "name": "Carrier-level on-time league table (API key required; empty answer free)",
          "request": {
            "name": "Carrier-level on-time league table (API key required; empty answer free)",
            "description": {
              "content": "Carriers ranked by overall observed on-time reliability across all lanes, with schedule-churn volatility per carrier.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "reliability",
                "leaderboard"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "Maximum number of ranked carriers to return. Omit for the complete table.",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "<integer>"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "7d0e88ee-37df-45e9-b303-915f7011143d",
              "name": "Ranked carriers. total is the complete table size before limit is applied.",
              "originalRequest": {
                "url": {
                  "path": [
                    "reliability",
                    "leaderboard"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Maximum number of ranked carriers to return. Omit for the complete table.",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "<integer>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"ok\": \"<boolean>\",\n  \"data\": {\n    \"min_obs\": \"<integer>\",\n    \"total\": \"<integer>\",\n    \"carriers\": [\n      {\n        \"carrier_code\": \"<string>\",\n        \"carrier_name\": \"<string>\",\n        \"on_time_pct\": \"<number,null>\",\n        \"avg_delay_hours\": \"<number,null>\",\n        \"p90_delay_hours\": \"<number,null>\",\n        \"max_delay_hours\": \"<number,null>\",\n        \"observations\": \"<integer,null>\",\n        \"provisional\": \"<boolean>\",\n        \"volatility\": \"<null>\"\n      },\n      {\n        \"carrier_code\": \"<string>\",\n        \"carrier_name\": \"<string>\",\n        \"on_time_pct\": \"<number,null>\",\n        \"avg_delay_hours\": \"<number,null>\",\n        \"p90_delay_hours\": \"<number,null>\",\n        \"max_delay_hours\": \"<number,null>\",\n        \"observations\": \"<integer,null>\",\n        \"provisional\": \"<boolean>\",\n        \"volatility\": \"<null>\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6f035f55-854d-4e08-bd13-e59032449ae5",
              "name": "limit is not an integer from 1 through 100",
              "originalRequest": {
                "url": {
                  "path": [
                    "reliability",
                    "leaderboard"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Maximum number of ranked carriers to return. Omit for the complete table.",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "<integer>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "92dbbe7d-7d61-4350-a666-8f39f25b6c4a",
              "name": "Rate limit exceeded (120 requests per 20 seconds per IP)",
              "originalRequest": {
                "url": {
                  "path": [
                    "reliability",
                    "leaderboard"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Maximum number of ranked carriers to return. Omit for the complete table.",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "<integer>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "65507236-14b5-4d02-9c8a-57689cde29c9",
          "name": "Resolve a port name to its UN/LOCODE",
          "request": {
            "name": "Resolve a port name to its UN/LOCODE",
            "description": {},
            "url": {
              "path": [
                "ports",
                "search"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "(Required) Port name, partial name, country, or UN/LOCODE (min 2 chars). Also accepted as q, the older spelling.",
                    "type": "text/plain"
                  },
                  "key": "name",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "8"
                }
              ],
              "variable": []
            },
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "fd1f98b1-3834-47b4-a0ef-5f1dc8af7fdb",
              "name": "Matching ports with UN/LOCODE, country, and coordinates",
              "originalRequest": {
                "url": {
                  "path": [
                    "ports",
                    "search"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Port name, partial name, country, or UN/LOCODE (min 2 chars). Also accepted as q, the older spelling.",
                        "type": "text/plain"
                      },
                      "key": "name",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "8"
                    }
                  ],
                  "variable": []
                },
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "55f98eab-ea05-4b13-99f1-8dc64503d695",
              "name": "Rate limit exceeded (120 requests per 20 seconds per IP)",
              "originalRequest": {
                "url": {
                  "path": [
                    "ports",
                    "search"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Port name, partial name, country, or UN/LOCODE (min 2 chars). Also accepted as q, the older spelling.",
                        "type": "text/plain"
                      },
                      "key": "name",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "8"
                    }
                  ],
                  "variable": []
                },
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "457a7fdd-e2f2-42f0-9091-e48f6bb53b6f",
          "name": "Congestion signal for a port (or the congested-ports leaderboard) (API key required; empty answer free)",
          "request": {
            "name": "Congestion signal for a port (or the congested-ports leaderboard) (API key required; empty answer free)",
            "description": {},
            "url": {
              "path": [
                "port-congestion"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "UN/LOCODE, e.g. NLRTM. Omit for the leaderboard of congested ports.",
                    "type": "text/plain"
                  },
                  "key": "port",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "Leaderboard filter (This can only be one of mild,moderate,severe)",
                    "type": "text/plain"
                  },
                  "key": "level",
                  "value": "severe"
                }
              ],
              "variable": []
            },
            "method": "GET",
            "body": {},
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "e0cb68ce-ee65-4d82-9c50-96b6fd83b6a0",
              "name": "Congestion level, expected added wait days, confidence, sources",
              "originalRequest": {
                "url": {
                  "path": [
                    "port-congestion"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "UN/LOCODE, e.g. NLRTM. Omit for the leaderboard of congested ports.",
                        "type": "text/plain"
                      },
                      "key": "port",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Leaderboard filter (This can only be one of mild,moderate,severe)",
                        "type": "text/plain"
                      },
                      "key": "level",
                      "value": "severe"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "625664c6-eb9a-4f5d-9657-62366a2bab4c",
              "name": "Rate limit exceeded (120 requests per 20 seconds per IP)",
              "originalRequest": {
                "url": {
                  "path": [
                    "port-congestion"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "UN/LOCODE, e.g. NLRTM. Omit for the leaderboard of congested ports.",
                        "type": "text/plain"
                      },
                      "key": "port",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Leaderboard filter (This can only be one of mild,moderate,severe)",
                        "type": "text/plain"
                      },
                      "key": "level",
                      "value": "severe"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "2af398d0-ea33-417f-8cb8-7a6d33c49a54",
              "name": "`DB_ERROR`: our database did not answer. Free; retry. A failed read is never answered as `congested: false`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "port-congestion"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "UN/LOCODE, e.g. NLRTM. Omit for the leaderboard of congested ports.",
                        "type": "text/plain"
                      },
                      "key": "port",
                      "value": "<string>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "Leaderboard filter (This can only be one of mild,moderate,severe)",
                        "type": "text/plain"
                      },
                      "key": "level",
                      "value": "severe"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [],
              "cookie": [],
              "_postman_previewlanguage": "text"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    }
  ],
  "event": [],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.navo24.com/v1/schedules",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string"
    }
  ],
  "info": {
    "_postman_id": "67cfd8af-220d-4f14-97ac-297759f5e0f2",
    "name": "Navo Schedules API",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": {
      "content": "REST endpoints for live ocean sailing schedules and observed carrier on-time reliability, the same engine that powers schedulesmcp.com. The data endpoints (`GET /public/schedules`, `/public/reliability/lanes`, `/public/reliability/leaderboard` and `/public/port-congestion`) require an API key: send it as `Authorization: Bearer <key>`. Each answer that carries data counts as 1 call; an empty answer, a refusal and an error are free. There are no plans or tiers on this product: what holds a caller is the call quota agreed for their account, whether access is still valid, and a pace of 120 requests per 20 seconds for a production key or 60 for a test key. The paths keep their `/public` prefix so that existing integrations change one header and not their URL. The reference lists (covered lanes, carriers and port search) need no key, are never counted, and carry two limits per address, 120 requests per 20 seconds and 2,000 per day resetting at midnight UTC. Either refusal is a 429 carrying Retry-After, RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy; read RateLimit-Policy to tell the two apart, since both answer with error code RATE_LIMITED and the window is the whole difference between waiting twenty seconds and waiting until midnight. Answers from the keyless endpoints are cached for five minutes at the edge. Keyed answers are not: they are marked `private`, because a shared cache would serve one customer's answer to another, and they vary on `Authorization`. Webhooks (`/v1/webhooks` and its sub-paths): every successful request counts as 1 call, refusals and errors are free, and the event deliveries we send are free. Sailing cards (`/public/schedules/cards`) are not available: 403 FORBIDDEN. Where a sailing reached us from is not part of the contract and is not in any response. TIMES: every departure, arrival, leg time and cut-off is the local time of the port it happens at, in the digits the line itself publishes, for every line alike. We convert nothing, and these values carry no offset: `2026-09-29T05:00:00` on a Shanghai departure is 05:00 Shanghai time. Read the digits, do not convert them to your own zone. `departure_precision` and `arrival_precision` say whether the line gave a time (`minute`) or only a date (`day`, the 00:00 is ours). Because each time is its own port's clock, the difference between an origin and a destination time is not the elapsed time; use `transit_days`. Our own bookkeeping instants are different and ARE real UTC: `as_of`, `last_changed_at`, `retrieved_at` and the `changed_since` you pass back. Authenticated /v1 endpoints (full coverage, history, alerts) require an API key; see https://schedulesmcp.com/pricing. Agent reference: https://schedulesmcp.com/llms-full.txt\n\nContact Support:\n Name: SchedulesMCP",
      "type": "text/plain"
    }
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  }
}
