Project44 Unified Container Tracking

Prev Next

Container Tracking

Containers can be associated with Loads and tracked with the Project44 Unified Tracking integration.

Container tracking is independent of Load tracking. Track containers from Port of Loading to Port of Discharge with Project44 Unified Tracking and Port to the Consignee destination with any of the following tracking integrations.

Project44 provides “push” status updates to the TMS via a Sites-based web service. Inbound container Load status packets are processed as Platform Events. Starting or stopping Project44 Unified Container tracking sends outbound requests that are processed by the QueuedTransactionJob.

Setup

The following sections for Entering Credentials, creating Remote Site Settings, and configuring an Experience Cloud Site are identical to the Project44 Truckload Tracking setup. Skip these setup steps if they were already completed for truckload tracking with Project44.

Enter Credentials

Enable the Project44 integration by completing the following steps.

  1. Navigate to TMS Admin.

  2. Choose Credentials.

  3. Select the Global Services tab.

  4. Find Project44 Tracking in the list and open the card.

  5. Check the Enabled and Receive Updates boxes.

  6. Enter the User ID and Password 1 into the text fields.

  7. Click the Save button when finished.

Valid credentials are required from a Project44 Tracking subscription.

User ID

Password 1

Password 2

Customer Number

Username in email address format

Required

Remote Site Settings

In order to process inbound packets from Project44, Salesforce requires Remote Sites to receive data. Create and/or confirm the Remote Sites are configured correctly the Project44 integration URL are up to date.

There are TWO remote site settings required. One for the API and one for the BOL document URL. The Test URL is only required when the Test Mode field is Checked on the credential card. This likely is only required in a sandbox.

  1. Click the Setup gear icon in the top right corner.

  2. From the drop-down, click Setup.

  3. In the Quick Find Toolbar type Remote Site Settings and click the link.

  4. From the list of remote sites find Project44 and click the Edit link.

  5. Update the Remote Site URLs to match the following.

    1. Project44 (Service URL): https://na12.api.project44.com

    2. Project44 BOL (BOL Document URL): https://s3-us-west-2.amazonaws.com

    3. Project44 Test (Test URL): https://na12.api.sandbox.p-44.com

Experience Cloud Site Setup

Project44 relies on a “push” approach to event processing and requires a webhook to send information to the TMS. Create an Experience Cloud API Site to accept inbound API traffic.

  1. Create a Salesforce Site for API Guest User Access.

  2. Set the public access for the Site.

  3. Activate and Publish the Site.

  4. Enter the API URL into the field for Inbound API Community URL under TMS Admin, in the Configuration section.

  5. Add the following extension to the end of the URL to match the example below: /services/apexrest/rtms/tmslistener?org=00D180000008oA9EAI&source=Project44Tracking&pwd=4wGFDgnT950Ovg1

  6. Send the post-back URL, the customer company name, and contact info to support.americas@project44.com.

{API Experience Cloud Site URL} /services/apexrest/rtms/tmslistener?org={18-character org id}&source=Project44Tracking&pwd={credentials code field}

Example: https://revenova.my.site.com/api/services/apexrest/rtms/tmslistener?org=00D180000008oA9EAI&source=Project44Tracking&pwd=4wGFDgnT950Ovg1

The Salesforce-generated API Experience Cloud Site URL is case sensitive.

Note: Once Project44 has the post-back URL, company name, and contact information, the listener URL is created automatically via the API when tracking is initiated. The webhook 'configName' for tracking is: "unified-" + 18-character org ID

Additional Setup

Confirm that field history tracking is enabled for the Container object.

Enable Container information on the Load Configuration Lightning Web Component by Mode.

  1. Navigate to TMS Admin → Modes.

  2. Select the appropriate Mode type for containers.

  3. Check the Show Containers on Load Creation field.

  4. Click Save.

  5. Repeat the steps above for each Mode type as necessary.

Confirm that tracking event packets are processed as platform events.

  1. Navigate to TMS Admin → Configuration.

  2. Find the Platform Events section.

  3. Check the Project44 Unified Tracking field.

  4. Click Save.

Accounts

Create Account records for each Port or Terminal that containers move through. The Container Port/Terminal of Load and Port/Terminal of Discharge fields contain the associated Account information when moving containers through the ports. Each Account must have the following information to process container tracking.

  • Set TMS Type to Seaport. The Seaport TMS Type refers to the generic seaport.

    • The Seaport Terminal TMS Type refers to specific locations within the seaport that Drayage drivers are directed to.

  • Enter a Timezone or run Fleet Management Job 1 to add the Timezone values to new Account records. Seaport Accounts without a Timezone do not process dates for Event payloads.

    • Add any missing values to the Timezones picklist value set. Only add IANA time zone codes.

  • Enter the UN Location Code value. Commonly used port locations may be found here. For the full list of codes, view the UN site reference.

Notes:

  • Project44 does not include time zone information in the event packets. To ensure that event date and time values are displayed correctly in the local time of the event location, the TMS determines the appropriate time zone by matching the Port/Terminal of Load and Port/Terminal of Discharge to the corresponding Account records. The Account’s Timezone field is used to convert and display event timestamps accurately.

  • Container Status Events do not process for Ports of Load or Discharge without a matching Account with the appropriate UN Location Code.

  • The Project44 Container tracking integration supports multiple stops for the same Account location.

Field Sets

Two field sets on the Container object control available fields when performing actions with containers. Add fields to the following field sets as required.

  • Container TMS1

    • Add fields to make them available on the Container Lightning Web Component when creating Loads.

  • Container TMS2

    • Add fields to include Container information on the following .PDF documents.

      • Carrier Rate and Load Confirmation

      • Carrier RFQ

      • Customer Rate and Load Confirmation

      • Driver Load Confirmation

Create Mode-specific field sets as necessary for further customization. For example, TMS1_Drayage.

Objects and Tabs

Container information is managed with the Container and Container Console Configuration objects. Provide the appropriate user CRUD access for those managing container tracking. The TMS includes a packaged Container list view and Containers tab.

Add the Containers related list to the Load Lightning Record Page with a Mode-based visibility filter to view container information on relevant Loads.

Load Map

The Load Map displays container locations and breadcrumb tracking updates received from Project44. Click the Show Container Map button to display container locations.

Load Map component showing the container location.

Confirm that history tracking is enabled for the Container object as this is required to view container tracking on the Load Map.

The Container Geolocation and Geolocation as of fields must have a value to display the Show Container Map button and display the container locations.

Begin a Tracking Session

Container Tracking is independent of Load tracking. For example, track the container via Project44 from the Port of Hong Kong to the Port of Long Beach. Then track the Drayage Load from the Port of Long Beach to the destination/consignee using MacroPoint.

For best results, include the Container Number when beginning a tracking session with Project44.

  • Set the Container Tracking field to On to begin the tracking session for a container.

  • When a tracking session is started with Project44, the request is processed by the Queued Transaction job. Confirm that the job is running before attempting to begin a tracking session.

Container tracking information is populated by tracking event status packets. The following fields are updated with information from tracking packets. See Container field mapping information below for specific field update logic.

  • Actual Container Dates & Times

  • Estimated Container Dates & Times

  • Status Updates

The following fields are NOT updated by Project44 Unified Tracking and should be entered manually.

  • Earliest Pickup Date & Time

  • Earliest Return Date Demurrage & Time

  • Terminal Cutoff Date & Time

  • Last Free Date & Time

Integration Calls

Revenova calls the following Project44 endpoints to manage container tracking sessions.

Create Unified Webhook

The Create Unified Webhook endpoint is called when a container tracking session is started with Project44. Calls to this endpoint send authentication and listener URL information from the TMS to verify org credentials.

This endpoint is called automatically when a container tracking session is started.

TMS Operation

Project44 Endpoint

Request Type

Response

Start a container tracking session.

Create or update a push configuration.

PUT

200: OK

400: Invalid Request

401: Invalid or Missing Credentials

403: Unauthorized User

No TMS fields are updated as a result of this call.

Delete Unified Webhook

The Delete Unified Webhook endpoint is called when a container tracking session is ended with Project44. Calls to this endpoint delete the webhook information in the Project44 system.

This endpoint is called automatically when a container tracking session is ended.

TMS Operation

Project44 Endpoint

Request Type

Response

End a container tracking session.

Delete a push configuration.

DELETE

200: OK

400: Invalid Request

401: Invalid or Missing Credentials

403: Unauthorized User

No TMS fields are updated as a result of this call.

Start Container Tracking

The Project44 endpoint to begin a container tracking session is called when the Container Tracking field value is set to On.

The TMS sends multiple identifying field values to Project44 to identify the container to track. The Container SCAC field value is always included in the request to begin tracking.

One of the following three Container field values is also included in the request. Fields are checked to determine if they contain a valid tracking value that may be sent to Project44. A valid Container Number must be 11 digits. The TMS selects the first available field and valid field values in the following preferred order.

  1. Container Number

  2. Master Bill of Lading Number

  3. Booking Number

A Tracking session may be started for a container that has the same Master Bill of Lading Number field value as another container. Project44 uses the same Tracking Number/ id value for both containers.

If for some reason there is a value in the Tracking Number field, that value is overwritten by the value returned from Project44 when the tracking session is started. This scenario is not common.

TMS Operation

Project44 Endpoint

Request Type

Response

Container Tracking field set to On

shipment/tracking

POST

200: OK

400: Bad Request

404: Not Found

409: Conflict

Possible TMS fields included in the Start Container Tracking request.

Object

Field

Type

Project44 Field

Container

Booking Number

Formula (Text)

identifiers → value,

identifiers → type is "BOOKING_NUMBER"

Container

Container Number

Text(80)

identifiers → value,

identifiers → type is "CONTAINER_ID"

Container

Master Bill of Lading Number

Formula (Text)

identifiers → value,

identifiers → type is "BILL_OF_LADING"

Container

SCAC

Text(6)

identifiers → value,

identifiers → type is "CARRIER_SCAC"

Sample Start Container Tracking request payload

{
  "identifiers" : [ {
    "type" : "CARRIER_SCAC",
    "value" : "TRHU"
  }, {
    "type" : "CONTAINER_ID",
    "value" : "TRHU7493516"
  } ]
}

Sample Start Container Tracking response payload

{
  "id": "26a532ac-7604-421d-8edf-f1117aafd5f8",
  "createdDateTime": "2026-04-02T14:01:50+0000",
  "identifiers": [
    {
      "type": "CONTAINER_ID",
      "value": "TRHU7493516"
    },
    {
      "type": "CARRIER_SCAC",
      "value": "TRHU"
    }
  ],
  "shipmentShareLink": "https://na12.voc.project44.com/portal/v2/public/ma/tracking-details?shipmentShareToken=8e411443-d526-4538-9c28-41413a00bcca",
  "lastModifiedDateTime": "2026-04-02T14:01:51+0000"
}

TMS Field Updates

Object

Field

Type

Project44 Field

Container

Tracking Number

Text(40) (External ID)

shipment → id

Container

Tracking Provider

Text(40)

set to Project44 Tracking by the TMS

See Project44 Unified Shipment Tracking information here.

Stop Container Tracking

Container tracking sessions are ended by calling the Project44 shipment tracking endpoint. Set the Container Tracking field value to Off to end an active tracking session. Container tracking sessions are also ended when certain Status Events are received from Project44.

TMS Operation

Project44 Endpoint

Request Type

Response

  • Set Container Tracking field to Off.

  • Receive one of the Tracking Events from Project44 that ends tracking.

shipment/tracking

DELETE

202: Accepted

400: Missing or invalid user context headers.

404: Not Found

Packets that contain multiple Tracking Events, including one that ends a tracking session, additionally process and save any applicable container field changes.

When a container tracking session is ended successfully, no payload is returned from Project44. A successful HTTP 202 response is received. Project44 returns any errors with an HTTP error code.

TMS Field Updates

Object

Field

Type

Project44 Field

Container

Tracking Number

Text(40) (External ID)

set to no value by the TMS

Container

Tracking Provider

Text(40)

set to no value by the TMS

Tracking Updates (Push into Revenova)

Project44 sends tracking event packets with container milestone updates as “events.” These events update the Container Status field on the record.

Multiple events may arrive and process from a single tracking event packet from Project44. A tracking event packet contains a single Tracking Number/Tracking ID.

The last event chronologically is set as the Status field value. All applicable date fields are processed and added to the container record. Tracking status events are listed for reference here.

Note: Container Status Events do not process for Ports of Load or Discharge without a matching Account with the appropriate UN Location Code.

Containers with the Tracking field value Off are filtered out of matching and do not receive updates.

Container Matching

Events for several containers may be included in a single tracking event packet. Containers are matched to the events in the packet based on the following logic.

First Level Matching

  1. The shipment id field is matched to the Container Tracking Number field.

    1. If one or more containers are found, they are used as the initial set of matched containers for further processing. If no containers match by the Tracking Number, the TMS proceeds to the next level of matching.

    2. Only one shipment id field value is included in each tracking event packet.

Second Level Matching

  1. The CONTAINER_ID packet field is matched to the Container Number field.

    1. If a CONTAINER_ID is provided, the TMS attempts to match it to a single active container based on the following criteria.

    2. If exactly one match is found, the container is used for processing.

    3. If more than one or no containers match, the packet is not processed and one of the following errors is returned.
      “Could not process container tracking update: More than one active container has the same Container Number: {container number}”
      “Could not process container tracking update: No active container could be found with the following Container Number: {container number}”

  2. The BILL_OF_LADING packet field is matched to the Container Master Bill of Lading field.

    1. If one or more containers are found, they are included in the set of matched containers for further processing.

    2. If no BILL_OF_LADING is included in the tracking packet, containers are searched again in step 4.

  3. The BOOKING_NUMBER packet field is matched to the Container Booking Number field.

    1. If one or more containers are found, they are included in the set of matched containers for further processing.

    2. If no containers match by the Booking Number, the packet is not processed. The error below is displayed to the user.
      “Could not process container tracking update: No active containers matched the following identifiers: trackingNumber: {trackingNumber},
      containerNumber: {containerNumber}, bolNumber: {bolNumber}, bookingNumber: {bookingNumber}”

    3. No additional attempts are made to match containers to events in the tracking packet.

Third Level Matching

Third level matching only occurs when multiple containers in a tracking packet match on the first or second level above. This matching is used to associate specific updates (stops, positions, and events) to the appropriate container(s) when multiple potential matches exist or when a container cannot be uniquely identified from previous matching steps.

  • Route Segments/Stops

    • Stop updates are associated with a TMS Container Number when the Shipment Route Info stops.id(s) match(es) the combined Route Segment fromStopId(s) and toStopId(s) in the tracking packet.

    • If a matching route segment is found and contains a single CONTAINER_ID, that container is used for the update.

    • If no route segment is matched, the error below is displayed to the user.

      “Could not process container tracking update: No route segments could be found for stop: {stop json}”

    • If multiple CONTAINER_ID values are associated with the matching route segments, the TMS may not be able to uniquely determine a container. In this case, the update is skipped or applied to all matched containers, and a debug log may be recorded.
      “Could not process container tracking update: More than one container id matched for stop: {stop json}”

  • Route Segments/Positions

    • Position updates are associated with a TMS Container Number when the Position routeSegmentId(s) match(es) the Shipment Route Info routeSegments.id(s) in the tracking packet.

    • If a single container is identified from the route segment, it is used for the update.

      • If not, the TMS attempts to apply the update to all previously matched containers.

  • Actual Dates, Estimated Dates, & Scheduled Dates

    • Date and Time updates are associated with containers based on event data using the following criteria.

      • The type value is ACTUAL (for actual events), ESTIMATED (for estimated events), or  PLANNED (for scheduled events).

      • The selected value is true.

      • The Source Identifiers type is the CONTAINER_ID.

The TMS attempts to identify a container using the CONTAINER_ID contained in the event. If successfully matched, the update is applied to that container.

  • If multiple container identifiers are present, updates may be applied to multiple containers.

  • If a container cannot be identified for a specific date/time entry, that portion of the event may be skipped.

The following JSON example contains an Actual Date/Time update from a Project44 push notification.

{
            "dateTime": "2025-12-17T13:48:00+0000",
            "receivedDateTime": "2026-03-03T19:47:00+0000",
            "id": "cc9a1335-479b-4bf5-b2a0-16e140bc2f8b",
            "type": "GATE_OUT_EMPTY",
            "stopId": "71d8437b-2f56-3872-9156-ea0afaa2a38a",
            "routeSegmentId": "2a68be91-ad85-348c-945c-ada0b18f734f",
            "dateTimes": [
                {
                    "type": "ACTUAL",
                    "dateTime": "2025-12-17T13:48:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:00+0000",
                    "source": "CARRIER",
                    "sourceIdentifiers": [
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        },
                        {
                            "type": "CONTAINER_ID",
                            "value": "FCIU5942443"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                }
            ],
            "details": {
                "ocean": {
                    "code": "GATE_OUT_EMPTY_CONTAINER_AT_TERMINAL"
                }
            }
        }

Note: Identifiers for Actual, Planned, or Estimated events are used to associate events with container records. The TMS processes events on a best-effort basis. Events that are matched to a container are processed while events that cannot be matched may be skipped. The presence of unmatched events does not prevent other valid updates in the tracking packet from processing.

Container Field Updates

Container fields are populated with values from the tracking event packet based on the matching above. In many cases, field values are only updated when specific matching criteria is met.

The following Container fields that do not contain a value are populated accordingly.

  • The Tracking Number field is populated when only one container in a tracking packet is matched by first and second level matching.

  • The Container Number field is populated when only one container in a tracking packet is matched by first and second level matching.

    • If the Tracking Number in a tracking packet includes a container match, this can update the Container Number with a new value.

  • The Vessel field is populated from the VESSEL_NAME when present and applied to all containers with first or second level matching.

  • The Port/Terminal of Load and Port/Terminal of Discharge field values are matched to Accounts in the TMS based on the UN Location Code and when the TMS Type field is Seaport.

    • Only one container must match on the first, second, and third (for stop) level matching as outlined above.

    • Field values are only updated when they contain no value. Tracking event packets do not update existing Port/Terminal field values.

  • Multiple tracking event packet values are added to the Container Route Information field as they are received in the TMS.

    • The Port of Loading, Port of Discharge, and associated UN Location Codes are added to the Route Information field.

      • This is formatted as {type}: {name} - {PORT_UN_LOCODE} - {PORT_UN_LOCODE}.

    • Payload values from the shipment stops or shipment stop location identifiers may update the Route Information field if the container match criteria are met.

    • The Route Information field is only updated when it contains no value.

  • Actual Arrival Date (D) and Actual Arrival Time (D) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Actual event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be ARRIVAL_AT_STOP and the fields must not have a value set. Field values are only updated when they contain no value; existing values are not overwritten.

    • The stop must be the PORT_OF_DISCHARGE and the Port/Terminal of Discharge Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Discharge field or set through previous stop processing.

  • Scheduled Arrival Date (D) and Scheduled Arrival Time (D) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Planned event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be ARRIVAL_AT_STOP and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop must be the PORT_OF_DISCHARGE and the Port/Terminal of Discharge Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Discharge field or set through previous stop processing.

  • Estimated Arrival Date (D) and Estimated Arrival Time (D) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Estimated event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be ARRIVAL_AT_STOP and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop type must be PORT_OF_DISCHARGE and the Port/Terminal of Discharge Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Discharge field or set through previous stop processing.

  • Actual Departure Date (L) and Actual Departure Time (L) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Actual event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be DEPARTURE_FROM_STOP and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop must be the PORT_OF_LOADING and the Port/Terminal of Load Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Load field or set through previous stop processing.

  • Scheduled Departure Date (L) and Scheduled Departure Time (L) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Planned event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be DEPARTURE_FROM_STOP and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop must be the PORT_OF_LOADING and the Port/Terminal of Load Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Load field or set through previous stop processing.

  • Estimated Departure Date (L) and Estimated Departure Time (L) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Estimated event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be DEPARTURE_FROM_STOP and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop type must be PORT_OF_LOADING and the Port/Terminal of Load Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Load field or set through previous stop processing.

  • Gated In Full Date (L) and Gated In Full Time (L) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Actual event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be GATE_IN_FULL and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop must be the PORT_OF_LOADING and the Port/Terminal of Load Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Load field or set through previous stop processing.

  • Gated In Empty Date (D) and Gated In Empty Time (D) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Actual event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be GATE_IN_EMPTY and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop must be the PORT_OF_DISCHARGE and the Port/Terminal of Discharge Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Discharge field or set through previous stop processing.

  • Gated Out Empty Date (L) and Gated Out Empty Time (L) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Actual event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be GATE_OUT_EMPTY and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop must be the PORT_OF_LOADING and the Port/Terminal of Load Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Load field or set through previous stop processing.

  • Gated Out Full Date (D) and Gated Out Full Time (D) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Actual event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be GATE_OUT_FULL and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop must be the PORT_OF_DISCHARGE and the Port/Terminal of Discharge Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Discharge field or set through previous stop processing.

  • Loaded On Board Date (L) and Loaded On Board Time (L) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Actual event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be LOAD and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop must be the PORT_OF_LOADING and the Port/Terminal of Load Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Load field or set through previous stop processing.

  • Discharged Date (D) and Discharged Time (D) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Actual event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be DISCHARGE and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop must be the PORT_OF_DISCHARGE and the Port/Terminal of Discharge Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Discharge field or set through previous stop processing.

  • Available Date (D) and Available Time (D) field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Actual event and stopId) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • The event type must be AVAILABLE and the fields must not have a value set. Field values are only updated when they contain no value.

    • The stop must be the PORT_OF_DISCHARGE and the Port/Terminal of Discharge Timezone must be set on the container.

      • This timezone may be derived from the Port/Terminal of Discharge field or set through previous stop processing.

  • Container Status and Container Status Comments field values are only set based on the following criteria.

    • Only one container must match on the first, second, and third (for Actual event) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • If no third level matching occurs, each first and second level matching container is set with the event type.

    • The event type must be one of the types below. The event dateTime in the tracking packet must have a value for the event.

      • ARRIVAL_AT_STOP

      • DEPARTURE_FROM_STOP

      • GATE_IN_FULL

      • GATE_IN_EMPTY

      • GATE_OUT_EMPTY

      • GATE_OUT_FULL

      • LOAD

      • DISCHARGE

      • AVAILABLE

  • The Container Tracking field is set to Off based on the following criteria.

    • Only one container is set when matching on the first, second, and third (for Actual event) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

    • If no third level matching occurs, Tracking is set to Off for each first and second level matching container.

    • The event type must be one of the types below.

      • TRACKING_END_DUE_TO_TIMEOUT

      • TRACKING_END_BY_USER

      • TRACKING_COMPLETE

      • TRACKING_STOP

  • Container Geolocation and Geolocation as of field values are only set based on the following criteria.

    • Only one container must match by Container Number on the first, second, and third (for position) level matching as outlined above.

      • If multiple containers are matched and cannot be further matched to a single container, the update is not processed.

Note: In some cases multiple container events are received in a single tracking event packet. All events are processed with the most recent event responsible for setting the Container Status field value. When a packet includes an event to end the tracking session, all events in for the container in the packet are processed and stored on the container record.

Sample Tracking Update Push Notification

{
    "shipment": {
        "id": "30e6093a-f9a7-423c-9e94-f307c58a1de6",
        "createdDateTime": "2026-03-03T19:31:20+0000",
        "identifiers": [
            {
                "type": "CARRIER_MASTER_ID",
                "value": "ZBFWLKGF"
            },
            {
                "type": "CARRIER_NAME",
                "value": "MSC-MEDITERRANEAN SHIPPING COMPANY S A"
            },
            {
                "type": "CARRIER_SCAC",
                "value": "MSCU"
            },
            {
                "type": "CONTAINER_ID",
                "value": "FCIU5942443"
            },
            {
                "type": "CONTAINER_TYPE",
                "value": "22GP"
            }
        ],
        "shipmentShareLink": "https://movement.project44.com/share/a0249d72-ea56-4900-96b3-535c28fd351d",
        "lastModifiedDateTime": "2026-03-03T19:47:47+0000",
        "routeInfo": {
            "stops": [
                {
                    "id": "71d8437b-2f56-3872-9156-ea0afaa2a38a",
                    "type": "PICKUP",
                    "location": {
                        "id": "16d9f7df-62d9-4cf5-be79-673f63f1dae6",
                        "name": "Jeddah",
                        "identifiers": [
                            {
                                "type": "PORT_UN_LOCODE",
                                "value": "SAJED"
                            }
                        ],
                        "address": {
                            "city": "Jeddah",
                            "state": "Mecca Region",
                            "country": "SA"
                        },
                        "coordinates": {
                            "latitude": 21.498985,
                            "longitude": 39.150375
                        },
                        "timeZone": "Asia/Riyadh"
                    }
                },
                {
                    "id": "e0aee49c-f13b-3fbb-af10-25cbcf237f5b",
                    "type": "PORT_OF_LOADING",
                    "location": {
                        "id": "16d9f7df-62d9-4cf5-be79-673f63f1dae6",
                        "name": "Jeddah",
                        "identifiers": [
                            {
                                "type": "PORT_UN_LOCODE",
                                "value": "SAJED"
                            }
                        ],
                        "address": {
                            "city": "Jeddah",
                            "state": "Mecca Region",
                            "country": "SA"
                        },
                        "coordinates": {
                            "latitude": 21.498985,
                            "longitude": 39.150375
                        },
                        "timeZone": "Asia/Riyadh"
                    }
                },
                {
                    "id": "be4c9beb-6b5b-32f7-9d42-6449e74e5cfe",
                    "type": "TRANSSHIPMENT_PORT",
                    "location": {
                        "id": "a3ce0156-2457-4d88-9b66-91a867285b77",
                        "name": "Barcelona",
                        "identifiers": [
                            {
                                "type": "PORT_UN_LOCODE",
                                "value": "ESBCN"
                            }
                        ],
                        "address": {
                            "city": "Barcelona",
                            "state": "Catalonia",
                            "country": "ES"
                        },
                        "coordinates": {
                            "latitude": 41.35,
                            "longitude": 2.166667
                        },
                        "timeZone": "Europe/Madrid"
                    }
                },
                {
                    "id": "25c38ad7-32c8-337a-96f1-2337e2b68b2a",
                    "type": "PORT_OF_DISCHARGE",
                    "location": {
                        "id": "c96717c6-b201-4511-8462-e70a8aac15ab",
                        "name": "Houston",
                        "identifiers": [
                            {
                                "type": "PORT_UN_LOCODE",
                                "value": "USHOU"
                            }
                        ],
                        "address": {
                            "city": "Houston",
                            "state": "Texas",
                            "country": "US"
                        },
                        "coordinates": {
                            "latitude": 29.702135,
                            "longitude": -95.036545
                        },
                        "timeZone": "America/Chicago",
                        "masterLocationId": "eab63e0c-3d50-4e8e-b5f4-1b204987d0b0"
                    }
                }
            ],
            "routeSegments": [
                {
                    "id": "2a68be91-ad85-348c-945c-ada0b18f734f",
                    "fromStopId": "71d8437b-2f56-3872-9156-ea0afaa2a38a",
                    "toStopId": "e0aee49c-f13b-3fbb-af10-25cbcf237f5b",
                    "transportationMode": "UNKNOWN"
                },
                {
                    "id": "115c75bb-aee5-3b79-9e23-814e40017af6",
                    "fromStopId": "e0aee49c-f13b-3fbb-af10-25cbcf237f5b",
                    "toStopId": "be4c9beb-6b5b-32f7-9d42-6449e74e5cfe",
                    "transportationMode": "OCEAN",
                    "identifiers": [
                        {
                            "type": "CARRIER_MASTER_ID",
                            "value": "ZBFWLKGF"
                        },
                        {
                            "type": "CARRIER_NAME",
                            "value": "MSC-MEDITERRANEAN SHIPPING COMPANY S A"
                        },
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        },
                        {
                            "type": "VESSEL_IMO",
                            "value": "9974503"
                        },
                        {
                            "type": "VESSEL_NAME",
                            "value": "MSC GHANA"
                        },
                        {
                            "type": "VESSEL_P44_ID",
                            "value": "66edf366-5795-4fb6-b29d-f00e300c735e"
                        },
                        {
                            "type": "VOYAGE_NUMBER",
                            "value": "OW601R"
                        }
                    ]
                },
                {
                    "id": "c460ecd8-e852-3c34-aedb-1ee23b2a710c",
                    "fromStopId": "be4c9beb-6b5b-32f7-9d42-6449e74e5cfe",
                    "toStopId": "25c38ad7-32c8-337a-96f1-2337e2b68b2a",
                    "transportationMode": "OCEAN",
                    "identifiers": [
                        {
                            "type": "CARRIER_MASTER_ID",
                            "value": "ZBFWLKGF"
                        },
                        {
                            "type": "CARRIER_NAME",
                            "value": "MSC-MEDITERRANEAN SHIPPING COMPANY S A"
                        },
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        },
                        {
                            "type": "VESSEL_IMO",
                            "value": "9480186"
                        },
                        {
                            "type": "VESSEL_NAME",
                            "value": "MSC BARCELONA"
                        },
                        {
                            "type": "VESSEL_P44_ID",
                            "value": "ca5f6d14-79f7-4e69-9eb5-198b90e8e4fe"
                        },
                        {
                            "type": "VOYAGE_NUMBER",
                            "value": "MG609E"
                        }
                    ]
                }
            ]
        },
        "relatedShipments": [
            {
                "id": "2de5e646-60e0-4934-910d-fc6205cd399c",
                "createdDateTime": "2026-03-03T19:31:16+0000",
                "identifiers": [
                    {
                        "type": "BILL_OF_LADING",
                        "value": "MEDUFF254439"
                    },
                    {
                        "type": "BOOKING_NUMBER",
                        "value": "EBKG15106940"
                    },
                    {
                        "type": "CARRIER_MASTER_ID",
                        "value": "ZBFWLKGF"
                    },
                    {
                        "type": "CARRIER_NAME",
                        "value": "MSC-MEDITERRANEAN SHIPPING COMPANY S A"
                    },
                    {
                        "type": "CARRIER_SCAC",
                        "value": "MSCU"
                    },
                    {
                        "type": "CONTAINER_ID",
                        "value": "FCIU5942443"
                    },
                    {
                        "type": "CONTAINER_TYPE",
                        "value": "22GP"
                    }
                ],
                "shipmentShareLink": "https://movement.project44.com/share/e9cfd87b-66e8-42bc-90d9-b1a3f5547d60",
                "lastModifiedDateTime": "2026-03-03T19:47:44+0000"
            }
        ]
    },
    "states": [
        {
            "type": "IN_TRANSIT",
            "startDateTime": "2025-12-17T13:48:00+0000",
            "endDateTime": "2025-12-28T11:28:00+0000",
            "stopId": "71d8437b-2f56-3872-9156-ea0afaa2a38a",
            "routeSegmentId": "2a68be91-ad85-348c-945c-ada0b18f734f"
        },
        {
            "type": "AT_STOP",
            "startDateTime": "2025-12-28T11:28:00+0000",
            "endDateTime": "2026-01-05T12:12:00+0000",
            "stopId": "e0aee49c-f13b-3fbb-af10-25cbcf237f5b"
        },
        {
            "type": "IN_TRANSIT",
            "startDateTime": "2026-01-05T12:12:00+0000",
            "endDateTime": "2026-01-27T22:36:00+0000",
            "stopId": "e0aee49c-f13b-3fbb-af10-25cbcf237f5b",
            "routeSegmentId": "115c75bb-aee5-3b79-9e23-814e40017af6"
        },
        {
            "type": "AT_STOP",
            "startDateTime": "2026-01-27T22:36:00+0000",
            "endDateTime": "2026-02-03T08:24:00+0000",
            "stopId": "be4c9beb-6b5b-32f7-9d42-6449e74e5cfe",
            "routeSegmentId": "115c75bb-aee5-3b79-9e23-814e40017af6"
        },
        {
            "type": "IN_TRANSIT",
            "startDateTime": "2026-02-03T08:24:00+0000",
            "stopId": "be4c9beb-6b5b-32f7-9d42-6449e74e5cfe",
            "routeSegmentId": "c460ecd8-e852-3c34-aedb-1ee23b2a710c"
        }
    ],
    "events": [
        {
            "dateTime": "2025-12-17T13:48:00+0000",
            "receivedDateTime": "2026-03-03T19:47:00+0000",
            "id": "cc9a1335-479b-4bf5-b2a0-16e140bc2f8b",
            "type": "GATE_OUT_EMPTY",
            "stopId": "71d8437b-2f56-3872-9156-ea0afaa2a38a",
            "routeSegmentId": "2a68be91-ad85-348c-945c-ada0b18f734f",
            "dateTimes": [
                {
                    "type": "ACTUAL",
                    "dateTime": "2025-12-17T13:48:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:00+0000",
                    "source": "CARRIER",
                    "sourceIdentifiers": [
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                }
            ],
            "details": {
                "ocean": {
                    "code": "GATE_OUT_EMPTY_CONTAINER_AT_TERMINAL"
                }
            }
        },
        {
            "dateTime": "2025-12-28T11:28:00+0000",
            "receivedDateTime": "2026-03-03T19:47:00+0000",
            "id": "41dbe6ce-b8a7-46da-80ea-13ede83760d1",
            "type": "GATE_IN_FULL",
            "stopId": "e0aee49c-f13b-3fbb-af10-25cbcf237f5b",
            "dateTimes": [
                {
                    "type": "ACTUAL",
                    "dateTime": "2025-12-28T11:28:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:00+0000",
                    "source": "CARRIER",
                    "sourceIdentifiers": [
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                }
            ],
            "details": {
                "ocean": {
                    "code": "GATE_IN_FULL_AT_PORT_OF_LOADING"
                }
            }
        },
        {
            "dateTime": "2026-01-04T22:10:00+0000",
            "receivedDateTime": "2026-03-03T19:47:00+0000",
            "id": "2f2c5f7f-a354-484f-bca0-c9197a54396c",
            "type": "LOAD",
            "stopId": "e0aee49c-f13b-3fbb-af10-25cbcf237f5b",
            "routeSegmentId": "115c75bb-aee5-3b79-9e23-814e40017af6",
            "dateTimes": [
                {
                    "type": "ACTUAL",
                    "dateTime": "2026-01-04T22:10:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:00+0000",
                    "source": "CARRIER",
                    "sourceIdentifiers": [
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                }
            ],
            "details": {
                "ocean": {
                    "code": "LOAD_ONTO_VESSEL_AT_PORT_OF_LOADING"
                }
            }
        },
        {
            "dateTime": "2026-01-05T12:12:00+0000",
            "receivedDateTime": "2026-03-03T19:47:00+0000",
            "id": "fc3fab10-9c21-4ff3-91e4-a37beef1e17e",
            "type": "DEPARTURE_FROM_STOP",
            "stopId": "e0aee49c-f13b-3fbb-af10-25cbcf237f5b",
            "routeSegmentId": "115c75bb-aee5-3b79-9e23-814e40017af6",
            "dateTimes": [
                {
                    "type": "ACTUAL",
                    "dateTime": "2026-01-05T12:12:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:00+0000",
                    "source": "CARRIER",
                    "sourceIdentifiers": [
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                }
            ],
            "details": {
                "ocean": {
                    "code": "VESSEL_DEPARTURE_FROM_PORT_OF_LOADING"
                }
            }
        },
        {
            "dateTime": "2026-01-27T22:36:00+0000",
            "receivedDateTime": "2026-03-03T19:47:00+0000",
            "id": "1daa987e-d47b-404b-9cad-0730bd8d1912",
            "type": "ARRIVAL_AT_STOP",
            "stopId": "be4c9beb-6b5b-32f7-9d42-6449e74e5cfe",
            "routeSegmentId": "115c75bb-aee5-3b79-9e23-814e40017af6",
            "dateTimes": [
                {
                    "type": "ACTUAL",
                    "dateTime": "2026-01-27T22:36:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:00+0000",
                    "source": "CARRIER",
                    "sourceIdentifiers": [
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                }
            ],
            "details": {
                "ocean": {
                    "code": "VESSEL_ARRIVAL_AT_TRANSSHIPMENT_PORT"
                }
            }
        },
        {
            "dateTime": "2026-01-28T05:18:00+0000",
            "receivedDateTime": "2026-03-03T19:47:00+0000",
            "id": "7338bfd8-c319-4490-bfdc-0d4219d8d2f0",
            "type": "DISCHARGE",
            "stopId": "be4c9beb-6b5b-32f7-9d42-6449e74e5cfe",
            "routeSegmentId": "115c75bb-aee5-3b79-9e23-814e40017af6",
            "dateTimes": [
                {
                    "type": "ACTUAL",
                    "dateTime": "2026-01-28T05:18:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:00+0000",
                    "source": "CARRIER",
                    "sourceIdentifiers": [
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                }
            ],
            "details": {
                "ocean": {
                    "code": "DISCHARGE_FROM_VESSEL_AT_TRANSSHIPMENT_PORT"
                }
            }
        },
        {
            "dateTime": "2026-02-02T23:36:00+0000",
            "receivedDateTime": "2026-03-03T19:47:00+0000",
            "id": "ef06adb2-f516-4324-a31f-00d2a5d377ec",
            "type": "LOAD",
            "stopId": "be4c9beb-6b5b-32f7-9d42-6449e74e5cfe",
            "routeSegmentId": "c460ecd8-e852-3c34-aedb-1ee23b2a710c",
            "dateTimes": [
                {
                    "type": "ACTUAL",
                    "dateTime": "2026-02-02T23:36:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:00+0000",
                    "source": "CARRIER",
                    "sourceIdentifiers": [
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                }
            ],
            "details": {
                "ocean": {
                    "code": "LOAD_ONTO_VESSEL_AT_TRANSSHIPMENT_PORT"
                }
            }
        },
        {
            "dateTime": "2026-02-03T08:24:00+0000",
            "receivedDateTime": "2026-03-03T19:47:00+0000",
            "id": "4ed07e70-a8d7-430d-9220-672b7f210f5a",
            "type": "DEPARTURE_FROM_STOP",
            "stopId": "be4c9beb-6b5b-32f7-9d42-6449e74e5cfe",
            "routeSegmentId": "c460ecd8-e852-3c34-aedb-1ee23b2a710c",
            "dateTimes": [
                {
                    "type": "ACTUAL",
                    "dateTime": "2026-02-03T08:24:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:00+0000",
                    "source": "CARRIER",
                    "sourceIdentifiers": [
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                }
            ],
            "details": {
                "ocean": {
                    "code": "VESSEL_DEPARTURE_FROM_TRANSSHIPMENT_PORT"
                }
            }
        },
        {
            "dateTime": "2026-03-03T19:47:00+0000",
            "receivedDateTime": "2026-03-03T19:47:00+0000",
            "id": "04e48469-e190-439a-879f-bd9e99e15ab4",
            "type": "TRACKING_START",
            "dateTimes": [
                {
                    "type": "ACTUAL",
                    "dateTime": "2026-03-03T19:47:00+0000",
                    "source": "CARRIER",
                    "sourceIdentifiers": [
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        },
                        {
                            "type": "CONTAINER_ID",
                            "value": "FCIU5942443"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                }
            ]
        },
        {
            "receivedDateTime": "2026-03-03T19:47:00+0000",
            "id": "9723fac1-284a-43cb-aaf2-a9d16c76454b",
            "type": "ARRIVAL_AT_STOP",
            "stopId": "25c38ad7-32c8-337a-96f1-2337e2b68b2a",
            "routeSegmentId": "c460ecd8-e852-3c34-aedb-1ee23b2a710c",
            "estimateDateTime": "2026-03-07T12:00:00+0000",
            "estimateLastCalculatedDateTime": "2026-03-03T19:47:43+0000",
            "plannedDateTime": "2026-03-07T12:00:00+0000",
            "dateTimes": [
                {
                    "type": "PLANNED",
                    "dateTime": "2026-03-07T12:00:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:00+0000",
                    "source": "CARRIER",
                    "sourceIdentifiers": [
                        {
                            "type": "CARRIER_SCAC",
                            "value": "MSCU"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                },
                {
                    "type": "ESTIMATE",
                    "dateTime": "2026-03-07T12:00:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:43+0000",
                    "source": "P44",
                    "sourceIdentifiers": [
                        {
                            "type": "REFERENCE_NUMBER",
                            "value": "3"
                        }
                    ],
                    "selected": true,
                    "sequence": 1
                }
            ],
            "details": {
                "ocean": {
                    "code": "VESSEL_ARRIVAL_AT_PORT_OF_DISCHARGE"
                }
            }
        },
        {
            "id": "7c950a1e-1469-4f40-9b37-9669ab62903e",
            "type": "DISCHARGE",
            "stopId": "25c38ad7-32c8-337a-96f1-2337e2b68b2a",
            "routeSegmentId": "c460ecd8-e852-3c34-aedb-1ee23b2a710c",
            "estimateDateTime": "2026-03-08T10:10:00+0000",
            "estimateLastCalculatedDateTime": "2026-03-03T19:47:43+0000",
            "dateTimes": [
                {
                    "type": "ESTIMATE",
                    "dateTime": "2026-03-08T10:10:00+0000",
                    "lastModifiedDateTime": "2026-03-03T19:47:43+0000",
                    "source": "P44",
                    "sourceIdentifiers": [
                        {
                            "type": "REFERENCE_NUMBER",
                            "value": "3"
                        }
                    ],
                    "selected": true
                }
            ],
            "details": {
                "ocean": {
                    "code": "DISCHARGE_FROM_VESSEL_AT_PORT_OF_DISCHARGE"
                }
            }
        }
    ],
    "positions": [
        {
            "dateTime": "2025-12-17T13:48:00+0000",
            "routeSegmentId": "2a68be91-ad85-348c-945c-ada0b18f734f",
            "latitude": 21.498985,
            "longitude": 39.150375
        },
        {
            "dateTime": "2025-12-28T11:28:00+0000",
            "routeSegmentId": "2a68be91-ad85-348c-945c-ada0b18f734f",
            "latitude": 21.498985,
            "longitude": 39.150375
        },
        {
            "dateTime": "2026-01-04T22:10:00+0000",
            "routeSegmentId": "2a68be91-ad85-348c-945c-ada0b18f734f",
            "latitude": 21.498985,
            "longitude": 39.150375
        },
        {
            "dateTime": "2026-01-05T12:12:00+0000",
            "routeSegmentId": "2a68be91-ad85-348c-945c-ada0b18f734f",
            "latitude": 21.498985,
            "longitude": 39.150375
        },
        {
            "dateTime": "2026-01-27T22:36:00+0000",
            "routeSegmentId": "115c75bb-aee5-3b79-9e23-814e40017af6",
            "latitude": 41.35,
            "longitude": 2.166667
        },
        {
            "dateTime": "2026-01-28T05:18:00+0000",
            "routeSegmentId": "115c75bb-aee5-3b79-9e23-814e40017af6",
            "latitude": 41.35,
            "longitude": 2.166667
        },
        {
            "dateTime": "2026-02-02T23:36:00+0000",
            "routeSegmentId": "115c75bb-aee5-3b79-9e23-814e40017af6",
            "latitude": 41.35,
            "longitude": 2.166667
        },
        {
            "dateTime": "2026-02-03T08:24:00+0000",
            "routeSegmentId": "115c75bb-aee5-3b79-9e23-814e40017af6",
            "latitude": 41.35,
            "longitude": 2.166667
        }
    ]
}

The following TMS fields may update based on the values received from Project44.

Object

Field

Type

Project44 Unified Tracking Field

Container

Actual Arrival Date (D)

Date

events → dateTime

Container

Actual Arrival Time (D)

Time

events → dateTime

Container

Actual Departure Date (L)

Date

events → dateTime

Container

Actual Departure Time (L)

Time

events → dateTime

Container

Available Date (D)

Date

events → dateTime

Container

Available Time (D)

Time

events → dateTime

Container

Booking Number

Formula (Text)

identifiers → value,

identifiers → type is "BOOKING_NUMBER"

Container

Container Number

Text(80)

identifiers → value,

identifiers → type is "CONTAINER_ID"

Container

Container Status

Picklist

events → type

Container

Container Status Comments

Text Area(255)

events → description

Container

Discharged Date (D)

Date

events → dateTime

Container

Discharged Time (D)

Time

events → dateTime

Container

Estimated Arrival Date (D)

Date

events → estimateDateTime

Container

Estimated Arrival Time (D)

Time

events → estimateDateTime

Container

Estimated Departure Date (L)

Date

events → estimateDateTime

Container

Estimated Departure Time (L)

Time

events → estimateDateTime

Container

Gated In Empty Date (D)

Date

events → dateTime

Container

Gated In Empty Time (D)

Time

events → dateTime

Container

Gated In Full Date (L)

Date

events → dateTime

Container

Gated In Full Time (L)

Time

events → dateTime

Container

Gated Out Empty Date (L)

Date

events → dateTime

Container

Gated Out Empty Time (L)

Time

events → dateTime

Container

Gated Out Full Date (D)

Date

events → dateTime

Container

Gated Out Full Time (D)

Time

events → dateTime

Container

Geolocation

Geolocation

positions → latitude, longitude

Container

Geolocation as of

Date/Time

positions → dateTime

Container

Loaded On Board Date (L)

Date

events → dateTime

Container

Loaded On Board Time (L)

Time

events → dateTime

Container

Master Bill of Lading Number

Formula (Text)

identifiers → value,

identifiers → type is "BILL_OF_LADING"

Container

Port/Terminal of Discharge

Lookup(Account)

shipment.routeInfo.stops.location.identifiers → value

Container

Port/Terminal of Load

Lookup(Account)

shipment.routeInfo.stops.location.identifiers → value

Container

Route Information

Long Text Area(500)

shipment.routeInfo.stops → type, shipment.routeInfo.stops.location → name - PORT_UN_LOCODE

Container

Scheduled Arrival Date (D)

Date

events → plannedDateTime

Container

Scheduled Arrival Time (D)

Time

events → plannedDateTime

Container

Scheduled Departure Date (L)

Date

events → plannedDateTime

Container

Scheduled Departure Time (L)

Time

events → plannedDateTime

Container

Tracking

Picklist

events → Off, when events → type is TRACKING_END_DUE_TO_TIMEOUT, TRACKING_END_BY_USER, TRACKING_COMPLETE, or TRACKING_STOP

Container

Tracking Number

Text(40) (External ID)

shipment → id

Container

Vessel

Text(100)

identifiers → value

identifiers → type is "VESSEL_NAME"

Integration Field Mapping

The following table contains fields that are sent to and received from Project44 throughout container tracking.

Object

Field

Type

Project44 Field

Container

Actual Arrival Date (D)

Date

events → dateTime

Container

Actual Arrival Time (D)

Time

events → dateTime

Container

Actual Departure Date (L)

Date

events → dateTime

Container

Actual Departure Time (L)

Time

events → dateTime

Container

Available Date (D)

Date

events → dateTime

Container

Available Time (D)

Time

events → dateTime

Container

Booking Number

Formula (Text)

identifiers → value,

identifiers → type is "BOOKING_NUMBER"

Container

Container Number

Text(80)

identifiers → value,

identifiers → type is "CONTAINER_ID"

Container

Container Status

Picklist

events → type

Container

Container Status Comments

Text Area(255)

events → description

Container

Discharged Date (D)

Date

events → dateTime

Container

Discharged Time (D)

Time

events → dateTime

Container

Estimated Arrival Date (D)

Date

events → estimateDateTime

Container

Estimated Arrival Time (D)

Time

events → estimateDateTime

Container

Estimated Departure Date (L)

Date

events → estimateDateTime

Container

Estimated Departure Time (L)

Time

events → estimateDateTime

Container

Gated In Empty Date (D)

Date

events → dateTime

Container

Gated In Empty Time (D)

Time

events → dateTime

Container

Gated In Full Date (L)

Date

events → dateTime

Container

Gated In Full Time (L)

Time

events → dateTime

Container

Gated Out Empty Date (L)

Date

events → dateTime

Container

Gated Out Empty Time (L)

Time

events → dateTime

Container

Gated Out Full Date (D)

Date

events → dateTime

Container

Gated Out Full Time (D)

Time

events → dateTime

Container

*Geolocation

Geolocation

positions → latitude, longitude

Container

Geolocation as of

Date/Time

positions → dateTime

Container

Loaded On Board Date (L)

Date

events → dateTime

Container

Loaded On Board Time (L)

Time

events → dateTime

Container

Master Bill of Lading Number

Formula (Text)

identifiers → value,

identifiers → type is "BILL_OF_LADING"

Container

**Port/Terminal of Discharge

Lookup(Account)

shipment.routeInfo.stops.location.identifiers → value

Container

**Port/Terminal of Load

Lookup(Account)

shipment.routeInfo.stops.location.identifiers → value

Container

**Route Information

Long Text Area(500)

shipment.routeInfo.stops → type, shipment.routeInfo.stops.location → name

Container

SCAC

Text(6)

identifiers → value,

identifiers → type is "CARRIER_SCAC"

Container

Scheduled Arrival Date (D)

Date

events → plannedDateTime

Container

Scheduled Arrival Time (D)

Time

events → plannedDateTime

Container

Scheduled Departure Date (L)

Date

events → plannedDateTime

Container

Scheduled Departure Time (L)

Time

events → plannedDateTime

Container

Tracking

Picklist

events → Off, when events → type is TRACKING_END_DUE_TO_TIMEOUT, TRACKING_END_BY_USER, TRACKING_COMPLETE, or TRACKING_STOP

Container

Tracking Number

Text(40) (External ID)

shipment → id

Container

Tracking Provider

Text(40)

set to Project44 Tracking by the TMS

Container

Vessel

Text(100)

identifiers → value

identifiers → type is "VESSEL_NAME"

*The Geolocation fields for a container are only set when matched by first, second, or third (by position) matching as outlined above.

**The UN Port/LOCODE codes are added to the Route Information field.

Container Status Events

The following Events are received from Project44 and cause the specified actions within the TMS.

Project44 Event

TMS Action

ARRIVAL_AT_STOP

AVAILABLE

DEPARTURE_FROM_STOP

DISCHARGE

GATE_IN_EMPTY

GATE_IN_FULL

GATE_OUT_EMPTY

GATE_OUT_FULL

LOAD

  • Populates the Container Status field with the event name.

  • Updates relevant Container date and time field values.

BAD_ORDER

BAD_ORDER_RELEASE

CARRIER_HOLD

CLEAN_TRUCK_FEE_CLEARANCE

CLEAN_TRUCK_FEE_HOLD

CONSIGNEE_NOTIFY

COST_UPDATE

CUSTOMS_CLEARANCE

CUSTOMS_DOCS_FILING

CUSTOMS_HOLD

CUSTOMS_TRANSIT_DOCS_CLOSED

CUSTOMS_TRANSIT_DOCS_ISSUED

DELAYED

DELIVERY

DELIVERY_MISSED

DISPATCH

DOCUMENT_ADD

DOCUMENT_REMOVE

DRIVER_DENY_TRACKING

ENTERED_FINAL_GEOFENCE

ENTERED_GEOFENCE

ENTERED_INNER_GEOFENCE

ENTERED_OUTER_GEOFENCE

EXCEPTION

EXCEPTION_DELAYED

EXCEPTION_DELIVERY_MISSED

EXCEPTION_HELD

EXCEPTION_LATE_DEPARTURE

EXCEPTION_MISSED_CONNECTION

EXCEPTION_PICKUP_MISSED

EXITED_FINAL_GEOFENCE

EXITED_GEOFENCE

EXITED_INNER_GEOFENCE

EXITED_OUTER_GEOFENCE

FLIGHT_BOOKING

FREIGHT_ON_HAND

GATE_IN

GATE_OUT

HANDOVER

HELD

IDLE

INFO

ISSUE_FREIGHT_BILL

LAST_FREE_DAY

LOAD_ONTO_VEHICLE

MANIFEST

MISSING_CARRIER

MISSING_EQUIPMENT_IDENTIFIER

OTHER_HOLD

OTHER_HOLD_CLEARANCE

OUT_FOR_DELIVERY

PICKED_UP

PICKUP_MISSED

READY_FOR_CARRIAGE

RECEIVE_FROM_CARRIER

RECEIVE_FROM_SHIPPER

RELEASE

REMOVE_FROM_BOOKING

RETURN_TO_SENDER

ROLLED_OVER

SEAL_INSPECTION

SEAL_REMOVAL

SEAL_RESEAL

SHARING_STOPPED

STRIP

STUFF

SURVEY

TERMINAL_CLEARANCE

TERMINAL_HOLD

TRACKING_FAILED

TRACKING_INITIATE

TRACKING_START

TRAFFIC_MITIGATION_FEE_CLEARANCE

TRAFFIC_MITIGATION_FEE_HOLD

UNAUTHORIZED

UNKNOWN

UNKNOWN_EQUIPMENT_IDENTIFIER

UNLOAD_FROM_VEHICLE

WARNING

  • Populates the Container Status field with the event name.

TRACKING_COMPLETE

TRACKING_END_BY_USER

TRACKING_END_DUE_TO_TIMEOUT

TRACKING_STOP

  • Populates the Container Status field with the event name.

  • Container tracking session is ended.

Troubleshooting

Retry Failed: Invalid Tracking Identifiers: fcc03378-38ea-45b4-982e-d79059d2e1f9/null/null

When tracking a container, the above error is received.

Issue

Container Tracking data is not sent correctly from Project44. The SCAC and Container Number are confirmed and entered correctly. Tracking is enabled. Dates and Times of arrival/departures are included on the Container.

Resolution

This invalid tracking identifiers error is generated when the Container Tracking is already initiated in a different environment. Disable tracking in the other environment before beginning tracking in the new environment. Check the sandbox for Containers with the Tracking ID from the error message. (ex: fcc03378-38ea-45b4-982e-d79059d2e1f9)

Each Port must have a Seaport TMS type Account. If the Account is populated with the correct UN Code field, the Account automatically pulls in the container. If this field is not populated, the Account must be manually added to the Port/Terminal of Load and Port/Terminal of Discharge fields on the Container. If these fields are not populated with an Account, all dates and times are not added to the container.