Changelog
Notable changes to the WebSocket feed, its message schema, and its tiers. Newest first.
Dates are the day the change landed in the service. Only user-visible changes are listed — if a change would alter what your client receives or how you connect, it belongs here.
The machine-readable schema is /docs/asyncapi.yaml.
2026-09-14
Faster fan-out, faster Upbit detection, Robinhood launched (beta)
- Fan-out latency. The Tokyo and Seoul dispatch servers were upgraded and tuned; events now reach every subscriber noticeably sooner after detection. No change to the protocol, messages or tiers.
- Upbit detection is ~1.5 ms faster. Same events, same schema — they just arrive earlier.
- Robinhood launched, in beta, on
wss://us.cryptolisting.ws(see 2026-09-11 below):wallet_listingwhen an asset is added to Robinhood’s catalogue before trading opens,cex_listingwhen it becomes tradable. Recent wallet listings have moved several hundred percent within minutes of the event (JUGGERNAUT: up to +800 %). Same API key, same tiers, same message envelope. Beta means we are still validating it on live events — feedback welcome. - Reminder: treat 60 s without any frame (no PING, no
heartbeat) as a dead connection and reconnect — see Error Handling.
2026-09-13
Tokyo host migrated — check your dead-connection handling
- The Tokyo endpoint (
wss://cryptolisting.ws) moved to a new host. Its public IP changed to16.76.89.185(Seoul,kr.cryptolisting.ws, now resolves to15.165.135.192); if you pinned an IP in a firewall, update it — the hostnames are the contract, not the addresses. - During the move the old host was stopped, so open connections did not receive a close frame.
Clients that rely only on their library’s close/error callback stayed on a dead socket and
received nothing afterwards. Treat 60 s without any frame (no PING, no
heartbeat) as a dead connection and reconnect — the docs said the opposite (“no application-level watchdog needed”); that guidance was wrong for this case and is corrected in Error Handling. Pythonwebsocketsusers with the defaultping_interval/ping_timeoutwere already covered.
2026-09-11
Robinhood, on a new US endpoint
wss://us.cryptolisting.ws(AWS N. Virginia, us-east-1a - use1-az1) carries Robinhood — and only Robinhood. Tokyo and Seoul are unchanged;?cex=robinhoodthere yields an empty intersection. Same API key, same tiers, same message envelope. See Endpoints.- Two new
listingTypevalues, bothpublisher: "robinhood":wallet_listing— the asset is added to Robinhood assets before trading opens, often days or weeks earlier — andcex_listing— the asset becomes tradable on Robinhood. A handler that switches onlistingTypewith a default branch needs no change; one that whitelists types must add them. See Listing types. - Pricing: Robinhood is priced like Upbit (Basic 400, Premium 750 USDT per month). New all-four-exchanges bundles: 1000 USDT per month on Basic, 1900 on Premium. See Pricing.
2026-09-04
Bithumb on the Seoul endpoint
wss://kr.cryptolisting.wsnow carries Upbit + Bithumb. It was Upbit-only. Binance is still dispatched from the Tokyo endpoint only. See Endpoints.- Bithumb on Seoul carries the same three types as on Tokyo —
spot_listing,spot_delisting,caution_released. Message schema, field names and timestamps are unchanged. - If you connect to Seoul without
?cex=, you now receive Bithumb too.?cex=upbitwas a no-op on that endpoint; it is now a real filter. Add it if your handler assumes every message there is Upbit — or branch onpublisher, which has always been the safer test. See Exchange Filtering. - Announcements carry no
id, and the two endpoints deduplicate independently: a bot connected to Tokyo and Seoul now receives each Bithumb announcement twice. Keep one endpoint per bot.
2026-08-22
Upbit multi-token alerts, new markets field, faster dispatch
- Upbit announcements covering several tokens now arrive as a single alert, with every token
listed comma-separated in
ticker. - New optional
marketsfield on Upbit spot listings: which markets the listing opens —KRW,BTC,USDT, or a combination, always in that order. If it is absent we could not identify them; it never means the listing has none. See Announcement. - Upbit announcements are ~1.3 ms faster from detection to dispatch. Message content and timestamps unchanged.
- If your client rejects unknown JSON fields, it needs a one-line change. Most decoders
ignore them by default. The notable exception is Jackson 2.x in Java, where
FAIL_ON_UNKNOWN_PROPERTIESis enabled out of the box — add@JsonIgnoreProperties(ignoreUnknown = true)to your message class, or disable the feature on yourObjectMapper. Also check for opt-in strict modes you may have enabled yourself: Go’sDecoder.DisallowUnknownFields(), serde’sdeny_unknown_fields, zod’s.strict(), or a validator configured withadditionalProperties: false. Our published schema has always setadditionalProperties: true— see/docs/asyncapi.yaml. - Delivered on every tier,
SpeedTrialincluded, with the same value as on the paid tiers — it names a quote market, not a token, so it is not redacted alongsidetitleandticker.
2026-08-02
Two new message types: changelog and renewal_notice
changelog— a new message type for service announcements (schema changes, maintenance windows). Delivered to every subscriber on every tier, SpeedTrial included, with no redaction and none of the per-tier delivery delay. An entry is valid for a window counted in days: you receive it immediately if connected when it is published, otherwise on your next connection while it is still valid — once either way. It carriesid,title, an optionalversion, anddispatchTimestampUs. Deduplicate onid: the same entry can legitimately arrive twice if you connect to both endpoints, or across a service restart. See Changelog.renewal_notice— sent when less than 24 h remain on your API key: right after thewelcomeframe if you connect inside that window, and also written to an already-open session at the moment the threshold is crossed, so a long-lived connection is told without having to reconnect. It carriestitleanddispatchTimestampUs, and no ticker. See Renewal notice.- Neither type carries
ticker,publisherorlistingType. Switch ontypeand ignore values you don’t know — never let an unrecognised message reach your trading logic.
SpeedTrial announcements carry a +1 ms courtesy delay
- Announcements delivered on the
SpeedTrialtier are now sent ~1 ms after paid tiers, so paying subscribers are served first. Everything else is unchanged: same dispatch pipeline, samedetectedTimestampUs/dispatchTimestampUsprecision, same redaction oftickerandtitleon listing-type events. TheDelivery delaycolumn in Tier behavior now reads+1 msinstead ofNone. - Heartbeats are not affected on any tier — only announcements are delayed.
- The upgrade notice carried in
titleonSpeedTrialnow states the delay and the reason for it, so the behaviour is visible in the message itself and not only in this changelog. - No action required. Benchmarks run on
SpeedTrialshould account for this ~1 ms when comparing against a paid tier; the timestamps in each message remain exact, so detection-to-dispatch stays directly measurable. premiumis unchanged and still has no added delay.
2026-07-13
Free-tier keys are 1-week and renewable
SpeedTrialandFreeDelayedkeys are issued for 1 week, renewable on request. They were previously advertised as free for an unlimited period. Nothing changed in what the two tiers deliver — only how long a key stays valid before renewal. Ask on @CLWfeed to renew. Time left on a key is published inwelcome.expiresInSecs.- Documented the default distinct-IP allowance per key: 1 (was described as “configurable”). The per-IP cap (3) and absolute cap (20) are unchanged. See Rate Limits.
2026-06-18
not_listing is Binance-only
- Upbit was removed from the
not_listingrow of every event-type table. Upbit announcements are delivered asspot_listing,spot_delisting, orcaution_released— nevernot_listing. Documentation fix; no dispatch behaviour changed. See Listing types.
2026-06-17
Announcement channel is @CLWfeed
- The Telegram channel for keys, support, and breaking-change notices is @CLWfeed.
2026-06-16
Seoul endpoint is Upbit-only
- Documented that
wss://kr.cryptolisting.wscarries Upbit only. Bithumb is dispatched from the Tokyo endpoint (wss://cryptolisting.ws), as is Binance. If your bot needs Bithumb or Binance, connect to Tokyo. See WebSocket API.
2026-06-12
Upbit stream narrowed to actionable signals
- On both endpoints, the Upbit stream carries only the events that drive trades. Upbit notices that are not a listing, delisting, or caution release are no longer broadcast to subscribers. See Listing types and Upbit only.
2026-06-09
Per-IP connection cap lowered to 3
- The per-key, per-IP concurrent-connection cap went from 5 to 3. The absolute cap across all
IPs (20) is unchanged.
welcome.maxConnectionsPerIpreports the live value — read it rather than hard-coding. See Rate Limits.
2026-06-06
SpeedTrial and FreeDelayed tiers
- The
freetier is nowSpeedTrial: same dispatch path aspremiumwith zero added delay, buttickeris""andtitlecarries an upgrade notice on every event exceptnot_listing. All other fields —publisher,listingType, microsecond timestamps — stay fully accurate, so detection speed remains independently verifiable. - New
FreeDelayedtier: the full feed,titleandtickerincluded, free, with a +240 ms delivery delay on announcements. Heartbeats are unaffected. welcome.tiernow returnsSpeedTrial,FreeDelayed,basic, orpremium. Clients that matched on the oldfreestring must be updated. See Tier behavior.
2026-05-03
Caution lifecycle narrowed to two stages
- Upbit and Bithumb both run a multi-stage caution lifecycle on tokens already trading
(pre-warning, designation, extension, release, delisting). The feed carries the two stages that
drive trades:
caution_releasedandspot_delisting. Intermediate stages are kept off the bus. - Composite announcements covering several tickers across stages are split into multiple
WebSocket events with distinct
listingTypevalues. See Listing types.
2026-05-02
Risk events: caution_released and Monitoring Tag
- New
listingTypevaluecaution_released(Bithumb, Upbit) — a caution designation being lifted, historically a positive technical signal. - New
listingTypevaluesmonitoring_tag_extendandmonitoring_tag_remove(Binance) — a token entering or leaving Binance’s Monitoring Tag. - Clients validating
listingTypeagainst a closed list had to widen it. This is the change the forward-compatibility rule exists for: unknownlistingTypevalues must be inert, not fatal. See Listing types.
2026-04-30
Seoul endpoint
wss://kr.cryptolisting.wswent live in AWS Seoul (ap-northeast-2c, apne2-az3), alongside the existing Tokyo endpoint. It removes the Seoul → Tokyo network hop for Korea-based bots trading Upbit. The same API key authenticates on both endpoints; connection caps are tracked independently per endpoint. Pick one endpoint per bot. See Endpoints.
2026-04-13
abnormalDetectionLatency flag
- Announcements carry a boolean
abnormalDetectionLatency.truemeans the exchange publish → detection interval was abnormally high for that event. The payload stays valid — treat the flag as a hint that the event may be stale by the time it reaches you. SeeabnormalDetectionLatency.
2026-04-12
Test announcements use DUMMYTOKEN
{"type":"test"}returns atest_announcementwith the tickerDUMMYTOKEN. It is identical in shape to a real announcement and always carries the full payload regardless of tier — use it to validate a parser on any tier, SpeedTrial included. See Test Announcement.