nautechsystems/nautilus_trader · error
unsupported subscribed RTDS message topic={topic} type={msg_
Error message
unsupported subscribed RTDS message topic={topic} type={msg_type} What it means
The RTDS WebSocket delivered a message on a TWAP crypto price topic (crypto_prices_twap_thirty or crypto_prices_twap_sixty) with a message type the feed has no handler for. Because the topic is subscribed, silently ignoring it would mean silently missing data, so the feed bails. Other unknown topics are only logged at debug because they are not subscribed.
Source
Thrown at crates/adapters/polymarket/src/rtds.rs:1184
("crypto_prices", "update") => {
self.handle_crypto_price_update(envelope);
}
("crypto_prices_twap_thirty", "update") => {
self.handle_crypto_twap_update(envelope, RtdsCryptoTwapWindow::ThirtySeconds)?;
}
("crypto_prices_twap_sixty", "update") => {
self.handle_crypto_twap_update(envelope, RtdsCryptoTwapWindow::SixtySeconds)?;
}
("equity_prices", "subscribe") => {
self.handle_equity_price_subscribe(envelope);
}
("equity_prices", "update") => {
self.handle_equity_price_update(envelope);
}
(topic @ ("crypto_prices_twap_thirty" | "crypto_prices_twap_sixty"), msg_type)
if self.has_topic_subscription(topic) =>
{
anyhow::bail!("unsupported subscribed RTDS message topic={topic} type={msg_type}");
}
_ => {
log::debug!(
"Ignoring unsupported RTDS message topic={} type={}",
envelope.topic,
envelope.msg_type,
);
}
}
Ok(())
}
fn handle_crypto_price_update(&self, envelope: &RtdsEnvelope) {
let payload: CryptoPayloadRaw = match serde_json::from_str(envelope.payload.get()) {
Ok(payload) => payload,
Err(e) => {
log::warn!("Failed to parse RTDS crypto price payload: {e}");
return;View on GitHub (pinned to 18893faf8b)
Solutions
- Upgrade the nautilus_polymarket adapter to a version that handles the reported topic/type combination.
- Compare the logged topic and msg_type against the match arms in rtds.rs to confirm what is supported.
- Stop subscribing to the unsupported TWAP topic until support exists.
- Report the exact topic and type upstream so a handler can be added.
Example fix
// before
(topic @ ("crypto_prices_twap_thirty" | "crypto_prices_twap_sixty"), _) if self.has_topic_subscription(topic) => {
anyhow::bail!("unsupported subscribed RTDS message topic={topic} type={msg_type}");
}
// after
(topic @ ("crypto_prices_twap_thirty" | "crypto_prices_twap_sixty"), "update") => {
self.handle_crypto_twap_update(envelope)?;
}
(topic @ ("crypto_prices_twap_thirty" | "crypto_prices_twap_sixty"), msg_type)
if self.has_topic_subscription(topic) =>
{
anyhow::bail!("unsupported subscribed RTDS message topic={topic} type={msg_type}");
} Defensive patterns
Strategy: retry
Validate before calling
const SUPPORTED_TOPICS: &[&str] = &[
"market", "user",
"crypto_prices_twap_thirty", "crypto_prices_twap_sixty",
"equity_prices",
];
if !SUPPORTED_TOPICS.contains(&topic) {
log::warn!("skipping subscription to unsupported topic {topic}");
} Type guard
fn is_handled_twap_message(topic: &str, msg_type: &str) -> bool {
matches!((topic, msg_type), ("crypto_prices_twap_thirty" | "crypto_prices_twap_sixty", "update"))
} Try / catch
match feed.next_event().await {
Ok(ev) => handle(ev),
Err(e) if e.to_string().contains("unsupported subscribed RTDS message") => {
log::warn!("venue added a new TWAP message type; upgrade adapter: {e}");
}
Err(e) => return Err(e),
} Prevention
- Keep the adapter up to date with Polymarket RTDS protocol changes.
- Watch venue changelogs for new message types on TWAP topics.
- Do not subscribe to TWAP topics unless your adapter version handles their updates.
- Alert on this error — it means subscribed data is being lost, not ignored.
When it happens
Trigger: Polymarket RTDS emits an event on a subscribed TWAP topic whose msg_type is not matched by any handler arm (e.g. a new message type added upstream), while has_topic_subscription(topic) is true.
Common situations: Polymarket adding a new message type on existing TWAP topics; adapter version lagging behind RTDS protocol changes; subscribing to TWAP topics with an adapter that lacks handlers for their update payloads.
Related errors
- failed to send RTDS {action} request: {e}
- invalid RTDS JSON frame
- Polymarket data shutdown failed: {}
- Expected BinaryOption, was {other:?}
- RTDS task owner was dropped
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/9a96a9ecafc0b719.
Report an issue: GitHub.