diff --git a/docs/api-docs/getting-started/list-shipments-and-containers.mdx b/docs/api-docs/getting-started/list-shipments-and-containers.mdx index f3506b37..a2028d6a 100644 --- a/docs/api-docs/getting-started/list-shipments-and-containers.mdx +++ b/docs/api-docs/getting-started/list-shipments-and-containers.mdx @@ -12,7 +12,7 @@ keywords: - "shipment data" - "container data" --- -## Shipment and Container Data in Terminal49 +## Shipment and container data in Terminal49 After you've successfully made a tracking request, Terminal49 will begin to track shipments and store relevant information about that shipment on your behalf. @@ -22,7 +22,7 @@ You can access data about shipments and containers on your tracked shipments any Keep in mind, however, that apart from initialization code, you would not usually access shipment data in this way. You would use Webhooks (described in the next section). A Webhook is another name for a web-based callback URL, or a HTTP Push API. They provide a method for an API to post a notification to your service. Specifically, a webhook is simply a URL that can receive HTTP Post Requests from the Terminal49 API. -## List all your Tracked Shipments +## List all your tracked shipments If your tracking request was successful, you will now be able to list your tracked shipments. @@ -58,7 +58,7 @@ This means you send your API Key as your token in every request. Webhooks are associated with API tokens, and this is how the Terminal49 knows who to return relevant shipment information to. -## Anatomy of Shipments JSON Response +## Anatomy of shipments JSON response Here's what you'll see come back after you get the /shipments endpoint. @@ -130,7 +130,7 @@ You can write code to access these structured elements from the API. The advanta } ``` -## Sample Code: Listing Tracked Shipment into a Google Sheet +## Sample code: listing tracked shipments in a Google Sheet Below is code written in Google App Script that lists the current shipments into the current sheet of a spreadsheet. App Script is very similar to Javascript. @@ -213,7 +213,7 @@ function listShipmentValues(shipment_values){ ``` -## List all your Tracked Containers +## List all your tracked containers You can also list out all of your Containers. Container data includes terminal availability, last free day, holds, fees, and other logistical information that you might use for drayage operations at port. @@ -237,7 +237,7 @@ To learn how to use holds and fees data to determine if a container is ready for } ``` -## Anatomy of Containers JSON Response +## Anatomy of containers JSON response Now that you've got a list of containers, let's examine the response you've received. ```jsx diff --git a/docs/api-docs/getting-started/receive-status-updates.mdx b/docs/api-docs/getting-started/receive-status-updates.mdx index ad823d98..655fcc04 100644 --- a/docs/api-docs/getting-started/receive-status-updates.mdx +++ b/docs/api-docs/getting-started/receive-status-updates.mdx @@ -12,7 +12,7 @@ keywords: - "shipment events" - "container events" --- -## Using Webhooks to Receive Status Updates +## Using webhooks to receive status updates Terminal49 posts status updates to a webhook that you register with us. @@ -20,7 +20,7 @@ A Webhook is another name for a web-based callback URL, or a HTTP Push API. They The HTTP Post request from Terminal49 has a JSON payload which you can parse to extract the relevant information. -## How do I use a Webhook with Terminal49? +## How do I use a webhook with Terminal49? First, you need to register a webhook. You can register as many webhooks as you like. Webhooks are associated with your account. All updates relating to that account are sent to the Webhook associated with it. @@ -37,7 +37,7 @@ This means you send your API Key as your token in every request. Webhooks are associated with API tokens, and this is how the Terminal49 knows who to return relevant shipment information to. -## Anatomy of a Webhook Notification +## Anatomy of a webhook notification Here's what you'll see in a Webhook Notification, which arrives as a POST request to your designated URL. @@ -156,7 +156,7 @@ You can find what type of event you have received by looking at the "attributes" } ``` -### Inclusions: Tracking Requests & Shipment Data +### Inclusions: tracking requests and shipment data When a tracking request has succeeded, the webhook event **includes** information about the shipment, the containers in the shipment, and the milestones for that container, so your app can present this information to your end users without making further queries to the API. @@ -227,9 +227,9 @@ Some objects have **relationships**. These are simply links to another object. T ] ``` -## Code Examples +## Code examples -### Registering a Webhook +### Registering a webhook ```jsx function registerWebhook(){ @@ -257,7 +257,7 @@ function registerWebhook(){ } ``` -### Receiving a Post Webhook +### Receiving a POST webhook Here's an example of some Javascript code that receives a Post request and parses out some of the desired data. @@ -307,7 +307,7 @@ function isTrackingRequest(item){ } ``` -## Try It Out & See More Sample Code +## Try it out and see more sample code Update your API key below, and register a simple Webhook. diff --git a/docs/api-docs/getting-started/start-here.mdx b/docs/api-docs/getting-started/start-here.mdx index f5d80714..e30e5216 100644 --- a/docs/api-docs/getting-started/start-here.mdx +++ b/docs/api-docs/getting-started/start-here.mdx @@ -22,7 +22,7 @@ Our APIs can be used with any HTTP client; choose your favorite! We love Postman *** -## Get an API Key +## Get an API key Sign in to your Terminal49 account and go to your [developer portal](https://app.terminal49.com/developers/api-keys) page to get your API key. ### Authentication diff --git a/docs/api-docs/getting-started/tracking-shipments-and-containers.mdx b/docs/api-docs/getting-started/tracking-shipments-and-containers.mdx index 4ff3f4c5..5e768c05 100644 --- a/docs/api-docs/getting-started/tracking-shipments-and-containers.mdx +++ b/docs/api-docs/getting-started/tracking-shipments-and-containers.mdx @@ -12,7 +12,7 @@ keywords: - "booking tracking" - "container tracking" --- -## What is a Tracking Request? +## What is a tracking request? Your tracking request includes two pieces of data: @@ -44,7 +44,7 @@ You can see a complete list of supported SCACs in row 2 of the Carrier Data Matr - Seal numbers - Internally generated numbers, for example PO numbers or customer reference numbers. -## How do I use Tracking Requests? +## How do I use tracking requests? Terminal49 is an event-based API, which means that the API can be used asynchronously. In general the data flow is: @@ -86,7 +86,7 @@ Support [dev@terminal49.com](mailto:dev@terminal49.com) Authorization: Token YOUR_API_KEY ``` -## How to Create a Tracking Request +## How to create a tracking request Here is javascript code that demonstates sending a tracking request @@ -116,7 +116,7 @@ fetch("https://api.terminal49.com/v2/tracking_requests", { }); ``` -## Anatomy of a Tracking Request Response +## Anatomy of a tracking request response Here's what you'll see in a Response to a tracking request. @@ -174,7 +174,7 @@ The Terminal49 API is JSON API compliant, which means that there are nifty libra -## Try It: Make a Tracking Request +## Try it: make a tracking request Try it using the request maker below! @@ -217,7 +217,7 @@ It is entirely possible that's neither us nor you but the shipping line is givin } ``` -## Try It: List Your Active Tracking Requests +## Try it: list your active tracking requests We have not yet set up a webook to receive status updates from the Terminal49 API, so we will need to manually poll to check if the Tracking Request has succeeded or failed. @@ -234,7 +234,7 @@ We have not yet set up a webook to receive status updates from the Terminal49 AP } ``` -## Next Up: Get your Shipments +## Next up: get your shipments Now that you've made a tracking request, let's see how you can list your shipments and retrieve the relevant data. diff --git a/docs/api-docs/in-depth-guides/auto-detect-carrier.mdx b/docs/api-docs/in-depth-guides/auto-detect-carrier.mdx index f7f2206a..5a767a9f 100644 --- a/docs/api-docs/in-depth-guides/auto-detect-carrier.mdx +++ b/docs/api-docs/in-depth-guides/auto-detect-carrier.mdx @@ -27,7 +27,7 @@ But what if you don't know the SCAC? That's where the Infer API comes in. the carrier. Now this same intelligence is available via API. -## Why SCAC Matters +## Why SCAC matters To track a shipment or container, Terminal49 needs to know **which shipping line to ask** (also called the vessel-operating common carrier (VOCC)). The SCAC (Standard Carrier Alpha Code) we use here is the **shipping line SCAC for tracking** — i.e., the carrier operating the move we’re querying for events and shipment data. @@ -44,7 +44,7 @@ The SCAC (Standard Carrier Alpha Code) we use here is the **shipping line SCAC f increase the likelihood your tracking request succeeds. -## How the Infer API Helps +## How the Infer API helps Submit any tracking number, and the API returns: @@ -68,7 +68,7 @@ Submit any tracking number, and the API returns: -## Examples by Number Type +## Examples by number type @@ -275,7 +275,7 @@ Submit any tracking number, and the API returns: -## Understanding the Response +## Understanding the response @@ -324,7 +324,7 @@ Submit any tracking number, and the API returns: -## Integration Guide +## Integration guide For developers implementing this API, here are code examples in different languages: @@ -417,7 +417,7 @@ curl -X POST https://api.terminal49.com/v2/tracking_requests/infer_number \ -## Rate Limits +## Rate limits | Setting | Value | | ------------------- | ----------------------- | @@ -429,7 +429,7 @@ curl -X POST https://api.terminal49.com/v2/tracking_requests/infer_number \ header to avoid extended throttling. -## What's Next? +## What's next? classify -\> extract -\> webhook result. -## Workflow Diagrams +## Workflow diagrams ```mermaid flowchart LR @@ -34,7 +34,7 @@ flowchart LR F --> G[Terminal49 sends webhook result] ``` -## Workflow: Step-by-Step +## Workflow: step-by-step @@ -58,7 +58,7 @@ flowchart LR Treat submission as asynchronous. Do not assume extraction is complete immediately after upload/email. -## Technical Implementation (One End-to-End Example) +## Technical implementation (one end-to-end example) Example scenario: user uploads one file, `invoice.pdf`. @@ -214,7 +214,7 @@ Response (`201`): Use the webhook `event` and included `document` payload to update your internal record for that document. -## Webhooks You Should Handle +## Webhooks you should handle | Event | Meaning | | --- | --- | @@ -230,7 +230,7 @@ Use the webhook `event` and included `document` payload to update your internal Webhook event availability depends on your account configuration. If you are not receiving expected events, contact Terminal49 support. -## APIs Involved +## APIs involved - [`POST /documents`](/api-docs/api-reference/documents/upload-a-document) - [`GET /documents`](/api-docs/api-reference/documents/list-documents) @@ -241,6 +241,6 @@ Use the webhook `event` and included `document` payload to update your internal - [`GET /document_schemas/{id}`](/api-docs/api-reference/document-schemas/get-a-document-schema) - [`Document representations resource`](/api-docs/api-reference/document-representations/document-representations-resource) -## Planned (Not Live Yet) +## Planned (not live yet) - `email_submission.created` webhook event after inbound email acceptance. \ No newline at end of file diff --git a/docs/api-docs/in-depth-guides/event-timestamps.mdx b/docs/api-docs/in-depth-guides/event-timestamps.mdx index a189a156..d807c599 100644 --- a/docs/api-docs/in-depth-guides/event-timestamps.mdx +++ b/docs/api-docs/in-depth-guides/event-timestamps.mdx @@ -40,5 +40,5 @@ then the local time of the `pod_arrived_at` timestamp would be `2022-12-22T07:00 -## System Timestamps +## System timestamps Timestamps representing changes within the Terminal49 system (e.g. `created_at`, `updated_at`, `terminal_checked_at`) are stored and represented in UTC and do not have a TimeZone. \ No newline at end of file diff --git a/docs/api-docs/in-depth-guides/mcp.mdx b/docs/api-docs/in-depth-guides/mcp.mdx index 51e7a727..c2c79f71 100644 --- a/docs/api-docs/in-depth-guides/mcp.mdx +++ b/docs/api-docs/in-depth-guides/mcp.mdx @@ -62,7 +62,7 @@ Claude Desktop and Cursor use the HTTP transport. For hosted production usage, u --- -## Configure Your MCP Client +## Configure your MCP client ### Claude Desktop @@ -136,7 +136,7 @@ Add to your Cursor settings: } ``` -### Local stdio (Development) +### Local stdio (development) For local development without a hosted server: @@ -175,7 +175,7 @@ T49_SDK_SOURCE=local npm run sdk:setup --- -## Test Your Setup +## Test your setup Once configured, verify everything works: @@ -229,9 +229,9 @@ T49_API_TOKEN=your_token npm run mcp:stdio 2>&1 | head -20 --- -## MCP Capabilities +## MCP capabilities -### Tools (10) +### Tools | Tool | Description | Parameters | |------|-------------|------------| @@ -246,7 +246,7 @@ T49_API_TOKEN=your_token npm run mcp:stdio 2>&1 | head -20 | `list_containers` | List containers with filters + pagination | `status?`, `port?`, `carrier?`, `updated_after?`, `include?`, `page?`, `page_size?` | | `list_tracking_requests` | List tracking requests with filters | `filters?`, `status?`, `request_type?`, `page?`, `page_size?` | -### Prompts (3) +### Prompts | Prompt | Description | Arguments | |--------|-------------|-----------| @@ -254,7 +254,7 @@ T49_API_TOKEN=your_token npm run mcp:stdio 2>&1 | head -20 | `check-demurrage` | Demurrage risk analysis | `container_id` | | `analyze-delays` | Journey delay analysis | `container_id` | -### Resources (2) +### Resources | URI | Description | |-----|-------------| @@ -265,7 +265,7 @@ For detailed examples and response formats, see [MCP Overview → Tools Referenc --- -## SDK Usage +## SDK usage The TypeScript SDK provides the same capabilities as MCP tools, plus additional APIs not yet exposed via MCP. @@ -297,7 +297,7 @@ const shipments = await client.shipments.list({ }); ``` -### Response Formats +### Response formats | Format | Description | |--------|-------------| @@ -334,7 +334,7 @@ const shipments = await client.shipments.list({ ## Deployment -### Vercel (Production) +### Vercel (production) The `vercel.json` configures the MCP server: @@ -350,7 +350,7 @@ The `vercel.json` configures the MCP server: } ``` -### Environment Variables +### Environment variables | Variable | Required | Description | |----------|----------|-------------| @@ -361,7 +361,7 @@ The `vercel.json` configures the MCP server: --- -## Testing Locally +## Testing locally ```bash # Build the MCP server @@ -384,7 +384,7 @@ curl -X POST https://mcp.terminal49.com/mcp \ --- -## Related Guides +## Related guides - [MCP Overview](/mcp/home) – Quick start and tools reference - [Rate Limiting](/api-docs/in-depth-guides/rate-limiting) – API limits (same for MCP) diff --git a/docs/api-docs/in-depth-guides/quickstart.mdx b/docs/api-docs/in-depth-guides/quickstart.mdx index 57e3f692..3245ec4d 100644 --- a/docs/api-docs/in-depth-guides/quickstart.mdx +++ b/docs/api-docs/in-depth-guides/quickstart.mdx @@ -12,7 +12,7 @@ keywords: - "SCAC" - "first integration" --- -## Before You Begin +## Before you begin You'll need a four things to get started. @@ -27,7 +27,7 @@ You'll need a four things to get started. from your tracking number. -## Track a Shipment +## Track a shipment You can try this using the embedded request maker below, or using Postman. @@ -48,7 +48,7 @@ Note that you can also access sample code, include a cURL template, by clicking } ``` -## Check Your Tracking Request Succeeded +## Check your tracking request succeeded We have not yet set up a webook to receive status updates from the Terminal49 API, so we will need to manually poll to check if the Tracking Request has succeeded or failed. @@ -73,7 +73,7 @@ We have not yet set up a webook to receive status updates from the Terminal49 AP } ``` -## List your Tracked Shipments +## List your tracked shipments If your tracking request was successful, you will now be able to list your tracked shipments. @@ -94,7 +94,7 @@ If you had trouble adding your first shipment, try adding a few more. } ``` -## List all your Tracked Containers +## List all your tracked containers You can also list out all of your containers, if you'd like to track at that level. @@ -111,7 +111,7 @@ Try it after replacing `` with your API key. } ``` -## Listening for Updates with Webhooks +## Listening for updates with webhooks The true power of Terminal49's API is that it is asynchronous. You can register a Webhook, which is essentially a callback URL that our systems HTTP Post to when there are updates. diff --git a/docs/api-docs/in-depth-guides/rail-integration-guide.mdx b/docs/api-docs/in-depth-guides/rail-integration-guide.mdx index 5c330636..79248d82 100644 --- a/docs/api-docs/in-depth-guides/rail-integration-guide.mdx +++ b/docs/api-docs/in-depth-guides/rail-integration-guide.mdx @@ -18,18 +18,18 @@ This is a technical article about rail data within Terminal49's API and DataSync For a broader overview, including the reasons why you'd want rail visibility and how to use it in the Terminal49 dashboard, [read our announcement post](https://www.terminal49.com/blog/launching-north-american-intermodal-rail-visibility-on-terminal49/). -## Table of Contents - -- [Supported Rail Carriers](#supported-rail-carriers) -- [Supported Rail Events and Data Attributes](#supported-rail-events-and-data-attributes) - - [Rail-specific Transport Events](#rail-specific-transport-events) - - [Webhook Notifications](#webhook-notifications) - - [Rail Container Attributes](#rail-container-attributes) -- [Integration Methods](#integration-methods) +## Table of contents + +- [Supported rail carriers](#supported-rail-carriers) +- [Supported rail events and data attributes](#supported-rail-events-and-data-attributes) + - [Rail-specific transport events](#rail-specific-transport-events) + - [Webhook notifications](#webhook-notifications) + - [Rail container attributes](#rail-container-attributes) +- [Integration methods](#integration-methods) - [Integration via API](#a-integration-via-api) - [Integration via DataSync](#b-integration-via-datasync) -## Supported Rail Carriers +## Supported rail carriers Terminal49 container tracking platform integrates with all North American Class-1 railroads that handle container shipping, providing comprehensive visibility into your rail container movements. @@ -42,7 +42,7 @@ Terminal49 container tracking platform integrates with all North American Class- By integrating with these carriers, Terminal49 ensures that you have direct access to critical tracking data, enabling better decision-making and operational efficiency. -## Supported Rail Events and Data Attributes +## Supported rail events and data attributes Terminal49 seamlessly tracks your containers as they go from container ship, to ocean terminal, to rail carrier. @@ -102,7 +102,7 @@ graph LR G --> E[Full Out] ``` */} -### Webhook Notifications +### Webhook notifications Terminal49 provides webhook notifications to keep you updated on key Transport Events in a container's rail journey. These notifications allow you to integrate near real-time tracking data directly into your applications. @@ -131,7 +131,7 @@ Finally, we have a webhook notifications for when the destination ETA changes. Integrate these notifications by subscribing to the webhooks and handling the incoming data to update your systems. -#### Rail Container Attributes +#### Rail container attributes The following are new attributes that are specific to rail container tracking. @@ -148,7 +148,7 @@ The following are new attributes that are specific to rail container tracking. These attributes can be found on [container objects](/api-docs/api-reference/containers/get-a-container). -## Integration Methods +## Integration methods There are two methods to integrate Terminal49's rail tracking data programmatically: via API and DataSync. diff --git a/docs/api-docs/in-depth-guides/rate-limiting.mdx b/docs/api-docs/in-depth-guides/rate-limiting.mdx index 502c97ce..dc3cf6c3 100644 --- a/docs/api-docs/in-depth-guides/rate-limiting.mdx +++ b/docs/api-docs/in-depth-guides/rate-limiting.mdx @@ -15,13 +15,13 @@ keywords: Terminal49 API implements rate limiting to ensure fair usage and maintain service quality for all users. -## Rate Limit Details +## Rate limit details - **Limit**: 100 requests per minute per account - **Scope**: Applied per API key/account - **Window**: Rolling 60-second window -## Rate Limit Response +## Rate limit response When you exceed the rate limit, the API will return: @@ -43,9 +43,9 @@ When you exceed the rate limit, the API will return: } ``` -## Best Practices +## Best practices -### 1. Use Webhooks Instead of Polling +### 1. Use webhooks instead of polling The most effective way to avoid rate limits is to use **webhooks** for real-time updates instead of repeatedly polling the API: @@ -54,7 +54,7 @@ The most effective way to avoid rate limits is to use **webhooks** for real-time - Provides instant updates without consuming your rate limit - See the [Webhooks](/api-docs/api-reference/webhooks) section for setup instructions -### 2. Implement Exponential Backoff +### 2. Implement exponential backoff If you receive a `429` response: @@ -63,19 +63,19 @@ If you receive a `429` response: 3. Implement exponential backoff for subsequent failures 4. Don't retry immediately, as this will consume your limit further -### 3. Batch Your Requests +### 3. Batch your requests - Use list endpoints with filtering instead of multiple individual requests - Leverage the [`include` parameter](/api-docs/in-depth-guides/including-resources) to fetch related resources in a single request - Cache responses when appropriate to reduce redundant calls -### 4. Monitor Your Usage +### 4. Monitor your usage - Track your request patterns - Identify and optimize high-frequency operations - Consider spreading requests over time rather than bursting -## Need a Higher Limit? +## Need a higher limit? If your use case requires a higher rate limit: @@ -132,7 +132,7 @@ response = make_request_with_retry( ) ``` -## Tips for High-Volume Applications +## Tips for high-volume applications If you're building a high-volume application: diff --git a/docs/api-docs/in-depth-guides/routing.mdx b/docs/api-docs/in-depth-guides/routing.mdx index a3cab1cb..1592218e 100644 --- a/docs/api-docs/in-depth-guides/routing.mdx +++ b/docs/api-docs/in-depth-guides/routing.mdx @@ -18,22 +18,22 @@ This is a technical article describing how to use our Routing Data feature, usin Routing Data (Container Map GeoJSON API) is a paid feature. These APIs are subject to additional terms of usage and pricing. If you are interested in using these APIs, please contact sales@terminal49.com. -## Table of Contents +## Table of contents - [Overview](#overview) -- [Getting Started](#getting-started) -- [Understanding the Response](#understanding-the-response) - - [GeoJSON FeatureCollection Structure](#geojson-featurecollection-structure) - - [Feature Types](#feature-types) +- [Getting started](#getting-started) +- [Understanding the response](#understanding-the-response) + - [GeoJSON FeatureCollection structure](#geojson-featurecollection-structure) + - [Feature types](#feature-types) - [Port](#port) - - [Current Vessel](#current-vessel) - - [Past Vessel Locations](#past-vessel-locations) - - [Estimated Full Leg](#estimated-full-leg) - - [Estimated Partial Leg](#estimated-partial-leg) -- [Building Your Map](#building-your-map) -- [Use Cases](#use-cases) -- [Recommendations and Best Practices](#recommendations-and-best-practices) -- [Frequently Asked Questions](#frequently-asked-questions) + - [Current vessel](#current-vessel) + - [Past vessel locations](#past-vessel-locations) + - [Estimated full leg](#estimated-full-leg) + - [Estimated partial leg](#estimated-partial-leg) +- [Building your map](#building-your-map) +- [Use cases](#use-cases) +- [Recommendations and best practices](#recommendations-and-best-practices) +- [Frequently asked questions](#frequently-asked-questions) ## Overview @@ -48,7 +48,7 @@ The endpoint returns a GeoJSON FeatureCollection containing: ![Example of a shipment map](/images/map_example.png "Example of a shipment map") -## Getting Started +## Getting started To retrieve the map data for a container, make a simple GET request to the endpoint: @@ -115,9 +115,9 @@ The response is a standard GeoJSON FeatureCollection that can be directly used w ``` -## Understanding the Response +## Understanding the response -### GeoJSON FeatureCollection Structure +### GeoJSON FeatureCollection structure The response follows the [GeoJSON specification](https://geojson.org/) and contains: @@ -129,7 +129,7 @@ Each feature contains: - `geometry`: A GeoJSON geometry object (Point or LineString) - `properties`: An object containing metadata specific to the feature type -### Feature Types +### Feature types The `properties.feature_type` field identifies what each feature represents. The following feature types are available: @@ -194,7 +194,7 @@ Port features represent all ports in the container's route: the port of lading ( | `updated_at` | string \| null | Last update timestamp from the shipment (ISO 8601) | -#### Current Vessel +#### Current vessel Geometry Type: `Point` @@ -276,7 +276,7 @@ This feature is only present when the container is currently on a vessel at sea. | `arrival_port_time_zone` | string \| null | Timezone of arrival port | -#### Past Vessel Locations +#### Past vessel locations Geometry Type: `LineString` @@ -333,7 +333,7 @@ These features represent the actual historical paths taken by vessels for comple | `inbound_eta_at` | string \| null | Estimated time of arrival at the destination port (ISO 8601) | -#### Estimated Full Leg +#### Estimated full leg Geometry Type: `LineString` @@ -374,7 +374,7 @@ These features represent predicted vessel paths for future legs that have not ye | `point_count` | integer | Number of coordinate points in the LineString | -#### Estimated Partial Leg +#### Estimated partial leg Geometry Type: `LineString` @@ -424,7 +424,7 @@ This feature represents the predicted path from the vessel's current position to **Note:** This feature is only present when there is a `current_vessel` feature. The LineString starts from the vessel's current position (which matches the `current_vessel` feature coordinates) and extends to the next port. -## Building Your Map +## Building your map To visualize a container's journey using the GeoJSON response on your own map (similar to [the embeddable map](/api-docs/in-depth-guides/terminal49-map)): @@ -491,7 +491,7 @@ To visualize a container's journey using the GeoJSON response on your own map (s ``` -## Use Cases +## Use cases Integrating Terminal49's Vessel and Container Route APIs enables a variety of advanced capabilities: - **Track Complete Shipment Journeys Visually:** Monitor shipments across multiple legs on a map, from the port of lading to the port of discharge, including all transshipment points. @@ -499,7 +499,7 @@ Integrating Terminal49's Vessel and Container Route APIs enables a variety of ad - **Correlate Timestamps with Locations:** Visually connect ETDs, ETAs, ATDs, and ATAs for every leg with their geographical points on the map for precise planning and exception management. - **Improve Internal Logistics Dashboards:** Offer your operations team a clear visual overview of all ongoing shipments and their current locations. -## Recommendations and Best Practices +## Recommendations and best practices - **Polling Intervals**: For active containers (currently at sea), we recommend refreshing the map data up to once per hour to get updated vessel positions. For containers that have completed their journey, you can cache the data as it won't change. @@ -534,7 +534,7 @@ If you decide to create your own map: - **No Crossings**: If no antimeridian crossings are detected, render all features in the standard world view without any special handling. -## Frequently Asked Questions +## Frequently asked questions **Q: How up-to-date is the vessel position data?** A: Vessel location data is updated every 15 minutes, although that does not guarantee there will be a new position every 15 minutes due to factors like whether the vessel is transmitting or within range of a satellite or base station. diff --git a/docs/api-docs/in-depth-guides/terminal49-widget.mdx b/docs/api-docs/in-depth-guides/terminal49-widget.mdx index 18a12479..9cb841bb 100644 --- a/docs/api-docs/in-depth-guides/terminal49-widget.mdx +++ b/docs/api-docs/in-depth-guides/terminal49-widget.mdx @@ -32,7 +32,7 @@ To query a bill of lading, container, or reference number, simply replace `REPLA ``` -## Frequently Asked Questions +## Frequently asked questions ### How does it work? diff --git a/docs/api-docs/in-depth-guides/tracking-request-lifecycle.mdx b/docs/api-docs/in-depth-guides/tracking-request-lifecycle.mdx index 15850557..ae047dab 100644 --- a/docs/api-docs/in-depth-guides/tracking-request-lifecycle.mdx +++ b/docs/api-docs/in-depth-guides/tracking-request-lifecycle.mdx @@ -17,7 +17,7 @@ If we are having difficulty connecting to the shipping line, or if we are unable This process can take up to approximately 24 hours. You will not receive a `tracking_request.failed` webhook notification until we have exhausted the retries, and the `status` field will not be changed to `failed` until then. -## Request Number Not Found / Awaiting Manifest +## Request number not found / awaiting manifest If the shipping line returns a response that it cannot find the provided number we either immediately fail the tracking request or keep trying depending on whether the `request_type` is a container or not: @@ -32,9 +32,9 @@ If the shipping line returns a response that it cannot find the provided number and identify the correct SCAC before submitting. -## Failed Reason +## Failed reason -### Temporary +### Temporary reasons The `failed_reason` field can take one of the following temporary values: @@ -43,7 +43,7 @@ The `failed_reason` field can take one of the following temporary values: - `internal_processing_error` when we faced other issue, - `awaiting_manifest` if the shipping line indidicates a bill of lading number is found, but data is not yet available, or if the requested number could not be found. -### Permanent +### Permanent reasons Temporary reasons can become permanent when the `status` changes to `failed`: @@ -73,6 +73,6 @@ Terminal49 will stop tracking requests for the following reasons: In addition end-users may stop tracking a shipment through the dashboard. -## Retrieving Status +## Retrieving status If you want to see the status of your tracking request you can make a [GET request](/api-docs/api-reference/tracking-requests/get-a-single-tracking-request) on what the most recent failure reason was (`failed_reason` field). diff --git a/docs/api-docs/in-depth-guides/webhooks.mdx b/docs/api-docs/in-depth-guides/webhooks.mdx index 410c26be..44ad2d6f 100644 --- a/docs/api-docs/in-depth-guides/webhooks.mdx +++ b/docs/api-docs/in-depth-guides/webhooks.mdx @@ -12,7 +12,7 @@ keywords: - "webhook retries" - "webhook notifications" --- -## Creating Webhooks +## Creating webhooks You may subscribe to events through webhooks to be alerted when events are triggered. Visit https://app.terminal49.com/developers/webhooks and click the 'Create Webhook Endpoint' button to create your webhook through the UI. @@ -20,11 +20,11 @@ Visit https://app.terminal49.com/developers/webhooks and click the 'Create Webho 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 +## Available webhook events Each `WebhookNotification` event represents some change to a model which you may be notified of. -List of Supported Events: +List of supported events: Event | Description ---------|---------- @@ -65,7 +65,7 @@ Event | Description -## Receiving Webhooks +## Receiving webhooks When an event is triggered we will attempt to post to the URL you provided with the webhook. @@ -260,7 +260,7 @@ end -## Webhook Notification Examples +## Webhook notification examples ### container.updated diff --git a/docs/api-docs/useful-info/api-data-sources-availability.mdx b/docs/api-docs/useful-info/api-data-sources-availability.mdx index d7b81c13..859fa4f0 100644 --- a/docs/api-docs/useful-info/api-data-sources-availability.mdx +++ b/docs/api-docs/useful-info/api-data-sources-availability.mdx @@ -17,7 +17,7 @@ keywords: - **Container rail carriers:** container milestones via rail - **AIS data:** vessel details and real-time location tracking (coming soon!) -## Supported Ocean Carriers +## Supported ocean carriers View a complete list of supported carriers and attributes on [Google Sheets](https://docs.google.com/spreadsheets/d/1cWK8sNpkjY5V-KlXe1fHi8mU_at2HcJYqjCvGQgixQk/edit#gid=0) @@ -29,9 +29,9 @@ View a complete list of supported carriers and attributes on [Google Sheets](htt [![Carriers Screenshot](/images/carriers_screenshot.png "Carriers Screenshot")](https://docs.google.com/spreadsheets/d/1cWK8sNpkjY5V-KlXe1fHi8mU_at2HcJYqjCvGQgixQk/edit#gid=0) -## Ports and Terminals +## Ports and terminals -Presently, the Terminal 49 api integrates with terminals at the following ports: +Presently, the Terminal49 API integrates with terminals at the following ports: - Baltimore - Boston @@ -62,7 +62,7 @@ Presently, the Terminal 49 api integrates with terminals at the following ports: You can view a complete list of supported terminals and attributes on [Google Sheets](https://docs.google.com/spreadsheets/d/1cWK8sNpkjY5V-KlXe1fHi8mU_at2HcJYqjCvGQgixQk/edit#gid=1406366493) -## Rail Carriers +## Rail carriers - BNSF Railway - Canadian National Railway (CN) @@ -71,7 +71,7 @@ You can view a complete list of supported terminals and attributes on [Google Sh - Norfolk Southern Railway (NS) - Union Pacific Railroad (UP) -## Known Issues (ocean) +## Known issues (ocean) Shipment data is populated from requests to the shipping lines. @@ -139,16 +139,16 @@ Below are a list of known issues with our data sources: {/* Rail Coverage section archived */} -# Data Fields & Availability +# Data fields and availability {/* These seem very out of date... many new properties added since we updated it years ago. Should we update it, or remove it? */} {/* I went ahead and added the newest properties to Container Data */} Below is a list of data that can be retrieved via the API, including whether is is always available, or whether it is only supported by certain carriers (Carrier Dependent), certain Terminals (Terminal Dependent) or on certain types of journeys (Journey dependent). -## Shipment Data +## Shipment data -Shipment Data is the primary data that comes from the Carrier. It containers the details of the shipment retrieved from the Bill of Lading, and references multiple container objects. +Shipment data is the primary data that comes from the carrier. It containers the details of the shipment retrieved from the Bill of Lading, and references multiple container objects. | Data | Availability | More details | Notes | | ---------------------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------- | @@ -165,7 +165,7 @@ Shipment Data is the primary data that comes from the Carrier. It containers the | Actual Time of Arrival at Port of Discharge | Always | Timestamp | Available after arrival | | Estimated Time of Arrival at Final Destination | Carrier dependent, Journey dependent | Timestamp | Only for vessels with inland moves. | -## Container Data +## Container data At the container level, the following data is available. Container data is combined from all sources to create a single data view of the container. As such some of this data will only available when certain milestones have passed. @@ -192,7 +192,7 @@ At the container level, the following data is available. Container data is combi | ATA for final destination | Journey Dependent | Only if non-port final destination | | | LFD at final destination | Carrier Dependent, Journey Dependent | Only if non-port final destination | | -## Milestone Event Data +## Milestone event data When a milestone passes, the Terminal49 API will ping one of your webhooks with a Milestone event. For each milestone, the following data is always provided. Container, Shipment, Vessel, Location and Terminal data will be provided as objects that contain the information listed above. @@ -209,7 +209,7 @@ When a milestone passes, the Terminal49 API will ping one of your webhooks with | Location | Where did the event oocur. | | Terminal | Which terminal did this occur at. | -## Milestones Events Supported +## Milestone events supported A list of milestones that the API can track, as well as the event name used in the API. In future, further events may be supported. diff --git a/docs/api-docs/useful-info/test-numbers.mdx b/docs/api-docs/useful-info/test-numbers.mdx index c720251e..0b8ecfd4 100644 --- a/docs/api-docs/useful-info/test-numbers.mdx +++ b/docs/api-docs/useful-info/test-numbers.mdx @@ -19,14 +19,14 @@ We have created a variety of test numbers that you can use to make calls the Tr This is helpful when you want to test a specific webhooks notifications (ie: `shipment.eta_changed`, `shipment.vessel_arrived` etc) and you dont have a list of live shipments and containers that are in specific leg of their journey. -## Tracking Request API -Shipments are created by making requests to the Tracking Request API. +## Tracking request API +Shipments are created by making requests to the tracking request API. When using the API , ensure that: - you set the test number in `request_number` attribute in the request body - you set `scac` attribute as 'TEST' in the request body -## Test Numbers +## Test numbers Number. | Use Case -------------------|--------- diff --git a/docs/datasync/overview.mdx b/docs/datasync/overview.mdx index 6322cb8c..b2fe8608 100644 --- a/docs/datasync/overview.mdx +++ b/docs/datasync/overview.mdx @@ -57,7 +57,7 @@ There are many ways you can start tracking shipments with Terminal49. They all r - [Use the Terminal49 API to create TrackingRequests](/api-docs/api-reference/tracking-requests/create-a-tracking-request) -## Getting Started +## Getting started Schedule your call now! For current Terminal49 customers, [schedule a call with our Customer Support team](https://meetings.hubspot.com/kyle-blount) we'll get you set up. diff --git a/docs/mcp/home.mdx b/docs/mcp/home.mdx index 95db67fa..78d1f49b 100644 --- a/docs/mcp/home.mdx +++ b/docs/mcp/home.mdx @@ -15,7 +15,7 @@ keywords: Use the Terminal49 MCP server to let Claude or Cursor answer questions with live container and shipment data—without writing custom glue code. -## TL;DR – Get Started in 5 Minutes +## TL;DR – get started in 5 minutes @@ -96,7 +96,7 @@ The same [rate limits](/api-docs/in-depth-guides/rate-limiting) apply to MCP end --- -## Tools Reference +## Tools reference ### `search_container` @@ -395,7 +395,7 @@ List tracking requests with optional filters and pagination. --- -## Prompts Reference +## Prompts reference Prompts are pre-built workflows that guide the AI through multi-step analysis. @@ -436,7 +436,7 @@ Identify delays and root causes in a container's journey. --- -## Resources Reference +## Resources reference Resources provide static or dynamic data that AI clients can read. @@ -460,7 +460,7 @@ Resources provide static or dynamic data that AI clients can read. --- -## Not Yet Supported +## Not yet supported These Terminal49 API capabilities are available via the [SDK](/api-docs/in-depth-guides/mcp#sdk-usage) but not yet exposed as MCP tools: @@ -479,7 +479,7 @@ Shipment/container list operations are available via MCP. Update/stop/resume tra --- -## Related Guides +## Related guides - [MCP Server Quickstart](/api-docs/in-depth-guides/mcp) – Full setup, local dev, deployment - [Rate Limiting](/api-docs/in-depth-guides/rate-limiting) – Same limits apply to MCP