OpenTrack ocean tracking provides real-time container tracking from global ocean carriers, AIS (Automatic Identification System) signals, vessel schedules, terminal and rail carrier systems, third party providers, and other proprietary sources. The Revenova integration with OpenTrack provides standardized ocean container tracking milestone information for enhanced visibility in the TMS. Container tracking is initiated at the Container record level, allowing for ocean container tracking independent of Load tracking. For example, track a container with OpenTrack 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.
Setup
Experience Cloud Site Setup
OpenTrack provides “push” updates to the TMS via a sites-based API. This service requires a webhook to send container tracking information into the TMS. Create an Experience Cloud API Site to accept inbound API traffic.
Create a Salesforce Site for API Guest User Access.
Set the public access for the Site.
Activate and Publish the Site.
Enter the API URL into the field for Inbound API Community URL under TMS Admin, in the Configuration section.
The Salesforce-generated API Experience Cloud Site URL is case sensitive.
Enter Credentials
Enable the OpenTrack integration by completing the following steps.
Navigate to TMS Admin.
Select Credentials.
Select the Global Services tab.
Find OpenTrack in the list and open the card.
Check the Enabled box field.
The Tracking field may be set to On when the OpenTrack credentials are not Enabled. No actions occur and no warning is shown.
If required, select the Master Bill Tracking box to track all containers associated with a Master Bill of Lading.
To override this behavior for a specific container, select the Individual Container Tracking field on that container.
When Master Bill Tracking is not selected, the Individual Container Tracking field does not impact OpenTrack integration behavior. Containers are tracked individually rather than by Master Bill of Lading.
Enter the OpenTrack API Key into the Password 1 text field.
Any text may be entered into the User ID field. The field is not used by the integration.
Click the Save button.
Select the OpenTrack link again to open the card.
Click the Register OpenTrack Webhook button.
The webhook identifier is stored in the Password 2 field.
OpenTrack does not send webhook events when a webhook is not registered.
Valid credentials are required from an OpenTrack subscription. See examples in the table below.
User ID | Password 1 | Password 2 | Customer Number |
|---|---|---|---|
Any text, not used by integration. | Required (API Key provided by OpenTrack) | Read Only, webhook ID |
Remote Site Settings
Upgrading from previous versions of the TMS may have outdated Remote Site information. Check that the Remote Site Settings for the OpenTrack integration URL are current.
Two Remote Site Settings are likely included in an org. The Test URL is only required when the Test Mode field is Checked on the credential card. This is likely only required in a sandbox.
Click the Setup gear icon in the top right corner.
From the drop-down, click Setup.
In the Quick Find Toolbar type Remote Site Settings and click the link.
From the list of remote sites find OpenTrack and click the Edit link.
Update the Remote Site URL to match the Service URL below:
Service URL: https://api.opentrack.co
Test Service URL: https://api.opentrack.co
Additional Setup
Only one container tracking integration may be used at a time. Confirm the Project44 Unified Container Tracking feature is not enabled on the Project44 Tracking credential card.
Enable Container information on the Load Configuration Lightning Web Component by Mode.
Navigate to TMS Admin → Modes.
Select the appropriate Mode type for containers.
Check the Show Containers on Load Creation field.
Click Save.
Repeat the steps above for each Mode type as necessary.
OpenTrack sends currency information in USD. For multi-currency orgs, the currency is converted in the TMS to the currency of the container, otherwise to the User’s default currency code. See Hold information for the time used for currency conversions.
Platform Events are used for inbound and outbound requests and when failures occur, a Queued Transaction record is created with details of the failure.
Page Layouts
Assign the packaged Container - Revenova Default page layout for User profiles using the OpenTrack integration.
Select Setup → Object Manager.
Find and choose the Container object.
Select the Page Layouts tab.
Click the Page Layout Assignment button.
Click the Edit Assignment button.
Select all of the profiles and from the Page Layout to Use dropdown, choose Container - Revenova Default.
Click Save.
The Container Events and Holds related lists are configured with TMS-defined sorting. This sorting may not be modified and applies across all Container records.
Container Events are sorted by Event Date in descending order with the most recent event first.
When multiple events occur on the same Event Date, the relative order is not guaranteed.
Holds are sorted by Reported Datetime in ascending order with the earliest first.
For orgs using a custom Container Lightning Record Page (LRP), add the related lists for Container Events and Holds to the Container LRP. If desired, add conditional logic to only display Container fields that are applicable to the OpenTrack integration. See the reference table below for fields used by the integration.
Use the Container Trade Type field to filter list views for import or export team workflows or conditional field filtering for page layouts.
Note: OpenTrack does not return values to populate the Last Free Date - Detention (L) and Last Free Time - Detention (L) fields for export workflows.
Containers must have a valid 11 character length Container Number field value. An LRP error is presented when trying to save an invalid Container Number field value.
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, Seaport Terminal, or any custom picklist values containing “seaport.”
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 or times for milestone updates.
Add any missing values to Account Timezone fields as necessary.
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.
It is recommended practice to upload commonly used port locations with the Salesforce data import wizard.
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
Load TMS1
It is recommended to add the Master Bill of Lading Number field to the Load TMS1 field set. The Master Bill of Lading Number is required to initiate a tracking session.
Create Mode-specific field sets as necessary for further customization. For example, TMS1_Drayage.
Objects and Tabs
Container information is managed with the Container, Container Event, Hold, 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.
Confirm that field history tracking is enabled for the Container object, or at least the Geolocation and Geolocation As Of fields.
Add the Containers related list to the Load Lightning Record Page with a Mode-based visibility filter to view container information on relevant Loads.
Container Console
The Container Console Lightning Web Component is available to create or edit Container or Container Event records. Create views for managing Containers and Container Events.

Note that the Container Event Is Estimate field is included in the name for each Event (ESTIMATED or ACTUAL).
The Event Time field for 12:00 A.M. is displayed as 0:00:00 and 12:00 P.M. as 12:00:00 in the Container Console.

Edit the Container or Container Event field with the pencil
icon for the field.
Check multiple Container records and select a field to update with the pencil icon. The option to update the single container or all selected containers is chosen with the checkbox in the edit modal.
If no Container Event record exists for a Container, a new record is created. Changes made to records in the Container Console update the records when saved.
Update Container or Container Event records individually or in bulk. For Container Events, all updates are applied to each selected Container.

Load Map
The Load Map displays container locations and breadcrumb tracking updates received from OpenTrack. Click the Show Container Map button to display container locations.
A single container is displayed on the Load Map at a time. Loads with multiple containers only display the first container ordered by Container Name.

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
The integration with OpenTrack is specific to their ocean container tracking features. If containers are moving via rail as part of an ocean tracking session, updates are included in the information packets sent to the TMS. Containers moving only via domestic rail do not provide status updates to the TMS.
The Container Individual Container Tracking field allows for overriding the Checked Master Bill Tracking field on the credential card. If the Master Bill Tracking field is not Checked on the credential card, all containers are tracked individually.
Begin a tracking session when all of the following fields contain a value. If any of the following Container fields do not have a value an error message is displayed and tracking does not begin.
Master Bill of Lading Number
Container Number
SCAC
Set the Container Tracking field to On to begin the tracking session for a container. Manually set the field or configure a flow.
Tracking sessions are initiated by a Platform Event in the TMS. If the Platform Event fails, a Queued Transaction is created to log the failure.
When container tracking is successfully initiated, the Container Status field is set to Discovering and the Tracking Provider is set to OpenTrack.
OpenTrack makes up to 200 attempts to locate the shipment over the course of two weeks. These attempts occur in logarithmically decreasing values frequently at first, and as time passes, less frequently.
If the container cannot be located in the two week window, the tracking session fails and the Container Status field is updated to Not Found. The failure is stored in the Container Status Comments field.
Container status updates are published to the webhook and are then processed in the TMS as Platform Events.
Tracking Failures
If a tracking session fails to initiate, OpenTrack sends a failure response that sets the Container Status field to Tracking Failed. The Tracking field is set to Off. When a tracking session fails to initiate, OpenTrack includes a reason for the failure. One of two possible failures is returned.
The Master Bill of Loading is not found. (Shipment.Tracking.Failed)
All container records that share the same Master Bill of Lading Number value update with the following field values.
The Container Status field is set to Tracking Failed.
The Container Status Comments field is set to Master Bill of Lading was not found.
The Container is not found for a valid Master Bill of Lading. (Container.Tracking.Failed)
The Container Status field is set to Tracking Failed.
The Container Status Comments field is set to Unable to locate this container on Master BOL.
Any additional tracking failures received from OpenTrack are stored in the Container Status Comments field.
Tracking Completed
Container tracking sessions are completed when OpenTrack sends a tracking stopped even that includes a reason for completion. The following Container fields are updated with the values received from OpenTrack.
Container Status is set to Tracking Stop.
The Container Status Comments field is updated with the completion reason.
Tracking is set to Off.
See the table of tracking completion reasons below.
Note: Tracking sessions cannot be manually ended via the integration as OpenTrack does not offer a stop tracking API call. Contact OpenTrack or visit their website to stop a tracking session. Manually setting the Container Tracking field to Off results in an error.
Container Events
Container Event records store milestone information received from OpenTrack. The following Container Event fields are populated with milestone information.
Event Date
Event Time
The local time of the container milestone event.
Event Type
Informational field.
Geolocation
The latitude and longitude for the milestone.
Is Estimate
When Checked, the milestone is an estimated event.
When Unchecked, the milestone is an actual event.
Location Summary
The location type (Port or Locality), name, and UN/LOCODE values. See the reference below for an example.
OpenTrack does not usually send UN/LOCODE values for a locality. Values are displayed when included with the milestone.
Timezone
The timezone for the milestone is provided in UTC and converted by the TMS.
Container Event records contain a fingerprint that consists of the milestone name and status. The fingerprint is matched against container event information received from OpenTrack to determine if the Container Event is new, is an update to an existing record, or already exists. When Container Event information matches an existing record by fingerprint, the record is updated with new field values. If any portion of the fingerprint is different, the TMS creates a new Container Event record.
The fingerprint prevents creating two Container Events with the same milestone and Is Estimate value. For existing Container Event records, new timestamp or location information updates the record.
See the container milestone references for the list of rail and container milestones sent by OpenTrack.
Holds
OpenTrack sends container hold information in the “push” events that is stored in the TMS. Both active and resolved holds are stored on the Hold record associated with the container. A hold is considered active when it does not have the Resolved Date field populated. Multiple holds may apply to a single container. View each hold from the related list on the Container Lightning Record Page.
Hold records contain a fingerprint that consists of the Hold Type, Code, and Reported Datetime fields. The fingerprint is matched against hold information received from OpenTrack to determine if the hold is new, is an update to an existing record, or already exists. Hold information that matches an existing record by the fingerprint is updated with new field values. If any portion of the fingerprint is different, the TMS creates a new Hold record.
Hold Reported Datetime and Resolved Datetime fields are stored in GMT values and are displayed in the User’s timezone.
Currencies are reported from OpenTrack in USD. Any currency conversions for Holds occur at the following times.
The currency conversion occurs based on the timestamp of the push event for the following fields.
Demurrage Incurred
Demurrage Incurred at Rail
Demurrage Owed
Demurrage Owed at Rail
The currency conversion for the Amount Due field occurs based on the
reportedAtvalue received in the hold push event.
Integration Calls
The following three calls control the flow of container tracking information into the TMS. Additionally, OpenTrack sends “push” events that provide container tracking information for active tracking sessions. Container, Container Event, and Hold object fields are populated with values received from OpenTrack in the following calls.
The “push” events from OpenTrack require a registered webhook. If a webhook is not registered, OpenTrack does not send any events.
Register Webhook
Register webhooks from the OpenTrack credentials card. Click the Register OpenTrack Webhook button when the password information is entered in the password field to initiate the call to OpenTrack.
When no webhook is registered, container tracking sessions may still be initiated. Container information is returned and populated to the appropriate records, but no additional updates are sent from OpenTrack. Register a new webhook to begin receiving container “push” events.
Caution: There is no warning or error message presented when no webhook is registered. If tracking updates are not processing and updating Container records, confirm the webhook is created.
TMS Operation | OpenTrack Endpoint | Request Type | Response |
|---|---|---|---|
| Register a Webhook | POST | 201: Success, 400: Webhook registration error, 429: Usage error, |
The webhook identifier (ID) is stored in the Password 2 field on the credential card. When a value is stored in this field, the webhook is successfully registered. This field is not editable.
Unregister Webhook
Existing webhooks may be unregistered to prevent OpenTrack from sending container updates to the TMS. Use the Unregister OpenTrack Webhook button on the OpenTrack credential card to unregister the webhook.
Security or operational issues may arise that necessitate temporarily unregistering a webhook. For example, a secret key may need to change. In these security scenarios, unregister the webhook with the button on the credential card.
TMS Operation | OpenTrack Endpoint | Request Type | Response |
|---|---|---|---|
| Unregister a Webhook | DELETE | 200: Success, 404: Webhook not found, 429: Usage error, |
The webhook identifier (ID) is stored in the Password 2 field on the credential card. When no value is stored in this field, the webhook is successfully unregistered.
Start Container Tracking
The OpenTrack Track a Container endpoint is called to send container information to OpenTrack to begin collecting location information.
Three Container fields are required to begin a tracking session.
Container Number
Master Bill of Lading Number
SCAC
Note: The Container SCAC field must be set manually. This field is not populated from the the Steamship Line values returned from OpenTrack.
OpenTrack provides tracking information for all containers included on a Master Bill of Lading when the Master Bill Tracking field is Checked on the credential card. Override the Master Bill Tracking setting for an individual container by Checking the Container Individual Container Tracking field. Create a flow or set this field during Load creation to enable single container tracking.
When a container tracking session is started, the response from OpenTrack contains fields that are populated on the applicable Container records. The following Container fields are populated with a TMS Account when the OpenTrack tracking payload location matches an Account in the TMS.
Port/Terminal of Load
Port/Terminal of Discharge
For the Port/Terminal of Load or Discharge to match Accounts in the TMS, the Account fields below must contain the following field values.
TMS Type must contain the word Seaport.
The Timezone must contain a value.
The UN/LOCODE must contain a value.
When the Container Port/Terminal of Discharge or Load fields are already populated on the container record, the corresponding Timezone fields are populated from the Account record.
OpenTrack milestones are included in UTC and the TMS converts them to the local time zone of the event.
Note: If an Account is not populated in the Container Port/Terminal fields, some operational date and time values may not process properly. See the Container Timezone Settings table below for a list of fields that do not process.
Additional fields are set based on the Timezone field for the appropriate Account location. See the table below for a reference of the field impacts.
TMS Operation | OpenTrack Endpoint | Request Type | Response |
|---|---|---|---|
Start new container tracking session | Track a Container | POST | 201: Success, 400: Tracking request rejected, 429: Usage error, |
TMS fields sent in Track a Container Request
Object | Field | Type | OpenTrack Field |
|---|---|---|---|
TMS Admin → Credentials | Master Bill Tracking | True/False | trackOnlyRequestedContainers |
Container | Container Number | Text(80) | customFields → containerReferences |
Container | Master Bill of Lading Number | Formula (Text) | masterBillNumber |
Container | SCAC | Text(6) | scacCode |
Container | SFID | SFID | containerReferences |
Sample Track a Container Request Payload
{
"settings": {
"trackOnlyRequestedContainers": true
},
"scacCode": "ONEY",
"referenceNumbers": {},
"masterBillNumber": "ONEYHANFE1934400",
"customFields": {
"containerReferences": [
"a0icb000004TgegAAC",
"true"
]
}
}Sample Track a Container Response Payload
{
"account": {
"domain": "acme.com",
"region": "LAX"
},
"timestamp": "2026-02-24T14:03:28.924Z",
"containerId": "MRKU2642087",
"completionReason": "string",
"scacCode": "MRKU",
"masterBillNumber": "MAEU589677982",
"masterBill": {
"number": "string",
"referenceNumbers": [
{
"name": "assigneeId",
"value": "branch-1"
}
]
},
"tradeType": "import",
"steamshipLine": "Maersk",
"vessel": {
"name": "MAERSK EMERALD",
"imo": "9347566",
"mmsi": "538007481",
"operator": {
"name": "ONE",
"scacCode": "ONEY"
}
},
"currentVessel": {
"name": "MAERSK EMERALD",
"imo": "9347566",
"mmsi": "538007481",
"operator": {
"name": "ONE",
"scacCode": "ONEY"
}
},
"loadingVessel": {
"name": "MAERSK EMERALD",
"imo": "9347566",
"mmsi": "538007481",
"operator": {
"name": "ONE",
"scacCode": "ONEY"
}
},
"loadingVoyageNumber": "string",
"voyageNumber": "string",
"containerSize": "FORTY_FT",
"containerType": "DRY",
"grossWeight": 0,
"itNumber": "string",
"status": "AVAILABLE",
"carrierReleasedDate": "2026-02-24T14:03:28.924Z",
"customsReleasedDate": "2026-02-24T14:03:28.924Z",
"etaAtTerminal": "2026-02-24T14:03:28.924Z",
"etdFromOrigin": "2026-02-24T14:03:28.924Z",
"earlyReturnDate": "2026-02-24T14:03:28.924Z",
"cutoffDate": "2026-02-24T14:03:28.924Z",
"railEarlyReturnDate": "2026-02-24T14:03:28.924Z",
"railCutoff": "2026-02-24T14:03:28.924Z",
"shippingInstructionCutoff": "2026-02-24T14:03:28.924Z",
"lastFreeDay": "2026-02-24T14:03:28.924Z",
"lineLastFreeDay": "2026-02-24T14:03:28.924Z",
"detentionLastFreeDay": "2026-02-24T14:03:28.924Z",
"appointmentDate": "2026-02-24T14:03:28.924Z",
"demurrageOwedAtPort": 250,
"demurrageOwedAtPortDecimal": 25000,
"demurrageIncurred": 250,
"demurrageIncurredDecimal": 25000,
"origin": {
"name": "string",
"type": "port",
"unlocode": "string",
"timezone": "string",
"coordinates": {
"latitude": 40.678858019,
"longitude": -74.118213003
}
},
"originPort": {
"name": "string",
"type": "port",
"unlocode": "string",
"timezone": "string",
"coordinates": {
"latitude": 40.678858019,
"longitude": -74.118213003
}
},
"terminalAtPortOfDischarge": "PCT",
"destinationPort": {
"name": "string",
"type": "port",
"unlocode": "string",
"timezone": "string",
"coordinates": {
"latitude": 40.678858019,
"longitude": -74.118213003
}
},
"finalDestination": {
"name": "string",
"type": "port",
"unlocode": "string",
"timezone": "string",
"coordinates": {
"latitude": 40.678858019,
"longitude": -74.118213003
}
},
"currentLocation": {
"name": "string",
"type": "port",
"unlocode": "string",
"timezone": "string",
"coordinates": {
"latitude": 40.678858019,
"longitude": -74.118213003
}
},
"lastKnownPosition": {
"coordinates": {
"latitude": 40.678858019,
"longitude": -74.118213003
}
},
"lastKnownPositionDate": "2026-02-24T14:03:28.924Z",
"terminalAtDestinationPort": {
"name": "TTI",
"address": "301 Mediterranean Way, Long Beach, CA 90802, United States",
"firmsCode": "Z952"
},
"terminalAtOriginPort": {
"name": "TTI",
"address": "301 Mediterranean Way, Long Beach, CA 90802, United States",
"firmsCode": "Z952"
},
"yardLocation": "E7W",
"holds": [
{
"type": "Terminal",
"code": "TMF",
"remarks": "Please pay online",
"amountDue": 200,
"reportedAt": "2026-02-24T14:03:28.924Z",
"resolvedAt": "2026-02-24T14:03:28.924Z"
}
],
"timeline": [
{
"milestone": "AVAILABLE",
"location": {
"name": "string",
"type": "port",
"unlocode": "string",
"timezone": "string",
"coordinates": {
"latitude": 40.678858019,
"longitude": -74.118213003
}
},
"timestamp": "2026-02-24T14:03:28.924Z",
"vessel": {
"name": "MAERSK EMERALD",
"imo": "9347566",
"mmsi": "538007481",
"operator": {
"name": "ONE",
"scacCode": "ONEY"
}
}
}
],
"etaAtDestination": "2026-02-24T14:03:28.924Z",
"etnAtDestination": "2026-02-24T14:03:28.924Z",
"isRailMove": true,
"railCarrier": {
"name": "UNION PACIFIC RAILROAD COMPANY",
"scacCode": "UP"
},
"finalRailStation": {
"name": "GLOBAL 4",
"fsac": "72804",
"unlocode": "USCHI",
"firmsCode": "I206"
},
"lastFreeDayAtRailStation": "2026-02-24T14:03:28.924Z",
"demurrageOwedAtRailStation": 250,
"demurrageIncurredAtRailStation": 250,
"customFields": {
"customer": "CustomerABC",
"poNumber": "PO12345"
},
"trackingPage": "string",
"truckingCarrier": {
"name": "Trucking Carrier INC",
"scac": "TCI"
},
"dispatchedTruckingCarrier": {
"name": "Trucking Carrier INC",
"scac": "TCI"
},
"chassisNumber": "string",
"pickupNumber": "string",
"sealNumber": "string",
"deliveryAppointmentDate": "2026-02-24T14:03:28.924Z",
"receivingFacility": {
"name": "2163 S Riverside Ave, Colton, CA 92324, USA",
"firmsCode": "WBK5"
}
}TMS field updates from a Track a Container Response
Object | Field | Type | OpenTrack Field |
|---|---|---|---|
Container | Appointment Date (D) | Date | appointmentDate |
Container | Appointment Time (D) | Time | appointmentDate |
Container | Carrier Release Date | Date | carrierReleaseDate |
Container | Carrier Release Time | Time | carrierReleaseDate |
Container | Container Status | Picklist | status |
Container | Current Vessel | Text(50) | currentVessel → name |
Container | Current Vessel IMO Number | Text(30) | currentVessel → imo |
Container | Customer Container Tracking Link | URL(255) | trackingPage |
Container | Customs Release Date | Date | customsReleasedDate |
Container | Customs Release Time | Time | customsReleasedDate |
Container | Demurrage Incurred | Number(16, 2) | demurrageIncurred |
Container | Demurrage Incurred at Rail | Number(16, 2) | demurrageIncurredAtRailStation |
Container | Demurrage Owed | Number(16, 2) | demurrageOwedAtPort |
Container | Demurrage Owed at Rail | Number(16, 2) | demurrageOwedAtRailStation |
Container | Destination Timezone | Picklist | finalDestination → timezone |
Container | Document Cutoff Date | Date | shippingInstructionCutoff |
Container | Document Cutoff Time | Time | shippingInstructionCutoff |
Container | Earliest Return Date - Demurrage (L) | Date | earlyReturnDate |
Container | Earliest Return Time - Demurrage (L) | Time | earlyReturnDate |
Container | Estimated Arrival Date (D) | Date | etaAtTerminal |
Container | Estimated Arrival Time (D) | Time | etaAtTerminal |
Container | Estimated Departure Date (L) | Date | etdFromOrigin |
Container | Estimated Departure Time (L) | Time | etdFromOrigin |
Container | Final Rail Station Info | Text(50) | finalRailStation → name, firmsCode |
Container | Geolocation | Geolocation | lastKnownPosition → coordinates → Latitude, Longitude |
Container | Geolocation as of | Date/Time | lastKnownPositionDate |
Container | Inland Transit Number | Text(30) | itNumber |
Container | Is Rail Move | Checkbox | isRailMove |
Container | Last Free Date - Demurrage (D) | Date | lastFreeDay |
Container | Last Free Time - Demurrage (D) | Time | lastFreeDay |
Container | Last Free Date - Detention (D) | Date | detentionLastFreeDay |
Container | Last Free Time - Detention (D) | Time | detentionLastFreeDay |
Container | Last Handling Facility Info | Text(50) | currentLocation → name, unlocode |
Container | Loading Vessel | Text(50) | loadingVessel → name |
Container | Loading Vessel IMO Number | Text(30) | loadingVessel → imo |
Container | Origin Timezone | Picklist | orign → timezone |
Container | Port of Discharge Geolocation | Geolocation | destinationPort → coordinates → Latitude, Longitude |
Container | Port of Load Geolocation | Geolocation | originPort → coordinates → Latitude, Longitude |
Container | Rail Carrier Name | Text(50) | railCarrier → name |
Container | Rail Cutoff Date | Date | railCutoff |
Container | Rail Cutoff Time | Time | railCutoff |
Container | Rail Earliest Return Date | Date | railEarlyReturnDate |
Container | Rail Earliest Return Time | Time | railEarlyReturnDate |
Container | Rail Last Free Date - Demurrage (D) | Date | lastFreeDayAtRailStation |
Container | Rail Last Free Time - Demurrage (D) | Time | lastFreeDayAtRailStation |
Container | Receiving Facility Info | Text(50) | receivingFacility → name, firmsCode |
Container | Route Information | Long Text Area(500) | origin → name, origin → unlocode, finalDestination → name, finalDestination → unlocode |
Container | Seal Number | Text(30) | sealNumber |
Container | SFID | SFID | customFields |
Container | SL Last Free Date - Demurrage (D) | Date | lineLastFreeDay |
Container | SL Last Free Time - Demurrage (D) | Time | lineLastFreeDay |
Container | Steamship Line | Text(30) | steamshipLine |
Container | Terminal Cut-Off Date (L) | Date | cuoffDate |
Container | Terminal Cut-Off Time (L) | Time | cutoffDate |
Container | Terminal of Discharge Info | Text(50) | terminalAtDestinationPort → name, address, firmsCode |
Container | Terminal of Load Info | Text(50) | terminalAtOriginPort → name, address, firmsCode |
Container | Trade Type | Picklist | tradeType |
Container | Trucking Carrier Name | Text(50) | truckingCarrier → name |
Container | Vessel | Text(100) | vessel → name |
Container | Vessel IMO Number | Text(30) | vessel → imo |
Container | Voyage Number | Text(30) | voyageNumber |
Container | Yard Location Info | Text(50) | yardLocation |
Container Event | Container Event Name | Text(80) | timeline → milestone |
Container Event | Event Date | Date | timeline → timestamp |
Container Event | Event Time | Time | timeline → timestamp |
Container Event | Geolocation | Geolocation | timeline → location → Coordinates → latitude, longitude |
Container Event | Is Estimate | Checkbox | timeline → status |
Container Event | Location Summary | Text(100) | timeline → location → name, type, unlocode |
Container Event | Timezone | Picklist | timeline → location → timezone |
Hold | Amount Due | Number(16, 2) | holds → amountDue |
Hold | Code | Text Area(255) | holds → code |
Hold | Comments | Long Text Area(500) | holds → remarks |
Hold | Reported Datetime | Date/Time | holds → reportedAt |
Hold | Resolved Datetime | Date/Time | holds → resolvedAt |
Hold | Type | Text(50) | holds → type |
The TMS attempts to parse information from the OpenTrack response payload to populate the following fields. When a value is already present in the fields below, they are not overwritten with values received from OpenTrack. The field values entered in the TMS are retained.
Port/Terminal of Discharge
Port/Terminal of Discharge Timezone
Port/Terminal of Load
Port/Terminal of Load Timezone
The Account fields in the table below are used for matching the Container Port/Terminal of Discharge or Load fields to OpenTrack payload values.
Object | Field | Type | OpenTrack Field |
|---|---|---|---|
Account | Account Name | Name | destinationPort → name, finalDestination → name, |
Account | UN Location Code | Text(6) | destinationPort → unlocode, finalDestination → unlocode, origin → unlocode, |
See OpenTrack documentation here.
Tracking Push Events
Push events published to the OpenTrack webhook are identical to the Track a Container payload response. As the container moves, updates are sent from OpenTrack and processed by the TMS.
The container SFID is included in the Start Container Tracking call outlined above as a containerReferences field value. This value is used to match webhook events from OpenTrack to the appropriate containers.
If Master Bill Tracking is Checked, but Individual Container Tracking is not, containers are matched based on the Container Number field.
If no containers or multiple containers match to a single Container Number value, an error is generated and saved as a Queued Transaction.
OpenTrack sends validation errors that, when processed, are stored on the Container record in the TMS. The following fields are updated.
The Container Status Comments field is updated with the error text from OpenTrack.
The Container Status field is set to Exception.
The Tracking field is set to Off.
A container tracking session is automatically ended when any of the values listed in the table below are received in a push event from OpenTrack.
Note: Tracking sessions cannot be stopped manually.
When the tracking session is ended prematurely, the Container Status updates to Tracking Stop and the Container Status Comments field is populated with the tracking completion reason.
When the final milestone is received from OpenTrack, the tracking session is complete and the Container Status updates to Tracking Complete.
See OpenTrack endpoint documentation for more information.
Integration Reference
A list of commonly used Terminals with the UN/LOCODE values is provided here for creating Seaport Accounts.
Tracking Completion Reasons
The following table contains the values and descriptions provided by OpenTrack that end a container tracking session.
OpenTrack Value | Description |
|---|---|
| The container has reached the expected final milestone in its journey. Usually this is EMPTY_RETURNED, with the exception of carriers which don't report EMPTY RETURNED. |
| The steamship line has stopped returning data for this container on this master bill. |
| OpenTrack supports Import, Export, and International shipments, but inland Domestic shipments (inland between two points in the US) are not supported. |
| When the tradeType of the container does not match the tradeType of your account. If your account is set to Imports only, then this completionReason can occur if you track an Export, for example. |
| We received the same status from the ocean carrier for over 55 days and have terminated tracking. |
| Tracking was canceled by someone on your team. |
| The steamship line cannot locate this container. |
| The steamship line has indicated that this container has been damaged. |
| This container is an old shipment. |
| The steamship line has reported that this container is on a new voyage with a new master bill. |
| This container was moved to a new master bill. |
| The container's booking has been canceled. |
| The cargo has been unloaded from this container mid-voyage (at a transshipment or destination port), leaving it inactive with no further tracking updates. The shipment may continue in a different container. |
Container Timezone Settings
The following table outlines how Container field values are populated setting the timezone based on Account location or OpenTrack payload values. The payload values populate the Container Destination Timezone and Origin Timezone fields in UTC. The value of the Container Is Rail Move field is also considered and sometimes determines the source for setting the timezone value.
Container Fields | Is Rail Move | Timezone Source |
|---|---|---|
Appointment Date (D), Appointment Time (D) | Checked | finalDestination → timezone (OpenTrack) |
Appointment Date (D), Appointment Time (D) | Unchecked | Port/Terminal of Discharge |
Carrier Release Date, Carrier Release Time | Checked | finalDestination → timezone (OpenTrack) |
Carrier Release Date, Carrier Release Time | Unchecked | Port/Terminal of Discharge |
Customs Release Date, Customs Release Time | Checked | finalDestination → timezone (OpenTrack) |
Customs Release Date, Customs Release Time | Unchecked | Port/Terminal of Discharge |
Document Cutoff Date, Document Cutoff Time | origin → timezone (OpenTrack) | |
Estimated Arrival Date (D), Estimated Arrival Time (D) | Port/Terminal of Discharge | |
Last Free Date - Demurrage (D), Last Free Time - Demurrage (D) | Port/Terminal of Discharge | |
Last Free Date - Detention (D), Last Free Time - Detention (D) | Checked | finalDestination → timezone (OpenTrack) |
Last Free Date - Detention (D), Last Free Time - Detention (D) | Unchecked | Port/Terminal of Discharge |
Rail Cutoff Date, Rail Cutoff Time | origin → timezone (OpenTrack) | |
Rail Earliest Return Date, Rail Earliest Return Time | origin → timezone (OpenTrack) | |
Rail Last Free Date - Demurrage (D), Rail Last Free Time - Demurrage (D) | finalDestination → timezone (OpenTrack) | |
SL Last Free Date - Demurrage (D), SL Last Free Time - Demurrage (D) | Checked | finalDestination → timezone (OpenTrack) |
SL Last Free Date - Demurrage (D), SL Last Free Time - Demurrage (D) | Unchecked | Port/Terminal of Discharge |
Earliest Return Date - Demurrage (L), Earliest Return Time - Demurrage (L) | Port/Terminal of Load | |
Estimated Departure Date (L), Estimated Departure Time (L) | Port/Terminal of Load | |
Terminal Cut-Off Date (L), Terminal Cut-Off Time (L) | Port/Terminal of Load |
Route and Terminal Formatting
Route Information
The Container Route Information field is formatted in the following order and format.
Origin
Origin Port
Destination Port
Final Destination
<origin>: name - unlocode (type)
Example
Origin: Los Angeles Lighting - USLAX (locality)
Note that the UN/LOCODE value is only included when received from OpenTrack.
Terminal Information
The Container Terminal of Discharge Info and Terminal of Load Info is formatted as shown.
Name - FirmsCode (address)
Example
BNSF Terminal - Z978 (100 Address Lane, Citytown, IL 60000)
Container and Rail Milestones
Container Milestones
Milestone | Description |
|---|---|
| Container empty outgated at shipper at origin. |
| Container full ingated from shipper at origin. |
| Container loaded onto barge at origin. |
| Container departed from origin to port of lading. |
| Container berthed at port of lading. |
| Container discharged from barge at port of lading. |
| Container loaded onto vessel at port of lading (ATD). |
| Container’s vessel has departed from origin at port of lading (ATD). |
| Container’s vessel has arrived at transshipment port anchorage area. |
| Container’s vessel has berthed at transshipment port terminal. |
| Container discharged at transshipment port. |
| Container loaded at transshipment port. |
| Container’s vessel has departed from transshipment port. |
| Container’s vessel has arrived at final port of discharge anchorage area. |
| Container’s vessel has berthed at terminal at final port of discharge (this is the true vessel ATA). |
| Container discharged from vessel at terminal at final port of discharge. |
| Container loaded onto barge at port of discharge. |
| Container departed from port of discharge to final destination. |
| Container berthed at final destination. |
| Container discharged from barge at final destination. |
| Container available for pick at terminal. |
| Container full outgated from terminal. |
| Container full ingated at off-dock facility. |
| Container available for pick up at off-dock facility. |
| Container full outgated from off-dock facility. |
| Container full dropped off at trucker yard. |
| Container full picked up from trucker yard. |
| Container delivered to final destination. |
| Container empty available for pick up at final destination. |
| Container empty picked up at final destination. |
| Container empty dropped off at trucker yard. |
| Container empty picked up from trucker yard. |
| Container ingated empty to terminal. |
Rail Milestones
Port | Milestone | Description |
|---|---|---|
Origin |
| Container full ingated from shipper at origin rail facility. |
Origin |
| Container placed on rail car to the ocean port of loading. |
Origin |
| Container departed on rail to the ocean port of loading. |
Origin |
| Container arrival at rail facility of the ocean port of loading. |
Origin |
| Container deramped from rail at the ocean port of loading. |
Destination |
| Container ingated at departure ramp facility. |
Destination |
| Container placed on rail car to destination. |
Destination |
| Container departed on rail to final destination. |
Destination |
| Container arrival at final rail facility. |
Destination |
| Container deramped from rail. |
Destination |
| Container was released by customs. |
Destination |
| Container outgated from final rail facility. |
Integration Field Mapping
The following table contains fields that are referenced in the calls to and payloads received from OpenTrack.
Object | Field | Type | OpenTrack Field |
|---|---|---|---|
Account | Account Name | Name | destinationPort → name, finalDestination → name, |
Account | UN Location Code | Text(6) | destinationPort → unlocode, finalDestination → unlocode, origin → unlocode, |
Container | Appointment Date (D) | Date | appointmentDate |
Container | Appointment Time (D) | Time | appointmentDate |
Container | Carrier Release Date | Date | carrierReleaseDate |
Container | Carrier Release Time | Time | carrierReleaseDate |
Container | Container Number | Text(80) | customFields → containerReferences |
Container | Container Status | Picklist | status |
Container | Current Vessel | Text(50) | currentVessel → name |
Container | Current Vessel IMO Number | Text(30) | currentVessel → imo |
Container | Customer Container Tracking Link | URL(255) | trackingPage |
Container | Customs Release Date | Date | customsReleasedDate |
Container | Customs Release Time | Time | customsReleasedDate |
Container | Demurrage Incurred | Number(16, 2) | demurrageIncurred |
Container | Demurrage Incurred at Rail | Number(16, 2) | demurrageIncurredAtRailStation |
Container | Demurrage Owed | Number(16, 2) | demurrageOwedAtPort |
Container | Demurrage Owed at Rail | Number(16, 2) | demurrageOwedAtRailStation |
Container | Destination Timezone | Picklist | finalDestination → timezone |
Container | Document Cutoff Date | Date | shippingInstructionCutoff |
Container | Document Cutoff Time | Time | shippingInstructionCutoff |
Container | Earliest Return Date - Demurrage (L) | Date | earlyReturnDate |
Container | Earliest Return Time - Demurrage (L) | Time | earlyReturnDate |
Container | Estimated Arrival Date (D) | Date | etaAtTerminal |
Container | Estimated Arrival Time (D) | Time | etaAtTerminal |
Container | Estimated Departure Date (L) | Date | etdFromOrigin |
Container | Estimated Departure Time (L) | Time | etdFromOrigin |
Container | Final Rail Station Info | Text(50) | finalRailStation → name, firmsCode |
Container | Geolocation | Geolocation | lastKnownPosition → coordinates → Latitude, Longitude |
Container | Geolocation as of | Date/Time | lastKnownPositionDate |
Container | Inland Transit Number | Text(30) | itNumber |
Container | Is Rail Move | Checkbox | isRailMove |
Container | Last Free Date - Demurrage (D) | Date | lastFreeDay |
Container | Last Free Time - Demurrage (D) | Time | lastFreeDay |
Container | Last Free Date - Detention (D) | Date | detentionLastFreeDay |
Container | Last Free Time - Detention (D) | Time | detentionLastFreeDay |
Container | Last Handling Facility Info | Text(50) | currentLocation → name, unlocode |
Container | Loading Vessel | Text(50) | loadingVessel → name |
Container | Loading Vessel IMO Number | Text(30) | loadingVessel → imo |
Container | Master Bill of Lading Number | Formula (Text) | masterBillNumber |
Container | Origin Timezone | Picklist | orign → timezone |
Container | Port of Discharge Geolocations | Geolocation | destinationPort → coordinates → Latitude, Longitude |
Container | Port of Load Geolocation | Geolocation | originPort → coordinates → Latitude, Longitude |
Container | Rail Carrier Name | Text(50) | railCarrier → name |
Container | Rail Cutoff Date | Date | railCutoff |
Container | Rail Cutoff Time | Time | railCutoff |
Container | Rail Earliest Return Date | Date | railEarlyReturnDate |
Container | Rail Earliest Return Time | Time | railEarlyReturnDate |
Container | Rail Last Free Date - Demurrage (D) | Date | lastFreeDayAtRailStation |
Container | Rail Last Free Time - Demurrage (D) | Time | lastFreeDayAtRailStation |
Container | Receiving Facility Info | Text(50) | receivingFacility → name, firmsCode |
Container | SCAC | Text(6) | scacCode |
Container | Seal Number | Text(30) | sealNumber |
Container | SFID | SFID | customFields |
Container | SL Last Free Date - Demurrage (D) | Date | lineLastFreeDay |
Container | SL Last Free Time - Demurrage (D) | Time | lineLastFreeDay |
Container | Steamship Line | Text(30) | steamshipLine |
Container | Terminal Cut-Off Date (L) | Date | cuoffDate |
Container | Terminal Cut-Off Time (L) | Time | cutoffDate |
Container | Terminal of Discharge Info | Text(50) | terminalAtDestinationPort → name, firmsCode |
Container | Terminal of Load Info | Text(50) | terminalAtOriginPort → name, firmsCode |
Container | Trade Type | Picklist | tradeType |
Container | Trucking Carrier Name | Text(50) | truckingCarrier → name |
Container | Vessel | Text(100) | vessel → name |
Container | Vessel IMO Number | Text(30) | vessel → imo |
Container | Voyage Number | Text(30) | voyageNumber |
Container | Yard Location Info | Text(50) | yardLocation |
Container Event | Container Event Name | Text(80) | timeline → milestone |
Container Event | Event Date | Date | timeline → timestamp |
Container Event | Event Time | Time | timeline → timestamp |
Container Event | Geolocation | Geolocation | timeline → location → Coordinates → latitude, longitude |
Container Event | Is Estimate | Checkbox | timeline → status |
Container Event | Location Summary | Text(100) | timeline → location → name, type, unlocode |
Container Event | Timezone | Picklist | timeline → location → timezone |
Hold | Amount Due | Number(16, 2) | holds → amountDue |
Hold | Code | Text Area(255) | holds → code |
Hold | Comments | Long Text Area(500) | holds → remarks |
Hold | Reported Datetime | Date/Time | holds → reportedAt |
Hold | Resolved Datetime | Date/Time | holds → resolvedAt |
Hold | Type | Text(50) | holds → type |
TMS Admin → Credentials | Master Bill Tracking | True/False | trackOnlyRequestedContainers |