---
title: "Latest live positions in a box (Pro and Business plans; sources: `aisstream`, `barentswatch`, `digitraffic`, `openwaters`)"
method: GET
path: "/v1/positions"
---

# Latest live positions in a box (Pro and Business plans; sources: \`aisstream\`, \`barentswatch\`, \`digitraffic\`, \`openwaters\`)

`GET /v1/positions`

## Request

- Base URL: `https://api.aistrail.com`
- URL: `https://api.aistrail.com/v1/positions`
- Auth: HTTP bearer

Up to 2000 vessels; truncated is true when there are more. 503 while the live view is starting.

## Query parameters

- `bbox` string, required
- `max_age` number

## Response `200`

ok

- object
  - `count` integer
  - `truncated` boolean
  - `positions` LivePosition[]
    - `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)
    - `imo` integer, nullable
    - `name` string, nullable
    - `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
    - `length_m` number, nullable
    - `width_m` number, nullable
    - `draught_m` number, nullable
    - `destination` string, nullable: Destination as declared by the vessel
    - `eta` string, date-time, nullable: ETA as declared by the vessel
    - `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
    - `rot` number, nullable: Rate of turn, degrees per minute
    - `ais_class` string, nullable: AIS transponder class, A or B
    - `age_s` number: Seconds since ts
    - `received_at` string, date-time: When AIS Trail received the position
  - `meta` LiveMeta
    - `sources` union: Source ids the live endpoints serve on your plan
      - string[]
      - 'all'
    - `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
    - `notice` string: Not-for-navigation notice (also in the X-Notice header)
  - `live_stale_s` integer: Present when the live view is stale

## 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)
