curl --request GET \
--url https://gdeltcloud.com/api/v2/maritime/tracks \
--header 'Authorization: Bearer <token>'import requests
url = "https://gdeltcloud.com/api/v2/maritime/tracks"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://gdeltcloud.com/api/v2/maritime/tracks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"data": [
{
"time": "2026-06-13 00:01:48",
"mmsi": 636019825,
"imo": "9006681",
"lat": 26.5419,
"lon": 56.2731,
"sog": 12.9,
"cog": 299.1,
"nav_status": "under_way",
"chokepoint": "hormuz",
"distance_km": 21.4
},
{
"time": "2026-06-13 00:01:52",
"mmsi": 538008914,
"imo": "9388893",
"lat": 26.6088,
"lon": 56.3142,
"sog": 0.1,
"cog": 0,
"nav_status": "at_anchor",
"chokepoint": "hormuz",
"distance_km": 28.9
}
],
"pagination": {
"limit": 1000,
"cursor": null,
"next_cursor": "MjAyNi0wNi0xMyAwMDowMTo1Mnw1MzgwMDg5MTQ="
},
"applied_filters": {
"date_start": "2026-06-12",
"date_end": "2026-06-13",
"chokepoint": "hormuz",
"ignored": {}
}
}{
"success": false,
"error": "<string>",
"code": "<string>",
"details": {}
}{
"success": false,
"error": "<string>",
"code": "<string>",
"details": {}
}{
"success": false,
"error": "<string>",
"code": "<string>",
"details": {}
}{
"success": false,
"error": "<string>",
"code": "<string>",
"details": {}
}Raw position points in an area
⚠️ RAW position points (the actual AIS track) inside an area over time — each row a single fix (time, position, speed, course, nav status). AREA REQUIRED — pass chokepoint, bbox, near, or near_gem_id. Keyset-paginated: follow the opaque next_cursor to stitch a long window into pages rather than one giant response. Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it.
Historical / baseline surface: reads raw AIS positions directly. Forward-accruing: positions begin at launch (June 2026) — no historical backfill. Terrestrial AIS only (no satellite). Date windows are capped at 7 days; defaults to the trailing 1 day.
curl --request GET \
--url https://gdeltcloud.com/api/v2/maritime/tracks \
--header 'Authorization: Bearer <token>'import requests
url = "https://gdeltcloud.com/api/v2/maritime/tracks"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://gdeltcloud.com/api/v2/maritime/tracks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"data": [
{
"time": "2026-06-13 00:01:48",
"mmsi": 636019825,
"imo": "9006681",
"lat": 26.5419,
"lon": 56.2731,
"sog": 12.9,
"cog": 299.1,
"nav_status": "under_way",
"chokepoint": "hormuz",
"distance_km": 21.4
},
{
"time": "2026-06-13 00:01:52",
"mmsi": 538008914,
"imo": "9388893",
"lat": 26.6088,
"lon": 56.3142,
"sog": 0.1,
"cog": 0,
"nav_status": "at_anchor",
"chokepoint": "hormuz",
"distance_km": 28.9
}
],
"pagination": {
"limit": 1000,
"cursor": null,
"next_cursor": "MjAyNi0wNi0xMyAwMDowMTo1Mnw1MzgwMDg5MTQ="
},
"applied_filters": {
"date_start": "2026-06-12",
"date_end": "2026-06-13",
"chokepoint": "hormuz",
"ignored": {}
}
}{
"success": false,
"error": "<string>",
"code": "<string>",
"details": {}
}{
"success": false,
"error": "<string>",
"code": "<string>",
"details": {}
}{
"success": false,
"error": "<string>",
"code": "<string>",
"details": {}
}{
"success": false,
"error": "<string>",
"code": "<string>",
"details": {}
}Authorizations
GDELT Cloud API key. Send as Authorization: Bearer gdelt_sk_....
Query Parameters
One chokepoint as the area. One of chokepoint / bbox / near / near_gem_id is required. Full value list: https://docs.gdeltcloud.com/reference/enums#chokepoint
hormuz, bab_el_mandeb, malacca, suez, panama, bosphorus, gibraltar, dover, kerch, taiwan, danish_straits Bounding box filter: minLon,minLat,maxLon,maxLat (lon-first axis order). One of chokepoint / bbox / near / near_gem_id is required.
Point 'lat,lon' for a radius area; combine with radius_km (default 50 km). Rows include distance_km. One of chokepoint / bbox / near / near_gem_id is required. Format: lat,lon — pass the radius separately in radius_km.
"51.5,-0.12"
GEM energy-asset gem_id center — points within radius_km of that asset (default 25 km). Rows include distance_km. One of chokepoint / bbox / near / near_gem_id is required.
Radius in km for near / near_gem_id. Default 50 (near) or 25 (near_gem_id); clamped 1–2000.
Window start YYYY-MM-DD (≤7-day window).
Window end YYYY-MM-DD.
Trailing N-day window (1–7). Defaults to 1.
1 <= x <= 7Position points per page (1–5000).
1 <= x <= 5000Opaque keyset cursor on (time, mmsi). Pass back a prior response's next_cursor to fetch the next page; do not request one giant response.
Response
A page of raw position points, time-ordered ascending. Envelope: { success, data, pagination, applied_filters }. Each data row: time, mmsi, imo, lat, lon, sog, cog, nav_status, chokepoint, and distance_km (km from the near / near_gem_id center, only when one is set). pagination.next_cursor is an opaque token — follow it to page through a long window.

