curl --request GET \
--url https://gdeltcloud.com/api/v2/maritime/density \
--header 'Authorization: Bearer <token>'import requests
url = "https://gdeltcloud.com/api/v2/maritime/density"
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/density', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"cell_deg": 0.05,
"data": [
{
"cell_lat": 26.55,
"cell_lon": 56.25,
"positions": 4821,
"vessels": 73
},
{
"cell_lat": 26.6,
"cell_lon": 56.3,
"positions": 3947,
"vessels": 61
}
],
"pagination": {
"limit": 500,
"cursor": null,
"next_cursor": null
},
"applied_filters": {
"date_start": "2026-06-13",
"date_end": "2026-06-14",
"cell_deg": 0.05,
"bbox": "54.0,25.5,57.5,27.5",
"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": {}
}Spatial density grid
Spatial density grid (heatmap) of position and vessel counts per lat/lon cell within an area. Shows where traffic concentrates. AREA REQUIRED — pass bbox, near, or near_gem_id. 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/density \
--header 'Authorization: Bearer <token>'import requests
url = "https://gdeltcloud.com/api/v2/maritime/density"
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/density', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"success": true,
"cell_deg": 0.05,
"data": [
{
"cell_lat": 26.55,
"cell_lon": 56.25,
"positions": 4821,
"vessels": 73
},
{
"cell_lat": 26.6,
"cell_lon": 56.3,
"positions": 3947,
"vessels": 61
}
],
"pagination": {
"limit": 500,
"cursor": null,
"next_cursor": null
},
"applied_filters": {
"date_start": "2026-06-13",
"date_end": "2026-06-14",
"cell_deg": 0.05,
"bbox": "54.0,25.5,57.5,27.5",
"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
Bounding box filter: minLon,minLat,maxLon,maxLat (lon-first axis order). One of bbox / near / near_gem_id is required.
Point 'lat,lon' for a radius area; combine with radius_km (default 50 km). One of 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 — concentration of traffic within radius_km of that asset (default 25 km). One of 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.
Grid cell size in degrees (0.01–1). Smaller = finer heatmap. Defaults to 0.05.
0.01 <= x <= 1Window start YYYY-MM-DD (≤7-day window).
Window end YYYY-MM-DD.
Trailing N-day window (1–7). Defaults to 1.
1 <= x <= 7Grid cells per page (1–5000), densest first.
1 <= x <= 5000Response
Density grid, densest cells first. Envelope: { success, cell_deg, data, pagination, applied_filters }. Each data row: cell_lat, cell_lon (cell SW/lower corner, degrees), positions (AIS message count), vessels (distinct mmsi).

