From 0b67f6d675414b8809ed3083f4bc48f59bad940b Mon Sep 17 00:00:00 2001
From: Akshay Dodeja <22015+dodeja@users.noreply.github.com>
Date: Mon, 22 Jun 2026 22:13:46 +0000
Subject: [PATCH 1/5] feat: add tracking request SCAC auto-detect option
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
---
.../create-a-tracking-request.mdx | 9 +--
docs/openapi.json | 36 +++++++++++-
.../client/classes/Terminal49Client.mdx | 8 ++-
.../classes/TrackingRequestManager.mdx | 3 +-
.../typescript-sdk/src/client.request.test.ts | 58 +++++++++++++++++++
sdks/typescript-sdk/src/client.ts | 5 +-
.../src/client/managers/tracking-requests.ts | 22 ++++---
7 files changed, 122 insertions(+), 19 deletions(-)
diff --git a/docs/api-docs/api-reference/tracking-requests/create-a-tracking-request.mdx b/docs/api-docs/api-reference/tracking-requests/create-a-tracking-request.mdx
index 1cfd72c0..1b73045a 100644
--- a/docs/api-docs/api-reference/tracking-requests/create-a-tracking-request.mdx
+++ b/docs/api-docs/api-reference/tracking-requests/create-a-tracking-request.mdx
@@ -7,10 +7,11 @@ openapi: post /tracking_requests
---
- **Don't know the SCAC?** Call [Infer Tracking
- Number](/api-docs/api-reference/tracking-requests/auto-detect-carrier)
- (Auto-Detect Carrier) first to identify the shipping line from your tracking
- number.
+ **Don't know the SCAC?** Set `auto_detect_vocc_scac` to `true` and omit
+ `scac` to have Terminal49 infer the shipping line before creating the tracking
+ request. Use [Auto-Detect
+ Carrier](/api-docs/api-reference/tracking-requests/auto-detect-carrier) first
+ when your workflow needs to preview or confirm carrier candidates.
diff --git a/docs/openapi.json b/docs/openapi.json
index b90075d8..21245d12 100644
--- a/docs/openapi.json
+++ b/docs/openapi.json
@@ -1230,6 +1230,15 @@
"title": "Unprocessable Entity",
"detail": "Request number can't be blank",
"code": "blank"
+ },
+ {
+ "status": "422",
+ "source": {
+ "pointer": "/data/attributes/auto_detect_vocc_scac"
+ },
+ "title": "Unprocessable Entity",
+ "detail": "Could not auto-detect a supported carrier SCAC for this request number",
+ "code": "prediction_failed"
}
]
}
@@ -1308,10 +1317,17 @@
},
"scac": {
"type": "string",
+ "description": "The carrier SCAC to use for this tracking request. Required unless `auto_detect_vocc_scac` is `true`.",
"example": "MSCU",
"minLength": 4,
"maxLength": 4
},
+ "auto_detect_vocc_scac": {
+ "type": "boolean",
+ "description": "Set to `true` to have Terminal49 infer the carrier SCAC from `request_number` when `scac` is not supplied. If the carrier cannot be inferred confidently, the request is rejected with a 422 response. If a carrier is inferred, the created tracking request response includes the detected `scac`.",
+ "default": false,
+ "example": true
+ },
"ref_numbers": {
"type": "array",
"description": "Optional list of reference numbers to be added to the shipment when tracking request completes",
@@ -1329,8 +1345,7 @@
},
"required": [
"request_type",
- "request_number",
- "scac"
+ "request_number"
]
},
"relationships": {
@@ -1399,6 +1414,21 @@
"type": "tracking_request"
}
}
+ },
+ "Example: Auto-detect carrier SCAC": {
+ "value": {
+ "data": {
+ "attributes": {
+ "request_type": "bill_of_lading",
+ "request_number": "MEDUFR030802",
+ "auto_detect_vocc_scac": true,
+ "ref_numbers": [
+ "PO12345"
+ ]
+ },
+ "type": "tracking_request"
+ }
+ }
}
}
}
@@ -1410,7 +1440,7 @@
"authorization": []
}
],
- "description": "To track an ocean shipment, you create a new tracking request. \nTwo attributes are required to track a shipment. A `bill of lading/booking number` and a shipping line `SCAC`. \n\nOnce a tracking request is created we will attempt to fetch the shipment details and it's related containers from the shipping line. If the attempt is successful we will create in new shipment object including any related container objects. We will send a `tracking_request.succeeded` webhook notification to your webhooks. \n\nIf the attempt to fetch fails then we will send a `tracking_request.failed` webhook notification to your `webhooks`. \n\nA `tracking_request.succeeded` or `tracking_request.failed` webhook notificaiton will only be sent if you have atleast one active webhook.
This endpoint is limited to 100 tracking requests per minute.",
+ "description": "To track an ocean shipment, create a new tracking request. `request_type` and `request_number` are always required. Supply either a shipping line `scac` or set `auto_detect_vocc_scac` to `true` to have Terminal49 infer the SCAC from the request number before creating the tracking request.\n\nAuto-detection uses the same carrier prediction capability as the Infer Tracking Number endpoint. If Terminal49 cannot infer a supported carrier confidently, the request is rejected with a 422 response and no tracking request is created. Once a tracking request is created we will attempt to fetch the shipment details and its related containers from the shipping line. If the attempt is successful we will create a new shipment object including any related container objects. We will send a `tracking_request.succeeded` webhook notification to your webhooks.\n\nIf the attempt to fetch fails then we will send a `tracking_request.failed` webhook notification to your `webhooks`.\n\nA `tracking_request.succeeded` or `tracking_request.failed` webhook notification will only be sent if you have at least one active webhook.
This endpoint is limited to 100 tracking requests per minute.",
"tags": [
"Tracking Requests"
],
diff --git a/docs/sdk/reference/client/classes/Terminal49Client.mdx b/docs/sdk/reference/client/classes/Terminal49Client.mdx
index 06408bf3..ff6b5f00 100644
--- a/docs/sdk/reference/client/classes/Terminal49Client.mdx
+++ b/docs/sdk/reference/client/classes/Terminal49Client.mdx
@@ -42,13 +42,14 @@ data from Node.js applications.
> **createTrackingRequest**(`params`): `Promise`\<`any`\>
-Create a tracking request with an explicit number type and carrier SCAC.
+Create a tracking request with an explicit number type and carrier SCAC, or ask the API to auto-detect the carrier SCAC.
#### Parameters
| Parameter | Type |
| ------ | ------ |
-| `params` | \{ `refNumbers?`: `string`[]; `requestNumber`: `string`; `requestType`: [`TrackingRequestType`](/sdk/reference/client/managers/type-aliases/TrackingRequestType); `scac?`: `string`; `shipmentTags?`: `string`[]; \} |
+| `params` | \{ `autoDetectVoccScac?`: `boolean`; `refNumbers?`: `string`[]; `requestNumber`: `string`; `requestType`: [`TrackingRequestType`](/sdk/reference/client/managers/type-aliases/TrackingRequestType); `scac?`: `string`; `shipmentTags?`: `string`[]; \} |
+| `params.autoDetectVoccScac?` | `boolean` |
| `params.refNumbers?` | `string`[] |
| `params.requestNumber` | `string` |
| `params.requestType` | [`TrackingRequestType`](/sdk/reference/client/managers/type-aliases/TrackingRequestType) |
@@ -471,7 +472,8 @@ Convenience helper for creating a tracking request from a container or booking n
| Parameter | Type |
| ------ | ------ |
-| `params` | \{ `bookingNumber?`: `string`; `containerNumber?`: `string`; `refNumbers?`: `string`[]; `scac?`: `string`; \} |
+| `params` | \{ `autoDetectVoccScac?`: `boolean`; `bookingNumber?`: `string`; `containerNumber?`: `string`; `refNumbers?`: `string`[]; `scac?`: `string`; \} |
+| `params.autoDetectVoccScac?` | `boolean` |
| `params.bookingNumber?` | `string` |
| `params.containerNumber?` | `string` |
| `params.refNumbers?` | `string`[] |
diff --git a/docs/sdk/reference/client/managers/classes/TrackingRequestManager.mdx b/docs/sdk/reference/client/managers/classes/TrackingRequestManager.mdx
index 5fe46657..2a600691 100644
--- a/docs/sdk/reference/client/managers/classes/TrackingRequestManager.mdx
+++ b/docs/sdk/reference/client/managers/classes/TrackingRequestManager.mdx
@@ -40,7 +40,8 @@ description: "TrackingRequestManager in the Terminal49 TypeScript SDK, used to c
| Parameter | Type |
| ------ | ------ |
-| `params` | \{ `refNumbers?`: `string`[]; `requestNumber`: `string`; `requestType`: [`TrackingRequestType`](/sdk/reference/client/managers/type-aliases/TrackingRequestType); `scac?`: `string`; `shipmentTags?`: `string`[]; \} |
+| `params` | \{ `autoDetectVoccScac?`: `boolean`; `refNumbers?`: `string`[]; `requestNumber`: `string`; `requestType`: [`TrackingRequestType`](/sdk/reference/client/managers/type-aliases/TrackingRequestType); `scac?`: `string`; `shipmentTags?`: `string`[]; \} |
+| `params.autoDetectVoccScac?` | `boolean` |
| `params.refNumbers?` | `string`[] |
| `params.requestNumber` | `string` |
| `params.requestType` | [`TrackingRequestType`](/sdk/reference/client/managers/type-aliases/TrackingRequestType) |
diff --git a/sdks/typescript-sdk/src/client.request.test.ts b/sdks/typescript-sdk/src/client.request.test.ts
index de4bde49..2083c5f2 100644
--- a/sdks/typescript-sdk/src/client.request.test.ts
+++ b/sdks/typescript-sdk/src/client.request.test.ts
@@ -311,6 +311,64 @@ describe('Terminal49Client request building', () => {
expect(calls[1].url.searchParams.get('include')).toBe('shipment,container');
});
+ it('sends explicit scac when creating tracking request', async () => {
+ let captured: any = null;
+ const { fetchImpl } = createMockFetch({
+ '/tracking_requests': (init) => {
+ captured = JSON.parse(String(init?.body));
+ return jsonResponse({ data: { id: 'tr-1' } }, 201);
+ },
+ });
+
+ const client = new Terminal49Client({
+ apiToken: 'token-123',
+ apiBaseUrl: baseUrl,
+ fetchImpl,
+ });
+
+ await client.createTrackingRequest({
+ requestType: 'bill_of_lading',
+ requestNumber: 'MEDUFR030802',
+ scac: 'MSCU',
+ });
+
+ expect(captured.data.attributes).toMatchObject({
+ request_type: 'bill_of_lading',
+ request_number: 'MEDUFR030802',
+ scac: 'MSCU',
+ });
+ expect(captured.data.attributes.auto_detect_vocc_scac).toBeUndefined();
+ });
+
+ it('sends auto_detect_vocc_scac without blank scac when requested', async () => {
+ let captured: any = null;
+ const { fetchImpl } = createMockFetch({
+ '/tracking_requests': (init) => {
+ captured = JSON.parse(String(init?.body));
+ return jsonResponse({ data: { id: 'tr-2' } }, 201);
+ },
+ });
+
+ const client = new Terminal49Client({
+ apiToken: 'token-123',
+ apiBaseUrl: baseUrl,
+ fetchImpl,
+ });
+
+ await client.createTrackingRequest({
+ requestType: 'bill_of_lading',
+ requestNumber: 'MEDUFR030802',
+ autoDetectVoccScac: true,
+ });
+
+ expect(captured.data.attributes).toMatchObject({
+ request_type: 'bill_of_lading',
+ request_number: 'MEDUFR030802',
+ auto_detect_vocc_scac: true,
+ });
+ expect(captured.data.attributes.scac).toBeUndefined();
+ });
+
it('sends JSON:API payload for updateTrackingRequest', async () => {
let captured: any = null;
const { fetchImpl } = createMockFetch({
diff --git a/sdks/typescript-sdk/src/client.ts b/sdks/typescript-sdk/src/client.ts
index 45889dac..f112e21a 100644
--- a/sdks/typescript-sdk/src/client.ts
+++ b/sdks/typescript-sdk/src/client.ts
@@ -179,6 +179,7 @@ export class Terminal49Client {
containerNumber?: string;
bookingNumber?: string;
scac?: string;
+ autoDetectVoccScac?: boolean;
refNumbers?: string[];
}): Promise {
const requestType: TrackingRequestType = params.containerNumber
@@ -196,15 +197,17 @@ export class Terminal49Client {
requestType,
requestNumber,
scac: params.scac,
+ autoDetectVoccScac: params.autoDetectVoccScac,
refNumbers: params.refNumbers,
});
}
- /** Create a tracking request with an explicit number type and carrier SCAC. */
+ /** Create a tracking request with an explicit number type and carrier SCAC, or ask the API to auto-detect the carrier SCAC. */
async createTrackingRequest(params: {
requestType: TrackingRequestType;
requestNumber: string;
scac?: string;
+ autoDetectVoccScac?: boolean;
refNumbers?: string[];
shipmentTags?: string[];
}): Promise {
diff --git a/sdks/typescript-sdk/src/client/managers/tracking-requests.ts b/sdks/typescript-sdk/src/client/managers/tracking-requests.ts
index f8f153e5..7923d281 100644
--- a/sdks/typescript-sdk/src/client/managers/tracking-requests.ts
+++ b/sdks/typescript-sdk/src/client/managers/tracking-requests.ts
@@ -105,6 +105,7 @@ export class TrackingRequestManager extends BaseManager {
requestType: TrackingRequestType;
requestNumber: string;
scac?: string;
+ autoDetectVoccScac?: boolean;
refNumbers?: string[];
shipmentTags?: string[];
}): Promise {
@@ -119,16 +120,23 @@ export class TrackingRequestManager extends BaseManager {
);
}
+ const attributes: Record = {
+ request_type: params.requestType,
+ request_number: params.requestNumber,
+ scac: params.scac ?? '',
+ ref_numbers: params.refNumbers,
+ shipment_tags: params.shipmentTags,
+ };
+
+ if (params.autoDetectVoccScac) {
+ attributes.auto_detect_vocc_scac = true;
+ if (!params.scac) delete attributes.scac;
+ }
+
const payload = {
data: {
type: 'tracking_request' as const,
- attributes: {
- request_type: params.requestType,
- request_number: params.requestNumber,
- scac: params.scac ?? '',
- ref_numbers: params.refNumbers,
- shipment_tags: params.shipmentTags,
- },
+ attributes,
},
};
From 545567f7ff2492b2a5b24f84d9ba9d7f44d69389 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Mon, 22 Jun 2026 22:14:16 +0000
Subject: [PATCH 2/5] chore: Auto-generate Postman collection from openapi.json
[skip ci]
---
Terminal49-API.postman_collection.json | 835 +++++++++----------------
1 file changed, 312 insertions(+), 523 deletions(-)
diff --git a/Terminal49-API.postman_collection.json b/Terminal49-API.postman_collection.json
index c789e321..b5c9c1bf 100644
--- a/Terminal49-API.postman_collection.json
+++ b/Terminal49-API.postman_collection.json
@@ -5,7 +5,7 @@
"description": "",
"item": [
{
- "id": "d17ddc1a-8481-4165-9560-4f871049d5b6",
+ "id": "680c4b44-733d-4258-8dab-764d54c21dd8",
"name": "List containers",
"request": {
"name": "List containers",
@@ -63,7 +63,7 @@
},
"response": [
{
- "id": "4879282a-6e65-4788-b6d2-f3b212a46b02",
+ "id": "c5c19321-c15a-41a7-b3a7-0e4cbe2cb4ec",
"name": "OK",
"originalRequest": {
"url": {
@@ -129,7 +129,7 @@
"value": "application/json"
}
],
- "body": "{\n \"data\": [\n {\n \"id\": \"\",\n \"type\": \"account\",\n \"attributes\": {\n \"number\": \"\",\n \"ref_numbers\": [\n \"\",\n \"\"\n ],\n \"equipment_type\": \"bulk\",\n \"equipment_length\": 20,\n \"equipment_height\": null,\n \"weight_in_lbs\": \"\",\n \"created_at\": \"\",\n \"seal_number\": \"\",\n \"pickup_lfd\": \"\",\n \"pickup_appointment_at\": \"\",\n \"availability_known\": \"\",\n \"available_for_pickup\": \"\",\n \"pod_arrived_at\": \"\",\n \"pod_discharged_at\": \"\",\n \"pod_full_out_at\": \"\",\n \"terminal_checked_at\": \"\",\n \"pod_full_out_chassis_number\": \"\",\n \"location_at_pod_terminal\": \"\",\n \"final_destination_full_out_at\": \"\",\n \"empty_terminated_at\": \"\",\n \"holds_at_pod_terminal\": [\n {\n \"name\": \"\",\n \"status\": \"pending\",\n \"description\": \"\"\n },\n {\n \"name\": \"\",\n \"status\": \"pending\",\n \"description\": \"\"\n }\n ],\n \"fees_at_pod_terminal\": [\n {\n \"type\": \"demurrage\",\n \"amount\": \"\",\n \"currency_code\": \"\"\n },\n {\n \"type\": \"extended_dwell_time\",\n \"amount\": \"\",\n \"currency_code\": \"\"\n }\n ],\n \"pod_timezone\": \"\",\n \"final_destination_timezone\": \"\",\n \"empty_terminated_timezone\": \"\",\n \"pod_rail_carrier_scac\": \"\",\n \"ind_rail_carrier_scac\": \"\",\n \"pod_last_tracking_request_at\": \"\",\n \"shipment_last_tracking_request_at\": \"\",\n \"pod_rail_loaded_at\": \"\",\n \"pod_rail_departed_at\": \"\",\n \"ind_eta_at\": \"\",\n \"ind_ata_at\": \"\",\n \"ind_rail_unloaded_at\": \"\",\n \"ind_facility_lfd_on\": \"\",\n \"import_deadlines\": {\n \"pickup_lfd_terminal\": \"\",\n \"pickup_lfd_rail\": \"\",\n \"pickup_lfd_line\": \"\"\n },\n \"current_status\": \"on_ship\"\n },\n \"relationships\": {\n \"shipment\": {\n \"data\": {\n \"id\": \"\",\n \"type\": \"shipment\"\n }\n },\n \"pickup_facility\": {\n \"data\": {\n \"id\": \"\",\n \"type\": \"terminal\"\n }\n },\n \"pod_terminal\": {\n \"data\": {\n \"id\": \"\",\n \"type\": \"terminal\"\n }\n },\n \"transport_events\": {\n \"data\": [\n {\n \"id\": \"\",\n \"type\": \"transport_event\"\n },\n {\n \"id\": \"\",\n \"type\": \"transport_event\"\n }\n ]\n },\n \"raw_events\": {\n \"data\": [\n {\n \"id\": \"\",\n \"type\": \"raw_event\"\n },\n {\n \"id\": \"\",\n \"type\": \"raw_event\"\n }\n ]\n }\n }\n },\n {\n \"id\": \"\",\n \"type\": \"account\",\n \"attributes\": {\n \"number\": \"\",\n \"ref_numbers\": [\n \"\",\n \"\"\n ],\n \"equipment_type\": \"flat rack\",\n \"equipment_length\": 45,\n \"equipment_height\": \"standard\",\n \"weight_in_lbs\": \"\",\n \"created_at\": \"\",\n \"seal_number\": \"\",\n \"pickup_lfd\": \"\",\n \"pickup_appointment_at\": \"\",\n \"availability_known\": \"\",\n \"available_for_pickup\": \"\",\n \"pod_arrived_at\": \"\",\n \"pod_discharged_at\": \"\",\n \"pod_full_out_at\": \"\",\n \"terminal_checked_at\": \"\",\n \"pod_full_out_chassis_number\": \"\",\n \"location_at_pod_terminal\": \"\",\n \"final_destination_full_out_at\": \"\",\n \"empty_terminated_at\": \"\",\n \"holds_at_pod_terminal\": [\n {\n \"name\": \"\",\n \"status\": \"pending\",\n \"description\": \"\"\n },\n {\n \"name\": \"\",\n \"status\": \"hold\",\n \"description\": \"\"\n }\n ],\n \"fees_at_pod_terminal\": [\n {\n \"type\": \"demurrage\",\n \"amount\": \"\",\n \"currency_code\": \"\"\n },\n {\n \"type\": \"total\",\n \"amount\": \"\",\n \"currency_code\": \"\"\n }\n ],\n \"pod_timezone\": \"\",\n \"final_destination_timezone\": \"\",\n \"empty_terminated_timezone\": \"\",\n \"pod_rail_carrier_scac\": \"\",\n \"ind_rail_carrier_scac\": \"\",\n \"pod_last_tracking_request_at\": \"\",\n \"shipment_last_tracking_request_at\": \"\",\n \"pod_rail_loaded_at\": \"\",\n \"pod_rail_departed_at\": \"\",\n \"ind_eta_at\": \"\",\n \"ind_ata_at\": \"\",\n \"ind_rail_unloaded_at\": \"\",\n \"ind_facility_lfd_on\": \"\",\n \"import_deadlines\": {\n \"pickup_lfd_terminal\": \"\",\n \"pickup_lfd_rail\": \"\",\n \"pickup_lfd_line\": \"\"\n },\n \"current_status\": \"picked_up\"\n },\n \"relationships\": {\n \"shipment\": {\n \"data\": {\n \"id\": \"\",\n \"type\": \"shipment\"\n }\n },\n \"pickup_facility\": {\n \"data\": {\n \"id\": \"\",\n \"type\": \"terminal\"\n }\n },\n \"pod_terminal\": {\n \"data\": {\n \"id\": \"\",\n \"type\": \"terminal\"\n }\n },\n \"transport_events\": {\n \"data\": [\n {\n \"id\": \"\",\n \"type\": \"transport_event\"\n },\n {\n \"id\": \"\",\n \"type\": \"transport_event\"\n }\n ]\n },\n \"raw_events\": {\n \"data\": [\n {\n \"id\": \"\",\n \"type\": \"raw_event\"\n },\n {\n \"id\": \"\",\n \"type\": \"raw_event\"\n }\n ]\n }\n }\n }\n ],\n \"included\": [\n {\n \"id\": \"\",\n \"type\": \"shipment\",\n \"attributes\": {\n \"bill_of_lading_number\": \"\",\n \"normalized_number\": \"\",\n \"ref_numbers\": [\n \"\",\n \"\"\n ],\n \"created_at\": \"\",\n \"tags\": [\n \"\",\n \"\"\n ],\n \"port_of_lading_locode\": \"\",\n \"port_of_lading_name\": \"\",\n \"port_of_discharge_locode\": \"\",\n \"port_of_discharge_name\": \"\",\n \"destination_locode\": \"\",\n \"destination_name\": \"\",\n \"shipping_line_scac\": \"\",\n \"shipping_line_name\": \"\",\n \"shipping_line_short_name\": \"\",\n \"customer_name\": \"\",\n \"pod_vessel_name\": \"\",\n \"pod_vessel_imo\": \"\",\n \"pod_voyage_number\": \"\",\n \"pol_etd_at\": \"\",\n \"pol_atd_at\": \"\",\n \"pod_eta_at\": \"\",\n \"pod_original_eta_at\": \"\",\n \"pod_ata_at\": \"\",\n \"destination_eta_at\": \"\",\n \"destination_ata_at\": \"\",\n \"pol_timezone\": \"\",\n \"pod_timezone\": \"\",\n \"destination_timezone\": \"\",\n \"line_tracking_last_attempted_at\": \"\",\n \"line_tracking_last_succeeded_at\": \"\",\n \"line_tracking_stopped_at\": \"\",\n \"line_tracking_stopped_reason\": null\n },\n \"relationships\": {\n \"destination\": {\n \"data\": {\n \"type\": \"port\",\n \"id\": \"\"\n }\n },\n \"port_of_lading\": {\n \"data\": {\n \"type\": \"port\",\n \"id\": \"\"\n }\n },\n \"containers\": {\n \"data\": [\n {\n \"type\": \"container\",\n \"id\": \"\"\n },\n {\n \"type\": \"container\",\n \"id\": \"\"\n }\n ]\n },\n \"port_of_discharge\": {\n \"data\": {\n \"type\": \"port\",\n \"id\": \"\"\n }\n },\n \"pod_terminal\": {\n \"data\": {\n \"type\": \"terminal\",\n \"id\": \"\"\n }\n },\n \"destination_terminal\": {\n \"data\": {\n \"type\": \"terminal\",\n \"id\": \"\"\n }\n },\n \"line_tracking_stopped_by_user\": {\n \"data\": {\n \"type\": \"user\",\n \"id\": \"\"\n }\n }\n },\n \"links\": {\n \"self\": \"\"\n }\n },\n {\n \"id\": \"\",\n \"type\": \"shipment\",\n \"attributes\": {\n \"bill_of_lading_number\": \"\",\n \"normalized_number\": \"\",\n \"ref_numbers\": [\n \"\",\n \"\"\n ],\n \"created_at\": \"\",\n \"tags\": [\n \"\",\n \"\"\n ],\n \"port_of_lading_locode\": \"\",\n \"port_of_lading_name\": \"\",\n \"port_of_discharge_locode\": \"\",\n \"port_of_discharge_name\": \"\",\n \"destination_locode\": \"\",\n \"destination_name\": \"\",\n \"shipping_line_scac\": \"\",\n \"shipping_line_name\": \"\",\n \"shipping_line_short_name\": \"\",\n \"customer_name\": \"\",\n \"pod_vessel_name\": \"\",\n \"pod_vessel_imo\": \"\",\n \"pod_voyage_number\": \"\",\n \"pol_etd_at\": \"\",\n \"pol_atd_at\": \"\",\n \"pod_eta_at\": \"\",\n \"pod_original_eta_at\": \"\",\n \"pod_ata_at\": \"\",\n \"destination_eta_at\": \"\",\n \"destination_ata_at\": \"\",\n \"pol_timezone\": \"\",\n \"pod_timezone\": \"\",\n \"destination_timezone\": \"\",\n \"line_tracking_last_attempted_at\": \"\",\n \"line_tracking_last_succeeded_at\": \"\",\n \"line_tracking_stopped_at\": \"\",\n \"line_tracking_stopped_reason\": \"no_updates_at_line\"\n },\n \"relationships\": {\n \"destination\": {\n \"data\": {\n \"type\": \"metro_area\",\n \"id\": \"\"\n }\n },\n \"port_of_lading\": {\n \"data\": {\n \"type\": \"port\",\n \"id\": \"\"\n }\n },\n \"containers\": {\n \"data\": [\n {\n \"type\": \"container\",\n \"id\": \"\"\n },\n {\n \"type\": \"container\",\n \"id\": \"\"\n }\n ]\n },\n \"port_of_discharge\": {\n \"data\": {\n \"type\": \"port\",\n \"id\": \"\"\n }\n },\n \"pod_terminal\": {\n \"data\": {\n \"type\": \"terminal\",\n \"id\": \"\"\n }\n },\n \"destination_terminal\": {\n \"data\": {\n \"type\": \"rail_terminal\",\n \"id\": \"\"\n }\n },\n \"line_tracking_stopped_by_user\": {\n \"data\": {\n \"type\": \"user\",\n \"id\": \"\"\n }\n }\n },\n \"links\": {\n \"self\": \"\"\n }\n }\n ],\n \"links\": {\n \"last\": \"\",\n \"next\": \"\",\n \"prev\": \"\",\n \"first\": \"\",\n \"self\": \"\"\n },\n \"meta\": {\n \"size\": \"\",\n \"total\": \"\"\n }\n}",
+ "body": "{\n \"data\": [\n {\n \"id\": \"\",\n \"type\": \"account\",\n \"attributes\": {\n \"number\": \"\",\n \"ref_numbers\": [\n \"\",\n \"\"\n ],\n \"equipment_type\": \"open top\",\n \"equipment_length\": 40,\n \"equipment_height\": null,\n \"weight_in_lbs\": \"\",\n \"created_at\": \"\",\n \"seal_number\": \"\",\n \"pickup_lfd\": \"\",\n \"pickup_appointment_at\": \"\",\n \"availability_known\": \"\",\n \"available_for_pickup\": \"\",\n \"pod_arrived_at\": \"\",\n \"pod_discharged_at\": \"\",\n \"pod_full_out_at\": \"\",\n \"terminal_checked_at\": \"\",\n \"pod_full_out_chassis_number\": \"\",\n \"location_at_pod_terminal\": \"\",\n \"final_destination_full_out_at\": \"\",\n \"empty_terminated_at\": \"\",\n \"holds_at_pod_terminal\": [\n {\n \"name\": \"\",\n \"status\": \"pending\",\n \"description\": \"\"\n },\n {\n \"name\": \"\",\n \"status\": \"hold\",\n \"description\": \"\"\n }\n ],\n \"fees_at_pod_terminal\": [\n {\n \"type\": \"other\",\n \"amount\": \"\",\n \"currency_code\": \"\"\n },\n {\n \"type\": \"other\",\n \"amount\": \"\",\n \"currency_code\": \"\"\n }\n ],\n \"pod_timezone\": \"\",\n \"final_destination_timezone\": \"\",\n \"empty_terminated_timezone\": \"\",\n \"pod_rail_carrier_scac\": \"\",\n \"ind_rail_carrier_scac\": \"\",\n \"pod_last_tracking_request_at\": \"\",\n \"shipment_last_tracking_request_at\": \"\",\n \"pod_rail_loaded_at\": \"\",\n \"pod_rail_departed_at\": \"\",\n \"ind_eta_at\": \"\",\n \"ind_ata_at\": \"\",\n \"ind_rail_unloaded_at\": \"\",\n \"ind_facility_lfd_on\": \"\",\n \"import_deadlines\": {\n \"pickup_lfd_terminal\": \"\",\n \"pickup_lfd_rail\": \"\",\n \"pickup_lfd_line\": \"\"\n },\n \"current_status\": \"delivered\"\n },\n \"relationships\": {\n \"shipment\": {\n \"data\": {\n \"id\": \"\",\n \"type\": \"shipment\"\n }\n },\n \"pickup_facility\": {\n \"data\": {\n \"id\": \"\",\n \"type\": \"terminal\"\n }\n },\n \"pod_terminal\": {\n \"data\": {\n \"id\": \"\",\n \"type\": \"terminal\"\n }\n },\n \"transport_events\": {\n \"data\": [\n {\n \"id\": \"\",\n \"type\": \"transport_event\"\n },\n {\n \"id\": \"\",\n \"type\": \"transport_event\"\n }\n ]\n },\n \"raw_events\": {\n \"data\": [\n {\n \"id\": \"\",\n \"type\": \"raw_event\"\n },\n {\n \"id\": \"\",\n \"type\": \"raw_event\"\n }\n ]\n }\n }\n },\n {\n \"id\": \"\",\n \"type\": \"account\",\n \"attributes\": {\n \"number\": \"\",\n \"ref_numbers\": [\n \"\",\n \"\"\n ],\n \"equipment_type\": \"open top\",\n \"equipment_length\": 10,\n \"equipment_height\": \"standard\",\n \"weight_in_lbs\": \"\",\n \"created_at\": \"