{"record":{"id":"0fed62bde10a9be4","repo":"nautechsystems/nautilus_trader","slug":"unknown-gamma-market-filter-key-key","errorCode":null,"errorMessage":"Unknown Gamma market filter key '{key}'","messagePattern":"Unknown Gamma market filter key '(.+?)'","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/polymarket/src/providers.rs","lineNumber":653,"sourceCode":"            | \"volume_num_min\"\n            | \"volume_num_max\"\n            | \"start_date_min\"\n            | \"start_date_max\"\n            | \"end_date_min\"\n            | \"end_date_max\"\n            | \"tag_id\"\n            | \"related_tags\"\n            | \"tag_match\"\n            | \"decimalized\"\n            | \"cyom\"\n            | \"rfq_enabled\"\n            | \"uma_resolution_status\"\n            | \"game_id\"\n            | \"sports_market_types\"\n            | \"include_tag\"\n            | \"locale\"\n            | \"max_markets\" => {}\n            _ => anyhow::bail!(\"Unknown Gamma market filter key '{key}'\"),\n        }\n    }\n\n    let mut params = GetGammaMarketsParams::default();\n\n    if map\n        .get(\"is_active\")\n        .map(|value| parse_gamma_filter_bool(\"market\", \"is_active\", value))\n        .transpose()?\n        .unwrap_or(false)\n    {\n        params.active = Some(true);\n        params.archived = Some(false);\n        params.closed = Some(false);\n    }\n\n    if let Some(v) = map.get(\"active\") {\n        params.active = Some(parse_gamma_filter_bool(\"market\", \"active\", v)?);","sourceCodeStart":635,"sourceCodeEnd":671,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/polymarket/src/providers.rs#L635-L671","documentation":"build_gamma_params_from_hashmap only accepts a fixed allowlist of Gamma market filter keys. Any key outside that list is rejected instead of being passed to the Gamma API. This catches typos and stale filter names at call time.","triggerScenarios":"Passing a hashmap filter with an unrecognized key (e.g. 'market_slugz', a renamed key, or a key from the events API used in a markets query) to query_markets, fetch_bulk_instruments, or fetch_configured_instruments.","commonSituations":"Typos in filter keys; copying filters between markets and events APIs; following outdated documentation after the Gamma API changed parameter names.","solutions":["Check the key spelling against the allowed market filter list (e.g. uma_resolution_status, game_id, sports_market_types, include_tag, locale, max_markets)","Remove the unknown key from the filter map or move it to the events query if it is an event filter","Regenerate the filter map from a typed params builder instead of a raw hashmap"],"exampleFix":"// before\nlet filters = hashmap!{\"limit\" => \"10\"}; // not a market key\nprovider.query_markets(filters).await?;\n// after\nlet filters = hashmap!{\"max_markets\" => \"10\"};\nprovider.query_markets(filters).await?;","handlingStrategy":"validation","validationCode":"const MARKET_KEYS: &[&str] = &[\"uma_resolution_status\",\"game_id\",\"sports_market_types\",\"include_tag\",\"locale\",\"max_markets\"];\nfor k in filters.keys() {\n    assert!(MARKET_KEYS.contains(&k.as_str()), \"unknown Gamma market filter: {k}\");\n}","typeGuard":null,"tryCatchPattern":"match provider.query_markets(filters).await {\n    Err(e) if e.to_string().contains(\"Unknown Gamma market filter\") => {\n        eprintln!(\"bad filter key: {e}\"); // fix map and retry\n    }\n    r => r?,\n}","preventionTips":["Keep filter keys as constants/enums, not raw strings","Unit-test filter maps against the allowlist","Never copy market filters into event queries or vice versa"],"tags":["rust","api","validation","filters"],"backgroundTag":"invalid-query-parameter","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}