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 AIS | aisstream.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 AIS | aisstream.io | |
|---|---|---|
| Protocol | aisstream-compatible /v0/stream plus native /v1/stream | /v0/stream |
| Token | one click, no account, never expires | GitHub/Google OAuth key |
| Read without an account | yes: /v1/stream and /v1/vessels need nothing | no: login and API key |
| Browser clients | yes, CORS open | banned; proxy through your own server |
| Historical analysis | REST vessel tracks as GeoJSON or GPX; coverage varies | no durable replay documented |
| Current vessel lookups | REST by area or vessel | stream only |
| Limits | documented, per token: 2 streams, 50 msg/s, ~20°×20° personal; more for contributors | 3 subscribed connections per account and 3 open connections per IP |
| Failure signalling | ack, heartbeat, close reason, /health, public status page | subscription confirmations; reconnect and keepalive guidance |
| Coverage | Norway and Finland live, volunteers live, world via AISHub about a minute behind, aisstream.io when up | global terrestrial when up |
| Source on each event | yes, with station | no |
| Live coverage map | yes, per station and source | no |
| Data license | per source, published, attribution strings given | confirm reuse terms |
| Contribute a receiver | yes: HTTP, UDP, Signal K | no |
| Raw NMEA | contributors and commercial | no |
| Code | MIT, public: run your own, or fork it if we disappear | closed; public repo empty, nothing to fork |
| Uptime | beta, no SLA; monitored publicly | no SLA or uptime guarantee |
| Cost | free personal access; contact us for commercial use | free |
| A human to email | hello@openwaters.io answers | GitHub 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
- Get a token at openwaters.io/ais/token for personal use. For a commercial product, contact us for access.
- Replace
wss://stream.aisstream.io/v0/streamwithwss://ais.openwaters.io/v0/stream. - 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.