Stop ETA Update
When the ETA for a stop changes by more than 15 minutes, the following notification will be triggered.
Note: Stop ETA updated callbacks are triggered exclusively by changes to FourKites ETA calculations. Callbacks will not trigger for carrier ETA changes alone.
Note: This applies only to the ETAs shown at the stop level.
Note: If you want the StopReferenceNumbers & EncryptedURL to be sent in callbacks, you need to have the Stop Reference Numbers & Encrypted URL feature flags enabled.
Note: Ocean Load specific EncryptedURL will be sent only for the following list of callbacks:
- Load Creation
- Load Updation
- Stop Created
- Stop Updated
- Stop Deleted
Note: To see the updated Carrier ETA for Ocean Loads, you need to have the Callback ETA/ETD Type configured as "FourKites & Carrier ETA" for your company. The updated "CarrierETA" parameter will be shown in the callback message as given in the sample payload below.
Refer here for Air Load specific Carrier ETA update.
Note: CarrierETA is now also supported for Air loads, delivered inline on the same STOP_ETA_UPDATED callback alongside the FourKites ETA (Timestamp):
- If a carrier ETA is available, CarrierETA will contain the raw carrier ETA timestamp (ISO-8601 with timezone offset).
- If no carrier ETA is available, CarrierETA will be sent as an empty string (""), and Timestamp will still carry a non-empty FourKites ETA.
- This inline field does not apply to companies configured to receive Carrier and FourKites ETA as two separate callbacks (ETAType: "Carrier" / "FourKites"). For those companies, the existing two-callback behavior is unchanged.
- Ocean callback behavior is unaffected by this change.
Note: We have recently added new Ocean industry-standard stop types such as Place of Receipt (POR), Place of Delivery (DEL), Empty Pickup Location, and Empty Return Location -- The callbacks for events happening at these stops will include the mentioned "Stop Types". Please note that, currently, these stop types are only visible in the callbacks. FourKites is actively working on making these new stops accessible through the user interface in the near future
Request Parameter
{
"BillofLading": "bill_of_lading",
"BookingNumber": "booking_number",
"CarrierETA": "2022-08-15T07:08:44+08:00",
"dataSource": "fourkites-x",
"ContainerNumber":"BEAU5912889",
"ContainerType": "40FT",
"FourKitesLoadId": 1234,
"LoadNumber": "BOL12345",
"MessageType": "STOP_ETA_UPDATED",
"ProNumber": "",
"ReferenceNumbers": ["ref1", "ref2"],
"Scac": "ONEY",
"Shipper": "test-shipper",
"StopName": "ABC Stop",
"StopReferenceId": "1",
"StopSequence": 2,
"StopStatus": "on_track",
"StopType": "delivery",
"StopUnlocode": "NLRTM",
"Tags": ["tag1", "tag2"],
"TerminalName": "ECT DELTA TERMINAL",
"Timestamp": "2015-10-01T16:00:00-05:00",
"Timezone": "America/New_York",
"TimezoneShortName": "EST",
"TimezoneOffset" : -1800,
"VesselName": "ONE ORPHEUS",
"VoyageNumber": "069W"
}Sample Payload — Air (Carrier ETA available)
{
"FourKitesLoadId": 675886708,
"LoadNumber": "1074972149",
"MessageType": "STOP_ETA_UPDATED",
"Shipper": "test-shipper",
"Scac": "KHNN",
"StopType": "destinationAirport",
"StopStatus": "on_track",
"CarrierETA": "2026-06-20T02:01:00+02:00",
"Timestamp": "2026-06-18T16:21:46+02:00",
"Timezone": "Europe/Dublin",
"Tags": ["Air"]
}Sample Payload — Air (no Carrier ETA available)
Same shape as above, but with CarrierETA sent as an empty string and Timestamp (FourKites ETA) still populated:
{
"CarrierETA": "",
"Timestamp": "2026-06-18T16:21:46+02:00"
}
Field Descriptions
Field Name | Data Type | Description | Expected Values | Conditions for this to be available | Nullable Field? |
|---|---|---|---|---|---|
BillofLading | String | It indicates the bill of lading associated with the load | Bill of lading reference | Load should have a Bill Of Lading populated This typically is provided by the shipper | Yes |
BookingNumber | String | It indicates the shipping line's booking number | Booking Number reference | Load should have a Booking Number populated This typically is provided by the shipper | Yes |
CarrierETA | String | It indicates the last updated Carrier ETA for the load | - Timestamp format will be the following: "2006-01-02T15:04:05-07:00" | Default ISO8601 format |
- If there is no Carrier ETA received for that stop, the value would be blank
- If there is no Carrier ETA received for that stop, the value would be blank | Timestamp will be in stop's local time For Ocean: Carrier ETA will be applicable for the below StopTypes - port_of_loading (not common)
- transhipment_port
- port_of_discharge
- place_of_delivery For Air: Carrier ETA is applicable for companies not configured to receive Carrier and FourKites ETA as separate callbacks. For companies configured with the two-callback setup, this field is not sent inline, and the existing separate ETAType: "Carrier" / "FourKites" callbacks continue as-is. | Timestamp will be in stop's local time Carrier ETA will be applicable for the below StopTypes - port_of_loading (not common)
- transhipment_port
- port_of_discharge
- place_of_delivery | Yes | | ContainerNumber | String | Container Number of the Ocean load | Container Number | Load should have a Container Number populated | Yes | | ContainerType | String | It indicates whether the container is a general, high cube, Reefer, etc. | 20 20 Reefer 40 40HC 40HC Reefer 45 45HC 48 53 55 60 | 1. Load should have a Container Number populated
- Container type info provided by the carrier source data | Yes | | FourKitesLoadId | String | Unique load identifier from the FourKites system | | | No | | LoadNumber | String | Unique shipment identifier from shipper's system | | - Provided by shipper (or)
- Container number is used as the load number When utilising the Easy Load Create option, the container number is used as the load number by default, unless a specific load number is explicitly provided by the shipper When utilising the Automatically Create Load using EDI 315 option, the container number is used as the load number | No | | MessageType | String | Indicates the type of the message. | STOP_ETA_UPDATED | | No | | ProNumber | String | PRO# found on the ocean load. | PRO number provided by the customer for a given load | As provided by customer, else “null” | Yes | | ReferenceNumbers | Array | List of additional reference numbers associated with the load (empty list when no reference numbers are associated with the load) | Reference numbers provided by the customer for a given load | As provided by customer, else will be an empty array | Yes | | Scac | String | SCAC of the carrier assigned to the shipment/load | * SCAC code of the carrier on the load (or)
- If there are managing/operating carrier setup, this would be the SCAC code of the managing carrier on the load | | No | | Shipper | String | Unique shipper ID from FourKites | | | No | | StopName | String | Name of the stop as provided by the customer (or) carrier | The Stop Name will be sourced from the customer; if no specific stop name is provided, the carrier-provided location name will be used. In the absence of a location name within the carrier data, the UNLOCODE of the stop will be utilized | | No | | StopReferenceId | String | It is the unique identifier of the stop from the customer's system. This populates the "Reference #" field on the stop and is used to indicate which stop an update is applied to. | Customer provided ID for a given stop | | No | | StopSequence | Integer | The sequence of the stop on the load, for which the ETA update callback is being triggered | 1, 2, 3 etc. | Avoid using StopSequence field as an identifier for a stop, as it may change with carrier data updates | No | | StopStatus | String | Status of the stop | - on_track
- delayed
- not_tracking
- at_facility
- completed | | No | | StopType | String | Indicator for the type of the stop | * Pickup
- Terminal
- port_of_loading (not common)
- transhipment_port
- port_of_discharge
- place_of_delivery
- Origin Airport
- Hub Airport
- Destination Airport
- Delivery | | No | | StopUnlocode | String | It indicates the UNLOCODE of the stop | UNLOCODE (United Nations Code for Trade and Transport Locations) follows a specific format consisting of a two-letter country code and a three-character location code, eg: BEANR | - UNLOCODE will NOT be populated for Delivery stoptype
- In rare instances where the location is unavailable in FourKites' address master, UNLOCODE might be “null” | Yes | | Tags | Array | List of tags associated with the load (empty list when tags are not present) | Tags provided by the customer for a given load | As provided by customer, else will be an empty array | Yes | | TerminalName | String | It indicates the terminal inside a port where the vessel is berthing (terminal name tied to a stop) | Name of the terminal | Applicable for messages tied to following stoptypes - port_of_loading
- transhipment_port
- port_of_discharge | Yes | | Timestamp | String | This is the Estimated Time of Arrival (ETA) for the given stop This is the FourKites calculated ETA | Timestamp format will be the following: "2006-01-02T15:04:05-07:00" | Default ISO8601 format. | Timestamp will be in stop's local time | No | | Timezone | String | Timezone of the stop | Example: “America/New_York”, “Etc/UTC” Refer to this article for the list of timezones. | The timezone of the stop's location | No | | TimezoneShortName | String | Short name of Timezone of the stop in which "Timestamp" is specified | Example: “CET”, “KST” If the short name is unavailable, the value will represent the timezone offset in hours, such as “+03” “+08” etc. | | No | | TimezoneOffset | Integer | It indicates the difference between local time and UTC in seconds | Example: “-18000”, “0” | | No | | VesselName | String | It indicates the name of the vessel carrying the load. | | * The VesselName field pertains to the currently active vessel assigned to the load. If there is no vessel assigned on the load, this field will be “null”
- If transshipment stops are part of the routing, this value will vary based on the active voyage leg
- Info provided by carrier | Yes | | VoyageNumber | String | It indicates the unique identifier given for the voyage. | | - The VoyageNumber field pertains to the currently active vessel assigned to the load. If there is no vessel assigned on the load, this field will be “null”
- If transshipment stops are part of the routing, this value will vary based on the active voyage leg
- Info provided by carrier | Yes |
