$npx -y skills add asterdex/aster-skills-hub --skill aster-api-websocket-v1WebSocket market + user data streams for Aster Futures API v1. Subscription model, stream names, listenKey (/fapi/v1/listenKey). Use when implementing real-time market or user events (orders, balance, positions). listenKey = signed; see aster-api-auth-v1.
| 1 | # Aster API WebSocket (v1) |
| 2 | |
| 3 | **Base:** wss://fstream.asterdex.com. **Raw:** `/ws/<streamName>`. **Combined:** `/stream?streams=name1/name2/...` → `{"stream":"<name>","data":<payload>}`. Stream names **lowercase** (e.g. btcusdt). |
| 4 | |
| 5 | **Limits:** Connection 24h; ping every 5 min → pong within 15 min; 10 msg/s; max 200 streams. |
| 6 | |
| 7 | ## Market: subscribe / unsubscribe |
| 8 | |
| 9 | JSON: **Subscribe** `{"method":"SUBSCRIBE","params":["btcusdt@aggTrade","btcusdt@depth"],"id":1}` → `{"result":null,"id":1}`. **Unsubscribe:** `UNSUBSCRIBE` + params. **List:** `LIST_SUBSCRIPTIONS`. `id` = unsigned int. |
| 10 | |
| 11 | ## Stream names (market) |
| 12 | |
| 13 | | Stream | Description | |
| 14 | |--------|-------------| |
| 15 | | `<symbol>@aggTrade` | Aggregate trades (100ms) | |
| 16 | | `<symbol>@depth` | Diff. book depth (250/500/100ms: `@depth@500ms`, `@depth@100ms`) | |
| 17 | | `<symbol>@depth5`, `@depth10`, `@depth20` | Partial book depth | |
| 18 | | `<symbol>@kline_<interval>` | Kline (e.g. 1m, 1h); interval as in REST | |
| 19 | | `<symbol>@markPrice`, `<symbol>@markPrice@1s` | Mark price (3s or 1s) | |
| 20 | | `!markPrice@arr`, `!markPrice@arr@1s` | All symbols mark price | |
| 21 | | `<symbol>@miniTicker` | 24h mini ticker (500ms) | |
| 22 | | `!miniTicker@arr` | All mini tickers (1000ms) | |
| 23 | | `<symbol>@ticker` | 24h ticker (500ms) | |
| 24 | | `!ticker@arr` | All tickers (1000ms) | |
| 25 | | `<symbol>@bookTicker` | Best bid/ask (real-time) | |
| 26 | | `!bookTicker` | All book tickers | |
| 27 | | `<symbol>@forceOrder` | Liquidation snapshot (1000ms) | |
| 28 | | `!forceOrder@arr` | All liquidations | |
| 29 | |
| 30 | ## User data stream (signed) |
| 31 | |
| 32 | 1. **Start:** POST /fapi/v1/listenKey → `{ "listenKey": "..." }` (existing key extended 60 min). |
| 33 | 2. **Connect:** wss://fstream.asterdex.com/ws/<listenKey>. |
| 34 | 3. **Keepalive:** PUT /fapi/v1/listenKey <60 min (e.g. 30 min). |
| 35 | 4. **Close:** DELETE /fapi/v1/listenKey. |
| 36 | |
| 37 | Events not guaranteed in order; use `E` for ordering. **Events:** ACCOUNT_UPDATE, ORDER_TRADE_UPDATE, ACCOUNT_CONFIG_UPDATE, MARGIN_CALL, listenKeyExpired. |
| 38 | |
| 39 | ## Order book sync (depth) |
| 40 | |
| 41 | 1. Connect to `btcusdt@depth`; buffer events. |
| 42 | 2. Snapshot: GET /fapi/v1/depth?symbol=BTCUSDT&limit=1000. |
| 43 | 3. Drop events with `u` < lastUpdateId; first valid: `U` ≤ lastUpdateId and `u` ≥ lastUpdateId. |
| 44 | 4. Each event: `pu` = previous `u`; else re-sync from step 2. Qty absolute; 0 = remove level. |
| 45 | |
| 46 | Payload shapes: [reference.md](reference.md). |