Data Sources

  • Ocean carriers (aka steamship lines): bill of lading/booking details, vessel eta, containers and milestones
  • Container terminal operators: container availability, last free day, holds, fees etc
  • Container rail carriers: container milestones via rail
  • AIS data: vessel details and real-time location tracking (coming soon!)

Supported Ocean Carriers

View a complete list of supported carriers and attributes on Google Sheets

Ports and Terminals

Presently, the Terminal 49 api integrates with terminals at the following ports:

  • Baltimore
  • Boston
  • Charleston
  • Fraser Surrey (CA)
  • Halifax (CA)
  • Houston
  • Jacksonville
  • London Gateway (UK)
  • Long Beach
  • Los Angeles
  • Miami
  • Mobile
  • New Orleans
  • New York / New Jersey
  • Oakland
  • Philadelphia
  • Port Everglades
  • Portland
  • Prince Rupert (CA)
  • Savannah
  • Seattle
  • Southampton (UK)
  • Tacoma
  • Tampa
  • Vancouver (CA)
  • Virginia

You can view a complete list of supported terminals and attributes on Google Sheets

Rail Carriers

  • BNSF Railway
  • Canadian National Railway (CN)
  • Canadian Pacific Railway (CP)
  • CSX Transportation
  • Norfolk Southern Railway (NS)
  • Union Pacific Railroad (UP)

Known Issues (ocean)

Shipment data is populated from requests to the shipping lines.

Below are a list of known issues with our data sources:

Cma-Cgm, APL, ANL

  • No container weight
  • No container seal number

Maersk, Sealand, Safmarine

  • Shipment departure/arrival events are not always available depending on when BL is entered into system.
  • No container seal number

Hamburg Süd

  • No estimated departure time
  • No container weight
  • No container seal number

MSC

  • No container seal number

Hapag Lloyd

  • No container weight
  • No container seal number

Evergreen

  • All dates are provided as dates, not datetimes. We record and return them all as midnight at the location the event happened (when location is available) or midnight UTC.
  • Only Dry, Reefer, and Flatpack container types are mapped to our system

COSCO

  • No departure or arrival events. Does not affect departure/arrival times.

OOCL

  • No container seal number

ONE

  • Only Dry, and Reefer container types are mapped to our system

Yang-Ming

  • When BL has multiple containers, the container weight returned is the average of the shipment. (i.e. the BL gross weight / number of containers)

Hyundai Merchant Marine

  • No container type

ZIM

  • No container weight
  • No container seal number

Westwood Shipping

  • No container weight
  • Only Dry container types are mapped to our system

Data Fields & Availability

Below is a list of data that can be retrieved via the API, including whether is is always available, or whether it is only supported by certain carriers (Carrier Dependent), certain Terminals (Terminal Dependent) or on certain types of journeys (Journey dependent).

Shipment Data

Shipment Data is the primary data that comes from the Carrier. It containers the details of the shipment retrieved from the Bill of Lading, and references multiple container objects.

DataAvailabilityMore detailsNotes
Port of LadingAlwaysPort of Lading name, Port of Lading UN/LOCODE, Port of Lading Timezone
Port of DischargeAlwaysPort of Discharge name, Port of discharge UN/LOCODE,Port of Discharge Timezone
Final Destination beyond Port of DischargeCarrier dependent, Journey DependentDestination name, Destination UN/LOCODE, Destination UN/LOCODE, Destination TimezoneOnly for shipments with inland moves provided by or booked by the carrier.
Listing of Container NumbersAlwaysA list of container numbers with data attributes listed below
Bill of Lading NumberAlways (inputted by user)BOL
Shipping Line DetailsAlwaysSCAC, SSL Name
Voyage DetailsMilestone-basedVessel Name, Vessel IMO, Voyage Number
Estimated Time of DepartureCarrier dependentTimestamp
Actual Time of DepartureAlwaysTimestampAfter departure
Estimated Time of Arrival at Port of DischargeCarrier dependentTimestamp
Actual Time of Arrival at Port of DischargeAlwaysTimestampAvailable after arrival
Estimated Time of Arrival at Final DestinationCarrier dependent, Journey dependentTimestampOnly for vessels with inland moves.

Container Data

At the container level, the following data is available. Container data is combined from all sources to create a single data view of the container. As such some of this data will only available when certain milestones have passed.

DataAvailabilityMore DetailsNotes
Container NumberAlwaysnumber
Seal NumberCarrier dependentnumber
Equipment TypeAlwaysDry, reefer, open top, flat rack, tank, hard topEnumerated data type
Equipment lengthAlways20, 40, 45, 50Enumerated Data Type
Equipment heightAlwaysStandard, high cubeEnumerated Data Type
WeightCarrier DependentNumber
Terminal AvailabilityAlwaysAvailability Known, Availability for Pickup
HoldsTerminal DependentArray of statusesEach status includes the hold name (one of: customs, freight, TMF, other, USDA) and the status (pending, hold) as well as any extra description
FeesTerminal DependentArray of statusesEach status includes the fee type (one of: Demurrage, Exam, Other) and the amount the hold is for (a float)
Last Free DayTerminal DependentDate of last free day
Arrived at Port of DischargeAlwaysOnce Arrived
Discharged at Port of DischargeAlwaysOnce discharged
Full Out at Port of DischargeAlways
Full out at final destinationJourney DependentOnly if non-port final destination
Rail Loaded At Port of DischargeJourney DependentOnly if non-port final destination
Rail Departed At Port of DischargeJourney DependentOnly if non-port final destination
Rail Carrier Scac at Port of DischargeJourney DependentOnly if non-port final destination
ETA for final destinationCarrier Dependent, Journey DependentOnly if non-port final destination
ATA for final destinationJourney DependentOnly if non-port final destination
LFD at final destinationCarrier Dependent, Journey DependentOnly if non-port final destination

Milestone Event Data

When a milestone passes, the Terminal49 API will ping one of your webhooks with a Milestone event. For each milestone, the following data is always provided. Container, Shipment, Vessel, Location and Terminal data will be provided as objects that contain the information listed above.

Milestone DataDescription
Event Namethe name of the event. e.g. ‘container.transport.vessel_loaded’
Created Atwhen the event was created in our system
Timestampwhen the event occured
TimezoneWhich timezone did the event occur in.
Voyage Numberthe voyage number of the vessel
ContainerA link to the Container Data
ShipmentA link to the Shipment Data
VesselWhich vessel did the event occur on.
LocationWhere did the event oocur.
TerminalWhich terminal did this occur at.

Milestones Events Supported

A list of milestones that the API can track, as well as the event name used in the API. In future, further events may be supported.

Milestone Event NameEvent Name
Vessel Loadedcontainer.transport.vessel_loaded
Vessel Departedcontainer.transport.vessel_departed
Vessel Arrivedcontainer.transport.vessel_arrived
Vessel Berthedcontainer.transport.vessel_berthed
Vessel Dischargedcontainer.transport.vessel_discharged
Empty Outcontainer.transport.empty_oud
Full Incontainer.transport.full_id
Full Outcontainer.transport.full_out
Empty Incontainer.transport.empty_id
Rail Departedcontainer.transport.rail_departed
Rail Arrivedcontainer.transport.rail_arrived
Rail Loadedcontainer.transport.rail_loaded
Rail Unloadedcontainer.transport.rail_unloaded
Transshipment Arrivedcontainer.transport.transshipment_arrived
Transshipment Dischargedcontainer.transport.transshipment_discharged
Transshipment Loadedcontainer.transport.transshipment_loaded
Transshipment Departedcontainer.transport.transshipment_departed
Feeder Arrivedcontainer.transport.feeder_arrived
Feeder Dischargedcontainer.transport.feeder_discharged
Feeder Loadedcontainer.transport.feeder_loaded
Feeder Departedcontainer.transport.feeder_departed
Arrived at inland destinationcontainer.transport.arrived_at_inland_destination
Estimated Arrived at inland destinationcontainer.transport.estimated.arrived_at_inland_destination
Pickup LFD changedcontainer.pickup_lfd.changed