Get container map GeoJSON
curl --request GET \
--url https://api.terminal49.com/v2/containers/{id}/map_geojson \
--header 'Authorization: <api-key>'import requests
url = "https://api.terminal49.com/v2/containers/{id}/map_geojson"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.terminal49.com/v2/containers/{id}/map_geojson', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.terminal49.com/v2/containers/{id}/map_geojson",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.terminal49.com/v2/containers/{id}/map_geojson"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.terminal49.com/v2/containers/{id}/map_geojson")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.terminal49.com/v2/containers/{id}/map_geojson")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
100.896831042,
13.065302386
]
},
"properties": {
"feature_type": "port",
"ports_sequence": 1,
"ports_total": 3,
"location_id": "c5adae24-6fd4-4720-8813-976cf206feb1",
"location_type": "Port",
"name": "Laem Chabang",
"state_abbr": "20",
"state": null,
"country_code": "TH",
"country": "Thailand",
"time_zone": "Asia/Bangkok",
"inbound_eta_at": null,
"inbound_ata_at": null,
"outbound_etd_at": null,
"outbound_atd_at": "2025-11-08T00:44:52Z",
"label": "POL",
"updated_at": "2025-12-11T09:01:08Z"
}
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
100.868768333,
13.07306
],
[
100.839155,
13.079318333
],
[
118.038213333,
24.43842
],
[
118.03862,
24.440998333
]
]
},
"properties": {
"feature_type": "past_vessel_locations",
"ports_sequence": 1,
"vessel_id": "87a12f43-766c-4078-89bc-ac6595082f7b",
"start_time": "2025-11-08T00:44:52Z",
"end_time": "2025-11-15T16:00:00Z",
"point_count": 546,
"outbound_atd_at": "2025-11-08T00:44:52Z",
"inbound_ata_at": "2025-11-15T16:00:00Z",
"inbound_eta_at": null
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
118.0293,
24.50318
]
},
"properties": {
"feature_type": "port",
"ports_sequence": 2,
"ports_total": 3,
"location_id": "ed64d446-9098-420c-ab08-c127e62509fe",
"location_type": "Port",
"name": "Xiamen",
"state_abbr": "FJ",
"state": null,
"country_code": "CN",
"country": "China",
"time_zone": "Asia/Shanghai",
"inbound_eta_at": null,
"inbound_ata_at": "2025-11-15T16:00:00Z",
"outbound_etd_at": null,
"outbound_atd_at": "2025-11-19T16:00:00Z",
"label": "TS1",
"updated_at": "2025-12-11T09:01:08Z"
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-131.128473333,
31.023033333
]
},
"properties": {
"feature_type": "current_vessel",
"ports_sequence": 2,
"vessel_id": "93fc5dce-4c7f-4089-bd28-f20cd9202ab0",
"vessel_name": "ZIM BANGKOK",
"vessel_imo": "9936525",
"voyage_number": "13E",
"vessel_location_timestamp": "2025-12-11T11:46:03Z",
"vessel_location_heading": 108,
"vessel_location_speed": 21,
"departure_port_id": "ed64d446-9098-420c-ab08-c127e62509fe",
"departure_port_name": "Xiamen",
"departure_port_state_abbr": "FJ",
"departure_port_state": null,
"departure_port_country_code": "CN",
"departure_port_country": "China",
"departure_port_label": "TS1",
"departure_port_atd": "2025-11-19T16:00:00Z",
"departure_port_time_zone": "Asia/Shanghai",
"arrival_port_id": "6129528d-846e-4571-ae16-b5328a4285ab",
"arrival_port_name": "Savannah",
"arrival_port_state_abbr": "GA",
"arrival_port_state": "Georgia",
"arrival_port_country_code": "US",
"arrival_port_country": "United States",
"arrival_port_label": "POD",
"arrival_port_eta": "2025-12-31T05:00:00Z",
"arrival_port_time_zone": "America/New_York"
}
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
118.045325,
23.518831667
],
[
118.076886667,
23.556158333
],
[
-131.583741667,
31.153668333
],
[
-131.128473333,
31.023033333
]
]
},
"properties": {
"feature_type": "past_vessel_locations",
"ports_sequence": 2,
"vessel_id": "93fc5dce-4c7f-4089-bd28-f20cd9202ab0",
"start_time": "2025-11-19T16:00:00Z",
"end_time": "2026-01-07T05:00:00Z",
"point_count": 1402,
"outbound_atd_at": "2025-11-19T16:00:00Z",
"inbound_ata_at": null,
"inbound_eta_at": "2025-12-31T05:00:00Z"
}
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
-131.128473333,
31.023033333
],
[
-130.9177,
30.67224
],
[
-80.70766,
31.96363
],
[
-80.91232,
32.03728
]
]
},
"properties": {
"feature_type": "estimated_partial_leg",
"ports_sequence": 2,
"current_port_id": "ed64d446-9098-420c-ab08-c127e62509fe",
"next_port_id": "6129528d-846e-4571-ae16-b5328a4285ab",
"point_count": 364
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-81.140998396,
32.128923976
]
},
"properties": {
"feature_type": "port",
"ports_sequence": 3,
"ports_total": 3,
"location_id": "6129528d-846e-4571-ae16-b5328a4285ab",
"location_type": "Port",
"name": "Savannah",
"state_abbr": "GA",
"state": "Georgia",
"country_code": "US",
"country": "United States",
"time_zone": "America/New_York",
"inbound_eta_at": "2025-12-31T05:00:00Z",
"inbound_ata_at": null,
"outbound_etd_at": null,
"outbound_atd_at": null,
"label": "POD",
"updated_at": "2025-12-11T09:01:08Z"
}
}
]
}{
"errors": [
{
"status": "403",
"title": "Forbidden",
"detail": "Routing data feature is not enabled for this account"
}
]
}Containers
Get container map GeoJSON
Retrieve a GeoJSON FeatureCollection for a container with port locations, current vessel position, past path, and estimated future route in one call.
GET
/
containers
/
{id}
/
map_geojson
Get container map GeoJSON
curl --request GET \
--url https://api.terminal49.com/v2/containers/{id}/map_geojson \
--header 'Authorization: <api-key>'import requests
url = "https://api.terminal49.com/v2/containers/{id}/map_geojson"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.terminal49.com/v2/containers/{id}/map_geojson', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.terminal49.com/v2/containers/{id}/map_geojson",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.terminal49.com/v2/containers/{id}/map_geojson"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.terminal49.com/v2/containers/{id}/map_geojson")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.terminal49.com/v2/containers/{id}/map_geojson")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
100.896831042,
13.065302386
]
},
"properties": {
"feature_type": "port",
"ports_sequence": 1,
"ports_total": 3,
"location_id": "c5adae24-6fd4-4720-8813-976cf206feb1",
"location_type": "Port",
"name": "Laem Chabang",
"state_abbr": "20",
"state": null,
"country_code": "TH",
"country": "Thailand",
"time_zone": "Asia/Bangkok",
"inbound_eta_at": null,
"inbound_ata_at": null,
"outbound_etd_at": null,
"outbound_atd_at": "2025-11-08T00:44:52Z",
"label": "POL",
"updated_at": "2025-12-11T09:01:08Z"
}
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
100.868768333,
13.07306
],
[
100.839155,
13.079318333
],
[
118.038213333,
24.43842
],
[
118.03862,
24.440998333
]
]
},
"properties": {
"feature_type": "past_vessel_locations",
"ports_sequence": 1,
"vessel_id": "87a12f43-766c-4078-89bc-ac6595082f7b",
"start_time": "2025-11-08T00:44:52Z",
"end_time": "2025-11-15T16:00:00Z",
"point_count": 546,
"outbound_atd_at": "2025-11-08T00:44:52Z",
"inbound_ata_at": "2025-11-15T16:00:00Z",
"inbound_eta_at": null
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
118.0293,
24.50318
]
},
"properties": {
"feature_type": "port",
"ports_sequence": 2,
"ports_total": 3,
"location_id": "ed64d446-9098-420c-ab08-c127e62509fe",
"location_type": "Port",
"name": "Xiamen",
"state_abbr": "FJ",
"state": null,
"country_code": "CN",
"country": "China",
"time_zone": "Asia/Shanghai",
"inbound_eta_at": null,
"inbound_ata_at": "2025-11-15T16:00:00Z",
"outbound_etd_at": null,
"outbound_atd_at": "2025-11-19T16:00:00Z",
"label": "TS1",
"updated_at": "2025-12-11T09:01:08Z"
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-131.128473333,
31.023033333
]
},
"properties": {
"feature_type": "current_vessel",
"ports_sequence": 2,
"vessel_id": "93fc5dce-4c7f-4089-bd28-f20cd9202ab0",
"vessel_name": "ZIM BANGKOK",
"vessel_imo": "9936525",
"voyage_number": "13E",
"vessel_location_timestamp": "2025-12-11T11:46:03Z",
"vessel_location_heading": 108,
"vessel_location_speed": 21,
"departure_port_id": "ed64d446-9098-420c-ab08-c127e62509fe",
"departure_port_name": "Xiamen",
"departure_port_state_abbr": "FJ",
"departure_port_state": null,
"departure_port_country_code": "CN",
"departure_port_country": "China",
"departure_port_label": "TS1",
"departure_port_atd": "2025-11-19T16:00:00Z",
"departure_port_time_zone": "Asia/Shanghai",
"arrival_port_id": "6129528d-846e-4571-ae16-b5328a4285ab",
"arrival_port_name": "Savannah",
"arrival_port_state_abbr": "GA",
"arrival_port_state": "Georgia",
"arrival_port_country_code": "US",
"arrival_port_country": "United States",
"arrival_port_label": "POD",
"arrival_port_eta": "2025-12-31T05:00:00Z",
"arrival_port_time_zone": "America/New_York"
}
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
118.045325,
23.518831667
],
[
118.076886667,
23.556158333
],
[
-131.583741667,
31.153668333
],
[
-131.128473333,
31.023033333
]
]
},
"properties": {
"feature_type": "past_vessel_locations",
"ports_sequence": 2,
"vessel_id": "93fc5dce-4c7f-4089-bd28-f20cd9202ab0",
"start_time": "2025-11-19T16:00:00Z",
"end_time": "2026-01-07T05:00:00Z",
"point_count": 1402,
"outbound_atd_at": "2025-11-19T16:00:00Z",
"inbound_ata_at": null,
"inbound_eta_at": "2025-12-31T05:00:00Z"
}
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
-131.128473333,
31.023033333
],
[
-130.9177,
30.67224
],
[
-80.70766,
31.96363
],
[
-80.91232,
32.03728
]
]
},
"properties": {
"feature_type": "estimated_partial_leg",
"ports_sequence": 2,
"current_port_id": "ed64d446-9098-420c-ab08-c127e62509fe",
"next_port_id": "6129528d-846e-4571-ae16-b5328a4285ab",
"point_count": 364
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-81.140998396,
32.128923976
]
},
"properties": {
"feature_type": "port",
"ports_sequence": 3,
"ports_total": 3,
"location_id": "6129528d-846e-4571-ae16-b5328a4285ab",
"location_type": "Port",
"name": "Savannah",
"state_abbr": "GA",
"state": "Georgia",
"country_code": "US",
"country": "United States",
"time_zone": "America/New_York",
"inbound_eta_at": "2025-12-31T05:00:00Z",
"inbound_ata_at": null,
"outbound_etd_at": null,
"outbound_atd_at": null,
"label": "POD",
"updated_at": "2025-12-11T09:01:08Z"
}
}
]
}{
"errors": [
{
"status": "403",
"title": "Forbidden",
"detail": "Routing data feature is not enabled for this account"
}
]
}This endpoint returns a GeoJSON FeatureCollection containing all map-related data for a container in a single response. The response includes port locations, current vessel position (if at sea), past vessel paths, and estimated future routes.
For detailed documentation on the response structure, feature types, and their properties, see the Container Map GeoJSON Data guide.
Authorizations
Token YOUR_API_TOKEN
The APIs require authentication to be done using header-based API Key and Secret Authentication.
API key and secret are sent va the Authorization request header.
You send your API key and secret in the following way:
Authorization: Token YOUR_API_KEY
Path Parameters
Was this page helpful?
⌘I