AVAILABLE NOW

Free AIS API

Use Pelyr’s HTTPS API with a free key to request vessel positions, details and recent tracks as JSON. Bring maritime context into your application one request at a time.

Get a free API key
01 / POSITIONS

Ask what is moving.
Get the positions.

Request current vessel positions in an area or take a closer look at an individual ship.

Current positionsArea lookupBearer auth
Open the API docs
GET /v1/vessels · 200 OKJSON
{
  "generated_at": "2026-08-30T14:22:10Z",
  "count": 1,
  "truncated": false,
  "vessels": [
    {
      "mmsi": 244660123,
      "position": {
        "lat": 51.18597,
        "lon": 5.964237,
        "sog": 6.8,
        "cog": 90.8,
        "heading": 273,
        "nav_status": 0,
        "rot": null,
        "pos_accuracy": false,
        "msg_type": 1,
        "ts": "2026-08-30T14:22:11Z",
        "license": "100",
        "plausibility": "high",
        "flags": []
      },
      "static": {
        "name": "EXAMPLE TRADER",
        "type": 70,
        "imo": 9543756,
        "callsign": "V7WW7",
        "dest": "ROTTERDAM",
        "draught": 6.8,
        "eta": "11-06T03:00",
        "length": 257,
        "beam": 43,
        "dim_a": 214,
        "dim_b": 43,
        "dim_c": 24,
        "dim_d": 19,
        "ts": "2026-08-30T13:47:02Z",
        "license": "1"
      }
    }
  ]
}
Public OpenAPI contract example. Sample vessel values, not live data.API reference
GET /v1/vessels/{mmsi} · 200 OKJSON
{
  "mmsi": 244660123,
  "position": {
    "lat": 51.18597,
    "lon": 5.964237,
    "sog": 6.8,
    "cog": 90.8,
    "heading": 273,
    "nav_status": 0,
    "rot": null,
    "pos_accuracy": false,
    "msg_type": 1,
    "ts": "2026-08-30T14:22:11Z",
    "license": "100",
    "plausibility": "high",
    "flags": []
  },
  "static": {
    "name": "EXAMPLE TRADER",
    "type": 70,
    "imo": 9543756,
    "callsign": "V7WW7",
    "dest": "ROTTERDAM",
    "draught": 6.8,
    "eta": "11-06T03:00",
    "length": 257,
    "beam": 43,
    "dim_a": 214,
    "dim_b": 43,
    "dim_c": 24,
    "dim_d": 19,
    "ts": "2026-08-30T13:47:02Z",
    "license": "1"
  }
}
Public OpenAPI contract example. A silent vessel can return 404 instead.API reference
02 / VESSEL DETAILS

Know the vessel.
See its details.

Search by MMSI, IMO or name and retrieve available identity and static information.

MMSIIMOVessel name
03 / HISTORICAL TRACKS

Revisit a journey.
Choose the detail.

Retrieve recorded tracks at the resolution that suits your question, from detailed passages to a broader view.

Recorded positionsTime resolutionRoute history
GET /v1/vessels/{mmsi}/track · 200 OKJSON
{
  "mmsi": 244660123,
  "from": "2026-08-29T00:00:00Z",
  "to": "2026-08-30T00:00:00Z",
  "resolution": "5min",
  "count": 1,
  "points": [
    {
      "lat": 51.18597,
      "lon": 5.964237,
      "sog": 6.8,
      "cog": 90.8,
      "heading": 273,
      "nav_status": 0,
      "rot": null,
      "pos_accuracy": false,
      "msg_type": 1,
      "ts": "2026-08-29T00:00:00Z",
      "license": "100"
    }
  ]
}
Public OpenAPI contract example. Available history depends on your plan.Track API reference
MORE THROUGH THE API

Events and alerts, too.

Route Change DetectionObserved crossings, turnarounds and route changes.Zone AlertVessel activity in the areas you monitor.
BUILD AT YOUR OWN PACE

Simple requests.
Useful context.

Enable HTTPS API on your key and make authenticated requests from your server. Keep your key private; use the documentation for endpoints and examples. The Free plan is for non-commercial use; see the free AIS data options and limits before you build.

Before your first request.

How do I authenticate requests?

Create a free key in the dashboard, enable HTTPS API and send the key as a bearer token in the Authorization header. Make requests from your server and keep the key out of browser code and URLs. The documentation provides endpoint details and ready-to-use curl examples.

How do I choose track detail?

Select a resolution of 1min, 5min, 15min, 1h, 6h or 1d to suit your question. Available history, request spans and archive permissions also apply. Tracks contain recorded positions; gaps in the reports remain gaps. Consult the documentation for current history limits.

What happens when I reach a request limit?

The API returns HTTP 429 when a request budget is exhausted. Respect Retry-After before trying again. Request budgets depend on the endpoint and your key; check the documentation for current limits. Free access includes no uptime commitment.

Following an ongoing movement?Explore AIS Stream