We provide API service
for container tracking

* If you want to reach API v1.1 documentation click here.
API Infographic

Here's the information you get from
ShipsGo Tracking API

POL/POD Icon
POL and POD

By integrating ShipsGo API, users can receive the name of the port of loading (POL) and the port of discharge(POD).

Carrier Icon
Carrier

One of the other relevant information ShipsGo API provides to its users is the name of the carrier operating the vessel voyage.

Vessel Icon
Vessel

ShipsGo API allows users getting the name, IMO number and live location of the vessel.

Arrival & Departure Icon
Arrival and Departure

The API provides departure date of loading port and arrival date of the port of discharge. Total transit time of the voyage is another information the user’s systems get with API integration.

TS Port Icon
TS Port Details

Thanks to ShipsGo API; Users can receive the number of transit ports, name of transit ports, loading and discharging date of the transit ports and transit time between ports in seconds.

Containers Icon
B/L Containers

Users send container tracking requests both by container number and master bill of lading(B/L) number via ShipsGo API. Besides, when users post BL Number to the system, they receive all container numbers of which the BL contains.

FAQ

The most frequently asked questions about REST API.

Please note that:

Any interaction with the API will always require your API KEY. It will be available on your dashboard when you have an account 

Our API documentation can provide more detailed information on creating a new request.

The ShipsGo API has 2 methods: Post and Get.

Since some information such as {containerNumber}, {blContainersRef} , {emailAddress} etc. are needed to start tracking, the first step is to create the tracking request. The tracking request is created by using the Post Method with the container, master bill of lading, or booking number.

The {requestId} returns with the 200 OK Status Code to the clients if the request was created and posted to the ShipsGo successfully and that means the request reached the server.

If the POST fails, the Error Message returns. The list of the error responses for the method may be found here.

The client can run the GET method to call voyage data by using the {containerNumber} or {requestId} after the success message returned 

Please keep in mind that the POST method is idempotent. It's enough to run POST for each track for once. However, the client can make GET calls as much as is needed. 

TIP:

  • Since each shipment is updated 3 times a day for each shipment 3 GET calls are highly enough. 

Caution:

  • The ShipsGo API provides data sourced from a container's active or most recent journey. 
  • House bill of lading tracking is not supported. Only the master bill of lading number is accepted.
  • It's enough to run POST for each track for once.


Unfortunately, our current API allows you to query each shipment separately.

If you want to deactivate the search bar on the Live Map solution that you are using on your websites, you can use the below iframe codes.

<iframe

src="http://shipsgo.com/iframe/where-is-my-container/TEST1234567?tags=hide-search-box"

id="IframeShipsgoLiveMap"

style="height: 550px;width: 100%;"></iframe>

<script>

if (window.addEventListener)

window.addEventListener("message", ShipsgoMessagesListener);

function ShipsgoMessagesListener() {

if (event.data.Action === "LoadNewContainerCode")

document.getElementById("IframeShipsgoLiveMap").src =

"http://shipsgo.com/iframe/where-is-my-container/" +

event.data.Parameters.ContainerCode + '?tags=hide-search-box';

}

var urlParams = new URLSearchParams(window.location.search);

var defaultQuery = urlParams.get('query');

if (defaultQuery === undefined || defaultQuery === null)

defaultQuery = "default-container-code";

document.getElementById("IframeShipsgoLiveMap").src =

"http://shipsgo.com/iframe/where-is-my-container/" +

defaultQuery + '?tags=hide-search-box';

</script>

Important Note: If you want to hide both the search bar and the movements window, you

can do it as well; simply apply both solutions to your code.


If you want to deactivate the movements window and the search bar that are on the Live

Map solution that you are using on your websites, you can use the below codes.

<iframe

src="http://shipsgo.com/iframe/where-is-my-container/TEST1234567?movements=hide&tags

=hide-search-box" id="IframeShipsgoLiveMap"

style="height: 550px;width: 100%;"></iframe>

<script>

if (window.addEventListener)

window.addEventListener("message", ShipsgoMessagesListener);

function ShipsgoMessagesListener() {

if (event.data.Action === "LoadNewContainerCode")

document.getElementById("IframeShipsgoLiveMap").src =

"http://shipsgo.com/iframe/where-is-my-container/" +

event.data.Parameters.ContainerCode +

'?movements=hide&tags=hide-search-box';

}

var urlParams = new URLSearchParams(window.location.search);

var defaultQuery = urlParams.get('query');

if (defaultQuery === undefined || defaultQuery === null)

defaultQuery = "default-container-code";

document.getElementById("IframeShipsgoLiveMap").src =

"http://shipsgo.com/iframe/where-is-my-container/" +

defaultQuery + '?movements=hide&tags=hide-search-box';

</script>

If you want to deactivate the movements window on the Live Map solution that you are

using on your websites, you can use the below codes.

<iframe

src="http://shipsgo.com/iframe/where-is-my-container/TEST1234567?movements=hide"

id="IframeShipsgoLiveMap"

style="height: 550px;width: 100%;"></iframe>

<script>

if (window.addEventListener)

window.addEventListener("message", ShipsgoMessagesListener);

function ShipsgoMessagesListener() {

if (event.data.Action === "LoadNewContainerCode")

document.getElementById("IframeShipsgoLiveMap").src =

"http://shipsgo.com/iframe/where-is-my-container/" +

event.data.Parameters.ContainerCode + '?movements=hide';

}

var urlParams = new URLSearchParams(window.location.search);

var defaultQuery = urlParams.get('query');

if (defaultQuery === undefined || defaultQuery === null)

defaultQuery = "default-container-code";

document.getElementById("IframeShipsgoLiveMap").src =

"http://shipsgo.com/iframe/where-is-my-container/" +

defaultQuery + '?movements=hide';

</script>

Important Note: If you want to hide both the search bar and the movements window, you

can do it as well; simply apply both solutions to your code.

When you Post the shipment to ShipsGo you get a Request ID if the POST is successful. After you get the Request ID you can make a call immediately. You will have an answer. However, the data may not be available at that moment and the XML file may be null because data availability is up to the carrier. If the data is available at the carrier website the average response time is in second.

Every shipment is updated every 8 hours after creation time so the update time differs from shipment to shipment according to creation time. However, you can set your GET function 3 times a day morning, noon and night. So at the end of the day, you will have all updates for your all shipments


No. The only thing you need to do is send the BL number. The system is going to trigger the containers under the BL with the voyage data and make it ready in XML/JSON.


You can find all the details about milestones here.


In order to get data from ShipsGo, initially, you should send data to our system by using the POST function of our API. After the post, your request should reach us successfully. Then you can pull the voyage data by the GET method of the API. 

If your data reaches us successfully, then a Request ID returns as a response. These IDs are unique for every tracking request of yours, and it differs from shipment to shipment. The most important function of this ID is that when you get this ID, you will already be sure that your POST has successfully reached us. It is a confirmation message from ShipsGo, so to speak. 

Example of Successful Response ID 1-534567 

However, your POST failed if you get the following responses instead of request-id. You need to correct the data according to the explanations and post the request again.

Response: "The Field (Code) Value (test1234) is not in a valid format"

  • Container number must consist of 11 characters: 4 letters followed By 7 Numbers EX. AAAA1234567

Response: "The Field (Code) Value (EGHU9483781) is not valid"

  • The container number format is true however the number is not valid. It would be EGHU948378-8 due to the rules of container number creation

Response: "The shipping line field is required"

  • You need to enter the name of the shipping line according to the ShipsGo Shipping Line List

Response: "The Entered Value (support@gmaıl.com) In Field (Email) Is Not A Valid Email Address"

  • You typed the email address wrongly. Please control the typing

Response: "No Active Subscription Or It Is Expire"

  • Probably your credits ran out or your account was inactive because of some other reason. Please contact with ShipsGo team when it’s happened

After you have completed the POST successfully you can run the GET method by following the rules. You may encounter some error messages while running the GET. Here are they and their meaning:

Error Message: "Invalid Authentication Code"

  • You are using an invalid API KEY or your account is prohibited to use the API connection 

Error Message: "No Active Subscription Or It Is Expire"

  • Probably your credits ran out or your account was inactive because of some other reason.

Error Message: "There Are No Data Related To Requested Id"

  • You are entering the wrong container number/request ıd. Or you try to get the container data of which you haven't POST the tracking request to us




After your tracking request reaches us, our system checks the carrier website to fill out the XML form. 

1. If your system calls the data before the system collects the data from the carrier's website, you can have an empty data response. Most probably, at the second call attempt, you will have the data.             

2. If the carrier doesn't provide the voyage data yet, the XML response will simply be empty. However, our system checks the carrier website 3 times a day and gets the data when it is ready. What you should do is to set your GET call to run 3 times a day, and at the end of the day, you will have all data available. The status of this kind of data is "in progress".                 

3. Sometimes, however, the shipments are not trackable at all. This kind of shipment's status is "untracked". The shipment can be untrackable if the shipping line has no tracking system at all or the container number can’t be assigned to any shipping line.     

XML Full Data Example: https://drive.google.com/file/d/1_yHhrFHOMcBBjGUgWgAH53oxGoiNEZze/view?usp=sharing

JSON Full Data Example: https://drive.google.com/file/d/167S4Ljoo_Op8u3J5k74c-_5In2hGUbOt/view?usp=sharing

When you use the API integration, you get voyage information in an XML or JSON format. One of the first things you’ll see in the XML OR JSON file is the "status." This "status" indicates the condition of the shipments.

The meanings of the statuses are as follows;

  • InProgress (StatusId = 20): The shipping line hasn't released any information about the container yet.
  • Booked (StatusId = 30): The shipping line has shared the voyage information about this shipment. It's not sailed yet.
  • Loaded (StatusId = 35): The shipment is loaded on the vessel but the vessel is not sailed from POL yet.
  • Sailing (StatusId = 40): The container is on the way.
  • Arrived (StatusId = 45): The Vessel arrived at POD but The shipment is waiting to be discharged
  • Discharged (StatusId = 50): The container was discharged at the discharge port.
  • Untracked (StatusId = 60): It is not possible to track the container because the shipping line responsible for carrying the container has no online tracking service.

Of course, you can.

It is enough to create a GET function with API and add "&mapPoint=true" at the end of the request URL. Then you will see that a new window will be opened showing the vessel's position on a live map.

No, there is no limitation for posting tracking requests; or making a call for getting voyage data. Your API calls limit is only restricted to the credit amount in your accounts. Your credits will only be consumed when you POST the shipment to the system. You do not pay for GET voyage data, i.e., for multiple API calls. 

After creating your account, you are going to have an API key. You can reach it through your dashboard under the INTEGRATION section at the left sidebar. You can consider this key as a communication code between your company and ShipsGo. 

Thanks to this key, when the client sends the tracking request ShipsGo system recognizes the company name and stores the request to the company account. Then, our system sends the notification e-mail to you and your customers with your logo and e-mail address if you wish.

Besides, we use this Key to calculate the consumption of your credits as well.

Yes, we provide API. You can find all the details about API here.

If you need technical support or more information related to API integration, please feel free to write to us from Live Chat or support@shipsgo.com

The data of the voyage is updated 3 times in a day. So, you can set your GET function to be triggered 3 times a day.

No, Since ShipsGo is gathering publicly available information, the authorization letter is not necessary. You are able to track your shipment any time as soon as your shipping line is one of the supported shipping lines and you have an API key.

API Infographic

ShipsGo
Tracking API

Thanks to ShipsGo API Service, your IT system and our container tracking service integrated smoothly.

* If you want to reach API v1.1 documentation click here.