Built for the people who read AIS every day but were never handed the spec: operators, analysts, port agents, fleet managers, compliance teams and the developers who build on vessel data. Everyone watches the little triangles move; almost nobody can decode what each field means, why a ship "disappears," or why the type says "cargo" when it's clearly a tanker. The full definition lives buried in ITU-R M.1371 and a scatter of IMO circulars. We assembled the working knowledge — every message type, every navigational status, the field-by-field anatomy of a position report, and how AIS lies — into one reference.
This is the technology behind the rynda live ports & vessel map: the same AIS your team sees on screen, explained down to the bit.
📖 See also: ECA / SECA zones reference · EU ETS & FuelEU cost reference
Contents
- At a glance
- What AIS is and how it works
- Class A vs Class B and the other station types
- The message types (1–27)
- Anatomy of a position report
- Navigational status (0–15)
- Static & voyage data — the message 5 fields
- Ship type codes (0–99)
- Decoding the MMSI
- How the dimensions encode length and beam
- Reporting intervals
- Terrestrial vs satellite AIS
- When AIS lies — gaps, spoofing and identity
- Data-quality caveats
- For developers
- FAQ
- References
At a glance
The short version, if you read nothing else:
- AIS is a self-reporting VHF broadcast system, not radar. Each ship transmits its own identity, position and movement on two VHF channels; anyone in range (or a satellite overhead) receives it.
- Two data streams, different cadence. Dynamic data (position, speed, course) updates every few seconds when underway. Static/voyage data (name, IMO, type, dimensions, destination, draught, ETA) is broadcast every few minutes and is typed in by the crew — which is why it's often stale or wrong.
- The message type number tells you what you're looking at. Types 1/2/3 are Class-A positions, 18/19 are Class-B, 5 is static/voyage, 21 is a navigation aid, 4 is a base station. Twenty-seven types in all.
- Navigational status is a manual field (0–15). "Under way," "at anchor," "moored," "not under command," "constrained by draught." It is set by the officer of the watch and is a frequent source of error — and a Port State Control (PSC) deficiency when wrong.
- The MMSI is not the ship. The first three digits (the MID) give the flag/country; the number can be reassigned when a ship changes flag, and special prefixes mark base stations, SAR aircraft, AtoN and distress beacons.
- A "dark" ship is usually a switched-off transponder or a spoofed position — both visible as patterns in the data (gaps, impossible jumps, duplicate identities), which is exactly what makes AIS analysis valuable.
What AIS is and how it works
The Automatic Identification System is a VHF data broadcast. Every SOLAS (Safety of Life at Sea convention) ship (and many smaller craft) carries a transponder that:
- broadcasts its own data on two dedicated VHF channels — AIS 1 = 161.975 MHz (marine channel 87B) and AIS 2 = 162.025 MHz (channel 88B);
- listens to everyone else's broadcasts on the same channels;
- coordinates when it transmits so that many ships share the same frequency without talking over each other.
That time-sharing is the clever part. Class-A units use SOTDMA (Self-Organising Time Division Multiple Access): the VHF minute is divided into 2 250 time slots, and each transceiver reserves and announces the slots it will use, so neighbours avoid them. Class-B "CS" units use CSTDMA (Carrier-Sense TDMA): they listen for a free slot and grab it, yielding to Class A.
Range is roughly line-of-sight for VHF — typically 20–40 nautical miles ship-to-ship, more to a high shore antenna. Beyond the horizon there is no terrestrial reception, which is why satellite AIS exists (see satellite AIS).
AIS was mandated by SOLAS Chapter V after 2002 for ships ≥300 GT on international voyages, ≥500 GT not on international voyages, and all passenger ships. It exists first for collision avoidance and traffic management — the global tracking industry is a second-order use of a safety system.
Class A vs Class B and the other station types
Not every triangle is the same kind of station. The transmitting device determines which message types you get and how often:
| Station type | Used by | Access scheme | Power | Key messages |
|---|---|---|---|---|
| Class A | SOLAS ships (mandatory) | SOTDMA | 12.5 W | 1, 2, 3 (position), 5 (static/voyage) |
| Class B "CS" | Small commercial, fishing, leisure | CSTDMA | 2 W | 18 (position), 24 (static) |
| Class B "SO" ("B+") | Higher-end small craft | SOTDMA | 5 W | 18, 19, 24 |
| AtoN | Buoys, lighthouses, virtual aids | — | — | 21 |
| Base station | Shore VTS infrastructure | — | — | 4, 20, 22, 23 |
| SAR aircraft | Search-and-rescue planes/helis | — | — | 9 |
| AIS-SART / MOB / EPIRB | Distress beacons | — | — | 1 (SART), 14 |
Practical consequences: a Class-B contact reports far less often and may omit IMO number, draught, destination and ETA entirely — so a fishing vessel or yacht looks "data-poor" next to a Class-A cargo ship. And an AtoN (message 21) is a buoy or a virtual mark, not a moving vessel — mislabelling one as a ship is a classic rookie error.
The message types (1–27)
Every AIS transmission carries a message ID in its first field. This is the master key to reading AIS. The 27 defined types:
| ID | Name | Purpose |
|---|---|---|
| 1 | Position report (scheduled) | Class-A dynamic position, SOTDMA |
| 2 | Position report (assigned) | Class-A position at an assigned rate |
| 3 | Position report (response) | Class-A position in response to interrogation |
| 4 | Base station report | Shore station position + UTC timestamp |
| 5 | Static & voyage data | Class-A identity, dimensions, destination, ETA, draught |
| 6 | Addressed binary message | Point-to-point application data |
| 7 | Binary acknowledgement | ACK of a message 6 |
| 8 | Binary broadcast | Broadcast application data (e.g. met/hydro) |
| 9 | SAR aircraft position | Search-and-rescue aircraft |
| 10 | UTC/date inquiry | Request another station's UTC |
| 11 | UTC/date response | Reply to a message 10 |
| 12 | Addressed safety message | Point-to-point safety text |
| 13 | Safety acknowledgement | ACK of a message 12 |
| 14 | Safety broadcast | Broadcast safety text (e.g. SART "SART ACTIVE") |
| 15 | Interrogation | Request specific messages from a station |
| 16 | Assignment mode command | Base station assigns reporting slots/rate |
| 17 | DGNSS broadcast | Differential GNSS corrections |
| 18 | Class-B position report | Standard Class-B dynamic position |
| 19 | Class-B extended position | Class-B position + some static data |
| 20 | Data link management | Base station reserves slots |
| 21 | Aid-to-navigation report | Buoy / lighthouse / virtual AtoN |
| 22 | Channel management | Region channel/power assignment |
| 23 | Group assignment | Command a group of stations |
| 24 | Class-B static data | Class-B name & type (parts A/B) |
| 25 | Single-slot binary | Short application data |
| 26 | Multi-slot binary | Longer application data |
| 27 | Long-range position | Low-rate position for satellite reception |
If you remember only a handful: 1/2/3 = big-ship position, 5 = big-ship details, 18/19 = small-craft position, 24 = small-craft details, 21 = a navigation aid, 4 = a shore station, 27 = the satellite-friendly position.
Anatomy of a position report
A Class-A position report (message 1/2/3) is the single most-consumed AIS message. Its fields, decoded:
| Field | What it carries | Gotchas |
|---|---|---|
| Message ID | 1, 2 or 3 | The type. |
| MMSI | 9-digit station identity | Identity, not the ship — can be reassigned (see MMSI). |
| Navigation status | 0–15 | Manual — often wrong. See navigational status. |
| Rate of turn (ROT) | °/min, sign = direction | Often "not available." |
| Speed over ground (SOG) | knots, 0–102.2 | 102.3 = "not available." |
| Position accuracy | 1 bit: high (≤10 m) / low (>10 m) | "High" ≈ DGPS. |
| Longitude / Latitude | 1/10 000 minute | 181°/91° = "not available." |
| Course over ground (COG) | 0–359.9° | Direction of travel, ≠ heading. |
| True heading | 0–359° | Where the bow points; 511 = "not available." |
| Timestamp | UTC second of the report | 60 = not available; 61–63 = positioning system states. |
| Maneuver indicator | special manoeuvre? | Rarely populated. |
| RAIM flag | GNSS integrity in use? | Data-quality hint. |
COG vs heading trips up newcomers constantly: COG is the direction the ship is actually moving (from GNSS — satellite positioning, i.e. GPS and its equivalents), heading is where the bow points (from the gyro). In a strong beam current or while turning they differ — and a drifting ship can have a valid heading with near-zero SOG.
Navigational status (0–15)
A single manually-set field on Class-A ships. It is one of the most useful — and least reliable — values in AIS, because the officer of the watch types it in and updating it is easy to forget.
| Code | Status |
|---|---|
| 0 | Under way using engine |
| 1 | At anchor |
| 2 | Not under command (NUC) |
| 3 | Restricted in ability to manoeuvre (RAM) |
| 4 | Constrained by her draught |
| 5 | Moored |
| 6 | Aground |
| 7 | Engaged in fishing |
| 8 | Under way sailing |
| 9 | Reserved (HSC) |
| 10 | Reserved (WIG) |
| 11 | Power-driven vessel towing astern (regional use) |
| 12 | Power-driven vessel pushing ahead / towing alongside (regional use) |
| 13 | Reserved |
| 14 | AIS-SART / MOB / EPIRB (active) |
| 15 | Undefined / default (not available) |
Why it matters:
- An incorrect nav status is a PSC deficiency risk — an anchored ship still broadcasting "under way" can attract an inspection note.
- Analysts use it to distinguish "genuinely stopped" (status 1/5) from "stopped but not updated" — a ship parked at anchor for two days still showing status 0 is a data-hygiene tell.
- Status 2 (NUC), 3 (RAM) and 4 (constrained by draught) change the collision-avoidance obligations of other ships, which is why they exist in a safety system in the first place.
Static & voyage data — the message 5 fields
Message 5 (Class A) / message 24 (Class B) carries the crew-entered description of the ship and the voyage. Because it is typed in, treat it as asserted, not verified:
| Field | Notes |
|---|---|
| IMO number | The permanent 7-digit hull identity — unlike MMSI, it does not change with flag. The reliable key for identifying a ship over its life. |
| Call sign | Radio call sign. |
| Vessel name | Up to 20 chars — frequently misspelled or left as a delivery-yard default. |
| Ship type | 0–99 code (see ship type codes). |
| Dimensions A/B/C/D | Antenna offsets that encode length and beam (see dimensions). |
| Draught | Present static draught in metres — manually set, so often the last voyage's figure. |
| Destination | Free text — "RTM", "ROTTERDAM", "FOR ORDERS", "SINGAPORE OPL"… wildly inconsistent. |
| ETA | Month/day/hour/minute — often stale. |
| Type of EPFS | Which positioning device (GPS, DGPS, etc.). |
The dynamic stream (position/speed/course) comes straight from the ship's GNSS and is generally trustworthy; the static/voyage stream is only as good as the crew's last keystroke. Every serious AIS workflow cross-checks destination and draught against reality rather than trusting them.
Ship type codes (0–99)
The ship type in message 5 is a two-digit code where the tens digit is the broad category and the units digit adds cargo/hazard detail:
| Range | Category |
|---|---|
| 0–19 | Reserved / not available (0 = not available) |
| 20–29 | Wing-in-ground (WIG) |
| 30 | Fishing |
| 31–32 | Towing (32 = long/large tow) |
| 33 | Dredging / underwater ops |
| 34 | Diving ops |
| 35 | Military ops |
| 36 | Sailing |
| 37 | Pleasure craft |
| 40–49 | High-speed craft (HSC) |
| 50 | Pilot vessel |
| 51 | Search and rescue |
| 52 | Tug |
| 53 | Port tender |
| 54 | Anti-pollution equipment |
| 55 | Law enforcement |
| 58 | Medical transport |
| 60–69 | Passenger |
| 70–79 | Cargo (71–74 encode hazard categories A–D) |
| 80–89 | Tanker (81–84 encode hazard categories A–D) |
| 90–99 | Other |
Two everyday consequences: a chemical/oil tanker often shows as 80–89, and a "cargo" ship at 70 with hazard suffix tells you it may be carrying dangerous goods. But because the code is crew-entered, a tanker mistyped as "cargo (70)" is common — never treat the AIS type as authoritative; confirm against the IMO number and a registry.
Decoding the MMSI
The Maritime Mobile Service Identity is a 9-digit number — a station identity, not a permanent ship identity. Its structure encodes a lot:
- Ship stations:
MIDxxxxxx— the first three digits are the Maritime Identification Digits, i.e. the flag state. E.g.232…/233…/234…/235…= United Kingdom,273…= Russia,477…= Hong Kong,538…= Marshall Islands,636…= Liberia,563–567…= Singapore. - Group of ships: leading
0→0MIDxxxx. - Coast / base stations: leading
00→00MIDxxxx. - SAR aircraft:
111MIDxxx. - AtoN (navigation aids):
99MIDxxxx. - Craft associated with a parent ship (lifeboats, tenders):
98MIDxxxx. - Handheld VHF / DSC:
8MIDxxxxx. - Distress beacons: AIS-SART
970xxxxxx, MOB972xxxxxx, EPIRB-AIS974xxxxxx.
The critical operational point: when a ship changes flag, its MMSI usually changes; its IMO number does not. So the MMSI is a fine live-tracking key but a poor historical one — to follow a hull across a re-flag or a sale, join on the IMO number. Reused and shared MMSIs are also a real phenomenon (and one of the tells in identity-manipulation analysis).
How the dimensions encode length and beam
Message 5 doesn't send "LOA" and "beam" directly. It sends four distances from the GNSS antenna to the bow, stern and each side:
- A = antenna → bow
- B = antenna → stern
- C = antenna → port side
- D = antenna → starboard side
From which:
Length overall (LOA) = A + B
Beam = C + D
The offsets also tell you where on the ship the antenna sits, which matters for precise berthing/pilotage. Two traps: a Class-B "part A/B" split may leave dimensions zero/unknown, and some units report a reference point that isn't the true GNSS position, introducing a small position offset on very large ships.
Why is Class-B static data split into a Part A and Part B (message 24) at all? Because a single AIS time-slot can't carry all the static fields at once: Part A sends the vessel name, Part B sends the type, dimensions and call sign — transmitted separately, which is exactly why a Class-B contact so often shows a name but no dimensions (or vice versa) until both parts have been received.
Reporting intervals
How often a ship transmits depends on its class and what it's doing. Approximate Class-A dynamic intervals (SOTDMA):
| Situation | Report interval |
|---|---|
| At anchor / moored | 3 minutes |
| 0–14 kn | 10 s |
| 0–14 kn and changing course | 3⅓ s |
| 14–23 kn | 6 s |
| 14–23 kn and changing course | 2 s |
| > 23 kn | 2 s |
| Class-A static/voyage (msg 5) | every 6 minutes |
| Class-B position (msg 18) | ~30 s (CSTDMA; every 3 min below 2 kn) |
The takeaways: a fast, turning ship floods the channel with updates (down to ~2 s), while an anchored ship reports only every three minutes — so a "stale" position at anchor is normal, not a fault. And Class-B's slow cadence is why small craft trails look choppy compared with a Class-A liner.
Terrestrial vs satellite AIS
- Terrestrial AIS — shore antennas and coastal receivers. High update rate, but only within VHF line-of-sight of land (tens of nm). Coverage is dense near coasts and empty mid-ocean.
- Satellite AIS (S-AIS) — low-earth-orbit satellites pick up AIS over open ocean. It fills the blue-water gap, but with two costs: latency (you see the position on the next satellite pass, minutes to hours later, not in real time) and message collision — in busy sea areas hundreds of ships share the same slots within a satellite's huge footprint, so many messages are lost. Message 27 exists specifically as a low-rate, long-range position report optimised for satellite pickup.
Practically: a mid-Atlantic position that's an hour old isn't necessarily "gone dark" — it may simply be waiting for the next satellite pass. Distinguishing satellite latency from deliberate darkness is a core analytical skill, and one the rynda vessel map is built to handle.
When AIS lies — gaps, spoofing and identity
Because AIS is self-reported, it can be manipulated. The three broad failure modes, and how each looks in the data:
- Going dark (transponder off). The ship simply stops transmitting. In the data it's a gap: a last-seen position, then silence, then (sometimes) a reappearance far away. A gap alone can be innocent — satellite latency, equipment failure, deep-ocean coverage holes — so gaps are judged by duration, location and context, not in isolation.
- Position spoofing. The transmitted position is falsified — via a manipulated GNSS feed or an altered AIS message — so the ship appears somewhere it isn't. Tells include impossible jumps (hundreds of miles between consecutive reports), speeds inconsistent with the track, ships showing as "sailing on land," or circular/looping tracks generated by a simulator.
- Identity manipulation. The MMSI, name, IMO or dimensions are changed or borrowed — two vessels broadcasting the same MMSI at once, an MMSI whose MID doesn't match the claimed flag, or a hull that changes name/identity between port calls.
None of this requires you to trust a single message. The patterns — a gap of the wrong length in the wrong place, a jump no ship could make, a duplicate identity — are what analysis surfaces. That is precisely why AIS remains valuable despite being spoofable: the manipulation leaves its own signature.
This section is deliberately descriptive — it explains how to read the data, not how to evade detection. For counterparty and vessel due-diligence, combine AIS behaviour with hull identity (IMO), ownership and sanctions screening rather than relying on the transponder alone.
Data-quality caveats
- Static data is asserted, not verified — name, type, destination, draught and ETA are only as current as the crew's last entry.
- Nav status drifts — anchored ships showing "under way" and vice versa are common.
- MMSI ≠ ship — reused, shared and re-flagged identities break naïve historical joins. Use IMO for the hull.
- Coverage is uneven — dense at coasts, sparse mid-ocean; absence of data is not presence of a stationary ship.
- Timestamps matter — always read a position together with its age; a "current" position may be a satellite report from hours ago.
For developers
The rynda vessel platform consumes exactly these AIS streams and exposes higher-level primitives you can build on.
- Live vessel map: the ports & vessel map renders live positions, resolves Class-A/B, and reconciles terrestrial vs satellite reports into coherent tracks.
- Identify on the durable key: store and join on the IMO number for the hull; keep MMSI as the live-radio key. This one rule prevents most tracking bugs across re-flags and sales.
- Route + ECA context: pair a track with
POST /api/ports-map/route({"ports":[...]}→eca_distance_nm,eca_zones, legs) to place AIS movement inside the regulatory geography — the bridge between "where the ship is" and "what rules apply." See the ECA reference. - Read the type number first: branch on the message ID before parsing — 1/2/3 and 18/19 are positions; 5 and 24 are static; 21 is an AtoN, not a vessel; 4 is a base station. Mixing them up is the most common AIS parsing bug.
FAQ and common confusions
Q: Why does a ship "disappear" from the map?
A: Most often it left terrestrial VHF range (mid-ocean) and you're waiting on the next satellite pass; sometimes the transponder is off. Judge by duration and location — a two-hour gap mid-Atlantic is routine; a two-hour gap off a busy coast is not.
Q: The AIS says "Cargo" but it's obviously a tanker. Why?
A: The ship-type code is typed in by the crew and is frequently wrong or generic. Never trust it — confirm the ship via its IMO number and a registry.
Q: What's the difference between COG and heading?
A: COG (course over ground) is the direction the ship is actually moving, from GNSS. Heading is where the bow points, from the gyro. Current and wind make them differ; a drifting ship can have a heading with near-zero speed.
Q: MMSI or IMO — which identifies the ship?
A: IMO is the permanent hull identity (never changes). MMSI is a radio/station identity that usually changes when the ship re-flags. Track live on MMSI; identify the hull over time on IMO.
Q: Is the destination field reliable?
A: No. It's free text set by the crew — "FOR ORDERS", port abbreviations, or a stale entry from three voyages ago are all common. Treat it as a hint, verify against actual movement.
Q: Why do small boats update so rarely?
A: They're usually Class B, which transmits at lower power and a slower cadence (roughly every 30 s to 3 min) and yields priority to Class-A ships. Choppy trails are expected.
Q: Can AIS positions be faked?
A: Yes — AIS is self-reported and can be spoofed. But manipulation leaves patterns (impossible jumps, ships "on land," duplicate MMSIs, wrong-length gaps) that analysis detects. That's why AIS stays useful despite being spoofable.
Q: What is message type 21 doing in my vessel feed?
A: That's an Aid to Navigation (a buoy, light, or a virtual mark) — not a moving ship. Filter it out of vessel logic or you'll get phantom "vessels" sitting on channel markers.
Q: Does every ship carry AIS?
A: SOLAS mandates it for ships ≥300 GT on international voyages, ≥500 GT otherwise, and all passenger ships. Many smaller vessels carry Class B voluntarily, but some craft carry none — absence from AIS doesn't prove absence of a ship.
References
- ITU-R M.1371 — the technical standard defining AIS messages, fields and access schemes.
- IMO SOLAS Chapter V, Regulation 19 — the carriage requirement.
- IMO Resolution A.1106(29) — guidelines for the onboard operational use of AIS (including nav-status discipline).
- US Coast Guard Navigation Center (NavCen) — accessible AIS message and MMSI references.
- ITU — Maritime Identification Digits (MID) table for MMSI/flag decoding.
- rynda ports & vessel map — live AIS in production.
Document version
- 2026-07 — first public version. Message types, navigational status, MMSI/ship-type decoding, dimension and interval references, and the patterns of AIS manipulation, in one frame. Field definitions follow ITU-R M.1371; always confirm against the current standard for edge cases.
