> ## Documentation Index
> Fetch the complete documentation index at: https://terminal49-current-status.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Terminal49 API Webhooks

> Create Terminal49 webhooks, subscribe to shipment and container events, parse webhook payloads, and handle delivery retries in your integration.

## Creating webhooks

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

Visit [https://app.terminal49.com/developers/webhooks](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 programmatically then see the [webhooks post endpoint documentation](/api-docs/api-reference/webhooks/create-a-webhook).

## Available webhook events

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

List of supported events:

| Event                                                         | Description                                                                        |
| ------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| `tracking_request.succeeded`                                  | Shipment created and linked to `TrackingRequest`                                   |
| `tracking_request.failed`                                     | `TrackingRequest` failed and shipment was not created                              |
| `tracking_request.awaiting_manifest`                          | `TrackingRequest` awaiting a manifest                                              |
| `tracking_request.tracking_stopped`                           | Terminal49 is no longer updating this `TrackingRequest`.                           |
| `container.transport.empty_out`                               | Empty out at port of lading                                                        |
| `container.transport.full_in`                                 | Full in at port of lading                                                          |
| `container.transport.vessel_loaded`                           | Vessel loaded at port of lading                                                    |
| `container.transport.vessel_departed`                         | Vessel departed at port of lading                                                  |
| `container.transport.transshipment_arrived`                   | Container arrived at transshipment port                                            |
| `container.transport.transshipment_discharged`                | Container discharged at transshipment port                                         |
| `container.transport.transshipment_loaded`                    | Container loaded at transshipment port                                             |
| `container.transport.transshipment_departed`                  | Container departed at transshipment port                                           |
| `container.transport.feeder_arrived`                          | Container arrived on feeder vessel or barge                                        |
| `container.transport.feeder_discharged`                       | Container discharged from feeder vessel or barge                                   |
| `container.transport.feeder_loaded`                           | Container loaded on feeder vessel or barge                                         |
| `container.transport.feeder_departed`                         | Container departed on feeder vessel or barge                                       |
| `container.transport.vessel_arrived`                          | Container arrived on vessel at port of discharge (destination port)                |
| `container.transport.vessel_berthed`                          | Container on vessel berthed at port of discharge (destination port)                |
| `container.transport.vessel_discharged`                       | Container discharged at port of discharge                                          |
| `container.transport.full_out`                                | Full out at port of discharge                                                      |
| `container.transport.empty_in`                                | Empty returned at destination                                                      |
| `container.transport.rail_loaded`                             | Rail loaded                                                                        |
| `container.transport.rail_departed`                           | Rail departed                                                                      |
| `container.transport.rail_arrived`                            | Rail arrived                                                                       |
| `container.transport.rail_unloaded`                           | Rail unloaded                                                                      |
| `shipment.estimated.arrival`                                  | ETA change notification (for port of discharge)                                    |
| `container.created`                                           | Container added to shipment. Helpful for seeing new containers on a booking or BL. |
| `container.updated`                                           | Container attribute(s) updated (see below example)                                 |
| `container.pod_terminal_changed`                              | Port of discharge assignment changed for container                                 |
| `container.transport.arrived_at_inland_destination`           | Container arrived at inland destination                                            |
| `container.transport.estimated.arrived_at_inland_destination` | ETA change notification (for destination)                                          |
| `container.pickup_lfd.changed`                                | Last Free Day (LFD) changed for container                                          |
| `container.pickup_lfd_line.changed`                           | Shipping Line Last Free Day (LFD) changed for container                            |
| `container.pickup_lfd_rail.changed`                           | Rail Last Free Day (LFD) changed for container (Rail Plan only)                    |
| `container.transport.available`                               | Container is available at destination                                              |

## Receiving webhooks

When an event is triggered, Terminal49 attempts 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 its relationships, which is the subject of that notification (e.g., a tracking request or an updated container).

Your endpoint must return [HTTP 200 OK](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200), [HTTP 201](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/201), [HTTP 202](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/202), or [HTTP 204](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204). Any other response, including a timeout, triggers retries (up to a dozen attempts).

```json json_schema theme={null}
{
  "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](https://help.terminal49.com/en/articles/7851422-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, Terminal49 creates a signature by using the webhook `secret` as the key to generate an 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.

```ruby theme={null}
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 is a hash of all the properties that 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.

Terminal49 shows changes for the following properties:

* fees\_at\_pod\_terminal (see [Container Holds, Fees, and Release Readiness](/api-docs/in-depth-guides/holds-and-fees))
* holds\_at\_pod\_terminal (see [Container Holds, Fees, and Release Readiness](/api-docs/in-depth-guides/holds-and-fees))
* pickup\_lfd
* pickup\_appointment\_at
* available\_for\_pickup
* pod\_terminal

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

As container availability becomes known or changes at the POD Terminal, Terminal49 sends `container_updated` events with the key `available_for_pickup` in the `changeset`.

```json theme={null}
{
  "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.

```json theme={null}
{
  "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

```json theme={null}
{
  "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",
        "updated_at": "2020-09-11T22: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

```json theme={null}
{
  "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

```json theme={null}
{
  "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"
          }
        }
      }
    }
  ]
}
```
