{"success":true,"generated_at":"2026-11-06T19:58:56.731Z","payload_last_updated":"2026-11-06T19:58:00.500Z","payload_age_s":56,"summary":{"schema":"v2.9.0","n":56,"missing":[],"by_status":{"LIVE":32,"FALLBACK":24},"by_grade":{"B":2,"A":52,"D":2},"n_usable":54,"n_flagged":0,"n_fallback":24,"n_dual_live_source":52,"n_single_live_source":4,"spread":{"quoted":54,"synthetic":2},"quality_min":67,"quality_mean":92.6,"quarantined":[],"n_future_ts":0,"source_changes":[],"by_status_at_serve":{"LIVE":32,"FALLBACK":24},"n_usable_at_serve":54},"instruments":[{"symbol":"EUR/USD","category":"MAJOR","class":"MAJOR","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":1.11379,"ask":1.11389,"mid":1.1138400000000002,"spread":0.00009999999999998899,"spread_kind":"quoted","spread_pips":0.9999999999998899,"change":-0.008869772126370634,"changePct":-0.790032504087999,"change_basis":"utc-day-open","change_ref":1.1227097721263708,"dayHigh":1.1234600000000001,"dayLow":1.1132,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":"venue+0m:verified-utc","age_s":57,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":1.113865,"diff_bp":-0.22,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.24,"tol_pct":8,"ok":true}]},{"symbol":"GBP/USD","category":"MAJOR","class":"MAJOR","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":1.33484,"ask":1.33498,"mid":1.33491,"spread":0.000140000000000029,"spread_kind":"quoted","spread_pips":1.40000000000029,"change":-0.010684197664551975,"changePct":-0.7940133573030966,"change_basis":"utc-day-open","change_ref":1.345594197664552,"dayHigh":1.34633,"dayLow":1.33438,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":"venue+0m:verified-utc","age_s":57,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":1.3349449999999998,"diff_bp":-0.26,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.27,"tol_pct":8,"ok":true}]},{"symbol":"USD/JPY","category":"MAJOR","class":"MAJOR","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":158.488,"ask":158.497,"mid":158.4925,"spread":0.009000000000014552,"spread_kind":"quoted","spread_pips":0.9000000000014552,"change":1.009473261599993,"changePct":0.6410044831541502,"change_basis":"utc-day-open","change_ref":157.4830267384,"dayHigh":158.5445,"dayLow":157.4205,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":"venue+0m:verified-utc","age_s":57,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":158.4925,"diff_bp":0,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.1,"tol_pct":8,"ok":true}]},{"symbol":"USD/CHF","category":"MAJOR","class":"MAJOR","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":0.82066,"ask":0.82075,"mid":0.820705,"spread":0.0000900000000000345,"spread_kind":"quoted","spread_pips":0.900000000000345,"change":0.005224916700000026,"changePct":0.6407166535393944,"change_basis":"utc-day-open","change_ref":0.8154800833,"dayHigh":0.821985,"dayLow":0.81508,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:58.000Z","ts_basis":"venue+0m:verified-utc","age_s":58,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":0.82071,"diff_bp":-0.06,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.22,"tol_pct":8,"ok":true}]},{"symbol":"AUD/USD","category":"MAJOR","class":"MAJOR","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":0.6864,"ask":0.68648,"mid":0.6864399999999999,"spread":0.00007999999999996898,"spread_kind":"quoted","spread_pips":0.7999999999996898,"change":-0.006608616616121554,"changePct":-0.9535574356080212,"change_basis":"utc-day-open","change_ref":0.6930486166161215,"dayHigh":0.69418,"dayLow":0.685505,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":0.6864399999999999,"diff_bp":0,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.1,"tol_pct":8,"ok":true}]},{"symbol":"USD/CAD","category":"MAJOR","class":"MAJOR","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":1.41337,"ask":1.41344,"mid":1.413405,"spread":0.0000700000000000145,"spread_kind":"quoted","spread_pips":0.700000000000145,"change":0.011634804999999915,"changePct":0.8300080171129558,"change_basis":"utc-day-open","change_ref":1.401770195,"dayHigh":1.413405,"dayLow":1.40129,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":1.413405,"diff_bp":0,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.48,"tol_pct":8,"ok":true}]},{"symbol":"NZD/USD","category":"MAJOR","class":"MAJOR","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":0.55403,"ask":0.55412,"mid":0.554075,"spread":0.00008999999999992347,"spread_kind":"quoted","spread_pips":0.8999999999992347,"change":-0.0053967833495190964,"changePct":-0.9646211855777473,"change_basis":"utc-day-open","change_ref":0.5594717833495191,"dayHigh":0.5598000000000001,"dayLow":0.552805,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:56.000Z","ts_basis":"venue+0m:verified-utc","age_s":60,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":0.554065,"diff_bp":0.18,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.05,"tol_pct":8,"ok":true}]},{"symbol":"EUR/GBP","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":0.83436,"ask":0.83444,"mid":0.8344,"spread":0.00007999999999996898,"spread_kind":"quoted","spread_pips":0.7999999999996898,"change":0.000040150592968801746,"changePct":0.004812143465117149,"change_basis":"utc-day-open","change_ref":0.8343598494070312,"dayHigh":0.835175,"dayLow":0.833385,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":0.83438,"diff_bp":0.24,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.08,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.03,"tol_pct":8,"ok":true}]},{"symbol":"EUR/JPY","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":176.528,"ask":176.54,"mid":176.534,"spread":0.012000000000000455,"spread_kind":"quoted","spread_pips":1.2000000000000455,"change":-0.27373306324022906,"changePct":-0.15481962157295506,"change_basis":"utc-day-open","change_ref":176.80773306324022,"dayHigh":177.1395,"dayLow":176.20049999999998,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":176.53949999999998,"diff_bp":-0.31,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.07,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.14,"tol_pct":8,"ok":true}]},{"symbol":"EUR/CHF","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":0.91407,"ask":0.91418,"mid":0.9141250000000001,"spread":0.00010999999999994348,"spread_kind":"quoted","spread_pips":1.0999999999994348,"change":-0.0014224584953367314,"changePct":-0.1553669864011726,"change_basis":"utc-day-open","change_ref":0.9155474584953368,"dayHigh":0.91633,"dayLow":0.91279,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:50.000Z","ts_basis":"venue+0m:verified-utc","age_s":66,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":0.914155,"diff_bp":-0.33,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.1,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.02,"tol_pct":8,"ok":true}]},{"symbol":"EUR/AUD","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":1.62254,"ask":1.62275,"mid":1.622645,"spread":0.00020999999999982144,"spread_kind":"quoted","spread_pips":2.0999999999982144,"change":0.0026868250481293376,"changePct":0.16585768013480745,"change_basis":"utc-day-open","change_ref":1.6199581749518706,"dayHigh":1.628525,"dayLow":1.616545,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":1.622655,"diff_bp":-0.06,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.08,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.14,"tol_pct":8,"ok":true}]},{"symbol":"EUR/CAD","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":1.57416,"ask":1.57431,"mid":1.574235,"spread":0.0001500000000000945,"spread_kind":"quoted","spread_pips":1.500000000000945,"change":0.00045390379801180103,"changePct":0.028841609491129915,"change_basis":"utc-day-open","change_ref":1.5737810962019882,"dayHigh":1.574875,"dayLow":1.569635,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":1.5742850000000002,"diff_bp":-0.32,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.46,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.24,"tol_pct":8,"ok":true}]},{"symbol":"EUR/NZD","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":2.01013,"ask":2.01044,"mid":2.010285,"spread":0.00030999999999981043,"spread_kind":"quoted","spread_pips":3.0999999999981043,"change":0.0035532835141669494,"changePct":0.17706818928388798,"change_basis":"utc-day-open","change_ref":2.006731716485833,"dayHigh":2.0170000000000003,"dayLow":2.00464,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":"venue+0m:verified-utc","age_s":57,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":2.0103,"diff_bp":-0.07,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.08,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.19,"tol_pct":8,"ok":true}]},{"symbol":"GBP/JPY","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":211.557,"ask":211.587,"mid":211.572,"spread":0.030000000000001137,"spread_kind":"quoted","spread_pips":3.0000000000001137,"change":-0.33624700984256606,"changePct":-0.15867575452452698,"change_basis":"utc-day-open","change_ref":211.90824700984257,"dayHigh":212.4455,"dayLow":211.1995,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":"venue+0m:verified-utc","age_s":57,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":211.5705,"diff_bp":0.07,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.06,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.17,"tol_pct":8,"ok":true}]},{"symbol":"GBP/CHF","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":1.09546,"ask":1.09565,"mid":1.095555,"spread":0.00018999999999991246,"spread_kind":"quoted","spread_pips":1.8999999999991246,"change":-0.001750268399485444,"changePct":-0.1595060599716578,"change_basis":"utc-day-open","change_ref":1.0973052683994855,"dayHigh":1.0991900000000001,"dayLow":1.09443,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":1.0955599999999999,"diff_bp":-0.05,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.11,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.05,"tol_pct":8,"ok":true}]},{"symbol":"GBP/AUD","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":1.94457,"ask":1.94485,"mid":1.94471,"spread":0.000280000000000058,"spread_kind":"quoted","spread_pips":2.80000000000058,"change":0.0031518388502829175,"changePct":0.16233553613539542,"change_basis":"utc-day-open","change_ref":1.941558161149717,"dayHigh":1.9526050000000001,"dayLow":1.9381,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":1.944685,"diff_bp":0.13,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.13,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.17,"tol_pct":8,"ok":true}]},{"symbol":"GBP/CAD","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":1.88656,"ask":1.88678,"mid":1.88667,"spread":0.00021999999999988695,"spread_kind":"quoted","spread_pips":2.1999999999988695,"change":0.0004561591488922989,"changePct":0.02418385121627929,"change_basis":"utc-day-open","change_ref":1.8862138408511078,"dayHigh":1.887315,"dayLow":1.882485,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":1.8868,"diff_bp":-0.69,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.52,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.21,"tol_pct":8,"ok":true}]},{"symbol":"GBP/NZD","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":2.40905,"ask":2.40947,"mid":2.4092599999999997,"spread":0.0004199999999996429,"spread_kind":"quoted","spread_pips":4.199999999996429,"change":0.004144607748093776,"changePct":0.1723246943346525,"change_basis":"utc-day-open","change_ref":2.405115392251906,"dayHigh":2.417935,"dayLow":2.4037499999999996,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":2.409385,"diff_bp":-0.52,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.01,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.22,"tol_pct":8,"ok":true}]},{"symbol":"AUD/JPY","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":108.787,"ask":108.8,"mid":108.7935,"spread":0.012999999999991019,"spread_kind":"quoted","spread_pips":1.2999999999991019,"change":-0.3498938215678038,"changePct":-0.32058176799946764,"change_basis":"utc-day-open","change_ref":109.1433938215678,"dayHigh":109.5315,"dayLow":108.2535,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":108.7935,"diff_bp":0,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.19,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.01,"tol_pct":8,"ok":true}]},{"symbol":"NZD/JPY","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":87.809,"ask":87.823,"mid":87.816,"spread":0.013999999999995794,"spread_kind":"quoted","spread_pips":1.3999999999995794,"change":-0.2913098166126531,"changePct":-0.3306307016057895,"change_basis":"utc-day-open","change_ref":88.10730981661266,"dayHigh":88.311,"dayLow":87.551,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":"venue+0m:verified-utc","age_s":57,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":87.8145,"diff_bp":0.17,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.08,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.05,"tol_pct":8,"ok":true}]},{"symbol":"CAD/JPY","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":112.135,"ask":112.146,"mid":112.1405,"spread":0.01099999999999568,"spread_kind":"quoted","spread_pips":1.099999999999568,"change":-0.20532337399461653,"changePct":-0.1827601310207176,"change_basis":"utc-day-open","change_ref":112.34582337399462,"dayHigh":112.679,"dayLow":111.9645,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":"venue+0m:verified-utc","age_s":57,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":112.1405,"diff_bp":0,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.47,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.37,"tol_pct":8,"ok":true}]},{"symbol":"CHF/JPY","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":193.108,"ask":193.129,"mid":193.11849999999998,"spread":0.020999999999986585,"spread_kind":"quoted","spread_pips":2.0999999999986585,"change":0.0015496741084177756,"changePct":0.0008024536975147167,"change_basis":"utc-day-open","change_ref":193.11695032589157,"dayHigh":193.559,"dayLow":192.784,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":"venue+0m:verified-utc","age_s":57,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":193.1122196873207,"diff_bp":0.33,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.05,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.12,"tol_pct":8,"ok":true}]},{"symbol":"ZAR/JPY","category":"CROSS","class":"CROSS","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":9.5771,"ask":9.5799,"mid":9.5785,"spread":0.00280000000000058,"spread_kind":"quoted","spread_pips":0.280000000000058,"change":0.026754366783920958,"changePct":0.280099238519114,"change_basis":"utc-day-open","change_ref":9.551745633216079,"dayHigh":9.60145684688181,"dayLow":9.5136,"day_hl":null,"source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":null,"age_s":57,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":9.57803880430099,"diff_bp":0.48,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.13,"tol_bp":50,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.05,"tol_pct":8,"ok":true}]},{"symbol":"AUD/NZD","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":1.2388,"ask":1.239,"mid":1.2389000000000001,"spread":0.00020000000000020002,"spread_kind":"quoted","spread_pips":2.000000000002,"change":0.00014473612076204567,"changePct":0.011683996426283238,"change_basis":"utc-day-open","change_ref":1.238755263879238,"dayHigh":1.2426499999999998,"dayLow":1.235555,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":1.238885,"diff_bp":0.12,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.05,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.04,"tol_pct":8,"ok":true}]},{"symbol":"AUD/CAD","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":0.97011,"ask":0.97023,"mid":0.97017,"spread":0.00012000000000000899,"spread_kind":"quoted","spread_pips":1.2000000000000899,"change":-0.0013248944584609568,"changePct":-0.1363768832979293,"change_basis":"utc-day-open","change_ref":0.9714948944584609,"dayHigh":0.97295,"dayLow":0.96497,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":0.970155,"diff_bp":0.15,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.49,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.38,"tol_pct":8,"ok":true}]},{"symbol":"AUD/CHF","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":0.5633,"ask":0.56341,"mid":0.563355,"spread":0.00010999999999994348,"spread_kind":"quoted","spread_pips":1.0999999999994348,"change":-0.0018123436090644596,"changePct":-0.32067380211516383,"change_basis":"utc-day-open","change_ref":0.5651673436090645,"dayHigh":0.56678,"dayLow":0.560605,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":0.5633304182,"diff_bp":0.44,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.17,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.12,"tol_pct":8,"ok":true}]},{"symbol":"NZD/CAD","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":0.78303,"ask":0.78316,"mid":0.783095,"spread":0.00012999999999996348,"spread_kind":"quoted","spread_pips":1.2999999999996348,"change":-0.0011558708428531794,"changePct":-0.14738534387739186,"change_basis":"utc-day-open","change_ref":0.7842508708428532,"dayHigh":0.7845150000000001,"dayLow":0.779355,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":"venue+0m:verified-utc","age_s":57,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":0.7831049999999999,"diff_bp":-0.13,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.48,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.43,"tol_pct":8,"ok":true}]},{"symbol":"NZD/CHF","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":0.45467,"ask":0.45479,"mid":0.45473,"spread":0.00012000000000000899,"spread_kind":"quoted","spread_pips":1.2000000000000899,"change":-0.0015080964898653848,"changePct":-0.330550320428773,"change_basis":"utc-day-open","change_ref":0.4562380964898654,"dayHigh":0.456945,"dayLow":0.45321500000000003,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":"venue+0m:verified-utc","age_s":57,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":0.45476,"diff_bp":-0.66,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.05,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.17,"tol_pct":8,"ok":true}]},{"symbol":"CAD/CHF","category":"CROSS","class":"CROSS","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":0.58064,"ask":0.58073,"mid":0.580685,"spread":0.00008999999999992347,"spread_kind":"quoted","spread_pips":0.8999999999992347,"change":-0.0010651942962911498,"changePct":-0.1831016657552908,"change_basis":"utc-day-open","change_ref":0.5817501942962912,"dayHigh":0.58311,"dayLow":0.5800449999999999,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"polygon","vs_mid":0.5806899999999999,"diff_bp":-0.09,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.46,"tol_bp":5,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.26,"tol_pct":8,"ok":true}]},{"symbol":"USD/NOK","category":"SCANDINAVIAN","class":"SCANDINAVIAN","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":9.46435,"ask":9.46633,"mid":9.46534,"spread":0.0019799999999996487,"spread_kind":"quoted","spread_pips":19.799999999996487,"change":0.16223999999999883,"changePct":1.7439348174264366,"change_basis":"utc-day-open","change_ref":9.3031,"dayHigh":9.4879,"dayLow":9.25819,"day_hl":null,"source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":null,"age_s":56,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":9.4663015564,"diff_bp":-1.02,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.4,"tol_pct":8,"ok":true}]},{"symbol":"USD/SEK","category":"SCANDINAVIAN","class":"SCANDINAVIAN","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":9.89909,"ask":9.90179,"mid":9.90044,"spread":0.002700000000000813,"spread_kind":"quoted","spread_pips":27.00000000000813,"change":0.09011999999999887,"changePct":0.9186244689265882,"change_basis":"utc-day-open","change_ref":9.81032,"dayHigh":9.93108,"dayLow":9.78469,"day_hl":null,"source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":null,"age_s":56,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":9.9030018278,"diff_bp":-2.59,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.25,"tol_pct":8,"ok":true}]},{"symbol":"USD/DKK","category":"SCANDINAVIAN","class":"SCANDINAVIAN","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":6.71062,"ask":6.71166,"mid":6.71114,"spread":0.001040000000000596,"spread_kind":"quoted","spread_pips":1.040000000000596,"change":0.0541400000000003,"changePct":0.8132792549196379,"change_basis":"utc-day-open","change_ref":6.657,"dayHigh":6.71559,"dayLow":6.65229,"day_hl":null,"source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":null,"age_s":56,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":6.7117709449,"diff_bp":-0.94,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.24,"tol_pct":8,"ok":true}]},{"symbol":"EUR/NOK","category":"SCANDINAVIAN","class":"SCANDINAVIAN","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":10.54189,"ask":10.54407,"mid":10.54298,"spread":0.0021799999999991826,"spread_kind":"quoted","spread_pips":21.799999999991826,"change":0.09718499999999963,"changePct":0.930374375526225,"change_basis":"utc-day-open","change_ref":10.445795,"dayHigh":10.57003,"dayLow":10.418,"day_hl":null,"source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":null,"age_s":57,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":10.54289897101011,"diff_bp":0.08,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.1,"tol_bp":50,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.16,"tol_pct":8,"ok":true}]},{"symbol":"EUR/SEK","category":"SCANDINAVIAN","class":"SCANDINAVIAN","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":11.0275,"ask":11.02925,"mid":11.028375,"spread":0.0017499999999994742,"spread_kind":"quoted","spread_pips":17.499999999994742,"change":0.012890000000000512,"changePct":0.11701709003280848,"change_basis":"utc-day-open","change_ref":11.015485,"dayHigh":11.05544,"dayLow":10.99135,"day_hl":null,"source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":null,"age_s":56,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":11.02926493078351,"diff_bp":-0.81,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.79,"tol_bp":50,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.02,"tol_pct":8,"ok":true}]},{"symbol":"USD/SGD","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":1.28315,"ask":1.28326,"mid":1.2832050000000002,"spread":0.0001100000000000545,"spread_kind":"quoted","spread_pips":1.100000000000545,"change":0.005090000000000039,"changePct":0.39824272463745736,"change_basis":"utc-day-open","change_ref":1.2781150000000001,"dayHigh":1.28336,"dayLow":1.2771,"day_hl":null,"source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":null,"age_s":56,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":1.2831902164,"diff_bp":0.12,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.13,"tol_pct":8,"ok":true}]},{"symbol":"USD/MXN","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":18.62659,"ask":18.63019,"mid":18.62839,"spread":0.0035999999999987153,"spread_kind":"quoted","spread_pips":3.5999999999987153,"change":-0.15501500000000235,"changePct":-0.8252763543138336,"change_basis":"utc-day-open","change_ref":18.783405000000002,"dayHigh":18.81221,"dayLow":18.5571,"day_hl":null,"source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":null,"age_s":56,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":18.6308036539,"diff_bp":-1.3,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.4,"tol_pct":8,"ok":true}]},{"symbol":"USD/ZAR","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":16.5444,"ask":16.5494,"mid":16.5469,"spread":0.004999999999999005,"spread_kind":"quoted","spread_pips":4.999999999999005,"change":0.06049000000000149,"changePct":0.36690825959078716,"change_basis":"utc-day-open","change_ref":16.48641,"dayHigh":16.5871,"dayLow":16.4372,"day_hl":null,"source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":null,"age_s":56,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":16.5489022092,"diff_bp":-1.21,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.05,"tol_pct":8,"ok":true}]},{"symbol":"USD/PLN","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":3.94255,"ask":3.94305,"mid":3.9428,"spread":0.0004999999999997229,"spread_kind":"quoted","spread_pips":0.4999999999997229,"change":0.022070000000000256,"changePct":0.5629053773149454,"change_basis":"utc-day-open","change_ref":3.92073,"dayHigh":3.954,"dayLow":3.9156,"day_hl":null,"source_timestamp":"2026-11-06T19:57:58.000Z","ts_basis":null,"age_s":58,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":3.9433007863,"diff_bp":-1.27,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":0.22,"tol_pct":8,"ok":true}]},{"symbol":"EUR/PLN","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":4.39133,"ask":4.39208,"mid":4.391705,"spread":0.0007500000000000284,"spread_kind":"quoted","spread_pips":0.7500000000000284,"change":-0.010849999999999582,"changePct":-0.24644780133353436,"change_basis":"utc-day-open","change_ref":4.4025549999999996,"dayHigh":4.40503,"dayLow":4.38278,"day_hl":null,"source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":null,"age_s":57,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":4.391770276339686,"diff_bp":-0.15,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.13,"tol_bp":50,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.02,"tol_pct":8,"ok":true}]},{"symbol":"EUR/HUF","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":363.143,"ask":363.505,"mid":363.32399999999996,"spread":0.3620000000000232,"spread_kind":"quoted","spread_pips":36.20000000000232,"change":-1.0610000000000355,"changePct":-0.2911755423521922,"change_basis":"utc-day-open","change_ref":364.385,"dayHigh":365.054,"dayLow":362.937,"day_hl":null,"source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":null,"age_s":57,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":363.3197488174262,"diff_bp":0.12,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.16,"tol_pct":8,"ok":true}]},{"symbol":"EUR/CZK","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":24.3163,"ask":24.3508,"mid":24.33355,"spread":0.03450000000000131,"spread_kind":"quoted","spread_pips":34.50000000000131,"change":0.0055499999999995,"changePct":0.022813219335742766,"change_basis":"utc-day-open","change_ref":24.328,"dayHigh":24.3508,"dayLow":24.2963,"day_hl":null,"source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":null,"age_s":57,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":24.332763970774103,"diff_bp":0.32,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.07,"tol_pct":8,"ok":true}]},{"symbol":"EUR/HKD","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":8.73146,"ask":8.73213,"mid":8.731795,"spread":0.0006699999999995043,"spread_kind":"quoted","spread_pips":0.6699999999995043,"change":-0.06982,"changePct":-0.7932635090264684,"change_basis":"utc-day-open","change_ref":8.801615,"dayHigh":8.8062,"dayLow":8.7237,"day_hl":null,"source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":null,"age_s":57,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":8.730738006241374,"diff_bp":1.21,"tol_bp":30,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.21,"tol_pct":8,"ok":true}]},{"symbol":"EUR/MXN","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":20.74678,"ask":20.75062,"mid":20.7487,"spread":0.0038400000000002876,"spread_kind":"quoted","spread_pips":3.8400000000002876,"change":-0.34111000000000047,"changePct":-1.6174161834554244,"change_basis":"utc-day-open","change_ref":21.08981,"dayHigh":21.0945,"dayLow":20.70892,"day_hl":null,"source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":null,"age_s":57,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":20.749674992024293,"diff_bp":-0.47,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.17,"tol_bp":50,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.64,"tol_pct":8,"ok":true}]},{"symbol":"EUR/SGD","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":1.42939,"ask":1.42954,"mid":1.429465,"spread":0.0001500000000000945,"spread_kind":"quoted","spread_pips":1.500000000000945,"change":-0.005675000000000097,"changePct":-0.3954318045626278,"change_basis":"utc-day-open","change_ref":1.43514,"dayHigh":1.4395,"dayLow":1.42695,"day_hl":null,"source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":null,"age_s":56,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":1.4291267536208363,"diff_bp":2.37,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":1.26,"tol_bp":50,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.1,"tol_pct":8,"ok":true}]},{"symbol":"EUR/ZAR","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":18.42842,"ask":18.4337,"mid":18.431060000000002,"spread":0.005280000000002616,"spread_kind":"quoted","spread_pips":5.280000000002616,"change":-0.0813399999999973,"changePct":-0.4393811715390619,"change_basis":"utc-day-open","change_ref":18.5124,"dayHigh":18.5201,"dayLow":18.3578,"day_hl":null,"source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":null,"age_s":56,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":18.431000009160204,"diff_bp":0.03,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.25,"tol_bp":50,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.18,"tol_pct":8,"ok":true}]},{"symbol":"GBP/ZAR","category":"EXOTIC","class":"EXOTIC","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":22.08621,"ask":22.09304,"mid":22.089624999999998,"spread":0.006829999999997227,"spread_kind":"quoted","spread_pips":6.829999999997227,"change":-0.09402500000000202,"changePct":-0.42384819450361877,"change_basis":"utc-day-open","change_ref":22.18365,"dayHigh":22.2061,"dayLow":22.0106,"day_hl":null,"source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":null,"age_s":56,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":22.090147183980445,"diff_bp":-0.24,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.45,"tol_bp":50,"ok":true},{"kind":"ecb-daily-gross","vs":"ECB 2026-11-06","dev_pct":-0.21,"tol_pct":8,"ok":true}]},{"symbol":"XAU/USD","category":"COMMODITY","class":"METAL","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":4061.71,"ask":4062.11,"mid":4061.91,"spread":0.40000000000009095,"spread_kind":"quoted","spread_pips":4.0000000000009095,"change":-23.96195367601831,"changePct":-0.5864587522000042,"change_basis":"utc-day-open","change_ref":4085.871953676018,"dayHigh":4105.6849999999995,"dayLow":4031.71,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":4062.68231286879,"diff_bp":-1.9,"tol_bp":30,"ok":true}]},{"symbol":"XAG/USD","category":"COMMODITY","class":"METAL","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"LIVE","usable":true,"block_reasons":[],"bid":51.839,"ask":51.907,"mid":51.873,"spread":0.06799999999999784,"spread_kind":"quoted","spread_pips":6.799999999999784,"change":0.1821990706820955,"changePct":0.3524787145999824,"change_basis":"utc-day-open","change_ref":51.6908009293179,"dayHigh":52.2615,"dayLow":51.197500000000005,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":"venue+0m:verified-utc","age_s":56,"quality":96,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":51.880499764231665,"diff_bp":-1.45,"tol_bp":30,"ok":true}]},{"symbol":"XPT/USD","category":"COMMODITY","class":"PGM","source":"fxratesapi","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"single-live","status":"FALLBACK","usable":false,"block_reasons":["SYNTHETIC_SPREAD"],"bid":1532.9030485607334,"ask":1533.0030485607333,"mid":1532.9530485607334,"spread":0.09999999999990905,"spread_kind":"synthetic","spread_pips":0.9999999999990905,"change":21.579737690437923,"changePct":1.4278231284904483,"change_basis":"utc-day-open","change_ref":1511.3733108702954,"dayHigh":1551.1287719186128,"dayLow":1505.7846222046614,"day_hl":"observed","source_timestamp":"2026-11-06T19:56:00.000Z","ts_basis":null,"age_s":176,"quality":67,"grade":"D","quality_parts":{"source":12,"freshness":20,"agreement":5,"bid_ask":5,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[]},{"symbol":"XPD/USD","category":"COMMODITY","class":"PGM","source":"fxratesapi","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"single-live","status":"FALLBACK","usable":false,"block_reasons":["SYNTHETIC_SPREAD"],"bid":1023.598847499354,"ask":1023.6988474993539,"mid":1023.6488474993539,"spread":0.09999999999990905,"spread_kind":"synthetic","spread_pips":0.9999999999990905,"change":-9.690610092497991,"changePct":-0.9377954186595655,"change_basis":"utc-day-open","change_ref":1033.339457591852,"dayHigh":1038.1748305101726,"dayLow":1015.6512879118504,"day_hl":"observed","source_timestamp":"2026-11-06T19:56:00.000Z","ts_basis":null,"age_s":176,"quality":67,"grade":"D","quality_parts":{"source":12,"freshness":20,"agreement":5,"bid_ask":5,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[]},{"symbol":"WTI/USD","category":"COMMODITY","class":"OIL","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"single-live","status":"LIVE","usable":true,"block_reasons":[],"bid":91.319,"ask":91.446,"mid":91.3825,"spread":0.12699999999999534,"spread_kind":"quoted","spread_pips":12.699999999999534,"change":-0.2644999999999982,"changePct":-0.2886073739456809,"change_basis":"utc-day-open","change_ref":91.64699999999999,"dayHigh":92.6375,"dayLow":89.492,"day_hl":"observed","source_timestamp":"2026-11-06T19:58:00.000Z","ts_basis":null,"age_s":56,"quality":86,"grade":"B","quality_parts":{"source":16,"freshness":20,"agreement":5,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[]},{"symbol":"BRENT/USD","category":"COMMODITY","class":"OIL","source":"ctrader","primary":"ctrader","fallback":false,"restored":false,"source_changed":false,"redundancy":"single-live","status":"LIVE","usable":true,"block_reasons":[],"bid":101.69,"ask":101.814,"mid":101.752,"spread":0.12399999999999523,"spread_kind":"quoted","spread_pips":12.399999999999523,"change":-0.8345000000000056,"changePct":-0.8134598607029244,"change_basis":"utc-day-open","change_ref":102.5865,"dayHigh":104.0615,"dayLow":100.037,"day_hl":"observed","source_timestamp":"2026-11-06T19:57:59.000Z","ts_basis":null,"age_s":57,"quality":86,"grade":"B","quality_parts":{"source":16,"freshness":20,"agreement":5,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":10},"flags":[],"xcheck":[]},{"symbol":"XAU/EUR","category":"METAL_CROSS","class":"METAL","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":3646.8,"ask":3647.6,"mid":3647.2,"spread":0.7999999999997272,"spread_kind":"quoted","spread_pips":7.9999999999972715,"change":6.649999999999636,"changePct":0.18266470725576178,"change_basis":"utc-day-open","change_ref":3640.55,"dayHigh":3658.4,"dayLow":3604.5,"day_hl":null,"source_timestamp":"2026-11-06T19:57:01.000Z","ts_basis":null,"age_s":115,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":3647.817930079613,"diff_bp":-1.69,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":1.2,"tol_bp":50,"ok":true}]},{"symbol":"XAG/EUR","category":"METAL_CROSS","class":"METAL","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":46.57,"ask":46.58,"mid":46.575,"spread":0.00999999999999801,"spread_kind":"quoted","spread_pips":0.999999999999801,"change":0.5,"changePct":1.0851871947911014,"change_basis":"utc-day-open","change_ref":46.075,"dayHigh":46.87,"dayLow":45.72,"day_hl":null,"source_timestamp":"2026-11-06T19:56:01.000Z","ts_basis":null,"age_s":175,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":46.58267683446296,"diff_bp":-1.65,"tol_bp":30,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.79,"tol_bp":50,"ok":true}]},{"symbol":"XAU/AUD","category":"METAL_CROSS","class":"METAL","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":5912.2,"ask":5924.1,"mid":5918.15,"spread":11.900000000000546,"spread_kind":"quoted","spread_pips":119.00000000000546,"change":20.149999999999636,"changePct":0.3416412343167114,"change_basis":"utc-day-open","change_ref":5898,"dayHigh":5931.4,"dayLow":5848.3,"day_hl":null,"source_timestamp":"2026-11-06T19:57:01.000Z","ts_basis":null,"age_s":115,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":5918.516364078088,"diff_bp":-0.62,"tol_bp":30.11,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":1.34,"tol_bp":50,"ok":true}]},{"symbol":"XAG/AUD","category":"METAL_CROSS","class":"METAL","source":"polygon","primary":"ctrader","fallback":true,"restored":false,"source_changed":false,"redundancy":"dual-live","status":"FALLBACK","usable":true,"block_reasons":[],"bid":75.42,"ask":75.72,"mid":75.57,"spread":0.29999999999999716,"spread_kind":"quoted","spread_pips":29.999999999999716,"change":0.9299999999999926,"changePct":1.2459807073954885,"change_basis":"utc-day-open","change_ref":74.64,"dayHigh":75.96,"dayLow":74.21,"day_hl":null,"source_timestamp":"2026-11-06T19:57:01.000Z","ts_basis":null,"age_s":115,"quality":91,"grade":"A","quality_parts":{"source":16,"freshness":20,"agreement":15,"bid_ask":15,"timestamp":10,"anomaly":10,"reliability":5},"flags":[],"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":75.5795218982635,"diff_bp":-1.26,"tol_bp":49.7,"ok":true},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.24,"tol_bp":50,"ok":true}]}],"sources":[{"id":"fxratesapi","provider":"fxratesapi.com","endpoint":"api.fxratesapi.com/latest, /historical","auth":"account token (Worker secret)","grade":"C","kind":"aggregated retail API — USD-base MID only","realtime":"one stamp per minute for every code","bid_ask":false,"role":"PRIMARY for 46 FX, XAU, XAG and the 4 metal crosses; XPT/XPD cross-check","status_key":"fxratesapi","live_status":"ok:54/54","instruments_served":2},{"id":"capital","provider":"Capital.com (broker CFD, not exchange data)","endpoint":"api-capital.backend-capital.com/api/v1/markets/{epic}","auth":"API key + session tokens (Worker secrets)","grade":"B","kind":"broker CFD two-way quote","realtime":"real-time (updateTimeUTC)","bid_ask":true,"role":"PRIMARY for WTI, BRENT, XPT, XPD; second live source for XAU/XAG","status_key":"capital_oil","live_status":"no-key","instruments_served":0},{"id":"capital-metals","provider":"Capital.com GOLD/SILVER","endpoint":"as above","auth":"as above","grade":"B","kind":"broker CFD two-way quote","realtime":"real-time","bid_ask":true,"role":"FALLBACK for XAU/XAG when fxratesapi misses; otherwise the cross-check","status_key":"capital_metals","live_status":"unavailable","instruments_served":0},{"id":"awesome","provider":"AwesomeAPI (economia.awesomeapi.com.br)","endpoint":"/last/{pairs}","auth":"none","grade":"C","kind":"aggregated quote with bid/ask","realtime":"near real-time","bid_ask":true,"role":"ENRICHMENT — overrides 38 pairs when it answers live; persistently rate-limited from Cloudflare egress","status_key":"awesome","live_status":"rate-limited","instruments_served":0},{"id":"frankfurter","provider":"Frankfurter (ECB reference rates)","endpoint":"api.frankfurter.dev/v1/latest","auth":"none","grade":"E","kind":"ECB daily reference fix","realtime":"DAILY — never live","bid_ask":false,"role":"FALLBACK FX (always FALLBACK, never usable) + independent gross-error reference","status_key":"frankfurter","live_status":null,"instruments_served":0},{"id":"er-api","provider":"open.er-api.com","endpoint":"/v6/latest/USD","auth":"none","grade":"E","kind":"daily reference","realtime":"DAILY — never live","bid_ask":false,"role":"FALLBACK FX (never usable)","status_key":"er_api","live_status":null,"instruments_served":0},{"id":"twelvedata","provider":"Twelve Data","endpoint":"api.twelvedata.com/quote","auth":"API key (Worker secret)","grade":"C","kind":"quote (last)","realtime":"real-time","bid_ask":false,"role":"TERTIARY oil — only when Capital misses","status_key":"twelvedata_oil","live_status":"no-key","instruments_served":0},{"id":"oanda","provider":"OANDA v20","endpoint":"api-fxpractice.oanda.com/v3/.../pricing","auth":"token (not configured)","grade":"B","kind":"broker two-way quote","realtime":"real-time","bid_ask":true,"role":"SECONDARY oil — NOT CONFIGURED","status_key":"oanda_oil","live_status":"no-key","instruments_served":0},{"id":"ctrader","provider":"cTrader via the fleet's connector (Project F's broker accounts)","endpoint":"<connector>/spots","auth":"X-Connector-Token (secret)","grade":"B","kind":"broker CFD two-way quote","realtime":"real-time (last tick's own time)","bid_ask":true,"role":"oil when Capital and OANDA miss (Railway D's oil) — NOT independent of the brokers F executes on","status_key":"ctrader_oil","live_status":"ok:2","instruments_served":32},{"id":"yahoo-v8-forward","provider":"Yahoo Finance chart API","endpoint":"query1/2.finance.yahoo.com/v8/finance/chart","auth":"none","grade":"E","kind":"exchange futures last trade","realtime":"DELAYED ~10-15 min","bid_ask":false,"role":"Oil forward curve ONLY (spot use disabled by policy: blank over stale)","status_key":"yahoo_forwards","live_status":"fail","instruments_served":0},{"id":"metals-lastgood / oil-lastgood","provider":"D's own KV","endpoint":"KV metals_lastgood / oil_lastgood","auth":"n/a","grade":"E","kind":"last good quote, re-published","realtime":"restored — up to 30 min (metals) / 5 min (oil) old","bid_ask":"as stored","role":"LAST RESORT — labelled, never counted as the primary","status_key":"metals_lastgood","live_status":"saved:4","instruments_served":0},{"id":"polygon","provider":"Polygon/Massive","endpoint":"v2/snapshot forex","auth":"API key POLYGON_API_KEY, Authorization header only (live_status null = not configured)","grade":"B","kind":"quote","realtime":"real-time","bid_ask":true,"role":"v2.10.7: second source for the instruments the fx2 venue does not list; the row it displaces is kept as the cross-check (v2.10.8); never serves an fx2-listed instrument usably (PRIMARY_UNAVAILABLE)","status_key":"polygon","live_status":"ok","instruments_served":22},{"id":"fx2 slot (oanda | ctrader)","provider":"configurable two-way FX quote adapter","endpoint":"per adapter","auth":"per adapter (Worker secrets) — none configured","grade":"B","kind":"broker/venue two-way quote","realtime":"real-time; venue clock learned, never assumed UTC","bid_ask":true,"role":"OFF unless FX2_ADAPTER is set. When on: the FX quote source (real bid/ask) with fxratesapi as the independent live cross-check","status_key":"fx2","live_status":"ctrader:ok:30/54:clock:+0m:verified-utc","instruments_served":0},{"id":"stooq","provider":"stooq.com","endpoint":"/q/l/ (withdrawn)","auth":"none","grade":"X","kind":"—","realtime":"—","bid_ask":false,"role":"RETIRED 2026-08-30 — endpoint withdrawn","status_key":"stooq_wti","live_status":"retired:endpoint-withdrawn","instruments_served":0}],"thresholds":{"fresh_limits_s":{"MAJOR":[180,600],"CROSS":[180,600],"SCANDINAVIAN":[240,900],"EXOTIC":[240,900],"METAL":[180,900],"PGM":[300,1200],"OIL":[180,600]},"jump_limit_pct":{"MAJOR":1.5,"CROSS":2,"SCANDINAVIAN":2.5,"EXOTIC":4,"METAL":4,"PGM":6,"OIL":6},"future_ts_tolerance_s":120,"decimal_shift_ratio":4,"ecb_gross_tolerance_pct":8,"metal_xcheck_min_bp":30,"triangulation_tol_bp":{"same_source":5,"mixed":50}},"definitions":{"status":"CLOSED (market shut) > STALE (age over the class stale limit) > FALLBACK (not the designated primary) > DELAYED (over the live limit, or no source stamp) > LIVE","usable":"false whenever block_reasons is non-empty: MARKET_CLOSED (incl. an oil DAILY_BREAK), STALE, AGE_UNKNOWN, DAILY_REFERENCE_NOT_LIVE, SYNTHETIC_SPREAD (v2.10.5), PRIMARY_UNAVAILABLE (v2.10.8: an instrument the fx2 venue lists, served by any other source), JUMP, CONFLICT, GROSS_DEVIATION, TRIANGULATION_BREAK, TS_REGRESSION","quality":"source 20 + freshness 20 + cross-source agreement 15 + bid/ask integrity 15 + timestamp 10 + anomaly 10 + reliability 10; any critical block caps it at 59 (FAIL)","grades":"A >= 90, B >= 80, C >= 70, D >= 60, FAIL < 60","day_change":"mid minus the price at 00:00 UTC: fxratesapi's 00:00Z print for its instruments, D's first observation of the UTC day for the rest (change_basis / change_ref say which)","spread_kind":"quoted = the source published both sides; synthetic = the source gave a mid only and D bracketed it with half a pip each side — NOT a market spread","mid":"(bid + ask) / 2 for quoted sources; the source's own mid for synthetic ones","age_s":"serve time minus the PROVIDER's quote stamp (not D's fetch time)","quarantine":"hard failures (non-finite, bid > ask, future stamp, x4 or /4 in one tick) are removed and logged here with their raw values"},"lineage":"provider -> fetch (cron, 60 s) -> normalise (buildRate: pair, mid, bid/ask, spread_kind) -> source priority + fallbacks -> validate (applyIntegrity: quarantine or annotate) -> KV rates_full -> /api/rates (re-aged at serve) -> Project A get_megarates_snapshot / Project C+ dfeed","quarantine_log":[{"t":1793977981368,"pair":"XAG/USD","source":"ctrader","reason":"CONFLICT","action":"flagged","raw":{"mid":52.075,"bid":52.043,"ask":52.107,"quoteTime":1793977980},"prev_mid":51.959500000000006,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":51.84104529795369,"diff_bp":45.13,"tol_bp":30,"ok":false}]},{"t":1793978041202,"pair":"XAG/USD","source":"ctrader","reason":"CONFLICT","action":"flagged","raw":{"mid":52.035,"bid":52.005,"ask":52.065,"quoteTime":1793978040},"prev_mid":52.075,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":51.83461975887914,"diff_bp":38.66,"tol_bp":30,"ok":false}]},{"t":1793978041202,"pair":"XAG/EUR","source":"polygon","reason":"CONFLICT","action":"flagged","raw":{"mid":46.685,"bid":46.68,"ask":46.69,"quoteTime":1793977983},"prev_mid":46.585,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":46.473682119954255,"diff_bp":45.47,"tol_bp":30,"ok":false},{"kind":"triangulation","vs":"usd-legs","diff_bp":8.86,"tol_bp":50,"ok":true}]},{"t":1793978101095,"pair":"XAG/USD","source":"ctrader","reason":"CONFLICT","action":"flagged","raw":{"mid":52.084999999999994,"bid":52.053,"ask":52.117,"quoteTime":1793978100},"prev_mid":52.035,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":51.91580427766707,"diff_bp":32.59,"tol_bp":30,"ok":false}]},{"t":1793978101095,"pair":"XAG/EUR","source":"polygon","reason":"CONFLICT","action":"flagged","raw":{"mid":46.685,"bid":46.68,"ask":46.69,"quoteTime":1793978100},"prev_mid":46.685,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":46.54060635645063,"diff_bp":31.03,"tol_bp":30,"ok":false},{"kind":"triangulation","vs":"usd-legs","diff_bp":-0.03,"tol_bp":50,"ok":true}]},{"t":1793978161175,"pair":"XAG/USD","source":"ctrader","reason":"CONFLICT","action":"flagged","raw":{"mid":52.1355,"bid":52.1,"ask":52.171,"quoteTime":1793978160},"prev_mid":52.084999999999994,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":51.94993348018818,"diff_bp":35.72,"tol_bp":30,"ok":false}]},{"t":1793978821337,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793978821337,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793978881112,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793978881112,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793978941139,"pair":"XAG/USD","source":"ctrader","reason":"CONFLICT","action":"flagged","raw":{"mid":51.964,"bid":51.929,"ask":51.999,"quoteTime":1793978940},"prev_mid":52.0305,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":52.13566341933083,"diff_bp":-32.93,"tol_bp":30,"ok":false}]},{"t":1793979001208,"pair":"XAG/EUR","source":"polygon","reason":"CONFLICT","action":"flagged","raw":{"mid":46.565,"bid":46.56,"ask":46.57,"quoteTime":1793978940},"prev_mid":46.625,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":46.7251364134847,"diff_bp":-34.27,"tol_bp":30,"ok":false},{"kind":"triangulation","vs":"usd-legs","diff_bp":-6.02,"tol_bp":50,"ok":true}]},{"t":1793979061317,"pair":"XAG/USD","source":"ctrader","reason":"CONFLICT","action":"flagged","raw":{"mid":51.8775,"bid":51.842,"ask":51.913,"quoteTime":1793979060},"prev_mid":51.99250000000001,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":52.09788302388346,"diff_bp":-42.3,"tol_bp":30,"ok":false}]},{"t":1793979061317,"pair":"XAG/EUR","source":"polygon","reason":"CONFLICT","action":"flagged","raw":{"mid":46.495000000000005,"bid":46.49,"ask":46.5,"quoteTime":1793979060},"prev_mid":46.565,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":46.68523204597676,"diff_bp":-40.75,"tol_bp":30,"ok":false},{"kind":"triangulation","vs":"usd-legs","diff_bp":0.18,"tol_bp":50,"ok":true}]},{"t":1793979121324,"pair":"XAG/USD","source":"ctrader","reason":"CONFLICT","action":"flagged","raw":{"mid":51.84,"bid":51.803,"ask":51.877,"quoteTime":1793979120},"prev_mid":51.8775,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":52.00792698582167,"diff_bp":-32.29,"tol_bp":30,"ok":false}]},{"t":1793979181244,"pair":"XAG/USD","source":"ctrader","reason":"CONFLICT","action":"flagged","raw":{"mid":51.841,"bid":51.805,"ask":51.877,"quoteTime":1793979180},"prev_mid":51.84,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":52.00792698582167,"diff_bp":-32.1,"tol_bp":30,"ok":false}]},{"t":1793979241353,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793979241353,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793979301209,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793979301209,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793979361440,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793979361440,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793979421190,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793979421190,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793979781350,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793979781350,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793980201153,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793980201153,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793984401393,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793984401393,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793984461115,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793984461115,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793984521229,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793984521229,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793984941106,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793984941106,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793986681913,"pair":"XAG/USD","source":"ctrader","reason":"CONFLICT","action":"flagged","raw":{"mid":51.754999999999995,"bid":51.716,"ask":51.794,"quoteTime":1793986680},"prev_mid":51.83,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":51.93212510716908,"diff_bp":-34.11,"tol_bp":30,"ok":false}]},{"t":1793986741156,"pair":"XAG/EUR","source":"polygon","reason":"CONFLICT","action":"flagged","raw":{"mid":46.405,"bid":46.4,"ask":46.41,"quoteTime":1793986680},"prev_mid":46.485,"xcheck":[{"kind":"independent-live","vs":"fxratesapi","vs_mid":46.56639295349674,"diff_bp":-34.66,"tol_bp":30,"ok":false},{"kind":"triangulation","vs":"usd-legs","diff_bp":-5.6,"tol_bp":50,"ok":true}]},{"t":1793988541222,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793988541222,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793988601231,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793988601231,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793988721095,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793988721095,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793989141828,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793989141828,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793992741101,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793992741101,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"fxratesapi","to":"metals-lastgood","action":"published"},{"t":1793993161139,"pair":"XPT/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"},{"t":1793993161139,"pair":"XPD/USD","reason":"SOURCE_CHANGED","from":"metals-lastgood","to":"fxratesapi","action":"published"}]}