curl --request GET \
--url https://gdeltcloud.com/api/v2/maritime/transits \
--header 'Authorization: Bearer <token>'import requests
url = "https://gdeltcloud.com/api/v2/maritime/transits"
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/transits', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"data": [
{
"chokepoint": "hormuz",
"hour": "2026-06-14 09:00:00",
"vessels": 142,
"moving_vessels": 118,
"avg_sog": 9.4,
"positions": 1873
},
{
"chokepoint": "bab_el_mandeb",
"hour": "2026-06-14 09:00:00",
"vessels": 87,
"moving_vessels": 79,
"avg_sog": 11.2,
"positions": 1104
}
],
"pagination": {
"limit": 100,
"cursor": null,
"next_cursor": null
},
"applied_filters": {
"date_start": "2026-06-08",
"date_end": "2026-06-14",
"chokepoint": "hormuz",
"ignored": {}
}
}{
"success": false,
"error": "<string>",
"code": "<string>",
"details": {}
}{
"success": false,
"error": "<string>",
"code": "<string>",
"details": {}
}{
"success": false,
"error": "<string>",
"code": "<string>",
"details": {}
}Chokepoint transit activity
Hourly vessel-flow rollup for maritime chokepoints, derived from terrestrial AIS. Each row is one chokepoint·hour with vessel counts and average speed. Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it.
Forward-accruing: signals begin at launch (June 2026) — there is no historical backfill. Derived-only: no raw position track is exposed. Terrestrial AIS only (no satellite). Date windows are capped at 30 days; defaults to the trailing 7 days when no dates are given.
curl --request GET \
--url https://gdeltcloud.com/api/v2/maritime/transits \
--header 'Authorization: Bearer <token>'import requests
url = "https://gdeltcloud.com/api/v2/maritime/transits"
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/transits', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"data": [
{
"chokepoint": "hormuz",
"hour": "2026-06-14 09:00:00",
"vessels": 142,
"moving_vessels": 118,
"avg_sog": 9.4,
"positions": 1873
},
{
"chokepoint": "bab_el_mandeb",
"hour": "2026-06-14 09:00:00",
"vessels": 87,
"moving_vessels": 79,
"avg_sog": 11.2,
"positions": 1104
}
],
"pagination": {
"limit": 100,
"cursor": null,
"next_cursor": null
},
"applied_filters": {
"date_start": "2026-06-08",
"date_end": "2026-06-14",
"chokepoint": "hormuz",
"ignored": {}
}
}{
"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
Restrict to one chokepoint (one of the 11 monitored straits). Omit for all. Full value list: https://docs.gdeltcloud.com/reference/enums#chokepoint
hormuz, bab_el_mandeb, malacca, suez, panama, bosphorus, gibraltar, dover, kerch, taiwan, danish_straits Window start YYYY-MM-DD (≤30-day window).
Window end YYYY-MM-DD.
Trailing N-day window (1–30). Defaults to 7.
1 <= x <= 30Rows per page (1–500).
1 <= x <= 500Pagination cursor (offset) from a prior response's next_cursor.
Response
A page of chokepoint·hour rows, most recent first. Each row: chokepoint, hour, vessels, moving_vessels, avg_sog (average speed over ground, knots), positions (AIS message count). Standard envelope: { success, data, pagination, applied_filters }.

