Skip to main content
Every Terminal49 webhook delivery is a JSON:API document with a webhook_notification primary resource and related records in included. Use this page as the payload reference. Use Payload Examples when you need complete sample JSON.

Notification envelope

{
  "data": {
    "id": "87d4f5e3-df7b-4725-85a3-b80acc572e5d",
    "type": "webhook_notification",
    "attributes": {
      "event": "container.updated",
      "delivery_status": "pending",
      "created_at": "2026-05-11T18:30:00Z"
    },
    "relationships": {
      "webhook": {
        "data": {
          "id": "8a5ffa8f-3dc1-48de-a0ea-09fc4f2cd96f",
          "type": "webhook"
        }
      },
      "reference_object": {
        "data": {
          "id": "e8f1976c-0089-4b98-96ae-90aa87fbdfee",
          "type": "container_updated_event"
        }
      }
    }
  },
  "included": []
}

Top-level fields

FieldTypeDescription
data.idUUIDUnique webhook notification ID. Use this as the idempotency key.
data.typestringAlways webhook_notification.
data.attributes.eventstringEvent name, such as tracking_request.succeeded or container.updated.
data.attributes.delivery_statusstringDelivery state for this notification. Values include pending, succeeded, and failed.
data.attributes.created_attimestampTime Terminal49 created the notification.
data.relationships.webhookrelationshipWebhook endpoint that received the notification.
data.relationships.reference_objectrelationshipEvent-specific object that caused the notification.
includedarrayRelated records included for convenience. Contents vary by event.

Reference object types

Event familyCommon reference_object.typeNotes
tracking_request.*tracking_requestIncludes the tracking request and, when available, shipment/container records.
container.transport.*transport_eventIncludes the transport event, container, shipment, and location records that are available.
shipment.estimated.arrivalestimated_eventIncludes the estimate event and related shipment records.
container.updatedcontainer_updated_eventIncludes a changeset describing changed container attributes.
container.createdcontainer_created_eventIncludes the new container and related shipment.
container.pickup_lfd.changed and the pickup_lfd_line / pickup_lfd_terminal / pickup_lfd_rail variantstransport_eventThe transport event’s value attribute carries the new Last Free Day. The container with updated LFD fields may also be included, as in the container.pickup_lfd.changed example.
document.*document-related event resourceAvailable for accounts using document processing. See Document Processing Workflows.

Included resources

Webhook payloads may include:
Resource typeWhen included
tracking_requestIncluded for tracking request lifecycle events and related shipment updates.
shipmentIncluded when the event relates to a shipment or one of its containers.
containerIncluded for container lifecycle, status, availability, and milestone events.
transport_eventIncluded for container.transport.* milestone events and LFD or appointment change events.
estimated_eventIncluded for ETA change events.
container_updated_eventIncluded for container.updated events.
portIncluded when a payload references a port record.
terminalIncluded when a payload references a terminal record.
Other resource types — such as vessel, rail_terminal, and metro_area — can appear for specific events. The webhook endpoint that received the delivery is referenced through the webhook relationship on the notification, not serialized in included. Do not require every resource to be present. Carrier, terminal, and event data can arrive at different times.

Container update changesets

For container.updated events, the event resource includes a changeset object. Each key is a changed field. The value is a two-item array: [previous_value, current_value].
{
  "changeset": {
    "pickup_lfd": [null, "2026-05-14T07:00:00Z"],
    "available_for_pickup": [false, true]
  }
}
Common changed fields include:
  • fees_at_pod_terminal
  • holds_at_pod_terminal
  • pickup_lfd
  • pickup_lfd_line
  • pickup_lfd_rail
  • pickup_appointment_at
  • available_for_pickup
  • pod_terminal
The event’s timestamp attribute tells you when Terminal49 picked up the changes from the terminal. For pod_terminal, the changeset values are terminal record IDs, not names:
{
  "changeset": {
    "pod_terminal": ["0ef5519f-3bde-4d1f-a327-f4f2d833dc7b", "08831e36-676a-4bd4-9c26-c8ab7dbfe73e"]
  }
}
Resolve the IDs through the terminal resources serialized in included.
The container_updated_event also has a terminal relationship that indicates where the data came from. Currently this is always the POD terminal; in the future it may be the final destination terminal or an off-dock location.