Repository navigation
futures.public_liquidates: result shape and timestamp field differ from docs, size sign undocumented #132
Copy link
Copy link
Open
Description
Activity
- Thank you for contacting the Gate support team! We've received your ticket (Ticket ID: 30945765) and have prioritized it for review. Rest assured, we'll have an update for you within 30 minutes. If we need any additional information, we'll reach out to you directly—please keep an eye on your ticket for our reply. Thank you for your patience. We're on it! Gate Team…________________________________ End Service<https://www.gate.com/customer-support/evaluate?ref=bgz6ctyl&ts=1786327320&sign=c6497b35b139ff10a430abd94adcf3a5d60e02c5eb4fca57db0039405b864fab>
- Please enter your reply above this line Your ticket [30945765] has been updated. If you would like to add more information, please reply directly to this email. Dear User, Thank you for your message. To help us better understand and address the issue, we kindly ask you to provide relevant screenshots. Please share any error messages or the page where you encounter the problem. We appreciate your cooperation.…________________________________ 历史沟通记录 Gate Team 2026-08-10 02:02:01 Thank you for contacting the Gate support team! We've received your ticket (Ticket ID: 30945765) and have prioritized it for review. Rest assured, we'll have an update for you within 30 minutes. If we need any additional information, we'll reach out to you directly—please keep an eye on your ticket for our reply. Thank you for your patience. We're on it! Gate Team ***@***.*** 2026-08-10 02:02:00 karudo created an issue (gateio/WebSocket-API#132) Docs page: https://www.gate.com/docs/developers/futures/ws/en/#public-liquidate-order-notification The live futures.public_liquidates feed does not match its documentation in three ways, and the gateio/gatews Python SDK has no channel class for it at all (that repo is archived, so reporting here). All four points are reproducible; raw frames are included below. Endpoint: wss://fx-ws.gateio.ws/v4/ws/usdt, subscribed by contract name (300 contracts per shard). Frames captured 2026-08-10. {"time":1786327033,"time_ms":1786327033532,"channel":"futures.public_liquidates","event":"update","result":{"contract":"HEI_USDT","price":"0.13827","time":1786327033531,"size":-23}} {"time":1786327035,"time_ms":1786327035702,"channel":"futures.public_liquidates","event":"update","result":{"contract":"HEI_USDT","price":"0.13761","time":1786327035701,"size":-9}} {"time":1786327040,"time_ms":1786327040873,"channel":"futures.public_liquidates","event":"update","result":{"contract":"LAB_USDT","price":"0.11824","time":1786327040872,"size":-9}} 1. result is a bare object, not an array The docs type result as Array ("Array of objects") and the example shows "result": [{...}]. Every frame observed carries a bare object. A client written to the documented shape breaks on the first message. 2. The timestamp field inside result is time, not time_ms The parameter table for the notification lists time_ms (Integer, "time_in_milliseconds"). The live object carries time, holding a millisecond value. Note this is specifically about the result object — the envelope does have time_ms, so the mismatch is easy to miss when skimming. Observed keys: envelope: time, time_ms, channel, event, result result: contract, price, time, size Whichever side is authoritative, the two disagree today, and a client that reads only the documented name gets undefined on every row. 3. The sign of size is not documented size is described only as "liquidate order quantity"; the example shows -124 with no explanation of the sign. This is the single most important field in the feed — it decides whether an event is a short being liquidated or a long — and the documentation does not say. Determined empirically over 1008 events across 184 contracts: size > 0 → short liquidation (forced buy). Price moved +1.58% in the two minutes before the event; only 9% of these events had falling price beforehand (n=387). size < 0 → long liquidation (forced sell). Price moved −1.15% before; 93% had falling price (n=614). Cross-checked against the exchange's own 5-minute rollup in futures.contract_stats: in five-minute buckets where it reported short liquidations only, 84% of granular volume was positive; where it reported longs only, 10% was. Please state the convention in the docs so clients do not each have to measure it. 4. The Python SDK has no channel class for futures.public_liquidates In gateio/gatews, python/gate_ws/futures.py defines FuturesLiquidatesChannel (futures.liquidates, authenticated) but nothing for the public channel, which was added on 2025-02-19 per the WS changelog. Users of the SDK have to bypass it to subscribe. Aside futures.liquidates returns authentication required for Channel futures.liquidates when subscribed without credentials, which is correct and expected — noting it only because the two channel names are one word apart and it is easy to reach for the wrong one. — Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications, keep track of coding agent tasks and review pull requests on the go with GitHub Mobile for iOS and Android. Download it today! You are receiving this because you are subscribed to this thread.Message ID:________________________________ End Service<https://www.gate.com/customer-support/evaluate?ref=bgz6ctyl&ts=1786328969&sign=b3a8c20d3477b44e6c442420364bc7892d6eb9fd584d144532ff393ddc683786>
Metadata
Metadata
Assignees
Labels
No labels
Docs page: https://www.gate.com/docs/developers/futures/ws/en/#public-liquidate-order-notification
The live
futures.public_liquidatesfeed does not match its documentation in three ways, and thegateio/gatewsPython SDK has no channel class for it at all (that repo is archived, so reporting here). All four points are reproducible; raw frames are included below.Endpoint:
wss://fx-ws.gateio.ws/v4/ws/usdt, subscribed by contract name (300 contracts per shard). Frames captured 2026-08-10.{"time":1786327033,"time_ms":1786327033532,"channel":"futures.public_liquidates","event":"update","result":{"contract":"HEI_USDT","price":"0.13827","time":1786327033531,"size":-23}} {"time":1786327035,"time_ms":1786327035702,"channel":"futures.public_liquidates","event":"update","result":{"contract":"HEI_USDT","price":"0.13761","time":1786327035701,"size":-9}} {"time":1786327040,"time_ms":1786327040873,"channel":"futures.public_liquidates","event":"update","result":{"contract":"LAB_USDT","price":"0.11824","time":1786327040872,"size":-9}}1.
resultis a bare object, not an arrayThe docs type
resultasArray("Array of objects") and the example shows"result": [{...}]. Every frame observed carries a bare object. A client written to the documented shape breaks on the first message.2. The timestamp field inside
resultistime, nottime_msThe parameter table for the notification lists
time_ms(Integer, "time_in_milliseconds"). The live object carriestime, holding a millisecond value.Note this is specifically about the
resultobject — the envelope does havetime_ms, so the mismatch is easy to miss when skimming. Observed keys:time,time_ms,channel,event,resultresult:contract,price,time,sizeWhichever side is authoritative, the two disagree today, and a client that reads only the documented name gets
undefinedon every row.3. The sign of
sizeis not documentedsizeis described only as "liquidate order quantity"; the example shows-124with no explanation of the sign. This is the single most important field in the feed — it decides whether an event is a short being liquidated or a long — and the documentation does not say.Determined empirically over 1008 events across 184 contracts:
size > 0→ short liquidation (forced buy). Price moved +1.58% in the two minutes before the event; only 9% of these events had falling price beforehand (n=387).size < 0→ long liquidation (forced sell). Price moved −1.15% before; 93% had falling price (n=614).Cross-checked against the exchange's own 5-minute rollup in
futures.contract_stats: in five-minute buckets where it reported short liquidations only, 84% of granular volume was positive; where it reported longs only, 10% was.Please state the convention in the docs so clients do not each have to measure it.
4. The Python SDK has no channel class for
futures.public_liquidatesIn
gateio/gatews,python/gate_ws/futures.pydefinesFuturesLiquidatesChannel(futures.liquidates, authenticated) but nothing for the public channel, which was added on 2025-02-19 per the WS changelog. Users of the SDK have to bypass it to subscribe.Aside
futures.liquidatesreturnsauthentication required for Channel futures.liquidateswhen subscribed without credentials, which is correct and expected — noting it only because the two channel names are one word apart and it is easy to reach for the wrong one.