Point-to-Point Schedules
project44's Point-to-Point Schedules API returns 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 before a shipment is booked.
The response body follows the DCSA Commercial Schedules 1.0 standard; the envelope (authentication, pagination, errors, versioning) follows project44's standard REST API design. See the API documentation for the full field-by-field schema.
Key concepts
- Route — one bookable path from an origin to a destination, made up of one or more ordered legs. A route with no transshipments has one leg; a route with two transshipments has three.
- 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.
- Carrier — the SCAC-coded carrier operating a route (or leg). The route-level
carrierCodeis a headline rollup; the same value also appears per-leg underservicePartners, since different legs of a transshipment route can in principle be operated by different carriers. - Cut-off time — the latest time cargo, documentation, or containers must be ready at origin for a given sailing (e.g.
VCOvessel cut-off,DCOdocumentation cut-off). Returned as an array, empty when the carrier supplies none for that route — nevernull.
Searching for a route
A search requires an origin, a destination, and at least one complete date window — a departure window, an arrival window, or both:
GET /services/advanced-sailing-schedules/v1/point-to-point-routes
?origin=NLRTM
&destination=USLGB
&departureStartDate=2026-05-20
&departureEndDate=2026-06-03
Response:
{
"results": [
{
"placeOfReceipt": { "location": { "UNLocationCode": "NLRTM" }, "dateTime": "2026-05-27T00:00:00+02:00" },
"placeOfDelivery": { "location": { "UNLocationCode": "USLGB" }, "dateTime": "2026-06-25T00:00:00-07:00" },
"carrierCode": "ONEY",
"carrierName": "Ocean Network Express",
"transshipmentCount": 1,
"transitTime": 29,
"legs": [ /* one entry per leg, see the API documentation for the full shape */ ],
"extensions": { "routeId": "<uuid>" }
}
],
"paginationInfo": { "total": 348, "pageNumber": 1, "pageSize": 50 }
}
A search with no matching routes returns 200 OK with an empty results array — never 404.
Point-to-Point Schedules Operations
Get Credentials
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.
See Authentication and Authorization for more information.
Search Point-to-Point Routes
Use the GET endpoint to search for bookable point-to-point routes between an origin and a destination.
| Endpoint | /services/advanced-sailing-schedules/v1/point-to-point-routes |
| Verb | GET |
| Required Fields | origin, destination, and at least one complete date window (departureStartDate + departureEndDate, and/or arrivalStartDate + arrivalEndDate) |
Optional filters: carrierCodes (comma-separated SCAC list, max 50), transshipmentsMax (0-10), sort (DEPARTURE_DATE_TIME default, ARRIVAL_DATE_TIME, or TRANSIT_TIME, all ascending), pageNumber, pageSize (default 50, max 200).
Common Error Scenarios
- No date window supplied, or only one side of a window (e.g.
departureStartDatewithoutdepartureEndDate) ->400error code. originordestinationis not a valid 5-character UN/LOCODE ->400error code.- More than 50 SCACs in
carrierCodes->400error code. - Missing or invalid credentials ->
401error code. - Authenticated but lacking the
read:advanced-sailing-schedulespermission ->403error code.
List Carriers
Use the GET endpoint to list the carriers currently live in the service.
| Endpoint | /services/advanced-sailing-schedules/v1/carriers |
| Verb | GET |
| Required Fields | None |
Migrating from Sailing Schedules V2
If you currently use the legacy /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:
- The response body is DCSA Commercial Schedules 1.0 shaped, not the legacy V2 schema — field names, nesting, and enums differ; see the API documentation for the new field-by-field contract.
- Routes are carrier-authoritative (sourced directly from carrier schedule feeds) rather than inferred from vessel-rotation data, and support unlimited transshipments rather than being capped at two. (The
transshipmentsMaxquery filter is capped at 0-10, but that only bounds the search — it does not cap thetransshipmentCounta returned route can carry.) - Inland legs (rail/truck) can appear alongside sea legs on the same route.
- Each route carries per-leg cut-off times where the carrier supplies them; V2 does not return cut-off data.