Complete AIS Message JSON Documentation
Below documents the JSON format used for decoding AIS messages. Depending on the settings for JSON decoding fields may or may not be included in the outcome.
With format JSON_NMEA only the common fields will be included in the JSON package. The AIS message details are still included in the NMEA array embedded in the JSON. With format JSON_FULL the program will perform a full decoding of the AIS messages and include in the JSON. The output format is largely compatible with gpsdecode.
Message types index
Position reports
1, 2, 3 — Class A ·
4 — Base Station ·
9 — SAR Aircraft ·
11 — UTC Response ·
18 — Class B ·
19 — Extended Class B ·
27 — Long-Range
Static / voyage
5 — Static and Voyage ·
24 — Static Data Report
Binary / safety / text
6 — Binary Addressed ·
7, 13 — Binary / Safety Ack ·
8 — Binary Broadcast ·
12 — Safety Addressed ·
14 — Safety Broadcast ·
25, 26 — Single/Multi Slot Binary
Network management
10 — UTC Inquiry ·
15 — Interrogation ·
16 — Assignment Mode ·
17 — DGNSS ·
20 — Data Link Mgmt ·
22 — Channel Mgmt ·
23 — Group Assignment
Aids to navigation
21 — Aid-to-Nav Report ·
28 — AtoN Report (single-slot)
Other
Common fields ·
ASM payloads (Type 6 / 8) ·
Notes
Common Fields
These fields are present in every emitted message:
| Field |
Type |
Description |
Example |
| class |
String |
Always "AIS" |
"AIS" |
| device |
String |
Always "AIS-catcher" |
"AIS-catcher" |
| version |
String |
AIS-catcher version that produced this output |
"v0.68" |
| driver |
Integer |
Numeric device driver identifier |
3 |
| hardware |
String |
Hardware/device product name reported by the driver |
"RTL-SDR" |
| scaled |
Boolean |
Values scaled to engineering units |
true |
| channel |
String |
VHF channel (A or B) |
"A" |
| nmea |
Array of String |
Original NMEA sentence(s) |
["!AIVDM,1,1,,A,13...,0*5C"] |
| type |
Integer |
AIS message type number (1–28) |
1 |
| repeat |
Integer |
Repeat indicator (0..3; 3 = do not repeat) |
0 |
| mmsi |
Integer |
MMSI number |
123456789 |
Optional fields, added depending on input mode and message contents:
| Field |
Type |
Unit |
Description |
| rxtime |
String |
UTC |
Host receive time (YYYYMMDDHHMMSS). Added when timestamping is enabled (-M T). |
| rxuxtime |
Float |
seconds |
Host receive time as Unix epoch (with microsecond fraction). Added with rxtime. |
| signalpower |
Float |
dB |
Signal power level. Added when stats are enabled (-M D). |
| ppm |
Float |
ppm |
Estimated frequency offset of the receiver during decoding. Added with signalpower. |
| toa |
Float |
seconds |
Time of arrival within the host capture (when provided by the source). |
| station_id |
Integer or String |
– |
Station identifier (numeric, or 7-char ASCII for SLS). |
| error |
Integer |
– |
Decode error code (only present when a decode error was flagged). |
| country |
String |
– |
Flag country name derived from MMSI MID. Added with -M M. |
| country_code |
String |
– |
ISO-3166 alpha-2 country code derived from MMSI MID. Added with -M M. |
Type 1, 2, 3: Position Report Class A
| Field |
Type |
Range/Units |
Description |
| status |
Integer |
0–15 |
Navigation status |
| status_text |
String |
See note 1 |
Navigation status description |
| turn |
Integer |
±720 °/min |
Rate of turn (scaled). 128 = N/A; ±127 = >5°/30s |
| turn_unscaled |
Integer |
-128..127 |
Raw ROT field (-128 = N/A) |
| speed |
Float |
0–102.2 knots |
Speed over ground |
| accuracy |
Boolean |
– |
Position accuracy flag (1 = DGPS <10 m) |
| lon |
Float |
±180° |
Longitude |
| lat |
Float |
±90° |
Latitude |
| course |
Float |
0–359.9° |
Course over ground |
| heading |
Integer |
0–359° |
True heading (511 = N/A) |
| second |
Integer |
0–59 |
UTC second (60 = N/A; 61 = manual; 62 = dead reckoning; 63 = inoperative) |
| maneuver |
Integer |
0–2 |
Maneuver indicator |
| spare |
Integer |
– |
Spare/reserved bits |
| power |
Boolean |
– |
Transmit power flag (M.1371-6 Table 46; 0 = high, 1 = low). Was part of spare in pre-M.1371-6 revisions. |
| raim |
Boolean |
– |
RAIM flag |
| radio |
Integer |
– |
Radio status (19-bit SOTDMA/ITDMA state). When non-zero, sub-fields are also decoded — see note 5. |
Type 4, 11: Base Station Report / UTC Date Response
| Field |
Type |
Range |
Description |
| timestamp |
String |
ISO-8601 |
UTC timestamp (YYYY-MM-DDTHH:MM:SSZ) |
| year |
Integer |
YYYY |
UTC year |
| month |
Integer |
1–12 |
UTC month |
| day |
Integer |
1–31 |
UTC day |
| hour |
Integer |
0–23 |
UTC hour |
| minute |
Integer |
0–59 |
UTC minute |
| second |
Integer |
0–59 |
UTC second |
| accuracy |
Boolean |
– |
Position accuracy flag |
| lon |
Float |
±180° |
Longitude |
| lat |
Float |
±90° |
Latitude |
| epfd |
Integer |
0–8 |
EPFD type |
| epfd_text |
String |
See note 2 |
EPFD description |
| transmission_control |
Boolean |
– |
Transmission control for satellite broadcast (M.1371-6 Table 49; 0 = stop msg 27 within base coverage, 1 = transmit msg 27). Was part of spare in pre-M.1371-6 revisions. |
| spare |
Integer |
– |
Spare/reserved bits |
| raim |
Boolean |
– |
RAIM flag |
| radio |
Integer |
– |
Radio status. See note 5 for sub-fields. |
Type 5: Static and Voyage Related Data
| Field |
Type |
Range |
Description |
| ais_version |
Integer |
0–3 |
AIS version |
| imo |
Integer |
1–999999999 |
IMO number |
| callsign |
String |
7 chars |
Radio callsign |
| shipname |
String |
20 chars |
Vessel name |
| shiptype |
Integer |
0–99 |
Ship type code |
| shiptype_text |
String |
See note 3 |
Ship type description |
| to_bow |
Integer |
0–511 m |
Dimension to bow |
| to_stern |
Integer |
0–511 m |
Dimension to stern |
| to_port |
Integer |
0–63 m |
Dimension to port |
| to_starboard |
Integer |
0–63 m |
Dimension to starboard |
| epfd |
Integer |
0–8 |
EPFD type |
| epfd_text |
String |
See note 2 |
EPFD description |
| eta |
String |
MM-DDTHH:MMZ |
Estimated time of arrival (UTC) |
| month |
Integer |
1–12 |
ETA month (also exposed individually) |
| day |
Integer |
1–31 |
ETA day |
| hour |
Integer |
0–23 |
ETA hour |
| minute |
Integer |
0–59 |
ETA minute |
| draught |
Float |
0–25.5 m |
Draught in metres |
| destination |
String |
20 chars |
Destination port |
| dte |
Boolean |
– |
Data terminal equipment ready (0 = ready) |
| spare |
Integer |
– |
Spare/reserved bit |
Type 6: Binary Addressed Message
| Field |
Type |
Range |
Description |
| seqno |
Integer |
0–3 |
Sequence number |
| dest_mmsi |
Integer |
9 digits |
Destination MMSI |
| retransmit |
Boolean |
– |
Retransmit flag |
| spare |
Integer |
– |
Spare bit |
| dac |
Integer |
– |
Designated Area Code |
| fid |
Integer |
– |
Functional Identifier |
| data |
String |
hex |
Raw binary payload (only when no decoder matched) |
When the (DAC, FID) pair is recognised, the payload is decoded into structured fields instead of data — see ASM payloads (Type 6 / Type 8) below.
Type 7, 13: Binary / Safety Acknowledge
| Field |
Type |
Range |
Description |
| spare |
Integer |
– |
Spare bits |
| mmsi1 |
Integer |
9 digits |
MMSI number 1 |
| mmsiseq1 |
Integer |
0–3 |
Sequence for MMSI 1 |
| mmsi2 |
Integer |
9 digits |
MMSI number 2 (if present) |
| mmsiseq2 |
Integer |
0–3 |
Sequence for MMSI 2 |
| mmsi3 |
Integer |
9 digits |
MMSI number 3 (if present) |
| mmsiseq3 |
Integer |
0–3 |
Sequence for MMSI 3 |
| mmsi4 |
Integer |
9 digits |
MMSI number 4 (if present) |
| mmsiseq4 |
Integer |
0–3 |
Sequence for MMSI 4 |
Type 8: Binary Broadcast Message
| Field |
Type |
Range |
Description |
| dac |
Integer |
– |
Designated Area Code |
| fid |
Integer |
– |
Functional Identifier |
| data |
String |
hex |
Raw binary payload (only when no decoder matched) |
When the (DAC, FID) pair is recognised, the payload is decoded into structured fields — see ASM payloads (Type 6 / Type 8) below.
Type 9: Standard SAR Aircraft Position Report
| Field |
Type |
Range |
Description |
| alt |
Integer |
0–4095 m |
Altitude (4095 = N/A) |
| speed |
Integer |
0–1023 knots |
Speed over ground |
| accuracy |
Boolean |
– |
Position accuracy |
| lon |
Float |
±180° |
Longitude |
| lat |
Float |
±90° |
Latitude |
| course |
Float |
0–359.9° |
Course over ground |
| second |
Integer |
0–59 |
UTC second |
| alt_sensor |
Boolean |
– |
Altitude sensor (M.1371-6 Table 57; 0 = GNSS, 1 = barometric). Was part of regional in pre-M.1371-6 revisions. |
| spare |
Integer |
– |
Spare bits |
| dte |
Boolean |
– |
DTE flag |
| assigned |
Boolean |
– |
Assigned mode flag |
| raim |
Boolean |
– |
RAIM flag |
| radio |
Integer |
– |
Radio status. See note 5 for sub-fields. |
Type 10: UTC/Date Inquiry
| Field |
Type |
Range |
Description |
| dest_mmsi |
Integer |
9 digits |
Destination MMSI |
Type 11: UTC/Date Response
Same fields as Type 4.
Type 12: Addressed Safety Related Message
| Field |
Type |
Range |
Description |
| seqno |
Integer |
0–3 |
Sequence number |
| dest_mmsi |
Integer |
9 digits |
Destination MMSI |
| retransmit |
Boolean |
– |
Retransmit flag |
| text |
String |
– |
Safety related text |
Type 13: Safety Related Acknowledge
Same fields as Type 7.
Type 14: Safety Related Broadcast Message
| Field |
Type |
Range |
Description |
| text |
String |
– |
Safety related text |
Type 15: Interrogation
| Field |
Type |
Range |
Description |
| mmsi1 |
Integer |
9 digits |
Interrogated MMSI 1 |
| type1_1 |
Integer |
1–27 |
First message type requested from station 1 |
| offset1_1 |
Integer |
– |
Reply slot offset for first request |
| type1_2 |
Integer |
1–27 |
Second message type requested from station 1 (if present) |
| offset1_2 |
Integer |
– |
Reply slot offset for second request |
| mmsi2 |
Integer |
9 digits |
Interrogated MMSI 2 (if present) |
| type2_1 |
Integer |
1–27 |
First message type requested from station 2 |
| offset2_1 |
Integer |
– |
Reply slot offset for first request |
Type 16: Assignment Mode Command
| Field |
Type |
Range |
Description |
| mmsi1 |
Integer |
9 digits |
First MMSI |
| offset1 |
Integer |
– |
First offset |
| increment1 |
Integer |
– |
First increment |
| mmsi2 |
Integer |
9 digits |
Second MMSI (if present) |
| offset2 |
Integer |
– |
Second offset |
| increment2 |
Integer |
– |
Second increment |
Type 17: DGNSS Binary Broadcast Message
| Field |
Type |
Range |
Description |
| lon |
Float |
±180° |
Longitude (1/600 degree resolution) |
| lat |
Float |
±90° |
Latitude (1/600 degree resolution) |
| data |
String |
hex |
DGNSS data |
Type 18: Standard Class B CS Position Report
| Field |
Type |
Range |
Description |
| reserved |
Integer |
– |
Reserved |
| speed |
Float |
0–102.2 knots |
Speed over ground |
| accuracy |
Boolean |
– |
Position accuracy |
| lon |
Float |
±180° |
Longitude |
| lat |
Float |
±90° |
Latitude |
| course |
Float |
0–359.9° |
Course over ground |
| heading |
Integer |
0–359° |
True heading |
| second |
Integer |
0–59 |
UTC second |
| power |
Boolean |
– |
Transmit power flag (M.1371-6 Table 68; 0 = high, 1 = low). Was part of regional in pre-M.1371-6 revisions. |
| spare |
Integer |
– |
Spare bit |
| cs |
Boolean |
– |
Class B unit type flag (false = SOTDMA, true = Carrier Sense) |
| display |
Boolean |
– |
Display flag |
| dsc |
Boolean |
– |
DSC flag |
| band |
Boolean |
– |
Band flag |
| msg22 |
Boolean |
– |
Message 22 flag |
| assigned |
Boolean |
– |
Assigned mode flag |
| raim |
Boolean |
– |
RAIM flag |
| radio |
Integer |
– |
Radio status. See note 5 for sub-fields. |
Type 19: Extended Class B CS Position Report
Aligned to M.1371-6 Table 69: the 8-bit reserved and 4-bit regional fields are now spare per spec.
| Field |
Type |
Range |
Description |
| spare |
Integer |
– |
Spare bits |
| speed |
Float |
0–102.2 knots |
Speed over ground |
| accuracy |
Boolean |
– |
Position accuracy |
| lon |
Float |
±180° |
Longitude |
| lat |
Float |
±90° |
Latitude |
| course |
Float |
0–359.9° |
Course over ground |
| heading |
Integer |
0–359° |
True heading |
| second |
Integer |
0–59 |
UTC second |
| shipname |
String |
20 chars |
Vessel name |
| shiptype |
Integer |
0–99 |
Ship type code |
| shiptype_text |
String |
See note 3 |
Ship type description |
| to_bow |
Integer |
0–511 m |
Dimension to bow |
| to_stern |
Integer |
0–511 m |
Dimension to stern |
| to_port |
Integer |
0–63 m |
Dimension to port |
| to_starboard |
Integer |
0–63 m |
Dimension to starboard |
| epfd |
Integer |
0–8 |
EPFD type |
| epfd_text |
String |
See note 2 |
EPFD description |
| raim |
Boolean |
– |
RAIM flag |
| dte |
Boolean |
– |
DTE flag |
| assigned |
Boolean |
– |
Assigned mode flag |
Type 20: Data Link Management
| Field |
Type |
Range |
Description |
| offset1 |
Integer |
– |
Offset number 1 |
| number1 |
Integer |
– |
Reserved slots 1 |
| timeout1 |
Integer |
minutes |
Timeout 1 |
| increment1 |
Integer |
– |
Increment 1 |
| offset2 |
Integer |
– |
Offset number 2 (if present) |
| number2 |
Integer |
– |
Reserved slots 2 |
| timeout2 |
Integer |
minutes |
Timeout 2 |
| increment2 |
Integer |
– |
Increment 2 |
| offset3 |
Integer |
– |
Offset number 3 (if present) |
| number3 |
Integer |
– |
Reserved slots 3 |
| timeout3 |
Integer |
minutes |
Timeout 3 |
| increment3 |
Integer |
– |
Increment 3 |
| offset4 |
Integer |
– |
Offset number 4 (if present) |
| number4 |
Integer |
– |
Reserved slots 4 |
| timeout4 |
Integer |
minutes |
Timeout 4 |
| increment4 |
Integer |
– |
Increment 4 |
Type 21: Aid-to-Navigation Report
| Field |
Type |
Range |
Description |
| aid_type |
Integer |
0–31 |
Aid type |
| aid_type_text |
String |
See note 4 |
Aid type description |
| name |
String |
20 chars |
Name of aid |
| accuracy |
Boolean |
– |
Position accuracy |
| lon |
Float |
±180° |
Longitude |
| lat |
Float |
±90° |
Latitude |
| to_bow |
Integer |
0–511 m |
Dimension to bow |
| to_stern |
Integer |
0–511 m |
Dimension to stern |
| to_port |
Integer |
0–63 m |
Dimension to port |
| to_starboard |
Integer |
0–63 m |
Dimension to starboard |
| epfd |
Integer |
0–8 |
EPFD type |
| epfd_text |
String |
See note 2 |
EPFD description |
| second |
Integer |
0–59 |
UTC second |
| off_position |
Boolean |
– |
Off position indicator |
| aton_status |
Integer |
0–255 |
AtoN status bits (M.1371-6 Table 71, 8-bit, AtoN-specific status per IALA R0126). Was named regional in pre-M.1371-6 revisions. |
| raim |
Boolean |
– |
RAIM flag |
| virtual_aid |
Boolean |
– |
Virtual aid flag |
| assigned |
Boolean |
– |
Assigned mode flag |
Type 22: Channel Management
| Field |
Type |
Range |
Description |
| channel_a |
Integer |
– |
Channel A number |
| channel_b |
Integer |
– |
Channel B number |
| txrx |
Integer |
– |
Tx/Rx mode |
| power |
Boolean |
– |
Transmit power flag (0 = high, 1 = low) |
| addressed |
Boolean |
– |
Addressed flag |
| band_a |
Boolean |
– |
Channel A band (0 = default, 1 = 12.5 kHz allowed) |
| band_b |
Boolean |
– |
Channel B band |
| zonesize |
Integer |
– |
Size of transitional zone |
If addressed = true:
| Field |
Type |
Range |
Description |
| dest1 |
Integer |
9 digits |
Destination MMSI 1 |
| dest2 |
Integer |
9 digits |
Destination MMSI 2 |
If addressed = false:
| Field |
Type |
Range |
Description |
| ne_lon |
Float |
±180° |
NE longitude |
| ne_lat |
Float |
±90° |
NE latitude |
| sw_lon |
Float |
±180° |
SW longitude |
| sw_lat |
Float |
±90° |
SW latitude |
Type 23: Group Assignment Command
| Field |
Type |
Range |
Description |
| ne_lon |
Float |
±180° |
NE longitude |
| ne_lat |
Float |
±90° |
NE latitude |
| sw_lon |
Float |
±180° |
SW longitude |
| sw_lat |
Float |
±90° |
SW latitude |
| station_type |
Integer |
– |
Station type |
| shiptype |
Integer |
0–99 |
Ship type code |
| shiptype_text |
String |
See note 3 |
Ship type description |
| txrx |
Integer |
– |
Tx/Rx mode |
| interval |
Integer |
– |
Reporting interval |
| quiet |
Integer |
minutes |
Quiet time |
Type 24: Static Data Report
Message Type 24 Part A:
| Field |
Type |
Range |
Description |
| partno |
Integer |
0 |
Part number, always 0 for Part A |
| shipname |
String |
20 chars |
Name of the vessel |
Message Type 24 Part B:
| Field |
Type |
Range |
Description |
| partno |
Integer |
1 |
Part number, always 1 for Part B |
| shiptype |
Integer |
0–99 |
Type of ship and cargo |
| shiptype_text |
String |
See note 3 |
Description of ship type |
| vendorid |
String |
3 chars |
Manufacturer's ID |
| model |
Integer |
0–15 |
Equipment model code |
| serial |
Integer |
0–999999 |
Unit serial number |
| callsign |
String |
7 chars |
Vessel radio callsign |
| to_bow |
Integer |
0–511 m |
Distance from GPS to bow |
| to_stern |
Integer |
0–511 m |
Distance from GPS to stern |
| to_port |
Integer |
0–63 m |
Distance from GPS to port |
| to_starboard |
Integer |
0–63 m |
Distance from GPS to starboard |
| mothership_mmsi |
Integer |
9 digits |
MMSI of mothership (only for auxiliary craft, MMSI prefix 98) |
| epfd |
Integer |
0–8 |
EPFD type (M.1371-6 extended Part B; only when message length ≥ 168 bits) |
| epfd_text |
String |
See note 2 |
EPFD description (only when epfd is present) |
| vdes_capabilities |
Integer |
0–3 |
VDES capabilities (M.1371-6; 0 = AIS only, 1 = VDES ASM, 2 = +VDE-TER, 3 = +VDE-SAT). Only when message length ≥ 168 bits. |
Type 25, 26: Single Slot / Multi Slot Binary Message
The envelope is decoded; when binary_data_flag = 1 the payload follows the same (dac, fid) layout as msg 6 (addressed) or msg 8 (broadcast) and is dispatched to the same ASM decoders — see ASM payloads below.
| Field |
Type |
Range |
Description |
| addressed |
Boolean |
– |
Addressed flag (0 = broadcast, 1 = addressed to a specific MMSI) |
| ai_available |
Boolean |
– |
Application Identifier available flag (1 = ASM application data follows) |
| dest_mmsi |
Integer |
9 digits |
Destination MMSI (only when addressed = true) |
| dac |
Integer |
– |
Designated Area Code (only when ai_available = true) |
| fid |
Integer |
– |
Functional Identifier (only when ai_available = true) |
When the (dac, fid) pair is recognised the structured ASM fields are emitted in addition (see ASM payloads). For msg 26 the trailing 20-bit communication state is decoded into the standard radio sub-fields — see note 5.
Type 27: Long-Range AIS Broadcast
| Field |
Type |
Range |
Description |
| accuracy |
Boolean |
– |
Position accuracy (true if <10 m) |
| raim |
Boolean |
– |
RAIM flag |
| status |
Integer |
0–15 |
Navigation status |
| status_text |
String |
See note 1 |
Navigation status description |
| lon |
Float |
±180° |
Longitude (1/600 degree resolution) |
| lat |
Float |
±90° |
Latitude (1/600 degree resolution) |
| speed |
Integer |
0–62 knots |
Speed over ground |
| course |
Integer |
0–359° |
Course over ground |
| gnss |
Boolean |
– |
Position latency (M.1371-6; 0 = reported position latency <5 s, 1 = ≥5 s, default). Was named "GNSS position status" in pre-M.1371-6 revisions; field name kept for backward compatibility. |
Type 28: AtoN Report (single-slot)
ITU-R M.1371-6 §A7-3.26, Table 84.
| Field |
Type |
Range |
Description |
| second |
Integer |
0–59 |
UTC second |
| lon |
Float |
±180° |
Longitude (1/600000° resolution) |
| lat |
Float |
±90° |
Latitude (1/600000° resolution) |
| restricted_use |
Integer |
0–3 |
Restricted use flag (0 = default; 1..3 reserved for restricted use) |
| aton_station_type |
Integer |
0–7 |
AtoN station type (3-bit; lookup) |
| virtual_aid |
Boolean |
– |
Virtual AtoN flag — true when aton_station_type == 4 |
| aid_type |
Integer |
0–31 |
Type of Aid to Navigation |
| aid_type_text |
String |
See note 4 |
Aid type description |
| iala_mrn |
Integer |
0–131071 |
IALA AtoN Maritime Resource Name (17-bit identifier) |
| dim_type |
Integer |
0–15 |
AtoN Dimensions Type — defines what to_bow/to_stern represent (Table 84) |
| to_bow |
Integer |
0–511 m |
Dimension to bow (interpretation depends on dim_type) |
| to_stern |
Integer |
0–2047 m |
Dimension to stern (interpretation depends on dim_type) |
| additional_flag |
Boolean |
– |
Additional information flag |
| charted_status |
Boolean |
– |
Charted status (0 = not charted, 1 = charted) |
| on_station_status |
Integer |
0–15 |
On-station status (4-bit; lookup) |
| aton_status |
Integer |
0–255 |
AtoN status bits (8-bit, AtoN-specific status per IALA R0126) |
| spare |
Integer |
– |
Spare bit |
| auth_flag |
Boolean |
– |
Authentication flag (1 = transmission authenticated) |
ASM payloads (Type 6 / Type 8)
For Type 6 and Type 8 messages, AIS-catcher decodes selected Application-Specific Messages (ASMs) identified by the (dac, fid) pair. When a decoder matches, the structured fields below are emitted in addition to the per-type fields (dac, fid, etc.); when no decoder matches, the raw payload is emitted as data (hex string).
Jump to:
IMO/ITU-R (DAC=1) ·
IALA Zeni Lite Buoy (DAC=0) ·
Inland AIS (DAC=200) ·
IALA UK & ROI (DAC=235/250) ·
St Lawrence Seaway (DAC=316/366) ·
US Environmental (DAC=367)
IMO / ITU-R M.1371 (DAC = 1)
FID = 0: Text using 6-bit ASCII (msg 6 and 8)
| Field |
Type |
Description |
| ack_required |
Boolean |
Acknowledgement required |
| text_sequence |
Integer |
Sequence number for multi-part text |
| text |
String |
Text payload |
FID = 2: Interrogation for a specified FMS (msg 6)
| Field |
Type |
Description |
| requested_dac |
Integer |
Designated Area Code requested |
| requested_fid |
Integer |
Functional Identifier requested |
FID = 3: Extended interrogation (msg 6)
| Field |
Type |
Description |
| requested_dac |
Integer |
Designated Area Code requested |
| spare |
Integer |
Spare bits |
FID = 4: Capability reply (msg 6)
| Field |
Type |
Description |
| ai_available |
String |
128-bit AI-available bitstring (ASCII '0'/'1') |
FID = 11: Legacy meteorological/hydrological (msg 8, IMO SN/Circ.236)
Same fields as FID = 31 below (legacy encoding; superseded by FID = 31).
FID = 16: Persons on board (msg 6) / VTS targets (msg 8)
The same (DAC=1, FID=16) slot is reused for two different payloads depending on message type.
In msg 6 (number of persons on board, also FID = 40):
| Field |
Type |
Description |
| persons |
Integer |
Number of persons on board |
In msg 8 (VTS targets, IMO Circ.289 §6):
| Field |
Type |
Unit |
Description |
| vts_target_id_type |
Integer |
– |
Target ID type |
| vts_target_id |
Integer or String |
– |
Target identifier (string when id_type = 2; numeric otherwise) |
| spare |
Integer |
– |
Spare bits |
| vts_target_lat |
Float |
degrees |
Target latitude |
| vts_target_lon |
Float |
degrees |
Target longitude |
| vts_target_cog |
Integer |
degrees |
Target course over ground |
| vts_target_timestamp |
Integer |
seconds |
UTC second of report |
| vts_target_sog |
Integer |
knots |
Target speed over ground |
FID = 21: Weather observation from ship (msg 8, IMO Circ.289 §10)
Only the non-WMO variant (variant 0) is decoded.
| Field |
Type |
Unit |
Description |
| weather_report_type |
Integer |
– |
Variant indicator (0 = non-WMO, 1 = WMO BUFR — not decoded) |
| station_name |
String |
– |
Reporting station name |
| lon |
Float |
degrees |
Longitude |
| lat |
Float |
degrees |
Latitude |
| day |
Integer |
– |
UTC day |
| hour |
Integer |
– |
UTC hour |
| minute |
Integer |
– |
UTC minute |
| present_weather |
Integer |
– |
Present weather code |
| visgreater |
Boolean |
– |
Visibility-greater-than flag |
| visibility |
Float |
nm |
Horizontal visibility |
| humidity |
Integer |
percent |
Relative humidity |
| wspeed |
Integer |
knots |
Wind speed |
| wdir |
Integer |
degrees |
Wind direction |
| pressure |
Integer |
hPa |
Atmospheric pressure |
| pressuretend_wmo |
Integer |
– |
Pressure tendency (WMO FM-13) |
| airtemp |
Float |
°C |
Air temperature |
| watertemp |
Float |
°C |
Water temperature |
| waveperiod |
Integer |
seconds |
Wave period |
| waveheight |
Float |
metres |
Wave height |
| wavedir |
Integer |
degrees |
Wave direction |
| swellheight |
Float |
metres |
Swell height |
| swelldir |
Integer |
degrees |
Swell direction |
| swellperiod |
Integer |
seconds |
Swell period |
FID = 26: Environmental (msg 8, IMO Circ.289 §12)
Only the first sensor report's common header is decoded; per-sensor bodies are not.
| Field |
Type |
Description |
| sensor_report_type |
Integer |
Sensor report type (Table 12.4) |
| day |
Integer |
UTC day |
| hour |
Integer |
UTC hour |
| minute |
Integer |
UTC minute |
| site_id |
Integer |
Site identifier |
| Field |
Type |
Unit |
Description |
| linkage_id |
Integer |
– |
Message linkage ID |
| sender_classification |
Integer |
– |
Sender classification |
| route_type |
Integer |
– |
Route type |
| month |
Integer |
– |
UTC month |
| day |
Integer |
– |
UTC day |
| hour |
Integer |
– |
UTC hour |
| minute |
Integer |
– |
UTC minute |
| duration_minutes |
Integer |
minutes |
Route validity duration |
| waypoint_count |
Integer |
– |
Number of waypoints |
| waypoints |
String |
– |
Waypoint list as lat,lon[;lat,lon]… |
FID = 29: Text description, broadcast (msg 8, IMO Circ.289 §14)
| Field |
Type |
Description |
| linkage_id |
Integer |
Message linkage ID |
| text |
String |
Text description |
FID = 30: Text description, addressed (msg 6, IMO Circ.289 §14)
| Field |
Type |
Description |
| linkage_id |
Integer |
Message linkage ID |
| text |
String |
Text description |
FID = 31: Meteorological/hydrological data (msg 8, IMO Circ.289 §11)
| Field |
Type |
Unit |
Description |
| lon |
Float |
degrees |
Longitude |
| lat |
Float |
degrees |
Latitude |
| accuracy |
Boolean |
– |
Position accuracy |
| day |
Integer |
– |
UTC day |
| hour |
Integer |
– |
UTC hour |
| minute |
Integer |
– |
UTC minute |
| wspeed |
Integer |
knots |
Wind speed |
| wgust |
Integer |
knots |
Wind gust |
| wdir |
Integer |
degrees |
Wind direction |
| wgustdir |
Integer |
degrees |
Wind gust direction |
| airtemp |
Float |
°C |
Air temperature |
| humidity |
Integer |
percent |
Relative humidity |
| dewpoint |
Float |
°C |
Dew point |
| pressure |
Integer |
hPa |
Atmospheric pressure |
| pressuretend |
Integer |
– |
Pressure tendency |
| visgreater |
Boolean |
– |
Visibility-greater-than flag |
| visibility |
Float |
nm |
Horizontal visibility |
| waterlevel |
Float |
metres |
Water level (deviation from chart datum) |
| leveltrend |
Integer |
– |
Water level trend |
| cspeed |
Float |
knots |
Surface current speed |
| cdir |
Integer |
degrees |
Surface current direction |
| cspeed2 |
Float |
knots |
Current speed at depth #2 |
| cdir2 |
Integer |
degrees |
Current direction at depth #2 |
| cdepth2 |
Integer |
metres |
Measurement depth #2 |
| cspeed3 |
Float |
knots |
Current speed at depth #3 |
| cdir3 |
Integer |
degrees |
Current direction at depth #3 |
| cdepth3 |
Integer |
metres |
Measurement depth #3 |
| waveheight |
Float |
metres |
Wave height |
| waveperiod |
Integer |
seconds |
Wave period |
| wavedir |
Integer |
degrees |
Wave direction |
| swellheight |
Float |
metres |
Swell height |
| swellperiod |
Integer |
seconds |
Swell period |
| swelldir |
Integer |
degrees |
Swell direction |
| seastate |
Integer |
– |
Sea state (Beaufort) |
| watertemp |
Float |
°C |
Water temperature |
| preciptype |
Integer |
– |
Precipitation type |
| salinity |
Integer |
percent |
Salinity |
| ice |
Integer |
– |
Ice indicator |
IALA Zeni Lite Buoy (DAC = 0, FID = 0, msg 6)
| Field |
Type |
Unit |
Description |
| asm_sub_app_id |
Integer |
– |
ASM sub-application ID |
| asm_voltage_data |
Float |
V |
Voltage sensor data |
| asm_current_data |
Float |
A |
Current sensor data |
| asm_power_supply_type |
Boolean |
– |
Power supply type |
| asm_light_status |
Boolean |
– |
Light status |
| asm_battery_status |
Boolean |
– |
Battery status |
| asm_off_position_status |
Boolean |
– |
Off-position status |
| spare |
Integer |
– |
Spare bits |
Inland AIS — CCNR/CESNI (DAC = 200)
FID = 10: ERI ship static voyage data (msg 8)
| Field |
Type |
Unit |
Description |
| vin |
String |
– |
European Number of Vessel (ERI ENI) |
| length |
Float |
metres |
Overall length of vessel |
| beam |
Float |
metres |
Beam |
| shiptype |
Integer |
– |
ERI ship type |
| hazard |
Integer |
– |
Hazardous cargo code |
| draught |
Float |
metres |
Draught |
| loaded |
Integer |
– |
Loaded/unloaded |
| speed_q |
Boolean |
– |
Speed quality |
| course_q |
Boolean |
– |
Course quality |
| heading_q |
Boolean |
– |
Heading quality |
FID = 25: Bridge clearance (msg 8)
| Field |
Type |
Unit |
Description |
| asm_version |
Integer |
– |
ASM version indicator |
| un_country |
String |
– |
UN country code |
| fairway_section |
Integer |
– |
Fairway section number |
| object_code |
String |
– |
Object code |
| fairway_hectometre |
Integer |
– |
Fairway hectometre |
| bridge_clearance |
Integer |
cm |
Bridge clearance from water surface |
| measurement_age |
Integer |
minutes |
Age of measurement |
| clearance_accuracy |
Integer |
cm |
Bridge clearance accuracy (±cm) |
FID = 55: Persons on board, detailed (msg 6)
| Field |
Type |
Description |
| crew_count |
Integer |
Number of crew |
| passenger_count |
Integer |
Number of passengers |
| shipboard_personnel_count |
Integer |
Other shipboard personnel |
IALA UK & ROI (DAC = 235 / 250)
FID = 10: Aid-to-navigation monitor (msg 6)
| Field |
Type |
Unit |
Description |
| ana_int |
Float |
V |
Internal analogue voltage |
| ana_ext1 |
Float |
V |
External analogue input 1 |
| ana_ext2 |
Float |
V |
External analogue input 2 |
| racon |
Integer |
– |
RACON status |
| health |
Integer |
– |
Health status |
| stat_ext |
Integer |
– |
External digital input status (8-bit) |
| off_position |
Boolean |
– |
Off-position flag |
FID = 20: Trinity House buoy position monitoring (msg 6, DAC = 235 only)
| Field |
Type |
Unit |
Description |
| station_name |
String |
– |
Station name |
| utc_day |
Integer |
– |
UTC day |
| utc_hour |
Integer |
– |
UTC hour |
| utc_minute |
Integer |
– |
UTC minute |
| lon |
Float |
degrees |
Longitude |
| lat |
Float |
degrees |
Latitude |
| off_position |
Boolean |
– |
Off-position flag |
| spare |
Integer |
– |
Spare bits |
St Lawrence Seaway (DAC = 316 CA / 366 US)
FID = 1: Meteorological/hydrological (msg 6 and 8)
message_id selects the sub-payload (1 = weather, 2 = wind, 3 = water level, 6 = water flow). All variants share a common header.
Common header (all variants):
| Field |
Type |
Unit |
Description |
| message_id |
Integer |
– |
Sub-message identifier |
| month |
Integer |
– |
UTC month |
| day |
Integer |
– |
UTC day |
| hour |
Integer |
– |
UTC hour |
| minute |
Integer |
– |
UTC minute |
| station_id |
String |
– |
Station identifier (7-char ASCII) |
| lon |
Float |
degrees |
Longitude |
| lat |
Float |
degrees |
Latitude |
message_id = 1 (weather) adds:
| Field |
Type |
Unit |
Description |
| wspeed |
Float |
m/s |
Wind speed |
| wgust |
Float |
knots |
Wind gust |
| wdir |
Integer |
degrees |
Wind direction |
| barometric_pressure |
Integer |
hPa |
Barometric pressure |
| air_temperature |
Float |
°C |
Air temperature |
| dew_point |
Float |
°C |
Dew point |
| visibility_km |
Float |
km |
Horizontal visibility |
| watertemp |
Float |
°C |
Water temperature |
message_id = 2 (wind) adds:
| Field |
Type |
Unit |
Description |
| wind_speed_avg |
Float |
knots |
Average wind speed |
| wind_gust_speed |
Float |
knots |
Wind gust speed |
| wind_direction_avg |
Integer |
degrees |
Average wind direction |
| spare |
Integer |
– |
Spare bits |
message_id = 3 (water level) adds:
| Field |
Type |
Unit |
Description |
| water_level_type |
Integer |
– |
Water level type |
| waterlevel |
Float |
metres |
Water level |
| reference_datum |
Integer |
– |
Reference datum |
| reading_type |
Integer |
– |
Reading type |
| spare |
Integer |
– |
Spare bits |
message_id = 6 (water flow) adds:
| Field |
Type |
Unit |
Description |
| water_flow |
Integer |
– |
Water flow |
| spare |
Integer |
– |
Spare bits |
FID = 2 (lock scheduling) and FID = 32 (specific): only message_id is decoded.
US Environmental Sensor Report (DAC = 367, FID = 33, msg 8)
Common header:
| Field |
Type |
Description |
| report_type |
Integer |
Sensor report type (selects body fields) |
| day |
Integer |
UTC day |
| hour |
Integer |
UTC hour |
| minute |
Integer |
UTC minute |
| site_id |
Integer |
Site identifier |
Only the first sensor report body is decoded.
report_type = 0 (location) body adds:
| Field |
Type |
Unit |
Description |
| version |
Integer |
– |
Sensor version |
| lon |
Float |
degrees |
Longitude |
| lat |
Float |
degrees |
Latitude |
| precision |
Integer |
– |
Position precision |
| alt |
Integer |
metres |
Altitude |
report_type = 1 (station identification) body adds:
| Field |
Type |
Description |
| name |
String |
Station name |
report_type = 2 (wind) body adds:
| Field |
Type |
Unit |
Description |
| wspeed |
Integer |
knots |
Wind speed |
| wgust |
Integer |
knots |
Wind gust |
| wdir |
Integer |
degrees |
Wind direction |
| wgustdir |
Integer |
degrees |
Wind gust direction |
| sensor_description |
Integer |
– |
Sensor description code |
| forecast_wspeed |
Integer |
knots |
Forecast wind speed |
| forecast_wgust |
Integer |
knots |
Forecast wind gust |
| forecast_wdir |
Integer |
degrees |
Forecast wind direction |
| forecast_day |
Integer |
– |
Forecast UTC day |
| forecast_hour |
Integer |
– |
Forecast UTC hour |
| forecast_minute |
Integer |
– |
Forecast UTC minute |
| forecast_duration |
Integer |
minutes |
Forecast validity duration |
report_type = 3 (water level) body adds:
| Field |
Type |
Unit |
Description |
| water_level_type |
Integer |
– |
Water level type |
| waterlevel |
Float |
metres |
Water level |
| leveltrend |
Integer |
– |
Water level trend |
| reference_datum |
Integer |
– |
Reference datum |
Notes
Note 1: Navigation Status Values
| Value |
Description |
| 0 |
Under way using engine |
| 1 |
At anchor |
| 2 |
Not under command |
| 3 |
Restricted maneuverability |
| 4 |
Constrained by her draught |
| 5 |
Moored |
| 6 |
Aground |
| 7 |
Engaged in fishing |
| 8 |
Under way sailing |
| 9 |
Reserved for HSC |
| 10 |
Reserved for WIG |
| 11 |
Towing astern (regional) |
| 12 |
Pushing ahead or towing alongside (regional) |
| 13 |
Reserved |
| 14 |
AIS-SART is active |
| 15 |
Not defined |
Note 2: EPFD Type Values
| Value |
Description |
| 0 |
Undefined |
| 1 |
GPS |
| 2 |
GLONASS |
| 3 |
Combined GPS/GLONASS |
| 4 |
Loran-C |
| 5 |
Chayka |
| 6 |
Integrated navigation system |
| 7 |
Surveyed |
| 8 |
Galileo |
Note 3: Ship Type Values
| Value |
Description |
| 0 |
Not available |
| 1-19 |
Reserved |
| 20 |
Wing in ground (WIG) - all ships of this type |
| 21 |
Wing in ground (WIG) - Hazardous category A |
| 22 |
Wing in ground (WIG) - Hazardous category B |
| 23 |
Wing in ground (WIG) - Hazardous category C |
| 24 |
Wing in ground (WIG) - Hazardous category D |
| 25-29 |
Wing in ground (WIG) - Reserved |
| 30 |
Fishing |
| 31 |
Towing |
| 32 |
Towing: length exceeds 200m or breadth exceeds 25m |
| 33 |
Dredging or underwater ops |
| 34 |
Diving ops |
| 35 |
Military ops |
| 36 |
Sailing |
| 37 |
Pleasure Craft |
| 38-39 |
Reserved |
| 40 |
High speed craft (HSC) - all ships of this type |
| 41 |
High speed craft (HSC) - Hazardous category A |
| 42 |
High speed craft (HSC) - Hazardous category B |
| 43 |
High speed craft (HSC) - Hazardous category C |
| 44 |
High speed craft (HSC) - Hazardous category D |
| 45-48 |
High speed craft (HSC) - Reserved for future use |
| 49 |
High speed craft (HSC) - No additional information |
| 50 |
Pilot Vessel |
| 51 |
Search and Rescue vessel |
| 52 |
Tug |
| 53 |
Port Tender |
| 54 |
Anti-pollution equipment |
| 55 |
Law Enforcement |
| 56-57 |
Spare - Local Vessel |
| 58 |
Medical Transport |
| 59 |
Noncombatant ship according to RR Resolution No. 18 |
| 60 |
Passenger - all ships of this type |
| 61 |
Passenger - Hazardous category A |
| 62 |
Passenger - Hazardous category B |
| 63 |
Passenger - Hazardous category C |
| 64 |
Passenger - Hazardous category D |
| 65-68 |
Passenger - Reserved for future use |
| 69 |
Passenger - No additional information |
| 70 |
Cargo - all ships of this type |
| 71 |
Cargo - Hazardous category A |
| 72 |
Cargo - Hazardous category B |
| 73 |
Cargo - Hazardous category C |
| 74 |
Cargo - Hazardous category D |
| 75-78 |
Cargo - Reserved for future use |
| 79 |
Cargo - No additional information |
| 80 |
Tanker - all ships of this type |
| 81 |
Tanker - Hazardous category A |
| 82 |
Tanker - Hazardous category B |
| 83 |
Tanker - Hazardous category C |
| 84 |
Tanker - Hazardous category D |
| 85-88 |
Tanker - Reserved for future use |
| 89 |
Tanker - No additional information |
| 90 |
Other Type - all ships of this type |
| 91 |
Other Type - Hazardous category A |
| 92 |
Other Type - Hazardous category B |
| 93 |
Other Type - Hazardous category C |
| 94 |
Other Type - Hazardous category D |
| 95-98 |
Other Type - Reserved for future use |
| 99 |
Other Type - no additional information |
Note 4: Aid to Navigation Type Values
| Value |
Description |
| 0 |
Default, Type of Aid to Navigation not specified |
| 1 |
Reference point |
| 2 |
RACON (radar transponder marking a navigation hazard) |
| 3 |
Fixed offshore structure |
| 4 |
Spare, Reserved for future use |
| 5 |
Light, without sectors |
| 6 |
Light, with sectors |
| 7 |
Leading Light Front |
| 8 |
Leading Light Rear |
| 9 |
Beacon, Cardinal N |
| 10 |
Beacon, Cardinal E |
| 11 |
Beacon, Cardinal S |
| 12 |
Beacon, Cardinal W |
| 13 |
Beacon, Port hand |
| 14 |
Beacon, Starboard hand |
| 15 |
Beacon, Preferred Channel port hand |
| 16 |
Beacon, Preferred Channel starboard hand |
| 17 |
Beacon, Isolated danger |
| 18 |
Beacon, Safe water |
| 19 |
Beacon, Special mark |
| 20 |
Cardinal Mark N |
| 21 |
Cardinal Mark E |
| 22 |
Cardinal Mark S |
| 23 |
Cardinal Mark W |
| 24 |
Port hand Mark |
| 25 |
Starboard hand Mark |
| 26 |
Preferred Channel Port hand |
| 27 |
Preferred Channel Starboard hand |
| 28 |
Isolated danger |
| 29 |
Safe Water |
| 30 |
Special Mark |
| 31 |
Light Vessel / LANBY / Rigs |
Note 5: Radio status sub-fields
When radio is non-zero on a Type 1/2/3/4/9/11/18 message, AIS-catcher decodes the SOTDMA/ITDMA state into additional fields:
| Field |
Type |
Description |
| sync_state |
Integer |
Sync state (0–3) |
| slot_timeout |
Integer |
Frames until new slot (0 = next frame) |
| slot_offset |
Integer |
Slot offset (only when slot_timeout = 0) |
| utc_hour |
Integer |
UTC hour from sync (only when slot_timeout = 1) |
| utc_minute |
Integer |
UTC minute from sync (only when slot_timeout = 1) |
| slot_number |
Integer |
TDMA slot number used (only when slot_timeout ∈ {2, 4, 6}) |
| received_stations |
Integer |
Stations received in last frame (only when slot_timeout ∈ {3, 5, 7}) |