AIS

Open Waters AIS vs aisstream.io

API documentation checked 8 October 2026

Open Waters AIS speaks the aisstream.io API. Its /v0/stream endpoint accepts aisstream subscriptions and sends the same frames, so an existing client needs a hostname change and an Open Waters AIS token in its APIKey field. Beyond the live WebSocket feed both services offer, Open Waters AIS adds historical vessel tracks over REST, current vessel lookups, and commercial access by arrangement.

Stream gone quiet? Check whether aisstream.io is down, see its outage record, and compare every alternative.

Right now

aisstream.io is one of our upstreams, so the same server measures both columns: everything Open Waters AIS hears, and what aisstream.io delivers to a world-wide subscription on one key. When aisstream is healthy this table says so.

Open Waters AISaisstream.io
Vessels, last 30 min––
Events, last 24 h––
Last message––
Stations on the map–—

Vessels are distinct MMSIs heard in the last 30 minutes; events are deduplicated across sources. Updated every 5 seconds from /v1/stats. A dash in the aisstream column means it has delivered nothing since this server last restarted.

At a glance

Open Waters AISaisstream.io
Protocolaisstream-compatible /v0/stream plus native /v1/stream/v0/stream
Tokenone click, no account, never expiresGitHub/Google OAuth key
Read without an accountyes: /v1/stream and /v1/vessels need nothingno: login and API key
Browser clientsyes, CORS openbanned; proxy through your own server
Historical analysisREST vessel tracks as GeoJSON or GPX; coverage variesno durable replay documented
Current vessel lookupsREST by area or vesselstream only
Limitsdocumented, per token: 2 streams, 50 msg/s, ~20°×20° personal; more for contributors3 subscribed connections per account and 3 open connections per IP
Failure signallingack, heartbeat, close reason, /health, public status pagesubscription confirmations; reconnect and keepalive guidance
CoverageNorway and Finland live, volunteers live, world via AISHub about a minute behind, aisstream.io when upglobal terrestrial when up
Source on each eventyes, with stationno
Live coverage mapyes, per station and sourceno
Data licenseper source, published, attribution strings givenconfirm reuse terms
Contribute a receiveryes: HTTP, UDP, Signal Kno
Raw NMEAcontributors and commercialno
CodeMIT, public: run your own, or fork it if we disappearclosed; public repo empty, nothing to fork
Uptimebeta, no SLA; monitored publiclyno SLA or uptime guarantee
Costfree personal access; contact us for commercial usefree
A human to emailhello@openwaters.io answersGitHub issues, unanswered

aisstream.io claims come from its documentation checked 8 October 2026. Open Waters AIS capabilities are documented in the API reference. Spotted something out of date? Tell us.

API keys

aisstream.io issues API keys to signed-in accounts: sign in with GitHub or Google at aisstream.io, then create a key on its API keys page. The key goes in the APIKey field of the subscription message, and aisstream's JavaScript and Rust examples read it from the AISSTREAM_API_KEY environment variable.

An Open Waters AIS token goes in the same field. Get one in one click: no account, and it never expires. If your client reads AISSTREAM_API_KEY, set it to your Open Waters AIS token and change the hostname; the rest of the code stays as it is. The native /v1/stream and /v1/vessels endpoints need no token at all.

Protocol and compatibility

aisstream's JSON is Go's encoding/json over the go-ais structs, typo and all (VenderIDModel). Open Waters AIS uses the same decoder, so /v0/stream frames are structurally identical; golden tests pin the envelope, rounding, time format, error messages, and resubscribe behaviour against captured aisstream output. Verified clients: aisstream-ts, the official Go, Python and JavaScript examples, and signalk-aisstream. Where aisstream's decoder is known wrong, /v0 reproduces the quirk deliberately and /v1 fixes it; the API reference lists each one.

Start with a hostname and token change, then test your filters, limits, and control-message handling. aisstream now documents subscription confirmations, compression negotiation, and binary JSON frames; do not assume every transport detail is identical.

Coverage

Both services depend on the receivers and upstreams that hear a vessel. Compare your actual area or vessel list, and the age of its reports, rather than treating “global” as continuous ocean coverage.

Open Waters AIS publishes every source: Kystverket and BarentsWatch for Norway, Digitraffic for Finland, volunteer receivers wherever they are, the AISHub aggregate for the rest of the world, and aisstream.io itself when it is delivering. /v1/stations gives each source's message count and age, and the live map draws the same data. Use the coverage map and source health to investigate missing or delayed positions.

AISHub and its contributors make much of our worldwide terrestrial coverage possible. Its snapshot positions are typically about a minute behind (current delay). We contribute volunteer receptions to AISHub in return. Additional receivers improve coverage and freshness. Neither a live feed nor historical tracks are a substitute for onboard AIS or suitable for safety of navigation.

Limits and connection model

aisstream documents three subscribed connections per account and three open connections per originating IP. Subscription updates replace the active configuration, are limited to one per second, and receive a confirmation when accepted. Browser connections require a server proxy.

Open Waters AIS limits per token, publishes the numbers, thins a stream that exceeds its rate rather than dropping the connection, refuses an oversize area with a message that says so, and allows in-band resubscribe for free. CORS is open on /v1/vessels.

License and terms

Confirm the terms for your intended use before displaying, storing, or redistributing AIS data. Open Waters AIS publishes source terms and attribution; a commercial subscription does not erase upstream conditions. Contact us about the sources your product can use, including whether to exclude aisstream data when its reuse terms do not meet your requirements.

Who each one is for

Real-time tracking

Marine apps, fleet monitors, and dashboards can consume Open Waters AIS as a stream, or poll the REST API when periodic updates are enough. Current-position snapshots help initialise a map before live updates arrive. aisstream is an option for a free server-side stream when its coverage and terms fit your project.

Historical analysis

To reconstruct movements or study vessel activity, use the Open Waters AIS vessel-track API. It returns GeoJSON or GPX for a requested time range, with up to 366 days per request. That limit does not promise a year of observations: check the recorded dates, gaps, and sampling for the vessels you need. IMO lookup is available to contributor and commercial tokens, but tracks under earlier MMSIs are not automatically joined.

Try personal access or discuss a commercial project. For historical work, include your vessel list, area, date range, and required detail. Bulk datasets and contractual requirements need a separate discussion; they are not implied by the public track endpoint.

Migration

  1. Get a token at openwaters.io/ais/token for personal use. For a commercial product, contact us for access.
  2. Replace wss://stream.aisstream.io/v0/stream with wss://ais.openwaters.io/v0/stream.
  3. Put the token in APIKey. Test your subscriptions and message handling before switching production traffic.

The full version, including what changes once you are across, is in Switching from aisstream.io.

Support: hello@openwaters.io, or an issue on the aiscast repository. Current uptime is at status.openwaters.io.