Terminal49 Transport Events API
Retrieve the timeline of normalized transport events (milestones such as vessel departed, vessel arrived, discharged, full out, and rail events) for a container.
Retrieve the timeline of normalized transport events (milestones such as vessel departed, vessel arrived, discharged, full out, and rail events) for a container.
openapi: 3.0.1
info:
title: Terminal49 API
description: >-
Terminal49 v2 container and ocean-freight tracking API. A single integration
to track Bills of Lading, bookings, and container numbers across global ocean
carriers and North American rail, returning normalized milestones, ETAs,
terminal availability, holds, demurrage fees, and last free day. The API
follows the JSON:API specification; all requests and responses use the
`application/vnd.api+json` media type and authenticate with a Token header.
termsOfService: https://www.terminal49.com/terms-of-service/
contact:
name: Terminal49 Support
url: https://terminal49.com/docs/api-docs/api-reference/introduction
email: support@terminal49.com
version: '2.0'
servers:
- url: https://api.terminal49.com/v2
description: Terminal49 v2 production API
security:
- TokenAuth: []
tags:
- name: Tracking Requests
- name: Shipments
- name: Containers
- name: Transport Events
- name: Terminals
- name: Shipping Lines
- name: Webhooks
paths:
/tracking_requests:
get:
operationId: listTrackingRequests
tags:
- Tracking Requests
summary: List tracking requests
parameters:
- $ref: '#/components/parameters/PageNumber'
- $ref: '#/components/parameters/PageSize'
responses:
'200':
description: A list of tracking requests.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TrackingRequestList'
post:
operationId: createTrackingRequest
tags:
- Tracking Requests
summary: Create a tracking request
description: >-
Ask Terminal49 to begin tracking a shipment by submitting a Bill of
Lading, booking, or container number together with the carrier SCAC.
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TrackingRequestCreate'
responses:
'201':
description: The created tracking request.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TrackingRequestSingle'
/tracking_requests/{id}:
get:
operationId: getTrackingRequest
tags:
- Tracking Requests
summary: Retrieve a tracking request
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: The requested tracking request.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TrackingRequestSingle'
patch:
operationId: updateTrackingRequest
tags:
- Tracking Requests
summary: Edit a tracking request
parameters:
- $ref: '#/components/parameters/ResourceId'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TrackingRequestSingle'
responses:
'200':
description: The updated tracking request.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TrackingRequestSingle'
/shipments:
get:
operationId: listShipments
tags:
- Shipments
summary: List shipments
parameters:
- $ref: '#/components/parameters/PageNumber'
- $ref: '#/components/parameters/PageSize'
responses:
'200':
description: A list of shipments.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ShipmentList'
/shipments/{id}:
get:
operationId: getShipment
tags:
- Shipments
summary: Retrieve a shipment
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: The requested shipment.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ShipmentSingle'
patch:
operationId: updateShipment
tags:
- Shipments
summary: Edit a shipment
parameters:
- $ref: '#/components/parameters/ResourceId'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ShipmentSingle'
responses:
'200':
description: The updated shipment.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ShipmentSingle'
/shipments/{id}/stop_tracking:
post:
operationId: stopTrackingShipment
tags:
- Shipments
summary: Stop tracking a shipment
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: Tracking stopped.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ShipmentSingle'
/shipments/{id}/resume_tracking:
post:
operationId: resumeTrackingShipment
tags:
- Shipments
summary: Resume tracking a shipment
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: Tracking resumed.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ShipmentSingle'
/containers:
get:
operationId: listContainers
tags:
- Containers
summary: List containers
parameters:
- $ref: '#/components/parameters/PageNumber'
- $ref: '#/components/parameters/PageSize'
responses:
'200':
description: A list of containers.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ContainerList'
/containers/{id}:
get:
operationId: getContainer
tags:
- Containers
summary: Retrieve a container
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: The requested container.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ContainerSingle'
patch:
operationId: updateContainer
tags:
- Containers
summary: Edit a container
parameters:
- $ref: '#/components/parameters/ResourceId'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ContainerSingle'
responses:
'200':
description: The updated container.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ContainerSingle'
/containers/{id}/refresh:
post:
operationId: refreshContainer
tags:
- Containers
summary: Force a container data refresh
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'202':
description: Refresh accepted.
/containers/{id}/transport_events:
get:
operationId: listContainerTransportEvents
tags:
- Transport Events
summary: List transport events for a container
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: A list of transport events.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TransportEventList'
/containers/{id}/raw_events:
get:
operationId: listContainerRawEvents
tags:
- Transport Events
summary: List raw events for a container (deprecated)
deprecated: true
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: A list of raw events.
/containers/{id}/map:
get:
operationId: getContainerMap
tags:
- Containers
summary: Retrieve GeoJSON map data for a container
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: GeoJSON map data for the container journey.
/transport_events:
get:
operationId: listTransportEvents
tags:
- Transport Events
summary: List transport events
parameters:
- $ref: '#/components/parameters/PageNumber'
- $ref: '#/components/parameters/PageSize'
responses:
'200':
description: A list of transport events.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TransportEventList'
/shipping_lines:
get:
operationId: listShippingLines
tags:
- Shipping Lines
summary: List shipping lines
responses:
'200':
description: A list of supported shipping lines with SCAC codes.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ShippingLineList'
/shipping_lines/{id}:
get:
operationId: getShippingLine
tags:
- Shipping Lines
summary: Retrieve a shipping line
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: The requested shipping line.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ShippingLineSingle'
/terminals/{id}:
get:
operationId: getTerminal
tags:
- Terminals
summary: Retrieve a terminal
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: The requested terminal.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TerminalSingle'
/webhooks:
get:
operationId: listWebhooks
tags:
- Webhooks
summary: List webhooks
responses:
'200':
description: A list of webhooks.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/WebhookList'
post:
operationId: createWebhook
tags:
- Webhooks
summary: Create a webhook
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/WebhookSingle'
responses:
'201':
description: The created webhook.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/WebhookSingle'
/webhooks/{id}:
get:
operationId: getWebhook
tags:
- Webhooks
summary: Retrieve a webhook
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: The requested webhook.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/WebhookSingle'
patch:
operationId: updateWebhook
tags:
- Webhooks
summary: Edit a webhook
parameters:
- $ref: '#/components/parameters/ResourceId'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/WebhookSingle'
responses:
'200':
description: The updated webhook.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/WebhookSingle'
delete:
operationId: deleteWebhook
tags:
- Webhooks
summary: Delete a webhook
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'204':
description: Webhook deleted.
/webhooks/{id}/test:
post:
operationId: testWebhook
tags:
- Webhooks
summary: Trigger a test delivery for a webhook
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'202':
description: Test delivery triggered.
/webhook_notifications:
get:
operationId: listWebhookNotifications
tags:
- Webhooks
summary: List webhook notifications
parameters:
- $ref: '#/components/parameters/PageNumber'
- $ref: '#/components/parameters/PageSize'
responses:
'200':
description: A list of webhook notifications.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/WebhookNotificationList'
/webhook_notifications/{id}:
get:
operationId: getWebhookNotification
tags:
- Webhooks
summary: Retrieve a webhook notification
parameters:
- $ref: '#/components/parameters/ResourceId'
responses:
'200':
description: The requested webhook notification.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/WebhookNotificationSingle'
components:
securitySchemes:
TokenAuth:
type: apiKey
in: header
name: Authorization
description: >-
Token-based authentication. Send the header
`Authorization: Token YOUR_API_KEY`.
parameters:
ResourceId:
name: id
in: path
required: true
description: The resource identifier (UUID).
schema:
type: string
PageNumber:
name: page[number]
in: query
required: false
description: Page number for JSON:API pagination.
schema:
type: integer
PageSize:
name: page[size]
in: query
required: false
description: Number of records per page.
schema:
type: integer
schemas:
JsonApiLinks:
type: object
properties:
self:
type: string
first:
type: string
prev:
type: string
next:
type: string
last:
type: string
TrackingRequestAttributes:
type: object
properties:
request_number:
type: string
description: The Bill of Lading, booking, or container number to track.
request_type:
type: string
enum:
- bill_of_lading
- booking_number
- container
scac:
type: string
description: The carrier SCAC code.
ref_numbers:
type: array
items:
type: string
status:
type: string
enum:
- pending
- created
- failed
- tracking_stopped
failed_reason:
type: string
nullable: true
created_at:
type: string
format: date-time
TrackingRequestResource:
type: object
properties:
id:
type: string
type:
type: string
enum: [tracking_request]
attributes:
$ref: '#/components/schemas/TrackingRequestAttributes'
TrackingRequestCreate:
type: object
properties:
data:
type: object
properties:
type:
type: string
enum: [tracking_request]
attributes:
type: object
required:
- request_number
- request_type
- scac
properties:
request_number:
type: string
request_type:
type: string
enum:
- bill_of_lading
- booking_number
- container
scac:
type: string
ref_numbers:
type: array
items:
type: string
TrackingRequestSingle:
type: object
properties:
data:
$ref: '#/components/schemas/TrackingRequestResource'
TrackingRequestList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/TrackingRequestResource'
links:
$ref: '#/components/schemas/JsonApiLinks'
ShipmentAttributes:
type: object
properties:
bill_of_lading_number:
type: string
normalized_number:
type: string
ref_numbers:
type: array
items:
type: string
shipping_line_scac:
type: string
shipping_line_name:
type: string
shipping_line_short_name:
type: string
port_of_lading_locode:
type: string
port_of_lading_name:
type: string
port_of_discharge_locode:
type: string
port_of_discharge_name:
type: string
destination_locode:
type: string
destination_name:
type: string
pod_vessel_name:
type: string
pod_vessel_imo:
type: string
pod_voyage_number:
type: string
pol_atd_at:
type: string
format: date-time
nullable: true
pod_eta_at:
type: string
format: date-time
nullable: true
pod_ata_at:
type: string
format: date-time
nullable: true
destination_eta_at:
type: string
format: date-time
nullable: true
destination_ata_at:
type: string
format: date-time
nullable: true
line_tracking_stopped_at:
type: string
format: date-time
nullable: true
line_tracking_stopped_reason:
type: string
nullable: true
ShipmentResource:
type: object
properties:
id:
type: string
type:
type: string
enum: [shipment]
attributes:
$ref: '#/components/schemas/ShipmentAttributes'
relationships:
type: object
ShipmentSingle:
type: object
properties:
data:
$ref: '#/components/schemas/ShipmentResource'
ShipmentList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ShipmentResource'
links:
$ref: '#/components/schemas/JsonApiLinks'
ContainerAttributes:
type: object
properties:
number:
type: string
seal_number:
type: string
nullable: true
ref_numbers:
type: array
items:
type: string
equipment_type:
type: string
description: e.g. dry, reefer, open_top, flat_rack, bulk, tank.
equipment_length:
type: integer
description: Container length in feet (10, 20, 40, 45).
equipment_height:
type: string
enum:
- standard
- high_cube
weight_in_lbs:
type: integer
nullable: true
current_status:
type: string
description: e.g. new, on_ship, available, delivered.
availability_known:
type: boolean
available_for_pickup:
type: boolean
nullable: true
pickup_lfd:
type: string
format: date-time
nullable: true
description: Last free day, coalesced from import deadlines.
pickup_appointment_at:
type: string
format: date-time
nullable: true
pod_arrived_at:
type: string
format: date-time
nullable: true
pod_discharged_at:
type: string
format: date-time
nullable: true
pod_full_out_at:
type: string
format: date-time
nullable: true
location_at_pod_terminal:
type: string
nullable: true
ind_eta_at:
type: string
format: date-time
nullable: true
ind_ata_at:
type: string
format: date-time
nullable: true
ind_rail_unloaded_at:
type: string
format: date-time
nullable: true
pod_rail_carrier_scac:
type: string
nullable: true
ind_rail_carrier_scac:
type: string
nullable: true
holds_at_pod_terminal:
type: array
items:
type: object
properties:
name:
type: string
status:
type: string
description:
type: string
fees_at_pod_terminal:
type: array
items:
type: object
properties:
type:
type: string
description: e.g. demurrage, exam, extended_dwell_time, other, total.
amount:
type: number
currency:
type: string
terminal_checked_at:
type: string
format: date-time
nullable: true
ContainerResource:
type: object
properties:
id:
type: string
type:
type: string
enum: [container]
attributes:
$ref: '#/components/schemas/ContainerAttributes'
relationships:
type: object
ContainerSingle:
type: object
properties:
data:
$ref: '#/components/schemas/ContainerResource'
ContainerList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ContainerResource'
links:
$ref: '#/components/schemas/JsonApiLinks'
TransportEventAttributes:
type: object
properties:
event:
type: string
description: Normalized milestone name (e.g. vessel_departed, vessel_arrived, transshipment_discharged, full_out, rail_departed).
created_at:
type: string
format: date-time
timestamp:
type: string
format: date-time
location_locode:
type: string
nullable: true
timezone:
type: string
nullable: true
voyage_number:
type: string
nullable: true
vessel_name:
type: string
nullable: true
vessel_imo:
type: string
nullable: true
TransportEventResource:
type: object
properties:
id:
type: string
type:
type: string
enum: [transport_event]
attributes:
$ref: '#/components/schemas/TransportEventAttributes'
TransportEventList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/TransportEventResource'
links:
$ref: '#/components/schemas/JsonApiLinks'
ShippingLineAttributes:
type: object
properties:
scac:
type: string
name:
type: string
short_name:
type: string
bill_of_lading_prefixes:
type: array
items:
type: string
ShippingLineResource:
type: object
properties:
id:
type: string
type:
type: string
enum: [shipping_line]
attributes:
$ref: '#/components/schemas/ShippingLineAttributes'
ShippingLineSingle:
type: object
properties:
data:
$ref: '#/components/schemas/ShippingLineResource'
ShippingLineList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ShippingLineResource'
links:
$ref: '#/components/schemas/JsonApiLinks'
TerminalAttributes:
type: object
properties:
nickname:
type: string
name:
type: string
firms_code:
type: string
nullable: true
smdg_code:
type: string
nullable: true
port_locode:
type: string
TerminalResource:
type: object
properties:
id:
type: string
type:
type: string
enum: [terminal]
attributes:
$ref: '#/components/schemas/TerminalAttributes'
TerminalSingle:
type: object
properties:
data:
$ref: '#/components/schemas/TerminalResource'
WebhookAttributes:
type: object
properties:
url:
type: string
description: The callback URL Terminal49 POSTs notifications to.
active:
type: boolean
events:
type: array
items:
type: string
description: Event types to subscribe to (e.g. tracking_request.succeeded, container.transport.vessel_departed).
secret:
type: string
description: Shared secret used to sign notification payloads.
created_at:
type: string
format: date-time
WebhookResource:
type: object
properties:
id:
type: string
type:
type: string
enum: [webhook]
attributes:
$ref: '#/components/schemas/WebhookAttributes'
WebhookSingle:
type: object
properties:
data:
$ref: '#/components/schemas/WebhookResource'
WebhookList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/WebhookResource'
links:
$ref: '#/components/schemas/JsonApiLinks'
WebhookNotificationAttributes:
type: object
properties:
event:
type: string
delivery_status:
type: string
enum:
- pending
- succeeded
- failed
response_status_code:
type: integer
nullable: true
created_at:
type: string
format: date-time
body:
type: object
description: The JSON:API payload delivered to the webhook URL.
WebhookNotificationResource:
type: object
properties:
id:
type: string
type:
type: string
enum: [webhook_notification]
attributes:
$ref: '#/components/schemas/WebhookNotificationAttributes'
WebhookNotificationSingle:
type: object
properties:
data:
$ref: '#/components/schemas/WebhookNotificationResource'
WebhookNotificationList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/WebhookNotificationResource'
links:
$ref: '#/components/schemas/JsonApiLinks'