---
title: "Track of one IMO across MMSI changes. Each MMSI counts only while it reported this IMO (±10 min)"
method: GET
path: "/v1/vessels/imo/{imo}/track"
---

# Track of one IMO across MMSI changes. Each MMSI counts only while it reported this IMO (±10 min)

`GET /v1/vessels/imo/{imo}/track`

## Request

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

At raw resolution, copies of one report received by several sources (same MMSI, timestamps at most 2 seconds and positions at most 1 metre apart) are merged into one row, the preferred source's: barentswatch, digitraffic and dma first, then aisstream, then openwaters. Rows from one source are never merged, and a copy from a source outside the plan never removes a row.

## Path parameters

- `imo` integer, required

## Query parameters

- `from` string, date-time
- `to` string, date-time
- `resolution` 'raw' | '1m' | '1h'
- `format` 'json' | 'geojson' | 'csv' | 'xlsx'
- `include` 'static' | 'none'
- `limit` integer
- `cursor` string

## Response `200`

Positions ordered by time; each row carries its mmsi

- object
  - `meta` object
    - `from` string, date-time
    - `to` string, date-time
    - `resolution` 'raw' | '1m' | '1h'
    - `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)
    - `include` 'static' | 'none': Whether rows carry static data (the include parameter, or its default for the format)
    - `sources_through` object: Per source: the archive holds this source's data up to this time, never later than embargo_cutoff (null: no data yet)
    - `pending_days` object: Per source: UTC days in this window the source has not delivered yet (at most 100)
    - `missing_days` object: Per source: UTC days in this window up to sources_through without data (at most 100)
    - `unavailable_days` object: Per source: UTC days in this window the source never published; they will not arrive and do not count against data_complete (at most 100)
    - `data_complete` boolean: false when pending_days or missing_days is not empty for any source
    - `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` SanctionListing[]: IMO track only: official sanctions lists that name this IMO number
      - `list` 'OFAC' | 'UK' | 'EU': OFAC: the OFAC SDN List; UK: the UK Sanctions List; EU: Annex XLII of Council Regulation (EU) No 833/2014 (vessels under the Article 3s port and services ban)
      - `programmes` string[]: Sanctions programmes or regimes as written on the list
      - `listed` string, date, nullable: Date the vessel was designated, as published on the list
      - `name` string, nullable: Vessel name on the list
      - `ref` string, nullable: The list's own identifier for the entry
    - `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)
  - `positions` object[]
    - `mmsi` integer
    - `ts` string, date-time: Message timestamp (UTC) as reported by the source
    - `lat` number
    - `lon` number
    - `sog` number, nullable: Speed over ground, knots
    - `cog` number, nullable: Course over ground, degrees
    - `heading` integer, nullable: True heading, degrees; null if unavailable (raw 511)
    - `nav_status` integer, nullable: ITU-R M.1371 navigational status 0-14
    - `source` string: Data source id, see /v1/sources
    - `flags` string, nullable: Quality flag, e.g. implausible_jump (kept, never dropped)
    - `flag` string, nullable: Flag of the vessel: ISO 3166-1 alpha-2 code derived from the MMSI (see Vessel particulars); null when the MMSI is not a ship station or its MID is not allocated
    - `imo` integer, nullable: IMO number; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `name` string, nullable: Vessel name; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `callsign` string, nullable: Call sign; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `ship_type` integer, nullable: AIS ship type code; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `length_m` number, nullable: Length, metres; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `width_m` number, nullable: Beam, metres; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `draught_m` number, nullable: Draught, metres; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `destination` string, nullable: Destination as broadcast; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `eta` string, date-time, nullable: ETA as broadcast (UTC); with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `dim_a` integer, nullable: AIS dimension A: GPS antenna to bow, metres; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `dim_b` integer, nullable: AIS dimension B: GPS antenna to stern, metres; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `dim_c` integer, nullable: AIS dimension C: GPS antenna to port side, metres; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none
    - `dim_d` integer, nullable: AIS dimension D: GPS antenna to starboard side, metres; with include=static (default for csv and xlsx): the latest value the vessel reported at or before this row's time, up to 30 days back, from the sources on your plan; null when none

## 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
- `503`: 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)
