This is a technical article about rail data within Terminal49’s API and DataSync.

For a broader overview, including the reasons why you’d want rail visibility and how to use it in the Terminal49 dashboard, read our announcement post.

Table of Contents

Supported Rail Carriers

Terminal49 container tracking platform integrates with all North American Class-1 railroads that handle container shipping, providing comprehensive visibility into your rail container movements.

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

By integrating with these carriers, Terminal49 ensures that you have direct access to critical tracking data, enabling better decision-making and operational efficiency.

Supported Rail Events and Data Attributes

Terminal49 seamlessly tracks your containers as they go from container ship, to ocean terminal, to rail carrier.

We provide a set of Transport Events that let you track the status of your containers as they move through the rail system. You can be notified by webhook whenever these events occur.

We also provide a set of attributes on the container model that let you know the current status of your container at any given time, as well as useful information such as ETA, pickup facility, and availability information.

Rail-Specific Transport Events

There are several core Transport Events that occur on most rail journeys. Some rail carriers do not share all events, but in general these are the key events for a container.

Available for Pickup, Full Out and Empty Return are not specific to rail, but are included here since they are a key part of the rail journey.

Webhook Notifications

Terminal49 provides webhook notifications to keep you updated on key Transport Events in a container’s rail journey. These notifications allow you to integrate near real-time tracking data directly into your applications.

Here’s a list of the rail-specific events which support webhook notifications:

Transport EventWebhook NotificationDescriptionExample
Rail Loadedcontainer.transport.rail_loadedThe container is loaded onto a railcar.Example
Rail Departedcontainer.transport.rail_departedThe container departs on the railcar (not always from port of discharge).Example
Rail Arrivedcontainer.transport.rail_arrivedThe container arrives at a rail terminal (not always at the destination terminal).Example
Arrived At Inland Destinationcontainer.transport.arrived_at_inland_destinationThe container arrives at the destination terminal.Example
Rail Unloadedcontainer.transport.rail_unloadedThe container is unloaded from a railcar.Example

There’s also a set of events that are triggered when the status of the container at the destination rail terminal changes. For containers without rail, they would have been triggered at the ocean terminal.

Transport EventWebhook NotificationDescriptionExample
Full Outcontainer.transport.full_outThe full container leaves the rail terminal.Example
Empty Incontainer.transport.empty_inThe empty container is returned to the terminal.Example

Finally, we have a webhook notifications for when the destination ETA changes.

Transport EventWebhook NotificationDescriptionExample
Estimated Destination Arrivalcontainer.transport.estimated.arrived_at_inland_destinationEstimated time of arrival for the container at the destination rail terminal.Example

Integrate these notifications by subscribing to the webhooks and handling the incoming data to update your systems.

Rail Container Attributes

The following are new attributes that are specific to rail container tracking.

  • pod_rail_loaded_at: Time when the container is loaded onto a railcar at the POD.
  • pod_rail_departed_at: Time when the container departs from the POD.
  • ind_eta_at: Estimated Time of Arrival at the inland destination.
  • ind_ata_at: Actual Time of Arrival at the inland destination.
  • ind_rail_unloaded_at: Time when the container is unloaded from rail at the inland destination.
  • ind_facility_lfd_on: Last Free Day for demurrage charges at the inland destination terminal.
  • pod_rail_carrier_scac: SCAC code of the rail carrier that picks up the container from the POD (this could be different than the rail carrier that delivers to the inland destination).
  • ind_rail_carrier_scac: SCAC code of the rail carrier that delivers the container to the inland destination.

These attributes can be found on container objects.

Integration Methods

There are two methods to integrate Terminal49’s rail tracking data programmatically: via API and DataSync.

A. Integration via API

Terminal49 provides a robust API that allows you to programmatically access rail container tracking data and receive updates via webhooks. You will receive rail events and attributes alongside events and attributes from the ocean terminal and carrier.

Here’s a step-by-step guide to get started

B. Integration via DataSync

Terminal49’s DataSync service automatically syncs up-to-date tracking data with your system. The rail data will be in the same tables alongside the ocean terminal and carrier data.

Learn more about DataSync