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

TypeScript, Python, Go · API explorer · MCP server

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.