---
title: "Events of one MMSI: port arrivals and departures, stops and moves, and changes of name, IMO, call sign, destination or draught"
method: GET
path: "/v1/vessels/{mmsi}/events"
---

# Events of one MMSI: port arrivals and departures, stops and moves, and changes of name, IMO, call sign, destination or draught

`GET /v1/vessels/{mmsi}/events`

## Request

- Base URL: `https://api.aistrail.com`
- URL: `https://api.aistrail.com/v1/vessels/{mmsi}/events`
- Auth: HTTP bearer

Computed from the archive when requested, ordered by time. Static changes are detected per source; the same change reported by several sources within an hour is listed once. A private vessel without access returns an empty page.

## Path parameters

- `mmsi` integer, required

## Query parameters

- `from` string, date-time
- `to` string, date-time
- `types` string
- `format` 'json' | 'csv' | 'xlsx'
- `limit` integer
- `cursor` string

## Response `200`

Vessel events

- object
  - `meta` EventsMeta
    - `from` string, date-time
    - `to` string, date-time
    - `types` string[]: Event types in this response
    - `count` integer
    - `complete` boolean: true when there are no more pages (paging only; see data_complete)
    - `next_cursor` string, nullable: Pass as ?cursor= to get the next page
    - `next` string, nullable: Relative URL of the next page
    - `embargo_cutoff` string, date-time, nullable: Data newer than this is not available on your plan (null on plans with live data)
    - `private_vessels` 'excluded' | 'included': Whether private vessels are part of this response for your account
    - `attribution` object[]: Required attribution for the sources in this response
    - `sanctions_lists` SanctionsLists: The sanctions lists checked for this response: per list its publication date, when AIS Trail fetched it and how many vessels it names (stale: the last fetch failed, the previous copy is used), plus a note
      - `lists` object
      - `note` string
    - `notice` string: Not-for-navigation notice (also in the X-Notice header)
  - `events` VesselEvent[]
    - `mmsi` integer
    - `imo` integer, nullable: IMO at the event time
    - `name` string, nullable: Name at the event time
    - `flag` string, nullable
    - `ts` string, date-time
    - `event` 'ENTER_ZONE' | 'EXIT_ZONE' | 'STATE_CHANGED' | 'NAME_CHANGED' | 'IMO_CHANGED' | 'CALLSIGN_CHANGED' | 'DESTINATION_CHANGED' | 'DRAUGHT_CHANGED' | 'AIS_GAP' | 'ENCOUNTER' | 'FLAG_CHANGED' | 'POSITION_JUMP': ENTER_ZONE / EXIT_ZONE: port call arrival and departure (new_value / old_value is 'Port / LOCODE'); STATE_CHANGED: MOVING, NOT_MOVING (stopped at least 15 min, from the start of the stop) or LONG_STOP (stopped for 6 h, at that moment); *_CHANGED: a static field the vessel broadcasts changed (single short reports are ignored as noise); AIS_GAP: no positions for 6 h or more while under way (old_value hours, new_value nautical miles between the two ends); ENCOUNTER: another vessel within 500 m, both slower than 3 kn, for 2 h or more outside port areas (old_value hours, new_value the other MMSI); FLAG_CHANGED: the IMO number moved to this MMSI from one with another flag (old_value / new_value flag codes); POSITION_JUMP: a physically impossible position (old_value nautical miles from the last good position, new_value the implied speed in knots), once per hour. See detail
    - `old_value` unknown
    - `new_value` unknown
    - `lat` number, nullable
    - `lon` number, nullable: Position at the event, or the last one before it within 6 h; null when none
    - `port` object, nullable: Zone events: id, name, country, locode
    - `source` string, nullable: Source(s) the event was detected in
    - `sanctions` string[]: Sanctions lists that name this row's IMO number (empty when none; CSV: joined with |). Informational, not a compliance determination: see Sanctions lists in the docs
    - `detail` object, nullable: AIS_GAP: reappeared_at, reappeared_lat, reappeared_lon, others_nearby (other vessels heard within about 12 nm in the first hours of the gap; 0 suggests no receiver coverage there, null when not checked). ENCOUNTER: other_mmsi, other_name, other_imo, other_ship_type, end, min_distance_m. FLAG_CHANGED: imo, old_mmsi, new_mmsi. POSITION_JUMP: flagged_in_hour. null for the other events. CSV and Excel: JSON text

## Other responses

- `400`: RFC 9457 problem details
- `401`: RFC 9457 problem details
- `402`: RFC 9457 problem details
- `403`: RFC 9457 problem details
- `429`: RFC 9457 problem details

---

[API](https://skmtc.dev/aistrail/apis/ais-trail-api.md) · [All operations](https://skmtc.dev/aistrail/apis/ais-trail-api/llms.txt) · [OpenAPI document](https://skmtc.dev/aistrail/apis/ais-trail-api/revisions/e829e4345208?raw)
