AUTOMATIC IDENTIFICATION SYSTEM
AIS Data API
Decoded AIS data as JSON over a REST API: position reports, voyage data and static vessel details, with every field named and typed. Terrestrial AIS, strongest in coastal waters and around ports. Positions are kept for 31 days.
700K+
Vessel records
31 days
Positions kept; area queries in 4-hour windows
SDKs
REST
JSON API
What is AIS Data?
The Automatic Identification System (AIS) is a maritime tracking system required on all commercial vessels. AIS transponders continuously broadcast vessel identity, position, speed, and navigation status over VHF radio. VesselAPI collects, processes, and enriches this raw AIS data into clean, queryable REST endpoints.
No raw AIS decoding needed. VesselAPI handles AIS message parsing, deduplication, position validation, and vessel identity resolution. You query clean JSON, not raw NMEA sentences.
AIS Data Fields Available
Position Data
Latitude, longitude, speed over ground (SOG), course over ground (COG), true heading, and navigational status from AIS position reports.
Vessel Identifiers
MMSI (9-digit Maritime Mobile Service Identity), IMO number (7-digit permanent identifier), vessel name, and radio callsign.
Voyage Data
Crew-reported destination, estimated time of arrival (ETA), and current draught from AIS voyage-related messages.
Static Vessel Data
Vessel type, dimensions (length, breadth, draft), gross tonnage, deadweight tonnage, year built, flag state, and engine specifications.
Navigation Status
AIS navigation status codes including "under way using engine", "at anchor", "moored" and "restricted manoeuvrability".
Spatial Queries
Query AIS data by geographic area using bounding box or radius search. H3-indexed for sub-second spatial lookups.
Update Cadence, Retention and Coverage
Update cadence
A vessel under way broadcasts a position every 2 to 30 seconds, and every 3 minutes at anchor. Reports are processed as they arrive. Each record carries the broadcast timestamp and a processed_timestamp, so the age of every position is visible.
Retention
Positions are kept for 31 days. Batch position queries take a time range inside that window. Area queries (bounding box and radius) return at most 4 hours per call, so a longer period is fetched as consecutive 4-hour slices.
Coverage
Positions come from terrestrial AIS, so coverage is strongest in coastal waters and around busy ports, and weaker or absent in open ocean and some regions. A free-tier key is enough to check the areas you need. The satellite fallback on /v1/vessel/{id}/position is deprecated.
Deprecated. The satellite fallback is withdrawn in its current form. Requests with filter.sat=true
keep working for existing credit holders until 00:00 UTC on and carry Deprecation and Sunset headers.
From the parameter is accepted and ignored, the response carries a Warning header, and no
credit is charged. Credit packs are no longer on sale; unspent credits are refunded on request to
support@vesselapi.com.
Positions for Several Vessels in One Call
The batch endpoint takes a list of MMSI or IMO numbers and a time range inside the last 31 days, and returns decoded position reports as JSON.
# Position reports for two vessels over one hour
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.vesselapi.com/v1/vessels/positions?\
filter.ids=244758000,215808000&filter.idType=mmsi&\
time.from=2026-03-22T13:30:00Z&time.to=2026-03-22T14:30:00Z"
{
"vesselPositions": [
{
"mmsi": 244758000,
"imo": 9419163,
"vessel_name": "STENA HOLLANDICA",
"latitude": 51.9876,
"longitude": 4.0543,
"location": { "type": "Point", "coordinates": [4.0543, 51.9876] },
"timestamp": "2026-03-22T14:28:05Z",
"processed_timestamp": "2026-03-22T14:28:41.905318Z",
"suspected_glitch": false,
"cog": 180.2,
"sog": 0.1,
"heading": 178,
"nav_status": 5
},
{
"mmsi": 215808000,
"imo": 9838395,
"vessel_name": "CELEBRITY BEYOND",
"latitude": 25.30714,
"longitude": -79.87168,
"location": { "type": "Point", "coordinates": [-79.87168, 25.30714] },
"timestamp": "2026-03-22T14:27:39Z",
"processed_timestamp": "2026-03-22T14:28:02.118404Z",
"suspected_glitch": false,
"cog": 159,
"sog": 16.5,
"heading": 158,
"nav_status": 0
}
],
"nextToken": "eyJsYXN0X2lk..."
}
Field definitions and the single-vessel, area and search endpoints are in the vessel lookup documentation. For a workflow view (one ship, a fleet, an area, an ETA, an alert) see the ship tracking API.
SDKs and MCP Server
Official SDKs for Python, TypeScript and Go wrap every endpoint on this page with pagination, retries and typed errors. The MCP server exposes the same data as tools to Claude, Cursor and other MCP clients.
Frequently Asked Questions
Is there a free AIS API?
Yes. The free tier gives 150 calls a month across every REST endpoint on this page: single and batch positions, area queries, vessel lookup, search and ETAs. No card is needed. Notifications (webhooks and WebSocket) are on paid plans only.
How do I get an AIS API key?
Register with an email address, confirm it, and generate a key in the dashboard. Requests carry the key in the Authorization: Bearer header, and the same key works for every endpoint.
How is the AIS API priced?
Each plan is a fixed monthly quota of API calls, and every request to any endpoint counts as one call. There are no per-seat or per-vessel charges and no sales call: plans are bought, changed and cancelled from the dashboard, with a 14-day money-back guarantee on paid plans. Current quotas and prices are on the pricing page.
Can I use the AIS API in a commercial app?
The licence covers use inside your own systems and internal tools, on every plan including the free tier. If your product will show the data to its users, please write to us before launch. We regularly give that consent on standard plans, with no separate licence. Publishing the raw data as a feed, a bulk export or a public API in front of ours is not allowed. The terms and conditions set this out.
How fresh are the AIS positions?
Reports are processed as they arrive. Each record carries the vessel's broadcast timestamp and a processed timestamp, so the age of every position is visible. A vessel under way broadcasts every 2 to 30 seconds and every 3 minutes at anchor, where coverage exists. Coverage is strongest in coastal waters and around ports.
What identifiers can I query AIS data by?
MMSI or IMO on the vessel, position, ETA and batch endpoints, with filter.idType saying which. Vessel search accepts name, callsign, flag, vessel type, year built and ENI, or a single q value that matches any identifier. MMSI is a 9-digit radio identity that can change with the owner; IMO is a 7-digit number fixed to the hull.
Start Using AIS Data Today
Get your free API key and query live AIS vessel data in minutes. No credit card required.