{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/shippers/visibility/ocean/sidebars.yaml"},"props":{"codeGuideFiles":[],"dynamicMarkdocComponents":[],"metadata":{"type":"markdown"},"seo":{"title":"Ocean Point-to-Point Sailing Schedules - project44 Developer Portal","description":"Integration guide & API reference for searching carrier-authoritative ocean point-to-point sailing schedules."},"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"point-to-point-schedules"},"children":["Point-to-Point Schedules"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["project44's Point-to-Point Schedules API returns ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["carrier-authoritative ocean point-to-point sailing schedules"]}," — sea and inland legs, unlimited transshipments, and per-leg cut-off times — so you can search for and select a sailing ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["before"]}," a shipment is booked."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response body follows the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["DCSA Commercial Schedules 1.0"]}," standard; the envelope (authentication, pagination, errors, versioning) follows project44's standard REST API design. See the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/api-docs/ocean:-point-to-point-schedules"},"children":["API documentation"]}," for the full field-by-field schema."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"key-concepts"},"children":["Key concepts"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Route"]}," — one bookable path from an origin to a destination, made up of one or more ordered ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["legs"]},". A route with no transshipments has one leg; a route with two transshipments has three."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Leg"]}," — a single vessel, barge, or inland (rail/truck) movement between two consecutive stops on a route. Each leg carries its own departure/arrival times, performing vessel (when known), and carrier service/voyage information."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Carrier"]}," — the SCAC-coded carrier operating a route (or leg). The route-level ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["carrierCode"]}," is a headline rollup; the same value also appears per-leg under ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["servicePartners"]},", since different legs of a transshipment route can in principle be operated by different carriers."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Cut-off time"]}," — the latest time cargo, documentation, or containers must be ready at origin for a given sailing (e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VCO"]}," vessel cut-off, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DCO"]}," documentation cut-off). Returned as an array, empty when the carrier supplies none for that route — never ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"searching-for-a-route"},"children":["Searching for a route"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[" All payloads below are simplified for illustration. For the exact request/response schema, see the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/api-docs/ocean:-point-to-point-schedules"},"children":["API documentation"]},". "]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A search requires an origin, a destination, and at least one complete date window — a departure window, an arrival window, or both:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"text","header":{"controls":{"copy":{}}},"source":"GET /services/advanced-sailing-schedules/v1/point-to-point-routes\n    ?origin=NLRTM\n    &destination=USLGB\n    &departureStartDate=2026-05-20\n    &departureEndDate=2026-06-03\n\nResponse:\n{\n  \"results\": [\n    {\n      \"placeOfReceipt\": { \"location\": { \"UNLocationCode\": \"NLRTM\" }, \"dateTime\": \"2026-05-27T00:00:00+02:00\" },\n      \"placeOfDelivery\": { \"location\": { \"UNLocationCode\": \"USLGB\" }, \"dateTime\": \"2026-06-25T00:00:00-07:00\" },\n      \"carrierCode\": \"ONEY\",\n      \"carrierName\": \"Ocean Network Express\",\n      \"transshipmentCount\": 1,\n      \"transitTime\": 29,\n      \"legs\": [ /* one entry per leg, see the API documentation for the full shape */ ],\n      \"extensions\": { \"routeId\": \"<uuid>\" }\n    }\n  ],\n  \"paginationInfo\": { \"total\": 348, \"pageNumber\": 1, \"pageSize\": 50 }\n}\n","lang":"text"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A search with no matching routes returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200 OK"]}," with an empty ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["results"]}," array — never ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["404"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"point-to-point-schedules-operations"},"children":["Point-to-Point Schedules Operations"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#get-credentials"},"children":["Get proper credentials."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#search-point-to-point-routes"},"children":["Search Point-to-Point Routes."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"#list-carriers"},"children":["List Carriers."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"get-credentials"},"children":["Get Credentials"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You must be provisioned with a tenant to have a client application within that tenant with the appropriate permissions to use any API within project44."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/shippers/visibility/ocean/authentication"},"children":["Authentication and Authorization"]}," for more information."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"search-point-to-point-routes"},"children":["Search Point-to-Point Routes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the GET endpoint to search for bookable point-to-point routes between an origin and a destination."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":""},"children":[]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":""},"children":[]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Endpoint"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/api-docs/ocean:-point-to-point-schedules"},"children":["/services/advanced-sailing-schedules/v1/point-to-point-routes"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Verb"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GET"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Required Fields"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["origin"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["destination"]},", and at least one complete date window (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["departureStartDate"]}," + ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["departureEndDate"]},", and/or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["arrivalStartDate"]}," + ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["arrivalEndDate"]},")"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Optional filters: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["carrierCodes"]}," (comma-separated SCAC list, max 50), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transshipmentsMax"]}," (0-10), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sort"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DEPARTURE_DATE_TIME"]}," default, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ARRIVAL_DATE_TIME"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRANSIT_TIME"]},", all ascending), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pageNumber"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pageSize"]}," (default 50, max 200)."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"common-error-scenarios"},"children":["Common Error Scenarios"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["No date window supplied, or only one side of a window (e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["departureStartDate"]}," without ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["departureEndDate"]},") -> ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]}," error code."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["origin"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["destination"]}," is not a valid 5-character UN/LOCODE -> ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]}," error code."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["More than 50 SCACs in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["carrierCodes"]}," -> ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]}," error code."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Missing or invalid credentials -> ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["401"]}," error code."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Authenticated but lacking the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["read:advanced-sailing-schedules"]}," permission -> ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403"]}," error code."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"list-carriers"},"children":["List Carriers"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the GET endpoint to list the carriers currently live in the service."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":""},"children":[]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":""},"children":[]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Endpoint"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/api-docs/ocean:-point-to-point-schedules"},"children":["/services/advanced-sailing-schedules/v1/carriers"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Verb"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GET"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Required Fields"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["None"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"migrating-from-sailing-schedules-v2"},"children":["Migrating from Sailing Schedules V2"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you currently use the legacy ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/sailingschedules/v2/p2pquery"]}," endpoint, this API is its DCSA-shaped, carrier-authoritative replacement — it is not a breaking change to V2, which continues to run unchanged. Key differences to plan for when migrating:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The response body is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["DCSA Commercial Schedules 1.0"]}," shaped, not the legacy V2 schema — field names, nesting, and enums differ; see the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/api-docs/ocean:-point-to-point-schedules"},"children":["API documentation"]}," for the new field-by-field contract."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Routes are ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["carrier-authoritative"]}," (sourced directly from carrier schedule feeds) rather than inferred from vessel-rotation data, and support ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["unlimited transshipments"]}," rather than being capped at two. (The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transshipmentsMax"]}," query filter is capped at 0-10, but that only bounds the search — it does not cap the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transshipmentCount"]}," a returned route can carry.)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Inland legs (rail/truck) can appear alongside sea legs on the same route."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Each route carries per-leg ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["cut-off times"]}," where the carrier supplies them; V2 does not return cut-off data."]}]}]},"headings":[{"value":"Point-to-Point Schedules","id":"point-to-point-schedules","depth":1},{"value":"Key concepts","id":"key-concepts","depth":2},{"value":"Searching for a route","id":"searching-for-a-route","depth":2},{"value":"Point-to-Point Schedules Operations","id":"point-to-point-schedules-operations","depth":2},{"value":"Get Credentials","id":"get-credentials","depth":3},{"value":"Search Point-to-Point Routes","id":"search-point-to-point-routes","depth":3},{"value":"Common Error Scenarios","id":"common-error-scenarios","depth":4},{"value":"List Carriers","id":"list-carriers","depth":3},{"value":"Migrating from Sailing Schedules V2","id":"migrating-from-sailing-schedules-v2","depth":2}],"frontmatter":{"seo":{"title":"Ocean Point-to-Point Sailing Schedules - project44 Developer Portal","description":"Integration guide & API reference for searching carrier-authoritative ocean point-to-point sailing schedules."}},"lastModified":"2026-08-04T21:27:33.000Z"},"slug":"/guides/shippers/visibility/ocean/sailing-schedules/point-to-point-schedules","userData":{"isAuthenticated":false,"teams":["anonymous"]}}