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)
Supported rail events and data attributes
Terminal49 seamlessly tracks your containers as they go from container ship, to ocean terminal, to rail carrier. Terminal49 provides a set of transport events that let you track the status of your containers as they move through the rail system. You can receive webhook notifications whenever these events occur. Terminal49 also provides a set of attributes on the container model with the current status of your container at any given time, including ETA, pickup facility, and availability information. For details on hold types, fee types, and how to determine release readiness at the port or an inland destination, see Container Holds, Fees, and Release Readiness.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 Event | Webhook Notification | Description | Example |
|---|---|---|---|
| Rail Loaded | container.transport.rail_loaded | The container is loaded onto a railcar. | Example |
| Rail Departed | container.transport.rail_departed | The container departs on the railcar (not always from port of discharge). | Example |
| Rail Arrived | container.transport.rail_arrived | The container arrives at a rail terminal (not always at the destination terminal). | Example |
| Arrived At Inland Destination | container.transport.arrived_at_inland_destination | The container arrives at the destination terminal. | Example |
| Rail Unloaded | container.transport.rail_unloaded | The container is unloaded from a railcar. | Example |
| Rail LFD Changed | container.pickup_lfd_rail.changed | The Rail Last Free Day (LFD) for the container has changed. |
Finally, there is a webhook notification for when the destination ETA changes.
| Transport Event | Webhook Notification | Description | Example |
|---|---|---|---|
| Estimated Destination Arrival | container.transport.estimated.arrived_at_inland_destination | Estimated time of arrival for the container at the destination rail terminal. | Example |
Rail container attributes
The following attributes are specific to rail container tracking and live on the container object.- 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, sourced from the rail carrier.
- ind_ata_at: Actual Time of Arrival at the inland destination, sourced from the rail carrier.
- ind_rail_unloaded_at: Time when the container is unloaded from rail at the inland destination.
- ind_facility_lfd_on: Deprecated. Last Free Day for demurrage charges at the inland destination terminal. Use
import_deadlines.pickup_lfd_railinstead (timezone:final_destination_timezone). - 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.
Inland destination ETA/ATA: rail carrier vs. shipping line
For an inland (rail) move, two pairs of arrival fields exist and can differ:| Field | Lives on | Source | Notes |
|---|---|---|---|
ind_eta_at / ind_ata_at | container | Rail carrier | Estimated and actual arrival at the inland destination, reported directly by the rail carrier. |
destination_eta_at / destination_ata_at | shipment | Shipping line (SSL) | Estimated and actual arrival at the shipment’s destination as reported by the ocean carrier. For inland moves, this is the SSL’s view of the inland destination. |
ind_* when you want the rail carrier’s view (typically more granular and updated more frequently for inland legs). Use destination_* when you want the SSL-reported view on the shipment. The corresponding timezone for ind_* fields is final_destination_timezone (on the container); for destination_* fields it is destination_timezone (on the shipment).
Rail Last Free Day (LFD)
The container’s top-levelpickup_lfd attribute is a coalesced value derived from the import_deadlines object, in this order of preference:
import_deadlines.pickup_lfd_line— LFD as reported by the shipping line (preferred).import_deadlines.pickup_lfd_terminal— LFD from the POD terminal (timezone:pod_timezone).import_deadlines.pickup_lfd_rail— LFD from the rail carrier at the inland destination (timezone:final_destination_timezone).
container.pickup_lfd_rail.changed webhook to be notified when the rail carrier updates the inland LFD. The legacy ind_facility_lfd_on field is deprecated — read import_deadlines.pickup_lfd_rail instead.