Stream
WebSocket endpoint; protocol in packages/openapi/WEBSOCKET.md.
/v1/streamAvailableWebSocket — live events, fleet positions, trip sharing
- Host
https://api.atasumaps.com·openStream- Access
- API key with scope: realtime
- Metering
- realtime_msg (per message)
GET with Upgrade: websocket (wss://api.atasumaps.com/v1/stream?key=…). JSON text frames.
End-user, partner or passenger-ticket credentials are sent in the first auth frame, never in
the URL. Subscribing returns a snapshot and a cursor first; every message carries the entity
version; deletions are tombstones; after a gap longer than the replay window the client
re-fetches the snapshot. Full protocol: packages/openapi/WEBSOCKET.md. Served today: the public
reports and overlay channels. The key (scope realtime, Origin / package restrictions; server
keys only in the header) is checked before the upgrade, so a bad key gets a 401 / 403 problem
and no WebSocket. fleet / trip subscriptions and pub answer scope_denied until trip tickets
exist. Concurrent connections are limited per key by plan, per client address for web keys and per
server (decision D36, WEBSOCKET.md §6.1): a refused upgrade completes (101) and is closed at once with
code 4429 and {"code":"connection_limit","scope":…,"limit":…,"retry_after":…} as the close reason,
because browsers cannot read the status of a refused handshake. 429 below is the per-key request rate
limit (rate_limited, Retry-After), not the connection limit.
Responses
| Status | Description | Type |
|---|---|---|
101 | Switching Protocols — WebSocket session established | |
401 | Missing or invalid credentials (unauthenticated, key_invalid, key_revoked, token_expired, token_invalid) | Problem |
402 | A budget cap is reached and no degraded answer exists (budget_exhausted; context.level is organization or product, context.product the product) | Problem |
403 | Authenticated but not allowed (scope_denied, key_restriction_failed, forbidden, user_banned, mfa_required, self_moderation_forbidden, feature_disabled) | Problem |
426 | Not a WebSocket upgrade request (upgrade_required) | Problem |
429 | Rate limit (rate_limited) or monthly plan quota (quota_exceeded: reject plans only; Retry-After = seconds until the next Asia/Almaty month; context = product, included, used, period_end) | Problem |