Creating Webhooks

You may subscribe to events through webhooks to be alerted when events are triggered.

Visit https://app.terminal49.com/developers/webhooks and click the ‘Create Webhook Endpoint’ button to create your webhook through the UI.

If you prefer to create webhooks programatically then see the webhooks post endpoint documentation.

Available Webook Events

Each WebhookNotification event represents some change to a model which you may be notified of.

List of Supported Events:

EventDescription
tracking_request.succeededShipment created and linked to TrackingRequest
tracking_request.failedTrackingRequest failed and shipment was not created
tracking_request.awaiting_manifestTrackingRequest awaiting a manifest
tracking_request.tracking_stoppedTerminal49 is no longer updating this TrackingRequest.
container.transport.empty_outEmpty out at port of lading
container.transport.full_inFull in at port of lading
container.transport.vessel_loadedVessel loaded at port of lading
container.transport.vessel_departedVessel departed at port of lading
container.transport.transshipment_arrivedContainer arrived at transhipment port
container.transport.transshipment_dischargedContainer discharged at transhipment port
container.transport.transshipment_loadedContainer loaded at transhipment port
container.transport.transshipment_departedContainer departed at transhipment port
container.transport.feeder_arrivedContainer arrived on feeder vessel or barge
container.transport.feeder_dischargedContainer discharged from feeder vessel or barge
container.transport.feeder_loadedContainer loaded on feeder vessel or barge
container.transport.feeder_departedContainer departed on feeder vessel or barge
container.transport.vessel_arrivedContainer arrived on vessel at port of discharge (destination port)
container.transport.vessel_berthedContainer on vessel berthed at port of discharge (destination port)
container.transport.vessel_dischargedContainer discharged at port of discharge
container.transport.full_outFull out at port of discharge
container.transport.empty_inEmpty returned at destination
container.transport.rail_loadedRail loaded
container.transport.rail_departedRail departed
container.transport.rail_arrivedRail arrived
container.transport.rail_unloadedRail unloaded
shipment.estimated.arrivalETA change notification (for port of discharge)
container.createdContainer added to shipment. Helpful for seeing new containers on a booking or BL.
container.updatedContainer attribute(s) updated (see below example)
container.pod_terminal_changedPort of discharge assignment changed for container
container.transport.arrived_at_inland_destinationContainer arrived at inland destination
container.transport.estimated.arrived_at_inland_destinationETA change notification (for destination)
container.pickup_lfd.changedLast Free Day (LFD) changed for container

Receiving Webhooks

When an event is triggered we will attempt to post to the URL you provided with the webhook.

The payload of every webhook is a webhook_notification. Each Webhook notification includes a reference_object in it’s relationships which is the subject of that notification (e.g. a tracking request, or an updated container).

Please note that we expect the endpoint to return HTTP 200 OK, HTTP 201, HTTP 202 or HTTP 204. We aim to deliver all webhook notifications, so any other response, including timeout, will result in a dozen of retries.

json_schema
{
  "type":"object",
  "properties":{
    "data":{
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "type": {
          "type": "string",
          "enum": [
            "webhook_notification"
          ]
        },
        "attributes": {
          "type": "object",
          "properties": {
            "event": {
              "type": "string"
            },
            "delivery_status": {
              "type": "string",
              "default": "pending",
              "enum": [
                "pending",
                "succeeded",
                "failed"
              ],
              "description": "Whether the notification has been delivered to the webhook endpoint"
            },
            "created_at": {
              "type": "string"
            }
          },
          "required": [
            "event",
            "delivery_status",
            "created_at"
          ]
        },
        "relationships": {
          "type": "object",
          "properties": {
            "webhook": {
              "type": "object",
              "properties": {
                "data": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "webhook"
                      ]
                    }
                  }
                }
              }
            },
            "reference_object": {
              "type": "object",
              "properties": {
                "data": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "tracking_request",
                        "estimated_event",
                        "transport_event",
                        "container_updated_event"
                      ]
                    }
                  }
                }
              }
            }
          },
          "required": [
            "webhook"
          ]
        }
      }
    },
    "included":{
      "type":"array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "title": "Webhook",
          },
          {
            "type": "object",
            "title": "Tracking Request",
          },
          {
            "type": "object",
            "title": "Transport Event",
          },
          {
            "type": "object",
            "title": "Estimated Event",
          },
          {
            "type": "object",
            "title": "Container Updated Event",
          },
          {
            "type": "object",
            "title": "Terminal",
          },
           {
            "type": "object",
            "title": "Port",
          },

        ]
      }
    }

  }
}

How to Troubleshoot Missing Webhook Notifications

Security

There are a few ways you can verify the webhooks sent by Terminal49.

Verify webhook signatures to confirm that received events are sent from Terminal49. Additionally, Terminal49 sends webhook events from a set list of IP addresses. Only trust events coming from these IP addresses.

Webhook notification origin IP

The full list of IP addresses that webhook notifications may come from is:

35.222.62.171
3.230.67.145
44.217.15.129

Verifying the webhook signature (optional)

When you create or get a webhook the model will include an attribute secret.

Whenever a webhook notification is delivered we create a signature by using the webhook secret as the key to generate a HMAC hex digest with SHA-256 on the body.

This signature is added as the header X-T49-Webhook-Signature

If you would like to verify that the webhook payload has not been tampered with by a 3rd party, then you can perform the same operation on the response body with the webhook secret and confirm that the digests match.

Below is a basic example of how this might look in a rails application.

class WebhooksController < ApplicationController
  def receive_tracking_request
    secret = ENV.fetch('TRACKING_REQUEST_WEBHOOK_SECRET')
    raise 'InvalidSignature' unless valid_signature?(request, secret)

    # continue processing webhook payload...

  end

  private

  def valid_signature?(request, secret)
    hmac = OpenSSL::HMAC.hexdigest('SHA256', secret, request.body.read)
    request.headers['X-T49-Webhook-Signature'] == hmac
  end
end

Webhook Notification Examples

container.updated

The container updated event lets you know about changes to container properties at the terminal, or which terminal the container is (or will be) located at.

The changeset attribute on is a hash of all the properties which changed on the container.

Each changed property is the hash key. The prior value is the first item in the array, and the current value is the second item in the array.

For example:

"changeset": {
  "pickup_lfd": [null, "2020-05-20 00:00:00"]
}

Shows that the pickup last free day has changed from not being set to May 20 2020.

The properties we show changes for are:

  • fees_at_pod_terminal
  • holds_at_pod_terminal
  • pickup_lfd
  • pickup_appointment_at
  • available_for_pickup
  • pod_terminal

In every case the attribute container_updated.timestamp tells you when we picked up the changes from the terminal.

As container availability becomes known or changes at the POD Terminal we will send container_updated events with the key available_for_pickup in the changeset.

{
  "data": {
    "id": "fa1a6731-4b34-4b0c-aabc-460892055ba1",
    "type": "webhook_notification",
    "attributes": {
      "id": "fa1a6731-4b34-4b0c-aabc-460892055ba1",
      "event": "container.updated",
      "delivery_status": "pending",
      "created_at": "2023-01-24T00:11:32Z"
    },
    "relationships": {
      "reference_object": {
        "data": {
          "id": "e8f1976c-0089-4b98-96ae-90aa87fbdfee",
          "type": "container_updated_event"
        }
      },
      "webhook": {
        "data": {
          "id": "8a5ffa8f-3dc1-48de-a0ea-09fc4f2cd96f",
          "type": "webhook"
        }
      },
      "webhook_notification_logs": {
        "data": [

        ]
      }
    }
  },
  "included": [
    {
      "id": "adc08630-51d3-4bbc-a859-5157cbbe806c",
      "type": "shipment",
      "attributes": {
        "created_at": "2023-01-24T00:11:32Z",
        "ref_numbers": [
          "REF-50FFA3",
          "REF-5AC291"
        ],
        "tags": [

        ],
        "bill_of_lading_number": "TE49DD306F13",
        "normalized_number": "TE49DD306F13",
        "shipping_line_scac": "MSCU",
        "shipping_line_name": "Mediterranean Shipping Company",
        "shipping_line_short_name": "MSC",
        "port_of_lading_locode": "MXZLO",
        "port_of_lading_name": "Manzanillo",
        "port_of_discharge_locode": "USOAK",
        "port_of_discharge_name": "Port of Oakland",
        "pod_vessel_name": "MSC CHANNE",
        "pod_vessel_imo": "9710438",
        "pod_voyage_number": "098N",
        "destination_locode": null,
        "destination_name": null,
        "destination_timezone": null,
        "destination_ata_at": null,
        "destination_eta_at": null,
        "pol_etd_at": null,
        "pol_atd_at": "2023-01-11T00:11:32Z",
        "pol_timezone": "America/Mexico_City",
        "pod_eta_at": "2023-01-23T20:11:32Z",
        "pod_ata_at": "2023-01-23T23:11:32Z",
        "pod_timezone": "America/Los_Angeles",
        "line_tracking_last_attempted_at": null,
        "line_tracking_last_succeeded_at": "2023-01-24T00:11:32Z",
        "line_tracking_stopped_at": null,
        "line_tracking_stopped_reason": null
      },
      "relationships": {
        "port_of_lading": {
          "data": {
            "id": "588711e2-3f78-4178-ae5e-ccb690e0671d",
            "type": "port"
          }
        },
        "port_of_discharge": {
          "data": {
            "id": "9a25e0aa-52bd-4bb8-8876-cd7616f5fb0f",
            "type": "port"
          }
        },
        "pod_terminal": {
          "data": {
            "id": "4960e227-93b1-4f85-bf7c-07c9b6f597e0",
            "type": "terminal"
          }
        },
        "destination": {
          "data": null
        },
        "destination_terminal": {
          "data": {
            "id": "26d8be45-b428-45fa-819b-46c828bf6fac",
            "type": "terminal"
          }
        },
        "line_tracking_stopped_by_user": {
          "data": null
        },
        "containers": {
          "data": [
            {
              "id": "3cd51f0e-eb18-4399-9f90-4c8a22250f63",
              "type": "container"
            }
          ]
        }
      },
      "links": {
        "self": "/v2/shipments/adc08630-51d3-4bbc-a859-5157cbbe806c"
      }
    },
    {
      "id": "9a25e0aa-52bd-4bb8-8876-cd7616f5fb0f",
      "type": "port",
      "attributes": {
        "id": "9a25e0aa-52bd-4bb8-8876-cd7616f5fb0f",
        "name": "Port of Oakland",
        "code": "USOAK",
        "state_abbr": "CA",
        "city": "Oakland",
        "country_code": "US",
        "time_zone": "America/Los_Angeles"
      }
    },
    {
      "id": "4960e227-93b1-4f85-bf7c-07c9b6f597e0",
      "type": "terminal",
      "attributes": {
        "id": "4960e227-93b1-4f85-bf7c-07c9b6f597e0",
        "nickname": "SSA",
        "name": "SSA Terminal",
        "firms_code": "Z985"
      },
      "relationships": {
        "port": {
          "data": {
            "id": "9a25e0aa-52bd-4bb8-8876-cd7616f5fb0f",
            "type": "port"
          }
        }
      }
    },
    {
      "id": "3cd51f0e-eb18-4399-9f90-4c8a22250f63",
      "type": "container",
      "attributes": {
        "number": "COSU1186800",
        "seal_number": "43e29239e5dd5276",
        "created_at": "2023-01-24T00:11:32Z",
        "ref_numbers": [
          "REF-C86614",
          "REF-456CEA"
        ],
        "pod_arrived_at": "2023-01-23T23:11:32Z",
        "pod_discharged_at": "2023-01-24T00:11:32Z",
        "final_destination_full_out_at": null,
        "equipment_type": "dry",
        "equipment_length": 40,
        "equipment_height": "standard",
        "weight_in_lbs": 43333,
        "pod_full_out_at": null,
        "empty_terminated_at": null,
        "terminal_checked_at": null,
        "fees_at_pod_terminal": [

        ],
        "holds_at_pod_terminal": [

        ],
        "pickup_lfd": null,
        "pickup_appointment_at": null,
        "pod_full_out_chassis_number": null,
        "location_at_pod_terminal": null,
        "availability_known": true,
        "available_for_pickup": true,
        "pod_timezone": "America/Los_Angeles",
        "final_destination_timezone": null,
        "empty_terminated_timezone": "America/Los_Angeles"
      },
      "relationships": {
        "shipment": {
          "data": {
            "id": "adc08630-51d3-4bbc-a859-5157cbbe806c",
            "type": "shipment"
          }
        },
        "pod_terminal": {
          "data": {
            "id": "4960e227-93b1-4f85-bf7c-07c9b6f597e0",
            "type": "terminal"
          }
        },
        "transport_events": {
          "data": [

          ]
        },
        "raw_events": {
          "data": [

          ]
        }
      }
    },
    {
      "id": "e8f1976c-0089-4b98-96ae-90aa87fbdfee",
      "type": "container_updated_event",
      "attributes": {
        "changeset": {
          "available_for_pickup": [
            false,
            true
          ]
        },
        "timestamp": "2023-01-24T00:11:32Z",
        "data_source": "terminal",
        "timezone": "America/Los_Angeles"
      },
      "relationships": {
        "container": {
          "data": {
            "id": "3cd51f0e-eb18-4399-9f90-4c8a22250f63",
            "type": "container"
          }
        },
        "terminal": {
          "data": {
            "id": "4960e227-93b1-4f85-bf7c-07c9b6f597e0",
            "type": "terminal"
          }
        },
        "shipment": {
          "data": {
            "id": "adc08630-51d3-4bbc-a859-5157cbbe806c",
            "type": "shipment"
          }
        }
      }
    }
  ]
}

The pod_terminal is a relationship of the container. When the pod_terminal changes the id is included. The terminal will be serialized in the included models.

N.B. the container_updated_event also has a relationship to a terminal which refers to where the information came from. Currently this is always the POD terminal. In the future this may be the final destination terminal or an off-dock location.

{
  "data": {
    "id": "f6c5e340-94bf-4681-a47d-f2e8d6c90e59",
    "type": "webhook_notification",
    "attributes": {
      "id": "f6c5e340-94bf-4681-a47d-f2e8d6c90e59",
      "event": "container.updated",
      "delivery_status": "pending",
      "created_at": "2023-01-24T00:13:06Z"
    },
    "relationships": {
      "reference_object": {
        "data": {
          "id": "567eccef-53bf-43d5-b3d8-00278d7710df",
          "type": "container_updated_event"
        }
      },
      "webhook": {
        "data": {
          "id": "2e5f41d1-8a3b-4940-a9bb-ff0481e09c71",
          "type": "webhook"
        }
      },
      "webhook_notification_logs": {
        "data": [

        ]
      }
    }
  },
  "included": [
    {
      "id": "c74ff2a5-5ede-4fc2-886b-3eeef886ff32",
      "type": "shipment",
      "attributes": {
        "created_at": "2023-01-24T00:13:05Z",
        "ref_numbers": [
          "REF-29557A"
        ],
        "tags": [

        ],
        "bill_of_lading_number": "TE497F86D5B7",
        "normalized_number": "TE497F86D5B7",
        "shipping_line_scac": "MSCU",
        "shipping_line_name": "Mediterranean Shipping Company",
        "shipping_line_short_name": "MSC",
        "port_of_lading_locode": "MXZLO",
        "port_of_lading_name": "Manzanillo",
        "port_of_discharge_locode": "USOAK",
        "port_of_discharge_name": "Port of Oakland",
        "pod_vessel_name": "MSC CHANNE",
        "pod_vessel_imo": "9710438",
        "pod_voyage_number": "098N",
        "destination_locode": null,
        "destination_name": null,
        "destination_timezone": null,
        "destination_ata_at": null,
        "destination_eta_at": null,
        "pol_etd_at": null,
        "pol_atd_at": "2023-01-11T00:13:05Z",
        "pol_timezone": "America/Mexico_City",
        "pod_eta_at": "2023-01-23T21:13:05Z",
        "pod_ata_at": "2023-01-24T00:13:05Z",
        "pod_timezone": "America/Los_Angeles",
        "line_tracking_last_attempted_at": null,
        "line_tracking_last_succeeded_at": "2023-01-24T00:13:05Z",
        "line_tracking_stopped_at": null,
        "line_tracking_stopped_reason": null
      },
      "relationships": {
        "port_of_lading": {
          "data": {
            "id": "8d0f0cba-9961-4fa5-9bf0-0fb5fb67bdbe",
            "type": "port"
          }
        },
        "port_of_discharge": {
          "data": {
            "id": "9722a830-634e-4f7a-b1b3-793ccaf8cbb2",
            "type": "port"
          }
        },
        "pod_terminal": {
          "data": {
            "id": "08831e36-766b-4ac8-8235-d8594b55ff6d",
            "type": "terminal"
          }
        },
        "destination": {
          "data": null
        },
        "destination_terminal": {
          "data": {
            "id": "f2a6a6e2-4bd1-4c66-aa8b-be4cb2ddc9a8",
            "type": "terminal"
          }
        },
        "line_tracking_stopped_by_user": {
          "data": null
        },
        "containers": {
          "data": [
            {
              "id": "adf4673d-f4ba-41a9-82da-55c0ae3b3722",
              "type": "container"
            }
          ]
        }
      },
      "links": {
        "self": "/v2/shipments/c74ff2a5-5ede-4fc2-886b-3eeef886ff32"
      }
    },
    {
      "id": "9722a830-634e-4f7a-b1b3-793ccaf8cbb2",
      "type": "port",
      "attributes": {
        "id": "9722a830-634e-4f7a-b1b3-793ccaf8cbb2",
        "name": "Port of Oakland",
        "code": "USOAK",
        "state_abbr": "CA",
        "city": "Oakland",
        "country_code": "US",
        "time_zone": "America/Los_Angeles"
      }
    },
    {
      "id": "08831e36-766b-4ac8-8235-d8594b55ff6d",
      "type": "terminal",
      "attributes": {
        "id": "08831e36-766b-4ac8-8235-d8594b55ff6d",
        "nickname": "STO",
        "name": "Shippers Transport Express",
        "firms_code": "STO"
      },
      "relationships": {
        "port": {
          "data": {
            "id": "9722a830-634e-4f7a-b1b3-793ccaf8cbb2",
            "type": "port"
          }
        }
      }
    },
    {
      "id": "adf4673d-f4ba-41a9-82da-55c0ae3b3722",
      "type": "container",
      "attributes": {
        "number": "CGMU1560506",
        "seal_number": "a9948b719482648c",
        "created_at": "2023-01-24T00:13:06Z",
        "ref_numbers": [
          "REF-D2AC6F",
          "REF-34E84B"
        ],
        "pod_arrived_at": "2023-01-24T00:13:05Z",
        "pod_discharged_at": "2023-01-24T00:13:05Z",
        "final_destination_full_out_at": null,
        "equipment_type": "dry",
        "equipment_length": 40,
        "equipment_height": "standard",
        "weight_in_lbs": 43481,
        "pod_full_out_at": null,
        "empty_terminated_at": null,
        "terminal_checked_at": null,
        "fees_at_pod_terminal": [

        ],
        "holds_at_pod_terminal": [

        ],
        "pickup_lfd": null,
        "pickup_appointment_at": null,
        "pod_full_out_chassis_number": null,
        "location_at_pod_terminal": null,
        "availability_known": true,
        "available_for_pickup": true,
        "pod_timezone": "America/Los_Angeles",
        "final_destination_timezone": null,
        "empty_terminated_timezone": "America/Los_Angeles"
      },
      "relationships": {
        "shipment": {
          "data": {
            "id": "c74ff2a5-5ede-4fc2-886b-3eeef886ff32",
            "type": "shipment"
          }
        },
        "pod_terminal": {
          "data": {
            "id": "08831e36-766b-4ac8-8235-d8594b55ff6d",
            "type": "terminal"
          }
        },
        "transport_events": {
          "data": [

          ]
        },
        "raw_events": {
          "data": [

          ]
        }
      }
    },
    {
      "id": "0ef5519f-1b39-4f6c-9961-1bbba0ac1307",
      "type": "terminal",
      "attributes": {
        "id": "0ef5519f-1b39-4f6c-9961-1bbba0ac1307",
        "nickname": "SSA",
        "name": "SSA Terminal",
        "firms_code": "Z985"
      },
      "relationships": {
        "port": {
          "data": {
            "id": "9722a830-634e-4f7a-b1b3-793ccaf8cbb2",
            "type": "port"
          }
        }
      }
    },
    {
      "id": "567eccef-53bf-43d5-b3d8-00278d7710df",
      "type": "container_updated_event",
      "attributes": {
        "changeset": {
          "pod_terminal": [
            "0ef5519f-1b39-4f6c-9961-1bbba0ac1307",
            "08831e36-766b-4ac8-8235-d8594b55ff6d"
          ]
        },
        "timestamp": "2023-01-24T00:13:06Z",
        "data_source": "terminal",
        "timezone": "America/Los_Angeles"
      },
      "relationships": {
        "container": {
          "data": {
            "id": "adf4673d-f4ba-41a9-82da-55c0ae3b3722",
            "type": "container"
          }
        },
        "terminal": {
          "data": {
            "id": "0ef5519f-1b39-4f6c-9961-1bbba0ac1307",
            "type": "terminal"
          }
        },
        "shipment": {
          "data": {
            "id": "c74ff2a5-5ede-4fc2-886b-3eeef886ff32",
            "type": "shipment"
          }
        }
      }
    }
  ]
}

tracking_request.succeeded

{
  "data": {
    "id": "a76187fc-5749-43f9-9053-cfaad9790a31",
    "type": "webhook_notification",
    "attributes": {
      "id": "a76187fc-5749-43f9-9053-cfaad9790a31",
      "event": "tracking_request.succeeded",
      "delivery_status": "pending",
      "created_at": "2020-09-11T21:25:34Z"
    },
    "relationships": {
      "reference_object": {
        "data": {
          "id": "bdeca506-9741-4ab1-a0a7-cfd1d908e923",
          "type": "tracking_request"
        }
      },
      "webhook": {
        "data": {
          "id": "914b21ce-dd7d-4c49-8503-65aba488e9a9",
          "type": "webhook"
        }
      },
      "webhook_notification_logs": {
        "data": []
      }
    }
  },
  "included": [
    {
      "id": "bdeca506-9741-4ab1-a0a7-cfd1d908e923",
      "type": "tracking_request",
      "attributes": {
        "request_number": "TE497ED1063E",
        "request_type": "bill_of_lading",
        "scac": "MSCU",
        "ref_numbers": [],
        "created_at": "2020-09-11T21:25:34Z",
        "status": "created",
        "failed_reason": null,
        "is_retrying": false,
        "retry_count": null
      },
      "relationships": {
        "tracked_object": {
          "data": {
            "id": "b5b10c0a-8d18-46da-b4c2-4e5fa790e7da",
            "type": "shipment"
          }
        }
      },
      "links": {
        "self": "/v2/tracking_requests/bdeca506-9741-4ab1-a0a7-cfd1d908e923"
      }
    },
    {
      "id": "b5b10c0a-8d18-46da-b4c2-4e5fa790e7da",
      "type": "shipment",
      "attributes": {
        "created_at": "2020-09-11T21:25:33Z",
        "bill_of_lading_number": "TE497ED1063E",
        "ref_numbers": [],
        "shipping_line_scac": "MSCU",
        "shipping_line_name": "Mediterranean Shipping Company",
        "port_of_lading_locode": "MXZLO",
        "port_of_lading_name": "Manzanillo",
        "port_of_discharge_locode": "USOAK",
        "port_of_discharge_name": "Port of Oakland",
        "pod_vessel_name": "MSC CHANNE",
        "pod_vessel_imo": "9710438",
        "pod_voyage_number": "098N",
        "destination_locode": null,
        "destination_name": null,
        "destination_timezone": null,
        "destination_ata_at": null,
        "destination_eta_at": null,
        "pol_etd_at": null,
        "pol_atd_at": "2020-08-29T21:25:33Z",
        "pol_timezone": "America/Mexico_City",
        "pod_eta_at": "2020-09-18T21:25:33Z",
        "pod_ata_at": null,
        "pod_timezone": "America/Los_Angeles"
      },
      "relationships": {
        "port_of_lading": {
          "data": {
            "id": "4384d6a5-5ccc-43b7-8d19-4a9525e74c08",
            "type": "port"
          }
        },
        "port_of_discharge": {
          "data": {
            "id": "2a765fdd-c479-4345-b71d-c4ef839952e2",
            "type": "port"
          }
        },
        "pod_terminal": {
          "data": {
            "id": "17891bc8-52da-40bf-8ff0-0247ec05faf1",
            "type": "terminal"
          }
        },
        "destination": {
          "data": null
        },
        "containers": {
          "data": [
            {
              "id": "b2fc728c-e2f5-4a99-8899-eb7b34ef22d7",
              "type": "container"
            }
          ]
        }
      },
      "links": {
        "self": "/v2/shipments/b5b10c0a-8d18-46da-b4c2-4e5fa790e7da"
      }
    },
    {
      "id": "b2fc728c-e2f5-4a99-8899-eb7b34ef22d7",
      "type": "container",
      "attributes": {
        "number": "ARDU1824900",
        "seal_number": "139F1451",
        "created_at": "2020-09-11T21:25:34Z",
        "equipment_type": "dry",
        "equipment_length": 40,
        "equipment_height": "standard",
        "weight_in_lbs": 53507,
        "fees_at_pod_terminal": [],
        "holds_at_pod_terminal": [],
        "pickup_lfd": null,
        "pickup_appointment_at": null,
        "availability_known": true,
        "available_for_pickup": false,
        "pod_arrived_at": null,
        "pod_discharged_at": null,
        "location_at_pod_terminal": null,
        "final_destination_full_out_at": null,
        "pod_full_out_at": null,
        "empty_terminated_at": null
      },
      "relationships": {
        "shipment": {
          "data": {
            "id": "b5b10c0a-8d18-46da-b4c2-4e5fa790e7da",
            "type": "shipment"
          }
        },
        "pod_terminal": {
          "data": {
            "id": "17891bc8-52da-40bf-8ff0-0247ec05faf1",
            "type": "terminal"
          }
        },
        "transport_events": {
          "data": [
            {
              "id": "56078596-5293-4c84-9245-cca00a787265",
              "type": "transport_event"
            }
          ]
        }
      }
    },
    {
      "id": "56078596-5293-4c84-9245-cca00a787265",
      "type": "transport_event",
      "attributes": {
        "event": "container.transport.vessel_departed",
        "created_at": "2020-09-11T21:25:34Z",
        "voyage_number": null,
        "timestamp": "2020-08-29T21:25:33Z",
        "location_locode": "MXZLO",
        "timezone": "America/Los_Angeles"
      },
      "relationships": {
        "shipment": {
          "data": {
            "id": "b5b10c0a-8d18-46da-b4c2-4e5fa790e7da",
            "type": "shipment"
          }
        },
        "container": {
          "data": {
            "id": "b2fc728c-e2f5-4a99-8899-eb7b34ef22d7",
            "type": "container"
          }
        },
        "vessel": {
          "data": null
        },
        "location": {
          "data": {
            "id": "2a765fdd-c479-4345-b71d-c4ef839952e2",
            "type": "port"
          }
        },
        "terminal": {
          "data": null
        }
      }
    }
  ]
}

shipment.estimated.arrival

{
  "data": {
    "id": "b03bcf3c-252d-41f8-b86f-939b404e304b",
    "type": "webhook_notification",
    "attributes": {
      "id": "b03bcf3c-252d-41f8-b86f-939b404e304b",
      "event": "shipment.estimated.arrival",
      "delivery_status": "pending",
      "created_at": "2022-01-13T19:56:58Z"
    },
    "relationships": {
      "reference_object": {
        "data": {
          "id": "14b5047f-e3e7-4df7-a570-2d3878e6d863",
          "type": "estimated_event"
        }
      },
      "webhook": {
        "data": {
          "id": "d60a23a4-f40d-44d2-8b6a-2e55a527e6a2",
          "type": "webhook"
        }
      },
      "webhook_notification_logs": {
        "data": [

        ]
      }
    }
  },
  "included": [
    {
      "id": "14b5047f-e3e7-4df7-a570-2d3878e6d863",
      "type": "estimated_event",
      "attributes": {
        "created_at": "2022-01-13T19:56:58Z",
        "estimated_timestamp": "2022-01-16T19:56:58Z",
        "voyage_number": "098N",
        "event": "shipment.estimated.arrival",
        "location_locode": "USOAK",
        "timezone": "America/Los_Angeles"
      },
      "relationships": {
        "shipment": {
          "data": {
            "id": "8e4a1f1e-aa13-4cad-9df0-aec6c791a5f8",
            "type": "shipment"
          }
        },
        "port": {
          "data": {
            "id": "3ee88ea1-3b8b-4b96-80fb-6aa23ba7065e",
            "type": "port"
          }
        },
        "vessel": {
          "data": {
            "id": "b1550abc-4e73-4271-a0f4-8ac031f242cd",
            "type": "vessel"
          }
        }
      }
    },
    {
      "id": "3ee88ea1-3b8b-4b96-80fb-6aa23ba7065e",
      "type": "port",
      "attributes": {
        "id": "3ee88ea1-3b8b-4b96-80fb-6aa23ba7065e",
        "name": "Port of Oakland",
        "code": "USOAK",
        "state_abbr": "CA",
        "city": "Oakland",
        "country_code": "US",
        "time_zone": "America/Los_Angeles"
      }
    },
    {
      "id": "8e4a1f1e-aa13-4cad-9df0-aec6c791a5f8",
      "type": "shipment",
      "attributes": {
        "created_at": "2022-01-13T19:56:58Z",
        "ref_numbers": [
          "REF-3AA505",
          "REF-910757",
          "REF-2A8357"
        ],
        "tags": [

        ],
        "bill_of_lading_number": "TE49C31E16E2",
        "shipping_line_scac": "MSCU",
        "shipping_line_name": "Mediterranean Shipping Company",
        "shipping_line_short_name": "MSC",
        "port_of_lading_locode": "MXZLO",
        "port_of_lading_name": "Manzanillo",
        "port_of_discharge_locode": "USOAK",
        "port_of_discharge_name": "Port of Oakland",
        "pod_vessel_name": "MSC CHANNE",
        "pod_vessel_imo": "9710438",
        "pod_voyage_number": "098N",
        "destination_locode": null,
        "destination_name": null,
        "destination_timezone": null,
        "destination_ata_at": null,
        "destination_eta_at": null,
        "pol_etd_at": null,
        "pol_atd_at": "2021-12-31T19:56:58Z",
        "pol_timezone": "America/Mexico_City",
        "pod_eta_at": "2022-01-16T19:56:58Z",
        "pod_ata_at": null,
        "pod_timezone": "America/Los_Angeles",
        "line_tracking_last_attempted_at": null,
        "line_tracking_last_succeeded_at": "2022-01-13T19:56:58Z",
        "line_tracking_stopped_at": null,
        "line_tracking_stopped_reason": null
      },
      "relationships": {
        "port_of_lading": {
          "data": {
            "id": "78ad2915-700b-4919-8ede-a3b6c2137436",
            "type": "port"
          }
        },
        "port_of_discharge": {
          "data": {
            "id": "3ee88ea1-3b8b-4b96-80fb-6aa23ba7065e",
            "type": "port"
          }
        },
        "pod_terminal": {
          "data": {
            "id": "3bd88777-48ea-4880-9cb9-961dd4d26a00",
            "type": "terminal"
          }
        },
        "destination": {
          "data": null
        },
        "destination_terminal": {
          "data": {
            "id": "1d016b3d-96d5-4867-8f99-77233d1cc57d",
            "type": "terminal"
          }
        },
        "containers": {
          "data": [

          ]
        }
      },
      "links": {
        "self": "/v2/shipments/8e4a1f1e-aa13-4cad-9df0-aec6c791a5f8"
      }
    }
  ]
}

container.transport.vessel_arrived

{
  "data": {
    "id": "72f8b0b5-28f5-4a12-8274-71d4d23c9ab7",
    "type": "webhook_notification",
    "attributes": {
      "id": "72f8b0b5-28f5-4a12-8274-71d4d23c9ab7",
      "event": "container.transport.vessel_arrived",
      "delivery_status": "pending",
      "created_at": "2023-01-24T00:14:28Z"
    },
    "relationships": {
      "reference_object": {
        "data": {
          "id": "c1443820-304a-444b-bf42-c3d885dc8daa",
          "type": "transport_event"
        }
      },
      "webhook": {
        "data": {
          "id": "655236f8-7936-4611-b580-341d3e1103f5",
          "type": "webhook"
        }
      },
      "webhook_notification_logs": {
        "data": [

        ]
      }
    }
  },
  "included": [
    {
      "id": "290a696b-5fba-45aa-a08c-0e15ae89e9c0",
      "type": "shipment",
      "attributes": {
        "created_at": "2023-01-24T00:14:28Z",
        "ref_numbers": [
          "REF-134938",
          "REF-BE2704",
          "REF-712D47"
        ],
        "tags": [

        ],
        "bill_of_lading_number": "TE49735F4B1D",
        "normalized_number": "TE49735F4B1D",
        "shipping_line_scac": "MSCU",
        "shipping_line_name": "Mediterranean Shipping Company",
        "shipping_line_short_name": "MSC",
        "port_of_lading_locode": "MXZLO",
        "port_of_lading_name": "Manzanillo",
        "port_of_discharge_locode": "USOAK",
        "port_of_discharge_name": "Port of Oakland",
        "pod_vessel_name": "MSC CHANNE",
        "pod_vessel_imo": "9710438",
        "pod_voyage_number": "098N",
        "destination_locode": null,
        "destination_name": null,
        "destination_timezone": null,
        "destination_ata_at": null,
        "destination_eta_at": null,
        "pol_etd_at": null,
        "pol_atd_at": "2023-01-11T00:14:28Z",
        "pol_timezone": "America/Mexico_City",
        "pod_eta_at": "2023-01-31T00:14:28Z",
        "pod_ata_at": "2023-01-31T01:14:28Z",
        "pod_timezone": "America/Los_Angeles",
        "line_tracking_last_attempted_at": null,
        "line_tracking_last_succeeded_at": "2023-01-24T00:14:28Z",
        "line_tracking_stopped_at": null,
        "line_tracking_stopped_reason": null
      },
      "relationships": {
        "port_of_lading": {
          "data": {
            "id": "036084b7-f2cc-49b5-9d81-7de2cdabfc69",
            "type": "port"
          }
        },
        "port_of_discharge": {
          "data": {
            "id": "0e0c9ad6-ec83-48b3-87f9-c2710659821b",
            "type": "port"
          }
        },
        "pod_terminal": {
          "data": {
            "id": "1ee2022a-e054-4f76-8c1a-60967e76b407",
            "type": "terminal"
          }
        },
        "destination": {
          "data": null
        },
        "destination_terminal": {
          "data": {
            "id": "b07e8193-47cf-4395-a1f6-a5d4d7fa9b17",
            "type": "terminal"
          }
        },
        "line_tracking_stopped_by_user": {
          "data": null
        },
        "containers": {
          "data": [
            {
              "id": "c8fa5c2a-1bd0-48d8-8c94-2ef8a06c4ce9",
              "type": "container"
            }
          ]
        }
      },
      "links": {
        "self": "/v2/shipments/290a696b-5fba-45aa-a08c-0e15ae89e9c0"
      }
    },
    {
      "id": "c8fa5c2a-1bd0-48d8-8c94-2ef8a06c4ce9",
      "type": "container",
      "attributes": {
        "number": "GLDU1222600",
        "seal_number": "d5103634ed1adbd4",
        "created_at": "2023-01-24T00:14:28Z",
        "ref_numbers": [
          "REF-889564"
        ],
        "pod_arrived_at": "2023-01-24T00:14:28Z",
        "pod_discharged_at": "2023-01-24T00:14:28Z",
        "final_destination_full_out_at": "2023-01-24T00:14:28Z",
        "equipment_type": "dry",
        "equipment_length": 40,
        "equipment_height": "standard",
        "weight_in_lbs": 46679,
        "pod_full_out_at": null,
        "empty_terminated_at": null,
        "terminal_checked_at": null,
        "fees_at_pod_terminal": [

        ],
        "holds_at_pod_terminal": [

        ],
        "pickup_lfd": null,
        "pickup_appointment_at": null,
        "pod_full_out_chassis_number": null,
        "location_at_pod_terminal": null,
        "availability_known": true,
        "available_for_pickup": false,
        "pod_timezone": "America/Los_Angeles",
        "final_destination_timezone": null,
        "empty_terminated_timezone": "America/Los_Angeles"
      },
      "relationships": {
        "shipment": {
          "data": {
            "id": "290a696b-5fba-45aa-a08c-0e15ae89e9c0",
            "type": "shipment"
          }
        },
        "pod_terminal": {
          "data": null
        },
        "transport_events": {
          "data": [
            {
              "id": "c1443820-304a-444b-bf42-c3d885dc8daa",
              "type": "transport_event"
            }
          ]
        },
        "raw_events": {
          "data": [

          ]
        }
      }
    },
    {
      "id": "0e0c9ad6-ec83-48b3-87f9-c2710659821b",
      "type": "port",
      "attributes": {
        "id": "0e0c9ad6-ec83-48b3-87f9-c2710659821b",
        "name": "Port of Oakland",
        "code": "USOAK",
        "state_abbr": "CA",
        "city": "Oakland",
        "country_code": "US",
        "time_zone": "America/Los_Angeles"
      }
    },
    {
      "id": "1ee2022a-e054-4f76-8c1a-60967e76b407",
      "type": "terminal",
      "attributes": {
        "id": "1ee2022a-e054-4f76-8c1a-60967e76b407",
        "nickname": "SSA",
        "name": "SSA Terminal",
        "firms_code": "Z985"
      },
      "relationships": {
        "port": {
          "data": {
            "id": "0e0c9ad6-ec83-48b3-87f9-c2710659821b",
            "type": "port"
          }
        }
      }
    },
    {
      "id": "100c303e-79df-4301-9bf7-13f9e0c85851",
      "type": "vessel",
      "attributes": {
        "name": "MSC CHANNE",
        "imo": "9710438",
        "mmsi": "255805864",
        "latitude": -78.30435842851921,
        "longitude": 25.471353799804547,
        "nautical_speed_knots": 100,
        "navigational_heading_degrees": 1,
        "position_timestamp": "2023-06-05T19:46:18Z"
      }
    },
    {
      "id": "c1443820-304a-444b-bf42-c3d885dc8daa",
      "type": "transport_event",
      "attributes": {
        "event": "container.transport.vessel_arrived",
        "created_at": "2023-01-24T00:14:27Z",
        "voyage_number": null,
        "timestamp": "2023-01-24T00:14:27Z",
        "data_source": "shipping_line",
        "location_locode": "USOAK",
        "timezone": "America/Los_Angeles"
      },
      "relationships": {
        "shipment": {
          "data": {
            "id": "290a696b-5fba-45aa-a08c-0e15ae89e9c0",
            "type": "shipment"
          }
        },
        "container": {
          "data": {
            "id": "c8fa5c2a-1bd0-48d8-8c94-2ef8a06c4ce9",
            "type": "container"
          }
        },
        "vessel": {
          "data": {
            "id": "100c303e-79df-4301-9bf7-13f9e0c85851",
            "type": "vessel"
          }
        },
        "location": {
          "data": {
            "id": "0e0c9ad6-ec83-48b3-87f9-c2710659821b",
            "type": "port"
          }
        },
        "terminal": {
          "data": {
            "id": "1ee2022a-e054-4f76-8c1a-60967e76b407",
            "type": "terminal"
          }
        }
      }
    }
  ]
}