{"registered":{"crypto":["crypto_close_binance","crypto_close_kraken","crypto_close_coingecko"],"fx":["fx_rate_ecb","fx_rate_frankfurter"],"equity":[]},"last_selftest":{"binance":{"source_id":"binance","kind":"crypto","tier":"A","healthy":1,"last_checked_at":"2026-10-01T14:36:09.457837+00:00","last_error":null,"latency_ms":238},"kraken":{"source_id":"kraken","kind":"crypto","tier":"A","healthy":1,"last_checked_at":"2026-10-01T14:36:09.457837+00:00","last_error":null,"latency_ms":224},"coingecko":{"source_id":"coingecko","kind":"crypto","tier":"B","healthy":1,"last_checked_at":"2026-10-01T14:36:09.457837+00:00","last_error":null,"latency_ms":32},"coinbase":{"source_id":"coinbase","kind":"crypto","tier":"A","healthy":1,"last_checked_at":"2026-10-01T14:36:09.457837+00:00","last_error":null,"latency_ms":272},"ecb_official":{"source_id":"ecb_official","kind":"fx","tier":"A","healthy":1,"last_checked_at":"2026-10-01T14:36:09.457837+00:00","last_error":null,"latency_ms":1967},"frankfurter_ecb":{"source_id":"frankfurter_ecb","kind":"fx","tier":"A","healthy":1,"last_checked_at":"2026-10-01T14:36:09.457837+00:00","last_error":null,"latency_ms":505},"stooq":{"source_id":"stooq","kind":"equity","tier":"?","healthy":0,"last_checked_at":"2026-10-01T14:36:09.457837+00:00","last_error":"SourceError: stooq did not return CSV (likely a JS challenge page)","latency_ms":791}},"tiers":{"A":"official or exchange-native data (central bank / live exchange)","B":"independent aggregator (free, keyless, publicly re-fetchable)"},"note":"run `python -m dnaai_v2.selftest --db <db>` on the server to refresh. A prediction is only auto-settled when at least two independent sources answer and agree, so this list bounds what the platform can actually verify."}