Vessels, ports, port calls and waiting times at anchor from licensed AIS. Read only; needs a key.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer followed by your Gangway AIS key (gw_live_...), made in your account at https://gangwayais.com/account/. A free account's key answers nine of the tools, 24 hours behind; the others need a paid plan.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Your key's plan, the credits used and left this month, when they renew, and the plan's rate, largest box, reach back and delay. Free. Free accounts too: their answers are 24 hours behind, with a box of at most 1 square degree and 1,000 credits a month; paid plans are live.
This tool takes no arguments.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http ais https://gangwayais.com/mcp \ --header 'Authorization: Bearer YOUR_TOKEN'
Headers
Authorization (required): Bearer followed by your Gangway AIS key (gw_live_...), made in your account at https://gangwayais.com/account/. A free account's key answers nine of the tools, 24 hours behind; the others need a paid plan.Your key's plan, the credits used and left this month, when they renew, and the plan's rate, largest box, reach back and delay. Free. Free accounts too: their answers are 24 hours behind, with a box of at most 1 square degree and 1,000 credits a month; paid plans are live.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Check a planned route leg by leg against land, depth (her draught plus the under-keel clearance), sea room and the traffic separation schemes, with plain-language warnings for what it finds. A planning aid: it finds what our charts and data show, never everything; not for navigation. At most 30 a minute. Credits: 10. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| ukc_m | number | Under-keel clearance to keep, in metres |
| beam_m | number | Her beam in metres |
| length_m | number | Her length overall in metres |
| draught_m | number | Her draught in metres |
| waypoints* | array | The route's turning points in order, each [lat, lon] |
| sea_room_nm | number | Sea room to keep off danger, in nautical miles |
| air_draught_m | number | Her air draught in metres |
{
"type": "object",
"required": [
"waypoints"
],
"properties": {
"ukc_m": {
"type": "number",
"maximum": 10,
"minimum": 0,
"description": "Under-keel clearance to keep, in metres"
},
"beam_m": {
"type": "number",
"maximum": 80,
"minimum": 1,
"description": "Her beam in metres"
},
"length_m": {
"type": "number",
"maximum": 500,
"minimum": 1,
"description": "Her length overall in metres"
},
"draught_m": {
"type": "number",
"maximum": 30,
"minimum": 0.1,
"description": "Her draught in metres"
},
"waypoints": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 2,
"minItems": 2
},
"maxItems": 200,
"minItems": 2,
"description": "The route's turning points in order, each [lat, lon]"
},
"sea_room_nm": {
"type": "number",
"maximum": 20,
"minimum": 0,
"description": "Sea room to keep off danger, in nautical miles"
},
"air_draught_m": {
"type": "number",
"maximum": 100,
"minimum": 1,
"description": "Her air draught in metres"
}
},
"additionalProperties": false
}The sources behind the answers, each with its licence, the credit to show and what it covers, and how far back our recorded history goes. Free. Free accounts too: their answers are 24 hours behind, with a box of at most 1 square degree and 1,000 credits a month; paid plans are live.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}The charted water depth at a position from EMODnet Bathymetry (European waters), or none where it has no figure. Not for navigation. Credits: 1, nothing where there is no depth. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| lat* | number | Latitude in decimal degrees, north positive |
| lon* | number | Longitude in decimal degrees, east positive |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees, north positive"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees, east positive"
}
},
"additionalProperties": false
}One vessel now: her last position, speed, course, heading and navigational status from a source we may pass on, with her particulars (name, IMO, call sign, type, size, flag) and voyage (destination, ETA, draught). Give her MMSI, or her IMO number (then she is found by search first, 1 credit more). Credits: 1. Free accounts too: their answers are 24 hours behind, with a box of at most 1 square degree and 1,000 credits a month; paid plans are live.
| Argument | Type | Description |
|---|---|---|
| imo | integer | The vessel's IMO number, seven digits |
| mmsi | integer | The vessel's MMSI, nine digits |
{
"type": "object",
"required": [],
"properties": {
"imo": {
"type": "integer",
"maximum": 9999999,
"minimum": 1000000,
"description": "The vessel's IMO number, seven digits"
},
"mmsi": {
"type": "integer",
"maximum": 999999999,
"minimum": 1,
"description": "The vessel's MMSI, nine digits"
}
},
"additionalProperties": false
}A sea route between two positions, through the traffic separation schemes, with its distance and legs. Give the vessel's length and draught to keep her in water deep enough. A planning aid from charts and data that can be wrong: never for navigation. At most 6 a minute. Credits: 10. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| to_lat* | number | Latitude in decimal degrees, north positive |
| to_lon* | number | Longitude in decimal degrees, east positive |
| from_lat* | number | Latitude in decimal degrees, north positive |
| from_lon* | number | Longitude in decimal degrees, east positive |
| length_m | number | Her length overall in metres |
| draught_m | number | Her draught in metres |
{
"type": "object",
"required": [
"from_lat",
"from_lon",
"to_lat",
"to_lon"
],
"properties": {
"to_lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees, north positive"
},
"to_lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees, east positive"
},
"from_lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees, north positive"
},
"from_lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees, east positive"
},
"length_m": {
"type": "number",
"maximum": 500,
"minimum": 1,
"description": "Her length overall in metres"
},
"draught_m": {
"type": "number",
"maximum": 30,
"minimum": 0.1,
"description": "Her draught in metres"
}
},
"additionalProperties": false
}The seagoing vessels alongside in a port on one UTC day (default today), with when each made fast and left. Reach back: 90 days on Plus, 365 on Pro and Scale. Credits: 1 per call. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| date | string | The day, YYYY-MM-DD (UTC) |
| port* | string | A port by UN/LOCODE (such as NLRTM) or by name (such as Rotterdam) |
{
"type": "object",
"required": [
"port"
],
"properties": {
"date": {
"type": "string",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
"description": "The day, YYYY-MM-DD (UTC)"
},
"port": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "A port by UN/LOCODE (such as NLRTM) or by name (such as Rotterdam)"
}
},
"additionalProperties": false
}How busy a port is against its own normal: an index, vessels waiting now, the median wait and the arrivals and departures day by day over the last days (default 30). Credits: 5, nothing when we hold no figures for it. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| days | integer | Days back from now (default 30) |
| port* | string | A port by UN/LOCODE (such as NLRTM) or by name (such as Rotterdam) |
{
"type": "object",
"required": [
"port"
],
"properties": {
"days": {
"type": "integer",
"maximum": 90,
"minimum": 1,
"description": "Days back from now (default 30)"
},
"port": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "A port by UN/LOCODE (such as NLRTM) or by name (such as Rotterdam)"
}
},
"additionalProperties": false
}Recent events from AIS: arrivals, departures, anchoring, weighing anchor and approaches by default; also pilot, tug, bunkering, waiting, renamed and more. Optionally inside a box (at most 400 square degrees). Since defaults to the last 24 hours, at most 30 days back. Credits: 1 per event. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| kinds | string | Comma-separated kinds, or "all". Kinds: aisoff, anchored, approaching, arrived, bunkering, delayrisk, destination, dragging, draught, drifting, eta, heard, left, pilot, quiet, renamed, slow, strait, sts, tug, underway, waiting, weighed |
| limit | integer | At most this many events (default 60) |
| since | string | ISO 8601 UTC time to start from |
| max_lat | number | North edge of the box |
| max_lon | number | East edge of the box |
| min_lat | number | South edge of the box |
| min_lon | number | West edge of the box |
{
"type": "object",
"required": [],
"properties": {
"kinds": {
"type": "string",
"description": "Comma-separated kinds, or \"all\". Kinds: aisoff, anchored, approaching, arrived, bunkering, delayrisk, destination, dragging, draught, drifting, eta, heard, left, pilot, quiet, renamed, slow, strait, sts, tug, underway, waiting, weighed"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "At most this many events (default 60)"
},
"since": {
"type": "string",
"description": "ISO 8601 UTC time to start from"
},
"max_lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "North edge of the box"
},
"max_lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "East edge of the box"
},
"min_lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "South edge of the box"
},
"min_lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "West edge of the box"
}
},
"additionalProperties": false
}A port's picture now: vessels in port and at anchor, vessels expected (arriving) and the latest port events. Give a UN/LOCODE or a name. Credits: 5, nothing when the port is empty. Free accounts too: their answers are 24 hours behind, with a box of at most 1 square degree and 1,000 credits a month; paid plans are live.
| Argument | Type | Description |
|---|---|---|
| port* | string | A port by UN/LOCODE (such as NLRTM) or by name (such as Rotterdam) |
| limit | integer | At most this many vessels in each list (default 40) |
{
"type": "object",
"required": [
"port"
],
"properties": {
"port": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "A port by UN/LOCODE (such as NLRTM) or by name (such as Rotterdam)"
},
"limit": {
"type": "integer",
"maximum": 400,
"minimum": 1,
"description": "At most this many vessels in each list (default 40)"
}
},
"additionalProperties": false
}A port's list of vessels: expected (bound for it), in port now, arrived or departed over the last 7 days. Filter by kind, flag and length. Credits: 1 per vessel returned. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| flag | string | Only this flag, a two-letter ISO country code |
| kind | string | Only this kind of vessel |
| list | string | Which list (default expected) |
| port* | string | A port by UN/LOCODE (such as NLRTM) or by name (such as Rotterdam) |
| limit | integer | At most this many vessels (default 50) |
| max_length_m | number | Only vessels at most this long, in metres |
| min_length_m | number | Only vessels at least this long, in metres |
{
"type": "object",
"required": [
"port"
],
"properties": {
"flag": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Only this flag, a two-letter ISO country code"
},
"kind": {
"enum": [
"passenger",
"cargo",
"tanker",
"hsc",
"fishing",
"service",
"pleasure",
"other"
],
"type": "string",
"description": "Only this kind of vessel"
},
"list": {
"enum": [
"expected",
"inport",
"arrived",
"departed"
],
"type": "string",
"description": "Which list (default expected)"
},
"port": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "A port by UN/LOCODE (such as NLRTM) or by name (such as Rotterdam)"
},
"limit": {
"type": "integer",
"maximum": 300,
"minimum": 1,
"description": "At most this many vessels (default 50)"
},
"max_length_m": {
"type": "number",
"maximum": 500,
"minimum": 0,
"description": "Only vessels at most this long, in metres"
},
"min_length_m": {
"type": "number",
"maximum": 500,
"minimum": 0,
"description": "Only vessels at least this long, in metres"
}
},
"additionalProperties": false
}Waiting times at anchor off a port: the median this week against what is normal there, and optionally the vessels waiting now. Credits: 5, nothing when we hold no figures for it. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| port* | string | A port by UN/LOCODE (such as NLRTM) or by name (such as Rotterdam) |
| include_vessels | boolean | Also list the vessels at anchor now (default false) |
{
"type": "object",
"required": [
"port"
],
"properties": {
"port": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "A port by UN/LOCODE (such as NLRTM) or by name (such as Rotterdam)"
},
"include_vessels": {
"type": "boolean",
"description": "Also list the vessels at anchor now (default false)"
}
},
"additionalProperties": false
}The port an AIS destination text names (such as "NL RTM" or "ROTTERDAM PILOT"), or null. Free. Free accounts too: their answers are 24 hours behind, with a box of at most 1 square degree and 1,000 credits a month; paid plans are live.
| Argument | Type | Description |
|---|---|---|
| destination* | string | The destination as the vessel broadcasts it |
{
"type": "object",
"required": [
"destination"
],
"properties": {
"destination": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The destination as the vessel broadcasts it"
}
},
"additionalProperties": false
}Whether a vessel's IMO number is on the public sanctions lists we read (the US OFAC SDN list, the UK Sanctions List, the EU vessel lists and Australia's sanctioned vessels), with what each list says of her. Matched by IMO number only: information, not a compliance determination. Credits: 1. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| imo* | integer | The vessel's IMO number, seven digits with a valid check digit |
{
"type": "object",
"required": [
"imo"
],
"properties": {
"imo": {
"type": "integer",
"maximum": 9999999,
"minimum": 1000000,
"description": "The vessel's IMO number, seven digits with a valid check digit"
}
},
"additionalProperties": false
}Ports by name, UN/LOCODE or English name, ranked for a seafarer; or the ports nearest a position. Free. Free accounts too: their answers are 24 hours behind, with a box of at most 1 square degree and 1,000 credits a month; paid plans are live.
| Argument | Type | Description |
|---|---|---|
| limit | integer | At most this many ports (default 8) |
| query | string | A port name or UN/LOCODE |
| near_lat | number | Or: the ports nearest this latitude |
| near_lon | number | Or: the ports nearest this longitude |
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "At most this many ports (default 8)"
},
"query": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "A port name or UN/LOCODE"
},
"near_lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Or: the ports nearest this latitude"
},
"near_lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Or: the ports nearest this longitude"
}
},
"additionalProperties": false
}Find vessels by name, MMSI or IMO number (a prefix of at least 2 characters works), among the vessels our sources have heard. Each comes with her particulars and her last position from a source we may pass on. Use it to turn a name into an MMSI for the other tools. Credits: 1 per vessel returned. Free accounts too: their answers are 24 hours behind, with a box of at most 1 square degree and 1,000 credits a month; paid plans are live.
| Argument | Type | Description |
|---|---|---|
| limit | integer | At most this many vessels (default 10) |
| query* | string | Name, MMSI or IMO, or the start of one |
| near_lat | number | Optional: rank vessels near this latitude first |
| near_lon | number | Optional: rank vessels near this longitude first |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "At most this many vessels (default 10)"
},
"query": {
"type": "string",
"maxLength": 60,
"minLength": 2,
"description": "Name, MMSI or IMO, or the start of one"
},
"near_lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Optional: rank vessels near this latitude first"
},
"near_lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Optional: rank vessels near this longitude first"
}
},
"additionalProperties": false
}A summary of how a vessel spent the last days (default 30): hours under way, in port, stopped off a port, stopped elsewhere and not heard, the distance sailed, her speeds, her calls and the ports she called at most. Reach back: 90 days on Plus, 365 on Pro and Scale. Credits: 5. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| days | integer | Days back from now (default 30) |
| mmsi* | integer | The vessel's MMSI, nine digits |
{
"type": "object",
"required": [
"mmsi"
],
"properties": {
"days": {
"type": "integer",
"maximum": 365,
"minimum": 1,
"description": "Days back from now (default 30)"
},
"mmsi": {
"type": "integer",
"maximum": 999999999,
"minimum": 1,
"description": "The vessel's MMSI, nine digits"
}
},
"additionalProperties": false
}Where a vessel called, from when to when, the gaps when no receiver heard her and the events along the way, for the last days asked (default 7), from all the AIS we hear (the ports and times; a position only where we may pass it on). Reach back: 90 days on Plus, 365 on Pro and Scale. Credits: 1 per call. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| days | integer | Days back from now (default 7) |
| mmsi* | integer | The vessel's MMSI, nine digits |
{
"type": "object",
"required": [
"mmsi"
],
"properties": {
"days": {
"type": "integer",
"maximum": 365,
"minimum": 1,
"description": "Days back from now (default 7)"
},
"mmsi": {
"type": "integer",
"maximum": 999999999,
"minimum": 1,
"description": "The vessel's MMSI, nine digits"
}
},
"additionalProperties": false
}One vessel's recorded positions, oldest first, from the sources we may pass on: give hours back from now (default 72) or a from/to window. Long tracks are thinned evenly to max_points for reading; the credits count the whole range. Reach back: 90 days on Plus, 365 on Pro and Scale. Credits: 1 per vessel-day with positions. Needs a paid plan: Data API Plus, Pro or Scale, or a paid Watch plan (https://gangwayais.com/#pricing).
| Argument | Type | Description |
|---|---|---|
| to | string | End, ISO 8601 UTC (default now) |
| from | string | Start, ISO 8601 UTC such as 2026-11-01T00:00:00Z |
| mmsi* | integer | The vessel's MMSI, nine digits |
| hours | integer | Hours back from now |
| max_points | integer | Hand back at most this many points (default 300) |
{
"type": "object",
"required": [
"mmsi"
],
"properties": {
"to": {
"type": "string",
"description": "End, ISO 8601 UTC (default now)"
},
"from": {
"type": "string",
"description": "Start, ISO 8601 UTC such as 2026-11-01T00:00:00Z"
},
"mmsi": {
"type": "integer",
"maximum": 999999999,
"minimum": 1,
"description": "The vessel's MMSI, nine digits"
},
"hours": {
"type": "integer",
"maximum": 8760,
"minimum": 1,
"description": "Hours back from now"
},
"max_points": {
"type": "integer",
"maximum": 2000,
"minimum": 2,
"description": "Hand back at most this many points (default 300)"
}
},
"additionalProperties": false
}Vessels inside a latitude/longitude box, newest report first, each at her last position from a source we may pass on. truncated says that more were left out. Largest box: 1 square degree on a free account, 4 on Plus, 25 on Pro, 100 on Scale. Credits: 1 per vessel returned. Free accounts too: their answers are 24 hours behind, with a box of at most 1 square degree and 1,000 credits a month; paid plans are live.
| Argument | Type | Description |
|---|---|---|
| limit | integer | At most this many vessels (default 50) |
| max_age | string | Only vessels heard within this time, such as 90m, 24h or 7d (default 24h) |
| max_lat* | number | North edge of the box |
| max_lon* | number | East edge of the box |
| min_lat* | number | South edge of the box |
| min_lon* | number | West edge of the box |
| ship_type | integer | AIS ship type: a code ending in 0 means its whole group (70 all cargo, 80 all tankers) |
| min_speed_kn |
Vessels within a radius of a position or of another vessel, nearest first, each with her distance in nautical miles and true bearing from the centre. It asks for the square around the circle, which must fit your plan's largest box (1 square degree on a free account, 4 on Plus, 25 on Pro, 100 on Scale). Credits: 1 for every vessel in that square (at most 200), and 1 more to centre on a vessel. Free accounts too: their answers are 24 hours behind, with a box of at most 1 square degree and 1,000 credits a month; paid plans are live.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude in decimal degrees, north positive |
| lon | number | Longitude in decimal degrees, east positive |
| mmsi | integer | Or centre on this vessel's last position |
| limit | integer | At most this many vessels (default 25) |
| max_age | string | Only vessels heard within this time, such as 90m or 24h (default 24h) |
| radius_nm | number | Radius in nautical miles (default 10, at most 30) |
{
"type": "object",
"required": [],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees, north positive"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees, east positive"
},
"mmsi": {
"type": "integer",
"maximum": 999999999,
"minimum": 1,
"description": "Or centre on this vessel's last position"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "At most this many vessels (default 25)"
},
"max_age": {
"type": "string",
"pattern": "^[0-9]{1,4}[mhd]$",
"description": "Only vessels heard within this time, such as 90m or 24h (default 24h)"
},
"radius_nm": {
"type": "number",
"maximum": 30,
"minimum": 0.5,
"description": "Radius in nautical miles (default 10, at most 30)"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 14, 2026.
| number |
| Only vessels at or above this speed over ground, in knots |
{
"type": "object",
"required": [
"min_lat",
"min_lon",
"max_lat",
"max_lon"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "At most this many vessels (default 50)"
},
"max_age": {
"type": "string",
"pattern": "^[0-9]{1,4}[mhd]$",
"description": "Only vessels heard within this time, such as 90m, 24h or 7d (default 24h)"
},
"max_lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "North edge of the box"
},
"max_lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "East edge of the box"
},
"min_lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "South edge of the box"
},
"min_lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "West edge of the box"
},
"ship_type": {
"type": "integer",
"maximum": 99,
"minimum": 0,
"description": "AIS ship type: a code ending in 0 means its whole group (70 all cargo, 80 all tankers)"
},
"min_speed_kn": {
"type": "number",
"maximum": 102,
"minimum": 0,
"description": "Only vessels at or above this speed over ground, in knots"
}
},
"additionalProperties": false
}