{"openapi":"3.1.0","info":{"title":"BetRecord API","description":"Pre-match analyst + live alerts","version":"0.5.0"},"paths":{"/api/match/search":{"get":{"tags":["prematch"],"summary":"Search Match","description":"Recherche fuzzy par nom équipe ou match_id.","operationId":"search_match_api_match_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":100,"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Match Api Match Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fixtures/live":{"get":{"tags":["prematch"],"summary":"Fixtures Live","description":"Liste fixtures actives via live_events DB (pour live.html auto-fill).","operationId":"fixtures_live_api_fixtures_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Fixtures Live Api Fixtures Live Get"}}}}}}},"/api/fixtures":{"get":{"tags":["prematch"],"summary":"Fixtures","operationId":"fixtures_api_fixtures_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"YYYY-MM-DD","title":"Date"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fixtures Api Fixtures Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/match/{match_id}/report":{"get":{"tags":["prematch"],"summary":"Get Report","operationId":"get_report_api_match__match_id__report_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"tier","in":"query","required":false,"schema":{"type":"string","default":"free","title":"Tier"}},{"name":"user_role","in":"query","required":false,"schema":{"type":"string","default":"free","title":"User Role"}},{"name":"with_llm","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"With Llm"}},{"name":"with_rag","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"With Rag"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Report Api Match  Match Id  Report Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prematch/upcoming":{"get":{"tags":["prematch"],"summary":"Upcoming","description":"Liste matchs à venir avec verdict léger.","operationId":"upcoming_api_prematch_upcoming_get","parameters":[{"name":"league","in":"query","required":false,"schema":{"type":"string","default":"ALL","title":"League"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upcoming Api Prematch Upcoming Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prematch/{match_id}/report":{"get":{"tags":["prematch"],"summary":"Report","description":"Génère rapport pré-match pour un match donné, 3 tiers.","operationId":"report_api_prematch__match_id__report_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"tier","in":"query","required":false,"schema":{"type":"string","pattern":"^(free|basic|pro|analyste|premium)$","default":"pro","title":"Tier"}},{"name":"fmt","in":"query","required":false,"schema":{"type":"string","pattern":"^(markdown|json)$","default":"markdown","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Report Api Prematch  Match Id  Report Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/insights/v2":{"get":{"tags":["insights_v2"],"summary":"Insights V2","description":"Top N insights actionnables, triés par sévérité × score.\n\nSeverity rank : info < low < medium < high < critical\n\nCache : 10 min, clé = hash(limit, severity_min). Recalcul lourd\n(run_all ~1 600 ms p50). Invalidation manuelle :\n`POST /api/admin/cache/invalidate?key=insights_v2`.","operationId":"insights_v2_api_insights_v2_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"severity_min","in":"query","required":false,"schema":{"type":"string","pattern":"^(info|low|medium|high|critical)$","default":"low","title":"Severity Min"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Insights V2 Api Insights V2 Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/insights/v2/categories":{"get":{"tags":["insights_v2"],"summary":"Insights V2 By Category","description":"Insights groupés par catégorie.\n\nCache : 10 min (pas de params variables → maxsize=4 garde-fou).\nInvalidation : `POST /api/admin/cache/invalidate?key=insights_v2_categories`.","operationId":"insights_v2_by_category_api_insights_v2_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Insights V2 By Category Api Insights V2 Categories Get"}}}}}}},"/api/insights/v2/backtest":{"get":{"tags":["backtest"],"summary":"Backtest","description":"Retourne le gain potentiel cumulé si user avait suivi les insights.","operationId":"backtest_api_insights_v2_backtest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Backtest Api Insights V2 Backtest Get"}}}}}}},"/api/insights/prebet-check":{"post":{"tags":["prebet_check"],"summary":"Prebet Check","description":"Renvoie warnings basés sur patterns historiques user.\n\nCalled par extension Chrome AVANT submission du pari.\nNon-bloquant : retourne info, l'extension décide du UI.","operationId":"prebet_check_api_insights_prebet_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreBetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Prebet Check Api Insights Prebet Check Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/insights/daily-digest":{"get":{"tags":["prebet_check"],"summary":"Daily Digest","description":"Résumé quotidien J-1 pour notification push/email.","operationId":"daily_digest_api_insights_daily_digest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Daily Digest Api Insights Daily Digest Get"}}}}}}},"/api/profile/me":{"get":{"tags":["profile"],"summary":"Profile Me","description":"Profil parieur complet : score + badges + stats.","operationId":"profile_me_api_profile_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Profile Me Api Profile Me Get"}}}}}}},"/api/coach/message":{"get":{"tags":["coach"],"summary":"Coach Message","description":"Génère message coach personnalisé.","operationId":"coach_message_api_coach_message_get","parameters":[{"name":"force_fallback","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Fallback"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Coach Message Api Coach Message Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prematch/ml/{match_id}":{"get":{"tags":["ml"],"summary":"Ml Predict","description":"Multi-modèle ULTRA ENRICHI :\n- Features assemblées depuis 12 tables (101 features sur Ligue 1)\n- Modèles : DC, Elo, Market, xG-Poisson, Form, Devig (Shin/Mult/Consensus),\n  Understat forecast, SPI 538, ClubElo, ensemble pré-calculé\n- Signaux contextuels : injuries, derby, weather détaillée, referee stats,\n  sharp_money_side, drift, top player ratings, sentiment, trends","operationId":"ml_predict_api_prematch_ml__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ml Predict Api Prematch Ml  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prematch/monte_carlo/{match_id}":{"get":{"tags":["monte_carlo"],"summary":"Monte Carlo","operationId":"monte_carlo_api_prematch_monte_carlo__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"n_sims","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":1000,"default":10000,"title":"N Sims"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Monte Carlo Api Prematch Monte Carlo  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/accuracy/summary":{"get":{"tags":["accuracy"],"summary":"Accuracy Summary","description":"Stats globales accuracy modèle sur N derniers jours.","operationId":"accuracy_summary_api_accuracy_summary_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Accuracy Summary Api Accuracy Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/accuracy/by_league":{"get":{"tags":["accuracy"],"summary":"Accuracy By League","description":"Accuracy par ligue (compétition).","operationId":"accuracy_by_league_api_accuracy_by_league_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Accuracy By League Api Accuracy By League Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/accuracy/recent":{"get":{"tags":["accuracy"],"summary":"Accuracy Recent","description":"Historique des prédictions récentes (pour debug + transparence).","operationId":"accuracy_recent_api_accuracy_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Accuracy Recent Api Accuracy Recent Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/accuracy/calibration":{"get":{"tags":["accuracy"],"summary":"Accuracy Calibration","description":"Calibration probabilités : bins par bucket de 10%.","operationId":"accuracy_calibration_api_accuracy_calibration_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Accuracy Calibration Api Accuracy Calibration Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/health/data":{"get":{"tags":["health"],"summary":"Health Data","operationId":"health_data_api_health_data_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Data Api Health Data Get"}}}}}}},"/api/health/full":{"get":{"tags":["health"],"summary":"Health Full","operationId":"health_full_api_health_full_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Full Api Health Full Get"}}}}}}},"/api/health/dbs":{"get":{"tags":["health"],"summary":"Health Dbs","operationId":"health_dbs_api_health_dbs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Dbs Api Health Dbs Get"}}}}}}},"/api/admin/security/fail2ban":{"get":{"tags":["admin-security"],"summary":"Fail2Ban Status","operationId":"fail2ban_status_api_admin_security_fail2ban_get","parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fail2Ban Status Api Admin Security Fail2Ban Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/security/fail2ban/{jail}":{"get":{"tags":["admin-security"],"summary":"Fail2Ban Jail","operationId":"fail2ban_jail_api_admin_security_fail2ban__jail__get","parameters":[{"name":"jail","in":"path","required":true,"schema":{"type":"string","title":"Jail"}},{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fail2Ban Jail Api Admin Security Fail2Ban  Jail  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/security/nginx-block-stats":{"get":{"tags":["admin-security"],"summary":"Nginx Block Stats","description":"Compte les requêtes nginx 444 (dropped silently) 1000 dernières.","operationId":"nginx_block_stats_api_admin_security_nginx_block_stats_get","parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Nginx Block Stats Api Admin Security Nginx Block Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/status":{"get":{"tags":["stripe"],"summary":"Stripe Status","operationId":"stripe_status_api_stripe_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stripe Status Api Stripe Status Get"}}}}}}},"/api/stripe/webhook":{"post":{"tags":["stripe"],"summary":"Stripe Webhook","operationId":"stripe_webhook_api_stripe_webhook_post","parameters":[{"name":"stripe-signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Stripe Webhook Api Stripe Webhook Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/onboarding/status":{"get":{"tags":["onboarding"],"summary":"Status","operationId":"status_api_onboarding_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Status Api Onboarding Status Get"}}}}}}},"/api/onboarding/send":{"post":{"tags":["onboarding"],"summary":"Send Welcome","operationId":"send_welcome_api_onboarding_send_post","parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Send Welcome Api Onboarding Send Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/quant-adv/bayesian-kelly":{"post":{"tags":["quant-advanced"],"summary":"Bayesian Kelly","description":"Beta(α+wins, β+losses) posterior, quantile 25% auto-shrinkage small-sample.\n\nRéférence : Marcos López de Prado, Advances in Financial ML Ch.10.","operationId":"bayesian_kelly_api_quant_adv_bayesian_kelly_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BayesianKellyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Bayesian Kelly Api Quant Adv Bayesian Kelly Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/quant-adv/walk-forward-mc":{"post":{"tags":["quant-advanced"],"summary":"Walk Forward Mc","description":"Block bootstrap MC : démasque false alpha (Sharpe>1 mais MC p=1.0 = drift capture).\n\nRéférence : LdP AFML Ch.13 + Deflated Sharpe Ratio.","operationId":"walk_forward_mc_api_quant_adv_walk_forward_mc_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalkForwardRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Walk Forward Mc Api Quant Adv Walk Forward Mc Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/quant-adv/hawkes-goals":{"post":{"tags":["quant-advanced"],"summary":"Hawkes Goals","description":"Estime P(goal) restantes minutes via Hawkes self-exciting process.\n\nRéférence : Hawkes (1971), self-exciting point processes.","operationId":"hawkes_goals_api_quant_adv_hawkes_goals_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HawkesGoalsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Hawkes Goals Api Quant Adv Hawkes Goals Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml-xgb/status":{"get":{"tags":["ml-xgboost"],"summary":"Ml Status","operationId":"ml_status_api_ml_xgb_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ml Status Api Ml Xgb Status Get"}}}}}}},"/api/ml-xgb/predict":{"post":{"tags":["ml-xgboost"],"summary":"Predict","operationId":"predict_api_ml_xgb_predict_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchFeaturesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Predict Api Ml Xgb Predict Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/marketplace/cappers":{"get":{"tags":["marketplace"],"summary":"List Cappers","operationId":"list_cappers_api_marketplace_cappers_get","parameters":[{"name":"min_picks","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":0,"default":10,"title":"Min Picks"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Cappers Api Marketplace Cappers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/marketplace/capper/{capper_id}":{"get":{"tags":["marketplace"],"summary":"Capper Profile","operationId":"capper_profile_api_marketplace_capper__capper_id__get","parameters":[{"name":"capper_id","in":"path","required":true,"schema":{"type":"string","title":"Capper Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Capper Profile Api Marketplace Capper  Capper Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/marketplace/cappers/leaderboard":{"get":{"tags":["marketplace"],"summary":"Cappers Leaderboard","operationId":"cappers_leaderboard_api_marketplace_cappers_leaderboard_get","parameters":[{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(roi_30d_pct|sharpe_30d|n_wins|n_picks)$","default":"roi_30d_pct","title":"Sort By"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cappers Leaderboard Api Marketplace Cappers Leaderboard Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/marketplace/cappers/register":{"post":{"tags":["marketplace"],"summary":"Register Capper","operationId":"register_capper_api_marketplace_cappers_register_post","parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapperRegisterRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Register Capper Api Marketplace Cappers Register Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/marketplace/commissions":{"get":{"tags":["marketplace"],"summary":"Commissions Split","operationId":"commissions_split_api_marketplace_commissions_get","parameters":[{"name":"amount_cents","in":"query","required":true,"schema":{"type":"integer","maximum":99999,"minimum":99,"title":"Amount Cents"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Commissions Split Api Marketplace Commissions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/i18n/languages":{"get":{"tags":["i18n"],"summary":"Languages","operationId":"languages_api_i18n_languages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Languages Api I18N Languages Get"}}}}}}},"/api/i18n/strings/{lang}":{"get":{"tags":["i18n"],"summary":"Strings","operationId":"strings_api_i18n_strings__lang__get","parameters":[{"name":"lang","in":"path","required":true,"schema":{"type":"string","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Strings Api I18N Strings  Lang  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/i18n/detect":{"get":{"tags":["i18n"],"summary":"Detect","operationId":"detect_api_i18n_detect_get","parameters":[{"name":"accept-language","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accept-Language"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Detect Api I18N Detect Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/roi-v2":{"get":{"tags":["admin-async"],"summary":"Roi V2","operationId":"roi_v2_api_admin_roi_v2_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(football|tennis|rugby|basket)$"},{"type":"null"}],"title":"Sport"}},{"name":"tier","in":"query","required":false,"schema":{"type":"string","pattern":"^(basic|pro|premium)$","default":"premium","title":"Tier"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Roi V2 Api Admin Roi V2 Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/risks-v2":{"get":{"tags":["admin-async"],"summary":"Risks V2","operationId":"risks_v2_api_admin_risks_v2_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":7,"title":"Days"}},{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Risks V2 Api Admin Risks V2 Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prematch/press/{match_id}":{"get":{"tags":["press"],"summary":"Press For Match","description":"Récupère articles + sentiment pour les 2 équipes d'un match.","operationId":"press_for_match_api_prematch_press__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"max_age_hours","in":"query","required":false,"schema":{"type":"integer","default":72,"title":"Max Age Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Press For Match Api Prematch Press  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/health":{"get":{"tags":["press_v26"],"summary":"Health","description":"Compteurs sources + articles + ratio enriched.","operationId":"health_api_press_v26_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Api Press V26 Health Get"}}}}}}},"/api/press_v26/sources":{"get":{"tags":["press_v26"],"summary":"Sources","description":"Liste sources actives + last_fetched + reliability.","operationId":"sources_api_press_v26_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sources Api Press V26 Sources Get"}}}}}}},"/api/press_v26/buzz/{team}":{"get":{"tags":["press_v26"],"summary":"Buzz Team","description":"Articles enrichis FR pour une équipe (mentioned dans teams_mentioned OU buzzwords).","operationId":"buzz_team_api_press_v26_buzz__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"max_age_h","in":"query","required":false,"schema":{"type":"integer","default":72,"title":"Max Age H"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Buzz Team Api Press V26 Buzz  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/buzz/match/{home}/{away}":{"get":{"tags":["press_v26"],"summary":"Buzz Match","description":"Articles enrichis pour les 2 équipes d'un match (top tier 1-2).","operationId":"buzz_match_api_press_v26_buzz_match__home___away__get","parameters":[{"name":"home","in":"path","required":true,"schema":{"type":"string","title":"Home"}},{"name":"away","in":"path","required":true,"schema":{"type":"string","title":"Away"}},{"name":"max_age_h","in":"query","required":false,"schema":{"type":"integer","default":72,"title":"Max Age H"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Buzz Match Api Press V26 Buzz Match  Home   Away  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/sentiment/{team}":{"get":{"tags":["press_v26"],"summary":"Sentiment Team","description":"Sentiment moyen 24h/7d/30d pour une équipe.","operationId":"sentiment_team_api_press_v26_sentiment__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sentiment Team Api Press V26 Sentiment  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/topics/{team}":{"get":{"tags":["press_v26"],"summary":"Topics Team","description":"Répartition topics pour une équipe sur 7 jours par défaut.","operationId":"topics_team_api_press_v26_topics__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"max_age_h","in":"query","required":false,"schema":{"type":"integer","default":168,"title":"Max Age H"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Topics Team Api Press V26 Topics  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/latest":{"get":{"tags":["press_v26"],"summary":"Latest Articles","description":"Articles les plus récents (filtres optionnels country + topic).","operationId":"latest_articles_api_press_v26_latest_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Latest Articles Api Press V26 Latest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/sentiment-timeline/{team}":{"get":{"tags":["press_v26"],"summary":"Sentiment Timeline","description":"Timeline sentiment jour par jour pour une équipe (graph 7j default).","operationId":"sentiment_timeline_api_press_v26_sentiment_timeline__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sentiment Timeline Api Press V26 Sentiment Timeline  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/confidence-score/{topic}/{team}":{"get":{"tags":["press_v26"],"summary":"Confidence Score","description":"Score confiance multi-source : compte sources distinctes confirmant un topic pour une équipe.","operationId":"confidence_score_api_press_v26_confidence_score__topic___team__get","parameters":[{"name":"topic","in":"path","required":true,"schema":{"type":"string","title":"Topic"}},{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"max_age_h","in":"query","required":false,"schema":{"type":"integer","default":72,"title":"Max Age H"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Confidence Score Api Press V26 Confidence Score  Topic   Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/injuries-radar":{"get":{"tags":["press_v26"],"summary":"Injuries Radar","description":"Tous les articles topic=injury récents, triés par tier+date, avec équipes mentionnées.","operationId":"injuries_radar_api_press_v26_injuries_radar_get","parameters":[{"name":"max_age_h","in":"query","required":false,"schema":{"type":"integer","default":96,"title":"Max Age H"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Injuries Radar Api Press V26 Injuries Radar Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/match-preview-llm/{home}/{away}":{"get":{"tags":["press_v26"],"summary":"Match Preview Llm","description":"Synthèse pré-match cumulant N articles enrichis sur les 2 équipes.\nRetourne agrégation directe (pas d'appel LLM coûteux à la volée — ces données\nalimentent un cache LLM dans un cron séparé).","operationId":"match_preview_llm_api_press_v26_match_preview_llm__home___away__get","parameters":[{"name":"home","in":"path","required":true,"schema":{"type":"string","title":"Home"}},{"name":"away","in":"path","required":true,"schema":{"type":"string","title":"Away"}},{"name":"max_age_h","in":"query","required":false,"schema":{"type":"integer","default":96,"title":"Max Age H"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Preview Llm Api Press V26 Match Preview Llm  Home   Away  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/multi-sources-discovery":{"get":{"tags":["press_v26"],"summary":"Multi Sources Discovery","description":"URLs candidates discovery multi-source (podcasts, dailymotion, DDG, etc.).","operationId":"multi_sources_discovery_api_press_v26_multi_sources_discovery_get","parameters":[{"name":"team","in":"query","required":false,"schema":{"type":"string","title":"Team"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","title":"Source"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Multi Sources Discovery Api Press V26 Multi Sources Discovery Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/press-conf-audio/{team}":{"get":{"tags":["press_v26"],"summary":"Press Conf Audio","description":"Transcripts conférences de presse audio pour une équipe (WC2026).\n\nSource : table press_conf_audio_transcripts alimentée par cron press_conf_audio_agent.py\n+ script press_conf_audio_transcribe.py via yt-dlp + faster-whisper.","operationId":"press_conf_audio_api_press_v26_press_conf_audio__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Press Conf Audio Api Press V26 Press Conf Audio  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/cached-previews":{"get":{"tags":["press_v26"],"summary":"Cached Previews","description":"Retourne match previews pré-calculés (cron daily) pour J+0 à J+N.","operationId":"cached_previews_api_press_v26_cached_previews_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cached Previews Api Press V26 Cached Previews Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/press_v26/quality-monitor":{"get":{"tags":["press_v26"],"summary":"Quality Monitor","description":"Monitor temps réel : coverage tiers, qualité sentiment par topic,\nvolume entrant, anomalies. Pour surveiller l'évolution sans calculs côté UI.","operationId":"quality_monitor_api_press_v26_quality_monitor_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Quality Monitor Api Press V26 Quality Monitor Get"}}}}}}},"/api/press_v26/coverage/wc2026":{"get":{"tags":["press_v26"],"summary":"Coverage Wc2026","description":"Couverture WC2026 : count articles par pays + ratio enriched.","operationId":"coverage_wc2026_api_press_v26_coverage_wc2026_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Coverage Wc2026 Api Press V26 Coverage Wc2026 Get"}}}}}}},"/api/wc2026/elo-top":{"get":{"tags":["wc2026_stats_pro"],"summary":"Elo Top","description":"Top N équipes par rating ELO + change 1y depuis intl_elo_ratings (latest).","operationId":"elo_top_api_wc2026_elo_top_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Elo Top Api Wc2026 Elo Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/polymarket/consensus":{"get":{"tags":["wc2026_stats_pro"],"summary":"Polymarket Consensus","description":"Top marchés Polymarket WC2026 avec consensus prob max + volume.","operationId":"polymarket_consensus_api_wc2026_polymarket_consensus_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":12,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Polymarket Consensus Api Wc2026 Polymarket Consensus Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/monte-carlo/tournament-winners":{"get":{"tags":["wc2026_stats_pro"],"summary":"Mc Tournament Winners","description":"Probabilités vainqueurs WC2026 — fallback ELO-based si pas de MC pré-calculé.\n\nRetourne probabilités proportionnelles aux ratings ELO (approximation simple).","operationId":"mc_tournament_winners_api_wc2026_monte_carlo_tournament_winners_get","parameters":[{"name":"n_sims","in":"query","required":false,"schema":{"type":"integer","default":10000,"title":"N Sims"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Mc Tournament Winners Api Wc2026 Monte Carlo Tournament Winners Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/ml-metrics":{"get":{"tags":["wc2026"],"summary":"Ml Metrics","description":"Métriques ML par sport (brier/log_loss/accuracy).","operationId":"ml_metrics_api_wc2026_ml_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ml Metrics Api Wc2026 Ml Metrics Get"}}}}}}},"/api/winamax/health":{"get":{"tags":["winamax_health"],"summary":"Winamax Health","description":"État du pipeline Winamax cotes : mappings + DOM offers + freshness + alerte.","operationId":"winamax_health_api_winamax_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Winamax Health Api Winamax Health Get"}}}}}}},"/api/winamax/odds/{home}/{away}":{"get":{"tags":["winamax_health"],"summary":"Winamax Odds Match","description":"Retourne les cotes Winamax pour un match home vs away.\n\nCherche dans winamax_match_mapping puis winamax_dom_offers.","operationId":"winamax_odds_match_api_winamax_odds__home___away__get","parameters":[{"name":"home","in":"path","required":true,"schema":{"type":"string","title":"Home"}},{"name":"away","in":"path","required":true,"schema":{"type":"string","title":"Away"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Winamax Odds Match Api Winamax Odds  Home   Away  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/winamax/alerts":{"get":{"tags":["winamax_health"],"summary":"Winamax Alerts","description":"Liste alertes Winamax (stale, mapping low, etc.) — pour dashboard monitoring.","operationId":"winamax_alerts_api_winamax_alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Winamax Alerts Api Winamax Alerts Get"}}}}}}},"/api/wc2026/base-camp/{team}":{"get":{"tags":["wc2026_base_camps"],"summary":"Base Camp","description":"Info base camp d'une équipe WC2026 : ville, altitude, climat, hôtel.","operationId":"base_camp_api_wc2026_base_camp__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Base Camp Api Wc2026 Base Camp  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/base-camp-distance/{team}/{ground}":{"get":{"tags":["wc2026_base_camps"],"summary":"Base Camp Distance","description":"Distance entre base camp d'une équipe et un stade WC2026.\n\nPermet de jauger : fatigue voyage + delta altitude (acclimatation).","operationId":"base_camp_distance_api_wc2026_base_camp_distance__team___ground__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"ground","in":"path","required":true,"schema":{"type":"string","title":"Ground"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Base Camp Distance Api Wc2026 Base Camp Distance  Team   Ground  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/base-camps":{"get":{"tags":["wc2026_base_camps"],"summary":"Base Camps List","description":"Liste tous les base camps WC2026.","operationId":"base_camps_list_api_wc2026_base_camps_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Base Camps List Api Wc2026 Base Camps Get"}}}}}}},"/api/wc2026/scenarios/{match_id}":{"get":{"tags":["wc2026-scenarios"],"summary":"Scenarios","description":"Retourne 5-7 scénarios narratifs ranked + events + factors.","operationId":"scenarios_api_wc2026_scenarios__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scenarios Api Wc2026 Scenarios  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/scenarios-summary":{"get":{"tags":["wc2026-scenarios"],"summary":"Scenarios Summary","description":"Liste tous les matchs avec scénarios générés.","operationId":"scenarios_summary_api_wc2026_scenarios_summary_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":14,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scenarios Summary Api Wc2026 Scenarios Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/list":{"get":{"tags":["cards"],"summary":"List Cards","description":"Liste des cards WC2026 (dernière snapshot par match).","operationId":"list_cards_api_cards_list_get","parameters":[{"name":"days_back","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":0,"default":7,"title":"Days Back"}},{"name":"days_forward","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":0,"default":7,"title":"Days Forward"}},{"name":"grp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grp"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Cards Api Cards List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{match_id}":{"get":{"tags":["cards"],"summary":"Get Card","description":"Dernière card (snapshot) pour un match.","operationId":"get_card_api_cards__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Card Api Cards  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{match_id}/timeline":{"get":{"tags":["cards"],"summary":"Get Timeline","description":"Historique complet snapshots pour un match.","operationId":"get_timeline_api_cards__match_id__timeline_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Timeline Api Cards  Match Id  Timeline Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{match_id}/stats":{"get":{"tags":["cards"],"summary":"Get Stats","description":"Vue STATS de la card : ELO, MC, jet lag, heat, weather, travel, camp.","operationId":"get_stats_api_cards__match_id__stats_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Stats Api Cards  Match Id  Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{match_id}/analysis":{"get":{"tags":["cards"],"summary":"Get Analysis","description":"Vue ANALYSE : scenarios narratifs, factors, stars.","operationId":"get_analysis_api_cards__match_id__analysis_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Analysis Api Cards  Match Id  Analysis Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{match_id}/pronostics":{"get":{"tags":["cards"],"summary":"Get Pronostics","description":"Vue PRONOS : verdict, confidence, tipster consensus, market odds.","operationId":"get_pronostics_api_cards__match_id__pronostics_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Pronostics Api Cards  Match Id  Pronostics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/metrics":{"get":{"tags":["metrics"],"summary":"Metrics","description":"Export Prometheus text/plain 0.0.4 (TTL cache 30s via _build_metrics_body).","operationId":"metrics_metrics_get","responses":{"200":{"description":"Successful Response"}}}},"/health/deep":{"get":{"tags":["observability"],"summary":"Health Deep","description":"Health check DEEP — testable chaque dépendance.","operationId":"health_deep_health_deep_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Deep Health Deep Get"}}}}}}},"/api/auth/register":{"post":{"tags":["auth"],"summary":"Register","description":"Génère un token UUID pour un email.\n\nIdempotent : si l'email existe déjà, renvoie le token existant.","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Register Api Auth Register Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/whoami":{"get":{"tags":["auth"],"summary":"Whoami","description":"Permet à l'extension de vérifier si son token est encore valide.","operationId":"whoami_api_auth_whoami_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Whoami Api Auth Whoami Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/supabase-login":{"post":{"tags":["auth"],"summary":"Supabase Login","description":"Proxy server-side vers Supabase signInWithPassword.","operationId":"supabase_login_api_auth_supabase_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupabaseAuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Supabase Login Api Auth Supabase Login Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/supabase-signup":{"post":{"tags":["auth"],"summary":"Supabase Signup","description":"Proxy server-side vers Supabase signUp.","operationId":"supabase_signup_api_auth_supabase_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupabaseAuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Supabase Signup Api Auth Supabase Signup Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/delete-account":{"delete":{"tags":["rgpd"],"summary":"Delete Account","description":"Soft-delete user (is_active=0) + queue purge complète 30j (RGPD art.17).\n\nRéponse immédiate : compte désactivé instantanément (login impossible).\nPurge data physique : différée 30j (gestion litiges + obligations comptables).","operationId":"delete_account_api_auth_delete_account_delete","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Account Api Auth Delete Account Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rgpd/export-data":{"get":{"tags":["rgpd"],"summary":"Export Data","description":"Export ZIP de toutes données user (RGPD art.20 portabilité).","operationId":"export_data_api_rgpd_export_data_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rgpd/purge-queue-status":{"get":{"tags":["rgpd"],"summary":"Purge Queue Status","description":"Status de la purge pour le user authentifié (transparence RGPD).","operationId":"purge_queue_status_api_rgpd_purge_queue_status_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Purge Queue Status Api Rgpd Purge Queue Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sharp/feed":{"get":{"tags":["sharp_money"],"summary":"Sharp Feed","description":"Feed Sharp Money async — derniers alertes line/steam/RLM.","operationId":"sharp_feed_api_sharp_feed_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"alert_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"line_move | steam_move | rlm","title":"Alert Type"},"description":"line_move | steam_move | rlm"},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"Fenêtre temporelle","default":24,"title":"Hours"},"description":"Fenêtre temporelle"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sharp Feed Api Sharp Feed Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sharp/stats":{"get":{"tags":["sharp_money"],"summary":"Sharp Stats","description":"Stats agrégées Sharp Money async sur fenêtre N heures.","operationId":"sharp_stats_api_sharp_stats_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"default":168,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sharp Stats Api Sharp Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ev/quick":{"post":{"tags":["ev_calculator"],"summary":"Ev Quick","description":"Calcule EV instantané pour un bet 1X2 sans DB lookup.","operationId":"ev_quick_api_ev_quick_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EVQuickRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EVQuickResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ev/methods":{"get":{"tags":["ev_calculator"],"summary":"List Methods","description":"Liste les méthodes no-vig supportées.","operationId":"list_methods_api_ev_methods_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Methods Api Ev Methods Get"}}}}}}},"/api/chat/ask":{"post":{"tags":["chat_qa"],"summary":"Ask","description":"Q&A naturelle FR sur rapports BetRecord via cascade LLM Kimi — async.","operationId":"ask_api_chat_ask_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatAskRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatAskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/health":{"get":{"tags":["chat_qa"],"summary":"Health","description":"Sanity check cascade + DB.","operationId":"health_api_chat_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Api Chat Health Get"}}}}}}},"/api/wc2026/winner-odds":{"get":{"tags":["wc2026"],"summary":"Winner Odds","description":"Top N pays Winner Polymarket (probas crypto fresh) — async.","operationId":"winner_odds_api_wc2026_winner_odds_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Winner Odds Api Wc2026 Winner Odds Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/upcoming-matches":{"get":{"tags":["wc2026"],"summary":"Upcoming Matches","description":"Matchs WC2026 dans la fenêtre N jours — async.","operationId":"upcoming_matches_api_wc2026_upcoming_matches_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":14,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upcoming Matches Api Wc2026 Upcoming Matches Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/press":{"get":{"tags":["wc2026"],"summary":"Wc Press","description":"Articles presse FR/EN liés au Mondial 2026 — async.","operationId":"wc_press_api_wc2026_press_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Wc Press Api Wc2026 Press Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/odds-drift/{match_id}":{"get":{"tags":["wc2026"],"summary":"Odds Drift","description":"Timeline cotes pour un match — drift visualisation.","operationId":"odds_drift_api_wc2026_odds_drift__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Odds Drift Api Wc2026 Odds Drift  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/group-standings/{group_letter}":{"get":{"tags":["wc2026"],"summary":"Group Standings","description":"Standings live d'un groupe WC2026 (A-L) — calc from matchs joués.","operationId":"group_standings_api_wc2026_group_standings__group_letter__get","parameters":[{"name":"group_letter","in":"path","required":true,"schema":{"type":"string","title":"Group Letter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Group Standings Api Wc2026 Group Standings  Group Letter  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/af-prediction/{match_id}":{"get":{"tags":["wc2026"],"summary":"Af Prediction","description":"Prédiction API-Football (winner + advice + %).","operationId":"af_prediction_api_wc2026_af_prediction__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Af Prediction Api Wc2026 Af Prediction  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/tipster-match":{"get":{"tags":["wc2026"],"summary":"Tipster Match","description":"Pronostics tipsters pour un match (par équipes home+away).","operationId":"tipster_match_api_wc2026_tipster_match_get","parameters":[{"name":"home","in":"query","required":true,"schema":{"type":"string","title":"Home"}},{"name":"away","in":"query","required":true,"schema":{"type":"string","title":"Away"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Tipster Match Api Wc2026 Tipster Match Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/squad-value/{nationality}":{"get":{"tags":["wc2026"],"summary":"Squad Value","description":"Top N joueurs par valeur marchande Transfermarkt (€M) pour une nationalité.","operationId":"squad_value_api_wc2026_squad_value__nationality__get","parameters":[{"name":"nationality","in":"path","required":true,"schema":{"type":"string","title":"Nationality"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"default":11,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Squad Value Api Wc2026 Squad Value  Nationality  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/odds-for-teams":{"get":{"tags":["wc2026"],"summary":"Odds For Teams","description":"Resolve odds WC2026 via cascade : smarkets (priorité) → odds_api → vide.\n\nSmarkets contient les marchés WC2026 avec last_executed_price (exchange).","operationId":"odds_for_teams_api_wc2026_odds_for_teams_get","parameters":[{"name":"home","in":"query","required":true,"schema":{"type":"string","title":"Home"}},{"name":"away","in":"query","required":true,"schema":{"type":"string","title":"Away"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Odds For Teams Api Wc2026 Odds For Teams Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/press-for-teams":{"get":{"tags":["wc2026"],"summary":"Press For Teams","description":"Articles press filtrés par titre/summary contenant home OR away.","operationId":"press_for_teams_api_wc2026_press_for_teams_get","parameters":[{"name":"home","in":"query","required":true,"schema":{"type":"string","title":"Home"}},{"name":"away","in":"query","required":true,"schema":{"type":"string","title":"Away"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":8,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Press For Teams Api Wc2026 Press For Teams Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/match-context/{match_id}":{"get":{"tags":["wc2026"],"summary":"Match Context","description":"Contexte enrichi WC2026 : ground + stadium + Open-Meteo live + altitude alert.","operationId":"match_context_api_wc2026_match_context__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Context Api Wc2026 Match Context  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/full-analysis/{match_id}":{"get":{"tags":["wc2026"],"summary":"Full Analysis","description":"Analyse complète match WC2026 : agrège 8 sources + génère 3-5 scénarios.\n\nSources :\n- ELO international (intl_elo_ratings)\n- Squad value TM (tm_player_value)\n- Polymarket winner (polymarket_wc2026)\n- Smarkets exchange (smarkets_lep_snapshots)\n- Press dédiée match (press_articles + sentiment)\n- Monte Carlo (lambdas ELO-cascade)\n- Stadium + weather (Open-Meteo live)\n- Group standings (live)","operationId":"full_analysis_api_wc2026_full_analysis__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Full Analysis Api Wc2026 Full Analysis  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/strategies/{strategy_name}":{"get":{"tags":["wc2026"],"summary":"Picks By Strategy","description":"7 stratégies profitables identifiées sprint89w (ROI backtest 5341 matchs Top5).\n\nStratégies disponibles :\n- `draw-value` : matchs avec implied draw 25-32%, max favori <55% (ROI +22.04%)\n- `streak-outsider` : outsiders avec winning streak 5+ (ROI +12.56%)\n- `streak-favori` : favoris avec winning streak 3+ (ROI +7.88%)\n- `ml-high-conf` : ML pred argmax >60% (ROI +5.41%)\n- `mid-favori` : favori marché 60-70% (ROI +5.11%)\n- `top-favori` : favori marché 75%+ (ROI +4.20%)\n- `pl-l1-favori` : Premier League ou Ligue 1 favori straight (ROI +4.22%)","operationId":"picks_by_strategy_api_wc2026_strategies__strategy_name__get","parameters":[{"name":"strategy_name","in":"path","required":true,"schema":{"type":"string","title":"Strategy Name"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Picks By Strategy Api Wc2026 Strategies  Strategy Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/team-deep-stats/{nationality}":{"get":{"tags":["wc2026"],"summary":"Team Deep Stats","description":"Stats COMPLÈTES par équipe nationale WC2026 :\nELO + form + squad TM + photos joueurs + matchs récents + coach + classement WC tournoi.","operationId":"team_deep_stats_api_wc2026_team_deep_stats__nationality__get","parameters":[{"name":"nationality","in":"path","required":true,"schema":{"type":"string","title":"Nationality"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Team Deep Stats Api Wc2026 Team Deep Stats  Nationality  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/team-buzz/{team_name}":{"get":{"tags":["wc2026"],"summary":"Team Buzz","description":"Buzz par équipe via google_trends_team (10k+ rows dispo).","operationId":"team_buzz_api_wc2026_team_buzz__team_name__get","parameters":[{"name":"team_name","in":"path","required":true,"schema":{"type":"string","title":"Team Name"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":14,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Team Buzz Api Wc2026 Team Buzz  Team Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/h2h-historical/{home}/{away}":{"get":{"tags":["wc2026"],"summary":"H2H Historical","description":"H2H historique via historical_matches (241k rows). Cross-link nation cross.","operationId":"h2h_historical_api_wc2026_h2h_historical__home___away__get","parameters":[{"name":"home","in":"path","required":true,"schema":{"type":"string","title":"Home"}},{"name":"away","in":"path","required":true,"schema":{"type":"string","title":"Away"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response H2H Historical Api Wc2026 H2H Historical  Home   Away  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/tipster-by-team/{team_name}":{"get":{"tags":["wc2026"],"summary":"Tipster By Team","description":"Tous picks tipster récents par équipe (vs match-specific). Donne contexte forme.","operationId":"tipster_by_team_api_wc2026_tipster_by_team__team_name__get","parameters":[{"name":"team_name","in":"path","required":true,"schema":{"type":"string","title":"Team Name"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Tipster By Team Api Wc2026 Tipster By Team  Team Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/fbref-stats/{team_name}":{"get":{"tags":["wc2026"],"summary":"Fbref Stats","description":"Stats FBref WC2026 par équipe nation (live de la compétition).","operationId":"fbref_stats_api_wc2026_fbref_stats__team_name__get","parameters":[{"name":"team_name","in":"path","required":true,"schema":{"type":"string","title":"Team Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fbref Stats Api Wc2026 Fbref Stats  Team Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/fbref-players/{team_name}":{"get":{"tags":["wc2026"],"summary":"Fbref Players","description":"Joueurs WC2026 par équipe (FBref live).","operationId":"fbref_players_api_wc2026_fbref_players__team_name__get","parameters":[{"name":"team_name","in":"path","required":true,"schema":{"type":"string","title":"Team Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":15,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fbref Players Api Wc2026 Fbref Players  Team Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/wiki-squad/{nationality}":{"get":{"tags":["wc2026"],"summary":"Wiki Squad","description":"Squad Wikipedia WC2026 - 48 équipes 26 joueurs avec caps+goals+club.","operationId":"wiki_squad_api_wc2026_wiki_squad__nationality__get","parameters":[{"name":"nationality","in":"path","required":true,"schema":{"type":"string","title":"Nationality"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":26,"minimum":1,"default":26,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Wiki Squad Api Wc2026 Wiki Squad  Nationality  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/top-scorers":{"get":{"tags":["wc2026"],"summary":"Top Scorers","description":"Top buteurs WC2026 (source openfootball/worldcup.json).","operationId":"top_scorers_api_wc2026_top_scorers_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":15,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Scorers Api Wc2026 Top Scorers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/team-goals/{team_name}":{"get":{"tags":["wc2026"],"summary":"Team Goals","description":"Buteurs et buts d'une équipe WC2026.","operationId":"team_goals_api_wc2026_team_goals__team_name__get","parameters":[{"name":"team_name","in":"path","required":true,"schema":{"type":"string","title":"Team Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Team Goals Api Wc2026 Team Goals  Team Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/intl-h2h-nation/{home}/{away}":{"get":{"tags":["wc2026"],"summary":"Intl H2H Nation","description":"H2H historique nation vs nation depuis Kaggle martj42 (49k matchs 1872-2026).","operationId":"intl_h2h_nation_api_wc2026_intl_h2h_nation__home___away__get","parameters":[{"name":"home","in":"path","required":true,"schema":{"type":"string","title":"Home"}},{"name":"away","in":"path","required":true,"schema":{"type":"string","title":"Away"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":15,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Intl H2H Nation Api Wc2026 Intl H2H Nation  Home   Away  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/mastodon-buzz/{team_name}":{"get":{"tags":["wc2026"],"summary":"Mastodon Buzz","description":"Buzz Mastodon AT Protocol via mastodon.social hashtag/search (free no auth).","operationId":"mastodon_buzz_api_wc2026_mastodon_buzz__team_name__get","parameters":[{"name":"team_name","in":"path","required":true,"schema":{"type":"string","title":"Team Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":40,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Mastodon Buzz Api Wc2026 Mastodon Buzz  Team Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/press-intl":{"get":{"tags":["wc2026"],"summary":"Press Intl","description":"Articles presse intl 13 RSS (ESPN/Sky/Guardian/BBC/etc.). Filter par team optionnel.","operationId":"press_intl_api_wc2026_press_intl_get","parameters":[{"name":"team","in":"query","required":false,"schema":{"type":"string","title":"Team"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Press Intl Api Wc2026 Press Intl Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/intl-form-l5-nation/{team}":{"get":{"tags":["wc2026"],"summary":"Intl Form L5 Nation","description":"Form L5 nation (toutes compets : qualifs/amicaux/Nations League) via Kaggle martj42.","operationId":"intl_form_l5_nation_api_wc2026_intl_form_l5_nation__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Intl Form L5 Nation Api Wc2026 Intl Form L5 Nation  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/team-last3-recap/{team}":{"get":{"tags":["wc2026"],"summary":"Team Last3 Recap","description":"V25.196 — 3 matchs précédents avec résumé LLM 100 mots + stats par rencontre.\n\nPersistant : cache 24h en DB `team_last3_recap_cache` (LLM only 1×/24h/nation).","operationId":"team_last3_recap_api_wc2026_team_last3_recap__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Team Last3 Recap Api Wc2026 Team Last3 Recap  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/wiki-photos/{team}":{"get":{"tags":["wc2026"],"summary":"Wiki Photos","description":"Wikipedia photos joueurs nation (commons thumbnails).","operationId":"wiki_photos_api_wc2026_wiki_photos__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Wiki Photos Api Wc2026 Wiki Photos  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/mastodon-sentiment/{team}":{"get":{"tags":["wc2026"],"summary":"Mastodon Sentiment","description":"Sentiment Mastodon agrégé last N snapshots (cron 4x/jour).","operationId":"mastodon_sentiment_api_wc2026_mastodon_sentiment__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"last_n","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":5,"title":"Last N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Mastodon Sentiment Api Wc2026 Mastodon Sentiment  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/weather-forecast/{match_id}":{"get":{"tags":["wc2026"],"summary":"Weather Forecast","description":"Forecast météo 7j Open-Meteo pour stade WC2026.","operationId":"weather_forecast_api_wc2026_weather_forecast__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Weather Forecast Api Wc2026 Weather Forecast  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/travel-rest/{match_id}":{"get":{"tags":["wc2026"],"summary":"Travel Rest","description":"Travel km + rest days entre matchs WC2026 (les 2 équipes du match).","operationId":"travel_rest_api_wc2026_travel_rest__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Travel Rest Api Wc2026 Travel Rest  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/referee-top":{"get":{"tags":["wc2026"],"summary":"Referee Top","description":"Top referees par métrique (cards/penalty/home_win) pour scouting Over/Under cards.","operationId":"referee_top_api_wc2026_referee_top_get","parameters":[{"name":"metric","in":"query","required":false,"schema":{"type":"string","default":"cards","title":"Metric"}},{"name":"min_matches","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Min Matches"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Referee Top Api Wc2026 Referee Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/referee-search/{name_query}":{"get":{"tags":["wc2026"],"summary":"Referee Search","description":"Recherche referee par nom partiel pour préparer paris cards Over/Under.","operationId":"referee_search_api_wc2026_referee_search__name_query__get","parameters":[{"name":"name_query","in":"path","required":true,"schema":{"type":"string","title":"Name Query"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Referee Search Api Wc2026 Referee Search  Name Query  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/actionable-signals/{match_id}":{"get":{"tags":["wc2026"],"summary":"Actionable Signals","description":"Agrège tous signaux betting actionnables : weather + travel + elo + odds + buzz.","operationId":"actionable_signals_api_wc2026_actionable_signals__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Actionable Signals Api Wc2026 Actionable Signals  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/value-scout":{"get":{"tags":["wc2026"],"summary":"Value Scout","description":"Top matchs WC avec convergence ≥N signaux actionnables (best bets day).","operationId":"value_scout_api_wc2026_value_scout_get","parameters":[{"name":"min_signals","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":2,"title":"Min Signals"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":14,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Value Scout Api Wc2026 Value Scout Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/strategy-all-confidence":{"get":{"tags":["wc2026"],"summary":"Strategy All Confidence","description":"Stratégie all-confidence : pick TOUS les matchs avec confiance ELO+MC+Smarkets convergence.","operationId":"strategy_all_confidence_api_wc2026_strategy_all_confidence_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":14,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Strategy All Confidence Api Wc2026 Strategy All Confidence Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/grille-history/{match_id}":{"get":{"tags":["wc2026"],"summary":"Grille History","description":"Historique notes V9 sur N jours pour 1 match.","operationId":"grille_history_api_wc2026_grille_history__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Grille History Api Wc2026 Grille History  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/grille-weak-nations":{"get":{"tags":["wc2026"],"summary":"Grille Weak Nations","description":"Top nations data-faibles à booster en priorité (dernier audit).","operationId":"grille_weak_nations_api_wc2026_grille_weak_nations_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Grille Weak Nations Api Wc2026 Grille Weak Nations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/grille-stats-trend":{"get":{"tags":["wc2026"],"summary":"Grille Stats Trend","description":"Trend grille daily summary sur N jours.","operationId":"grille_stats_trend_api_wc2026_grille_stats_trend_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":14,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Grille Stats Trend Api Wc2026 Grille Stats Trend Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/calendar-full":{"get":{"tags":["wc2026"],"summary":"Calendar Full","description":"Programme complet WC2026 ranked par date + groupes par phase.","operationId":"calendar_full_api_wc2026_calendar_full_get","parameters":[{"name":"stage","in":"query","required":false,"schema":{"type":"string","title":"Stage"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Calendar Full Api Wc2026 Calendar Full Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/calendar-today":{"get":{"tags":["wc2026"],"summary":"Calendar Today","description":"Matchs du jour avec heures + status.","operationId":"calendar_today_api_wc2026_calendar_today_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Calendar Today Api Wc2026 Calendar Today Get"}}}}}}},"/api/wc2026/calendar-tomorrow":{"get":{"tags":["wc2026"],"summary":"Calendar Tomorrow","description":"Programme demain.","operationId":"calendar_tomorrow_api_wc2026_calendar_tomorrow_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Calendar Tomorrow Api Wc2026 Calendar Tomorrow Get"}}}}}}},"/api/wc2026/calendar-week":{"get":{"tags":["wc2026"],"summary":"Calendar Week","description":"Programme N prochains jours.","operationId":"calendar_week_api_wc2026_calendar_week_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":14,"minimum":1,"default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Calendar Week Api Wc2026 Calendar Week Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/groups-live":{"get":{"tags":["wc2026"],"summary":"Groups Live","description":"12 groupes WC2026 avec classement live calculé via FIFA tiebreakers.","operationId":"groups_live_api_wc2026_groups_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Groups Live Api Wc2026 Groups Live Get"}}}}}}},"/api/wc2026/group/{letter}":{"get":{"tags":["wc2026"],"summary":"Group Detail","description":"Détail 1 groupe (matchs + standings live).","operationId":"group_detail_api_wc2026_group__letter__get","parameters":[{"name":"letter","in":"path","required":true,"schema":{"type":"string","title":"Letter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Group Detail Api Wc2026 Group  Letter  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/knockout-bracket":{"get":{"tags":["wc2026"],"summary":"Knockout Bracket","description":"Bracket knockout 32→16→8→4→Final.","operationId":"knockout_bracket_api_wc2026_knockout_bracket_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Knockout Bracket Api Wc2026 Knockout Bracket Get"}}}}}}},"/api/wc2026/qualification-status":{"get":{"tags":["wc2026"],"summary":"Qualification Status","description":"Qui est qualifié pour Round of 32 (top 2 par groupe + 8 meilleurs 3èmes).","operationId":"qualification_status_api_wc2026_qualification_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Qualification Status Api Wc2026 Qualification Status Get"}}}}}}},"/api/wc2026/calendar-stats":{"get":{"tags":["wc2026"],"summary":"Calendar Stats","description":"Statistiques globales WC2026 (buts, sheets, top scorers cumul).","operationId":"calendar_stats_api_wc2026_calendar_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Calendar Stats Api Wc2026 Calendar Stats Get"}}}}}}},"/api/wc2026/predictions-accuracy":{"get":{"tags":["wc2026"],"summary":"Predictions Accuracy","description":"Accuracy globale des predictions par méthode (verdict/MC/ELO/Smarkets).","operationId":"predictions_accuracy_api_wc2026_predictions_accuracy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Predictions Accuracy Api Wc2026 Predictions Accuracy Get"}}}}}}},"/api/wc2026/predictions-by-match":{"get":{"tags":["wc2026"],"summary":"Predictions By Match","description":"Toutes les predictions pour 1 match (verdict/MC/ELO/Smarkets) + accuracy si terminé.","operationId":"predictions_by_match_api_wc2026_predictions_by_match_get","parameters":[{"name":"match_id","in":"query","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Predictions By Match Api Wc2026 Predictions By Match Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/predictions-recent":{"get":{"tags":["wc2026"],"summary":"Predictions Recent","description":"Dernières N predictions par méthode avec verdict + accuracy.","operationId":"predictions_recent_api_wc2026_predictions_recent_get","parameters":[{"name":"method","in":"query","required":false,"schema":{"type":"string","default":"verdict","title":"Method"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Predictions Recent Api Wc2026 Predictions Recent Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/live-now":{"get":{"tags":["wc2026"],"summary":"Live Now","description":"Matchs WC en cours actuellement (entre kick-off et +120min).","operationId":"live_now_api_wc2026_live_now_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Live Now Api Wc2026 Live Now Get"}}}}}}},"/api/wc2026/just-finished":{"get":{"tags":["wc2026"],"summary":"Just Finished","description":"Matchs WC terminés dans les N dernières heures (résultats récents).","operationId":"just_finished_api_wc2026_just_finished_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":72,"minimum":1,"default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Just Finished Api Wc2026 Just Finished Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/reports-coverage":{"get":{"tags":["wc2026"],"summary":"Reports Coverage","description":"État remplissage des rapports tous matchs upcoming (% completion par match).","operationId":"reports_coverage_api_wc2026_reports_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Reports Coverage Api Wc2026 Reports Coverage Get"}}}}}}},"/api/wc2026/report-snapshot/{match_id}":{"get":{"tags":["wc2026"],"summary":"Report Snapshot","description":"Snapshot complet prefilled d'un rapport (fallback fast load).","operationId":"report_snapshot_api_wc2026_report_snapshot__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Report Snapshot Api Wc2026 Report Snapshot  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/match-scenarios/{match_id}":{"get":{"tags":["wc2026"],"summary":"Match Scenarios","description":"Génère 3 scénarios crédibles par match (favori / serré / upset) avec narrative + score + facteurs.","operationId":"match_scenarios_api_wc2026_match_scenarios__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Scenarios Api Wc2026 Match Scenarios  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/method-divergence/{match_id}":{"get":{"tags":["wc2026"],"summary":"Method Divergence","description":"Détecte contradictions entre verdict / MC / ELO / Smarkets / Polymarket (value cachée).","operationId":"method_divergence_api_wc2026_method_divergence__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Method Divergence Api Wc2026 Method Divergence  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/method-divergence-today":{"get":{"tags":["wc2026"],"summary":"Method Divergence Today","description":"Liste matchs upcoming avec divergences = opportunités value cachées.","operationId":"method_divergence_today_api_wc2026_method_divergence_today_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":14,"minimum":1,"default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Method Divergence Today Api Wc2026 Method Divergence Today Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/scenarios-evolution/{match_id}":{"get":{"tags":["wc2026"],"summary":"Scenarios Evolution","description":"Historique évolution scénarios + params d'1 match (J-7 → H-1).","operationId":"scenarios_evolution_api_wc2026_scenarios_evolution__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scenarios Evolution Api Wc2026 Scenarios Evolution  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/params-changes-today":{"get":{"tags":["wc2026"],"summary":"Params Changes Today","description":"Matchs upcoming où les paramètres ont significativement bougé (24h).","operationId":"params_changes_today_api_wc2026_params_changes_today_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Params Changes Today Api Wc2026 Params Changes Today Get"}}}}}}},"/api/wc2026/watchdog-status":{"get":{"tags":["wc2026"],"summary":"Watchdog Status","description":"Status dernière surveillance auto-update tous systèmes.","operationId":"watchdog_status_api_wc2026_watchdog_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Watchdog Status Api Wc2026 Watchdog Status Get"}}}}}}},"/api/wc2026/watchdog-history":{"get":{"tags":["wc2026"],"summary":"Watchdog History","description":"Historique runs watchdog (N derniers runs).","operationId":"watchdog_history_api_wc2026_watchdog_history_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Watchdog History Api Wc2026 Watchdog History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/bluesky-buzz/{team}":{"get":{"tags":["wc2026"],"summary":"Bluesky Buzz","description":"Posts BlueSky federated AT Protocol pour 1 team WC.","operationId":"bluesky_buzz_api_wc2026_bluesky_buzz__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":15,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Bluesky Buzz Api Wc2026 Bluesky Buzz  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/system-dashboard":{"get":{"tags":["wc2026"],"summary":"System Dashboard","description":"Dashboard exec-summary KPIs système BetRecord (1 appel HTTP).","operationId":"system_dashboard_api_wc2026_system_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response System Dashboard Api Wc2026 System Dashboard Get"}}}}}}},"/api/wc2026/winamax-prematch-odds/{match_id}":{"get":{"tags":["wc2026"],"summary":"Winamax Prematch Odds","description":"Retourne tous les marchés Winamax pour 1 match WC (87 marchés / 250+ cotes).","operationId":"winamax_prematch_odds_api_wc2026_winamax_prematch_odds__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Winamax Prematch Odds Api Wc2026 Winamax Prematch Odds  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/winamax-prematch-list":{"get":{"tags":["wc2026"],"summary":"Winamax Prematch List","description":"Liste matchs WC avec leurs IDs Winamax + stats.","operationId":"winamax_prematch_list_api_wc2026_winamax_prematch_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Winamax Prematch List Api Wc2026 Winamax Prematch List Get"}}}}}}},"/api/wc2026/winamax-odds-history/{match_id}":{"get":{"tags":["wc2026"],"summary":"Winamax Odds History","description":"Historique mouvements cotes 1 match × 1 marché sur N snapshots (cron Mac daily 06:00).","operationId":"winamax_odds_history_api_wc2026_winamax_odds_history__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"market","in":"query","required":false,"schema":{"type":"string","default":"Résultat","title":"Market"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Winamax Odds History Api Wc2026 Winamax Odds History  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/winamax-odds-drifts":{"get":{"tags":["wc2026"],"summary":"Winamax Odds Drifts","description":"Drifts cotes Winamax > N% entre current et snapshot J-1.","operationId":"winamax_odds_drifts_api_wc2026_winamax_odds_drifts_get","parameters":[{"name":"min_pct","in":"query","required":false,"schema":{"type":"number","maximum":50.0,"minimum":1.0,"default":5.0,"title":"Min Pct"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Winamax Odds Drifts Api Wc2026 Winamax Odds Drifts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/winamax-vs-mc-edge/{match_id}":{"get":{"tags":["wc2026"],"summary":"Winamax Vs Mc Edge","description":"Calcul edge mathématique BetRecord MC vs cotes Winamax 1×2.\n\nEV = (proba_MC × cote_winamax) - 1\nSi EV > 0 → value bet (BetRecord prédit plus de probabilité que bookmaker)","operationId":"winamax_vs_mc_edge_api_wc2026_winamax_vs_mc_edge__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Winamax Vs Mc Edge Api Wc2026 Winamax Vs Mc Edge  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/winamax-best-edges":{"get":{"tags":["wc2026"],"summary":"Winamax Best Edges","description":"Scan tous matchs upcoming, retourne ceux avec edge EV > N (default 10%).","operationId":"winamax_best_edges_api_wc2026_winamax_best_edges_get","parameters":[{"name":"min_ev","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.01,"default":0.1,"title":"Min Ev"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Winamax Best Edges Api Wc2026 Winamax Best Edges Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/winamax-edge-multimarket/{match_id}":{"get":{"tags":["wc2026"],"summary":"Winamax Edge Multimarket","description":"Calcul EV multi-marchés : 1×2 + Double Chance + Plus/Moins + BTTS.\n\nPour chaque marché, calcule :\n  EV = (proba_MC_estimée × cote_Winamax) - 1\nSi EV > 0 = value bet","operationId":"winamax_edge_multimarket_api_wc2026_winamax_edge_multimarket__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Winamax Edge Multimarket Api Wc2026 Winamax Edge Multimarket  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/best-picks-combined/{match_id}":{"get":{"tags":["wc2026"],"summary":"Best Picks Combined","description":"Bons pronos AVEC EV pour 1 match.\n\nCalcule 6 picks possibles (1, N, 2, 1X, X2, 12) et donne :\n- SAFE PICK : MC proba la + haute\n- VALUE PICK : EV la + haute\n- SMART PICK : meilleur score combiné (proba × cote >= 1.10)","operationId":"best_picks_combined_api_wc2026_best_picks_combined__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Best Picks Combined Api Wc2026 Best Picks Combined  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/best-picks-today":{"get":{"tags":["wc2026"],"summary":"Best Picks Today","description":"Scan tous matchs upcoming, retourne smart pick + safe + value pour chacun.","operationId":"best_picks_today_api_wc2026_best_picks_today_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Best Picks Today Api Wc2026 Best Picks Today Get"}}}}}}},"/api/wc2026/match-pronos-ranked/{match_id}":{"get":{"tags":["wc2026"],"summary":"Match Pronos Ranked","description":"Liste paris rankés par score combiné EV + Edge + Corrélation stats + Risque passage.","operationId":"match_pronos_ranked_api_wc2026_match_pronos_ranked__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Pronos Ranked Api Wc2026 Match Pronos Ranked  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/best-pronos-today":{"get":{"tags":["wc2026"],"summary":"Best Pronos Today","description":"Scan tous matchs upcoming, retourne best safe+value+correlation par match.","operationId":"best_pronos_today_api_wc2026_best_pronos_today_get","parameters":[{"name":"min_cote","in":"query","required":false,"schema":{"type":"number","maximum":10.0,"minimum":1.01,"default":1.4,"title":"Min Cote"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Best Pronos Today Api Wc2026 Best Pronos Today Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/clv-record-pick":{"post":{"tags":["wc2026"],"summary":"Clv Record Pick","description":"Enregistre une cote au moment du pick pour calcul CLV rétroactif.","operationId":"clv_record_pick_api_wc2026_clv_record_pick_post","parameters":[{"name":"match_id","in":"query","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"pick_label","in":"query","required":true,"schema":{"type":"string","title":"Pick Label"}},{"name":"cote_at_pick","in":"query","required":true,"schema":{"type":"number","maximum":100,"minimum":1.01,"title":"Cote At Pick"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Clv Record Pick Api Wc2026 Clv Record Pick Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/clv-tracker":{"get":{"tags":["wc2026"],"summary":"Clv Tracker","description":"Liste CLV history avec ratio cote_at_pick / cote_closing.\n\nCLV positif (ratio > 1) = pick à meilleure cote que closing line = sharp pick\nCLV négatif (ratio < 1) = pick à moins bonne cote = mauvais timing","operationId":"clv_tracker_api_wc2026_clv_tracker_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Clv Tracker Api Wc2026 Clv Tracker Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/rlm-detector":{"get":{"tags":["wc2026"],"summary":"Rlm Detector","description":"Détecte RLM : cotes Winamax bougent CONTRE consensus public (signal sharp money).\n\nCompare current vs snapshot J-1 dans winamax_history/.\nDrift cote > N% sur 1×2 = signal RLM.","operationId":"rlm_detector_api_wc2026_rlm_detector_get","parameters":[{"name":"min_drift_pct","in":"query","required":false,"schema":{"type":"number","maximum":20.0,"minimum":1.0,"default":3.0,"title":"Min Drift Pct"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rlm Detector Api Wc2026 Rlm Detector Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/arbitrage-3way/{match_id}":{"get":{"tags":["wc2026"],"summary":"Arbitrage 3Way","description":"Détecte surebets 3-way : Σ(1/cote) < 1 → ROI garanti.\n\nCombine cotes home Winamax + draw Smarkets + away Polymarket (best per side).","operationId":"arbitrage_3way_api_wc2026_arbitrage_3way__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitrage 3Way Api Wc2026 Arbitrage 3Way  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/bankroll-init":{"post":{"tags":["wc2026"],"summary":"Bankroll Init","operationId":"bankroll_init_api_wc2026_bankroll_init_post","parameters":[{"name":"user_id","in":"query","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"initial","in":"query","required":true,"schema":{"type":"number","minimum":10,"title":"Initial"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Bankroll Init Api Wc2026 Bankroll Init Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/bankroll-bet":{"post":{"tags":["wc2026"],"summary":"Bankroll Bet","operationId":"bankroll_bet_api_wc2026_bankroll_bet_post","parameters":[{"name":"user_id","in":"query","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"match_id","in":"query","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"pick_label","in":"query","required":true,"schema":{"type":"string","title":"Pick Label"}},{"name":"cote","in":"query","required":true,"schema":{"type":"number","minimum":1.01,"title":"Cote"}},{"name":"stake","in":"query","required":true,"schema":{"type":"number","minimum":0.1,"title":"Stake"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Bankroll Bet Api Wc2026 Bankroll Bet Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/bankroll/{user_id}":{"get":{"tags":["wc2026"],"summary":"Bankroll Get","operationId":"bankroll_get_api_wc2026_bankroll__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Bankroll Get Api Wc2026 Bankroll  User Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/combo-suggestions/{match_id}":{"get":{"tags":["wc2026"],"summary":"Combo Suggestions","description":"Suggère combos picks corrélés : 1×2 + Plus/Moins same direction.\n\nEx : Belgium gagne + Belgium + plus de 1.5 → corrélé (si Belgium attaque, ils marquent)","operationId":"combo_suggestions_api_wc2026_combo_suggestions__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Combo Suggestions Api Wc2026 Combo Suggestions  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/anti-tilt-check/{user_id}":{"get":{"tags":["wc2026"],"summary":"Anti Tilt Check","description":"Détecte tilt patterns : stake escalation après losses.","operationId":"anti_tilt_check_api_wc2026_anti_tilt_check__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Anti Tilt Check Api Wc2026 Anti Tilt Check  User Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/refundable-hedge/{match_id}":{"get":{"tags":["wc2026"],"summary":"Refundable Hedge","description":"Détecte hedge ultra-safe : Vainqueur remboursé si nul + X2/1X = double safety net.\n\nSi on bet \"Vainqueur remboursé si nul\" sur favori + X2 sur underdog :\n- Match nul : remboursé sur 1er, gagne X2 → profit léger\n- Favori gagne : gagne 1er pick, perd X2 → profit modeste\n- Underdog gagne : perd 1er, gagne X2 → profit léger","operationId":"refundable_hedge_api_wc2026_refundable_hedge__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Refundable Hedge Api Wc2026 Refundable Hedge  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/ml-prediction/{match_id}":{"get":{"tags":["wc2026"],"summary":"Ml Prediction","description":"Prédiction CatBoost ML (59.47% accuracy intl 49k matchs).","operationId":"ml_prediction_api_wc2026_ml_prediction__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ml Prediction Api Wc2026 Ml Prediction  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/ml-drift":{"get":{"tags":["wc2026"],"summary":"Ml Drift","description":"Détecte drift ML : compare predictions tracker accuracy CatBoost vs actual.","operationId":"ml_drift_api_wc2026_ml_drift_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ml Drift Api Wc2026 Ml Drift Get"}}}}}}},"/api/wc2026/ab-backtest-models":{"get":{"tags":["wc2026"],"summary":"Ab Backtest Models","description":"Compare accuracy entre méthodes : CatBoost vs MC vs Smarkets vs ELO.","operationId":"ab_backtest_models_api_wc2026_ab_backtest_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ab Backtest Models Api Wc2026 Ab Backtest Models Get"}}}}}}},"/api/wc2026/asian-handicap/{match_id}":{"get":{"tags":["wc2026"],"summary":"Asian Handicap","description":"Asian Handicap calculé depuis Winamax handicap européen → AH equivalent.","operationId":"asian_handicap_api_wc2026_asian_handicap__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Asian Handicap Api Wc2026 Asian Handicap  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/pinnacle-benchmark/{match_id}":{"get":{"tags":["wc2026"],"summary":"Pinnacle Benchmark","description":"Compare nos cotes vs Pinnacle (sharp ref). Stub initial - integration future.","operationId":"pinnacle_benchmark_api_wc2026_pinnacle_benchmark__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Pinnacle Benchmark Api Wc2026 Pinnacle Benchmark  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/line-shopping/{match_id}":{"get":{"tags":["wc2026"],"summary":"Line Shopping","description":"Compare cotes 1×2 multi-bookies pour best price systematic.","operationId":"line_shopping_api_wc2026_line_shopping__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Line Shopping Api Wc2026 Line Shopping  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/twitter-buzz/{team}":{"get":{"tags":["wc2026"],"summary":"Twitter Buzz","description":"Twitter buzz via Nitter instance publique (no auth).","operationId":"twitter_buzz_api_wc2026_twitter_buzz__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Twitter Buzz Api Wc2026 Twitter Buzz  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/reddit-buzz-v2/{team}":{"get":{"tags":["wc2026"],"summary":"Reddit Buzz V2","description":"Reddit JSON via curl_cffi chrome131 (workaround 403).","operationId":"reddit_buzz_v2_api_wc2026_reddit_buzz_v2__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reddit Buzz V2 Api Wc2026 Reddit Buzz V2  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/stadium-impact/{match_id}":{"get":{"tags":["wc2026"],"summary":"Stadium Impact","description":"Impact altitude/climat stade sur perf équipes (Azteca 2240m cardio penalty).","operationId":"stadium_impact_api_wc2026_stadium_impact__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Stadium Impact Api Wc2026 Stadium Impact  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/referee-bias/{referee_name}":{"get":{"tags":["wc2026"],"summary":"Referee Bias","description":"Bias home/away win rate par référé via referee_season_stats.","operationId":"referee_bias_api_wc2026_referee_bias__referee_name__get","parameters":[{"name":"referee_name","in":"path","required":true,"schema":{"type":"string","title":"Referee Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Referee Bias Api Wc2026 Referee Bias  Referee Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/live-betting-model/{match_id}":{"get":{"tags":["wc2026"],"summary":"Live Betting Model","description":"Live betting in-play model (polling cotes Winamax 30s).","operationId":"live_betting_model_api_wc2026_live_betting_model__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Live Betting Model Api Wc2026 Live Betting Model  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/xg-live/{match_id}":{"get":{"tags":["wc2026"],"summary":"Xg Live","description":"xG live update via SofaScore events stream.","operationId":"xg_live_api_wc2026_xg_live__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Xg Live Api Wc2026 Xg Live  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/ai-narratif/{match_id}":{"get":{"tags":["wc2026"],"summary":"Ai Narratif","description":"Génère commentaire IA personnalisé sur le pick.","operationId":"ai_narratif_api_wc2026_ai_narratif__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ai Narratif Api Wc2026 Ai Narratif  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/tipster-track-record":{"get":{"tags":["wc2026"],"summary":"Tipster Track Record","description":"Track record BetRecord avec timestamp pre-match auto.","operationId":"tipster_track_record_api_wc2026_tipster_track_record_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Tipster Track Record Api Wc2026 Tipster Track Record Get"}}}}}}},"/api/wc2026/telegram-bot-info":{"get":{"tags":["wc2026"],"summary":"Telegram Bot Info","description":"Info bot Telegram commands disponibles.","operationId":"telegram_bot_info_api_wc2026_telegram_bot_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Telegram Bot Info Api Wc2026 Telegram Bot Info Get"}}}}}}},"/api/wc2026/premium-pricing":{"get":{"tags":["wc2026"],"summary":"Premium Pricing","description":"Pricing Premium subscription Stripe.","operationId":"premium_pricing_api_wc2026_premium_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Premium Pricing Api Wc2026 Premium Pricing Get"}}}}}}},"/api/wc2026/team-analysis-bets/{match_id}":{"get":{"tags":["wc2026"],"summary":"Team Analysis Bets","description":"Propositions paris BASÉES sur analyse équipes (pas scan tous marchés).\n\nPour chaque match :\n1. Analyse contextuelle équipes (form, H2H, ELO, lambda, signaux)\n2. Identifie 5-10 facteurs déterminants\n3. Suggère paris LOGIQUES correspondants (avec cote Winamax si dispo)","operationId":"team_analysis_bets_api_wc2026_team_analysis_bets__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Team Analysis Bets Api Wc2026 Team Analysis Bets  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/match-card-full/{match_id}":{"get":{"tags":["wc2026"],"summary":"Match Card Full","description":"Fiche match COMPLÈTE v2 : pool élargi (ranked + winamax-multimarket).\n\nFiltres qualité STRICTS pour les secondaires :\n- Cote >= 1.4, <= 12\n- Proba MC >= 15%\n- Au moins 1 stat alignée (ELO/Form/λ/H2H/ML)\n- Cible 5-10 picks après dédup & sort par score qualité","operationId":"match_card_full_api_wc2026_match_card_full__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Card Full Api Wc2026 Match Card Full  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/team-scores-amd/{match_id}":{"get":{"tags":["wc2026"],"summary":"Team Scores Amd","description":"Scores Att/Mil/Déf + boost calibration pour un match WC2026.","operationId":"team_scores_amd_api_wc2026_team_scores_amd__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Team Scores Amd Api Wc2026 Team Scores Amd  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/team-scores-comparison/{match_id}":{"get":{"tags":["wc2026"],"summary":"Team Scores Comparison","description":"Comparaison Att/Mil/Déf side-by-side + impact MC.","operationId":"team_scores_comparison_api_wc2026_team_scores_comparison__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Team Scores Comparison Api Wc2026 Team Scores Comparison  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/team-amd-detail/{match_id}":{"get":{"tags":["wc2026"],"summary":"Team Amd Detail","description":"Détail complet AMD V2 : lineup top-11 par poste + xPlayer ratings + bonus.","operationId":"team_amd_detail_api_wc2026_team_amd_detail__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"home","in":"query","required":false,"schema":{"type":"string","default":"","title":"Home"}},{"name":"away","in":"query","required":false,"schema":{"type":"string","default":"","title":"Away"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Team Amd Detail Api Wc2026 Team Amd Detail  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/team-amd-compare/{match_id}":{"get":{"tags":["wc2026"],"summary":"Team Amd Compare Html","description":"UI HTML : comparaison AMD lineup côte à côte + boost.","operationId":"team_amd_compare_html_api_wc2026_team_amd_compare__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/combo-score-smart/{match_id}":{"get":{"tags":["wc2026"],"summary":"Combo Score Smart","description":"Sélectionne 9-10 scores victoire favori + 1-2 nuls filet.\nMises pondérées pour retour stable, ROI prouvé vs 1×2.\n\ntarget : 'auto' (depuis AMD favori), 'home', 'away', 'draw'","operationId":"combo_score_smart_api_wc2026_combo_score_smart__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"budget","in":"query","required":false,"schema":{"type":"number","default":10.0,"title":"Budget"}},{"name":"target","in":"query","required":false,"schema":{"type":"string","default":"auto","title":"Target"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Combo Score Smart Api Wc2026 Combo Score Smart  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/decisive-player/{match_id}":{"get":{"tags":["wc2026"],"summary":"Decisive Player","description":"Top 5 joueurs décisifs (buteur OU passeur) par équipe.\n\nFormule :\n    xG_share_player = xg_per90 / sum(xg_per90 team_top10)\n    P(buteur) = lam_team × xG_share × 1.5  (buteurs concentrent buts)\n    P(passeur) = lam_team × xA_share × 1.3\n    P(decisif) = P(buteur) + P(passeur) - P(buteur ∩ passeur)","operationId":"decisive_player_api_wc2026_decisive_player__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Decisive Player Api Wc2026 Decisive Player  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/handicap-european/{match_id}":{"get":{"tags":["wc2026"],"summary":"Handicap European","description":"Calcule handicap européen -1/-2/-3 par côté via Dixon-Coles.","operationId":"handicap_european_api_wc2026_handicap_european__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Handicap European Api Wc2026 Handicap European  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/value-bets-of-the-day":{"get":{"tags":["wc2026"],"summary":"Value Bets Of The Day","description":"Top N paris value du jour, tous matchs et marchés confondus.\n\nScan tous les matchs WC2026 upcoming → fetch match-card-full + winamax-edge-multimarket\n→ filtre EV > min_ev% + cote 1.4-12 → ranks par EV × confidence.","operationId":"value_bets_of_the_day_api_wc2026_value_bets_of_the_day_get","parameters":[{"name":"min_ev","in":"query","required":false,"schema":{"type":"number","default":5.0,"title":"Min Ev"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Value Bets Of The Day Api Wc2026 Value Bets Of The Day Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/combo-builder/{match_id}":{"get":{"tags":["wc2026"],"summary":"Combo Builder","description":"Top combos cross-marchés avec corrélation curatée.","operationId":"combo_builder_api_wc2026_combo_builder__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Combo Builder Api Wc2026 Combo Builder  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/score-mt-ft/{match_id}":{"get":{"tags":["wc2026"],"summary":"Score Mt Ft","description":"Score exact mi-temps + grille MT/FT 3×3.","operationId":"score_mt_ft_api_wc2026_score_mt_ft__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Score Mt Ft Api Wc2026 Score Mt Ft  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/team-goals-pm/{match_id}":{"get":{"tags":["wc2026"],"summary":"Team Goals Pm","description":"Plus/Moins X buts par équipe (P/M 0.5, 1.5, 2.5 home & away).","operationId":"team_goals_pm_api_wc2026_team_goals_pm__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Team Goals Pm Api Wc2026 Team Goals Pm  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/goal-difference/{match_id}":{"get":{"tags":["wc2026"],"summary":"Goal Difference","description":"Distribution des écarts de buts (1 / 2-3 / 4+).","operationId":"goal_difference_api_wc2026_goal_difference__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Goal Difference Api Wc2026 Goal Difference  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/team-stats-pm/{match_id}":{"get":{"tags":["wc2026"],"summary":"Team Stats Pm","description":"Plus/Moins corners total (proxy via lambdas × 7 = corners avg matchs intl).","operationId":"team_stats_pm_api_wc2026_team_stats_pm__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Team Stats Pm Api Wc2026 Team Stats Pm  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/draw-no-bet-asian/{match_id}":{"get":{"tags":["wc2026"],"summary":"Draw No Bet Asian","description":"Draw No Bet + Asian Handicap 0.5 / 1.0.","operationId":"draw_no_bet_asian_api_wc2026_draw_no_bet_asian__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Draw No Bet Asian Api Wc2026 Draw No Bet Asian  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/cards-prediction/{match_id}":{"get":{"tags":["wc2026"],"summary":"Cards Prediction","description":"Plus/Moins cartons jaunes total (heuristique stade + rivalité).","operationId":"cards_prediction_api_wc2026_cards_prediction__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cards Prediction Api Wc2026 Cards Prediction  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/v5-dashboard/{match_id}":{"get":{"tags":["wc2026"],"summary":"V5 Dashboard","description":"Page HTML consolidée : 11 marchés V5 + AMD + combo smart.","operationId":"v5_dashboard_api_wc2026_v5_dashboard__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/live-in-play/{match_id}":{"get":{"tags":["wc2026"],"summary":"Live In Play","description":"Probas dynamiques selon score actuel + temps écoulé.\n\nscore_h, score_a : score live actuel\nminutes_played : temps écoulé en minutes (0-90)","operationId":"live_in_play_api_wc2026_live_in_play__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"score_h","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Score H"}},{"name":"score_a","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Score A"}},{"name":"minutes_played","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Minutes Played"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Live In Play Api Wc2026 Live In Play  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/real-lineups/{match_id}":{"get":{"tags":["wc2026"],"summary":"Real Lineups","description":"Lineups RÉELS (starters confirmés ESPN) si match passé/in-play.\nSinon proxy depuis xPlayer top-11.","operationId":"real_lineups_api_wc2026_real_lineups__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Real Lineups Api Wc2026 Real Lineups  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/devig-consensus/{match_id}":{"get":{"tags":["wc2026"],"summary":"Devig Consensus","description":"Consensus multi-bookmakers devig (54 books dans odds_api_snapshots).\n\nPour chaque match, agrège :\n1. Implied = 1/cote pour chaque outcome\n2. Margin = sum(implied) - 1 (overround bookmaker)\n3. True implied = implied / (1 + margin)\n4. Consensus = moyenne pondérée par fiabilité (Pinnacle x2, autres x1)","operationId":"devig_consensus_api_wc2026_devig_consensus__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Devig Consensus Api Wc2026 Devig Consensus  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/sentiment-intl/{team}":{"get":{"tags":["wc2026"],"summary":"Sentiment Intl","description":"Score sentiment 0-100 par équipe en combinant 4 sources.","operationId":"sentiment_intl_api_wc2026_sentiment_intl__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sentiment Intl Api Wc2026 Sentiment Intl  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/roi-stats":{"get":{"tags":["wc2026"],"summary":"Roi Stats","description":"Statistiques ROI cumulatif sur paris loggés (table bets_v14_logged).","operationId":"roi_stats_api_wc2026_roi_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Roi Stats Api Wc2026 Roi Stats Get"}}}}}}},"/api/wc2026/log-bet":{"post":{"tags":["wc2026"],"summary":"Log Bet","description":"Logger un pari pris (avant settlement).","operationId":"log_bet_api_wc2026_log_bet_post","parameters":[{"name":"match_id","in":"query","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"market","in":"query","required":true,"schema":{"type":"string","title":"Market"}},{"name":"pick","in":"query","required":true,"schema":{"type":"string","title":"Pick"}},{"name":"cote","in":"query","required":true,"schema":{"type":"number","title":"Cote"}},{"name":"mise_eur","in":"query","required":true,"schema":{"type":"number","title":"Mise Eur"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","default":"manual","title":"Source"}},{"name":"home_team","in":"query","required":false,"schema":{"type":"string","default":"","title":"Home Team"}},{"name":"away_team","in":"query","required":false,"schema":{"type":"string","default":"","title":"Away Team"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Log Bet Api Wc2026 Log Bet Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/kelly-stake":{"get":{"tags":["wc2026"],"summary":"Kelly Stake","description":"Mise Kelly fractional : optimise long-terme.\n\nf = (p × cote - 1) / (cote - 1)  [Kelly full]\nf_fractional = f × fraction (1/4 Kelly = défaut conservateur)","operationId":"kelly_stake_api_wc2026_kelly_stake_get","parameters":[{"name":"cote","in":"query","required":true,"schema":{"type":"number","title":"Cote"}},{"name":"proba","in":"query","required":true,"schema":{"type":"number","title":"Proba"}},{"name":"bankroll","in":"query","required":false,"schema":{"type":"number","default":1000.0,"title":"Bankroll"}},{"name":"fraction","in":"query","required":false,"schema":{"type":"number","default":0.25,"title":"Fraction"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Kelly Stake Api Wc2026 Kelly Stake Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/hedge-calculator/{match_id}":{"get":{"tags":["wc2026"],"summary":"Hedge Calculator","description":"Suggère hedge pour couvrir un pari principal pris.\n\nprincipal_pick : 'home' / 'away' / 'draw' / 'home_dc' (1X)","operationId":"hedge_calculator_api_wc2026_hedge_calculator__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"principal_pick","in":"query","required":false,"schema":{"type":"string","default":"home","title":"Principal Pick"}},{"name":"principal_mise","in":"query","required":false,"schema":{"type":"number","default":10.0,"title":"Principal Mise"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Hedge Calculator Api Wc2026 Hedge Calculator  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/multi-parlay-high":{"get":{"tags":["wc2026"],"summary":"Multi Parlay High","description":"Construit parlay multi-matchs sur favoris AMD HIGH (boost >= min_boost%).\n\nEV combo = produit(cotes) × produit(probas) - 1","operationId":"multi_parlay_high_api_wc2026_multi_parlay_high_get","parameters":[{"name":"min_boost","in":"query","required":false,"schema":{"type":"number","default":10.0,"title":"Min Boost"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Multi Parlay High Api Wc2026 Multi Parlay High Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/pinnacle-clv-check/{match_id}":{"get":{"tags":["wc2026"],"summary":"Pinnacle Clv Check","description":"Compare nos probas MC+AMD vs Pinnacle closing (référence sharp).\n\nSi AMD boost favori >10% mais Pinnacle cote favori est COURTE → confirmé value\nSi AMD boost mais Pinnacle cote LARGE → red flag (Pinnacle a info qu'on n'a pas)","operationId":"pinnacle_clv_check_api_wc2026_pinnacle_clv_check__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Pinnacle Clv Check Api Wc2026 Pinnacle Clv Check  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/combo-score-variants/{match_id}":{"get":{"tags":["wc2026"],"summary":"Combo Score Variants","description":"3 variantes de Combo Score Smart.\n\nV2 : 6 favori + 3 nuls + 2 outsider (cover 90%+ scénarios)\nV3 : adaptive selon ΔTS\nV4 : minimax (max profit min garanti)","operationId":"combo_score_variants_api_wc2026_combo_score_variants__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"budget","in":"query","required":false,"schema":{"type":"number","default":10.0,"title":"Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Combo Score Variants Api Wc2026 Combo Score Variants  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/anti-tilt-status":{"get":{"tags":["wc2026"],"summary":"Anti Tilt Status","description":"Status anti-tilt basé sur série pertes récentes (table bets_v14_logged).","operationId":"anti_tilt_status_api_wc2026_anti_tilt_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Anti Tilt Status Api Wc2026 Anti Tilt Status Get"}}}}}}},"/api/wc2026/bankroll-summary":{"get":{"tags":["wc2026"],"summary":"Bankroll Summary","description":"Vue bankroll : initial, courant, drawdown, max growth, recommendations.","operationId":"bankroll_summary_api_wc2026_bankroll_summary_get","parameters":[{"name":"initial_bankroll","in":"query","required":false,"schema":{"type":"number","default":1000.0,"title":"Initial Bankroll"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Bankroll Summary Api Wc2026 Bankroll Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/winamax-dom-value/{match_id}":{"get":{"tags":["wc2026"],"summary":"Winamax Dom Value","description":"Retourne TOUS les paris value depuis les 49 marchés Winamax DOM.\n\nFilter category : CAT1_RESULTAT, CAT2_MITEMPS, CAT3_BUTS, CAT4_HANDICAP,\n                  CAT5_COMBOS, CAT6_BUTEURS, CAT7_DIVERS, ou 'all'.\nexclude_unknown_labels : skip option_label='?' (scrape DOM incomplete).","operationId":"winamax_dom_value_api_wc2026_winamax_dom_value__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"min_ev","in":"query","required":false,"schema":{"type":"number","default":5.0,"title":"Min Ev"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Category"}},{"name":"exclude_unknown_labels","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Exclude Unknown Labels"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Winamax Dom Value Api Wc2026 Winamax Dom Value  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/high-winrate-bets/{match_id}":{"get":{"tags":["wc2026"],"summary":"High Winrate Bets","description":"Retourne UNIQUEMENT paris à fort win rate (TIER S/A/B).\n\nTier classification :\n  S (95%+ wr) : Plus 0.5, Pas hat-trick, DC favori ÉCRASANT (ΔTS>30)\n  A (75-95%)  : DNB favori, DC favori clair (ΔTS>15), Plus 1.5 si λ>2.5\n  B (60-75%)  : 1×2 favori AMD HIGH, AH +0.5 outsider\n  C (skip)    : long shots\n\nFiltres convergence obligatoires : MC + AMD + favori clair.","operationId":"high_winrate_bets_api_wc2026_high_winrate_bets__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"min_tier","in":"query","required":false,"schema":{"type":"string","default":"B","title":"Min Tier"}},{"name":"min_ev_pct","in":"query","required":false,"schema":{"type":"number","default":-50.0,"title":"Min Ev Pct"}},{"name":"max_results","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Max Results"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response High Winrate Bets Api Wc2026 High Winrate Bets  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/scores-pack/{match_id}":{"get":{"tags":["wc2026"],"summary":"Scores Pack","description":"10 scores exacts façon MyMatch (combo cote ≈ 1×2 avec sécurité nul).","operationId":"scores_pack_api_wc2026_scores_pack__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scores Pack Api Wc2026 Scores Pack  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/client-report/{match_id}":{"get":{"tags":["wc2026"],"summary":"Client Report","description":"V25.8 — Rapport CLIENT final unifié assemblé depuis 5 sources accumulées sur 7 jours.\n\nCombine :\n- report_snapshots (analyse full enrichie quotidiennement par prefill_all_reports.py)\n- scenarios_history (timeline J-7+, J-3, J-1, H-3, H-1, live)\n- scenarios-deep V25.7 (joueurs décisifs multi-fenêtres L1/L2/L4 + career + L10)\n- scores-pack V25.4 (10 scores FT + 6 MT + H2H boost)\n- Verdict + alertes WC + Kelly fraction","operationId":"client_report_api_wc2026_client_report__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Client Report Api Wc2026 Client Report  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/btts-advanced/{match_id}":{"get":{"tags":["wc2026"],"summary":"Btts Advanced","description":"V25.17 — Prédiction BTTS avancée multi-sources blend.","operationId":"btts_advanced_api_wc2026_btts_advanced__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Btts Advanced Api Wc2026 Btts Advanced  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/safe-bet-recommendation/{match_id}":{"get":{"tags":["wc2026"],"summary":"Safe Bet Recommendation","description":"V25.26 — Recommandation combo SAFE seulement si HIGH confidence.\n\nConditions HIGH CONFIDENCE :\n- MC best ≥ 60% OU\n- Boost > 12% OU\n- ELO diff > 300 OU\n- Squad value ratio > 5×\nSinon : no_bet (skip match).","operationId":"safe_bet_recommendation_api_wc2026_safe_bet_recommendation__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Safe Bet Recommendation Api Wc2026 Safe Bet Recommendation  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/match-sequences/{match_id}":{"get":{"tags":["wc2026"],"summary":"Match Sequences","description":"V25.14 — Découpe match en 18 séquences (9 par MT × 5min) avec metrics.\n\nPour CHAQUE séquence :\n- Dominance home vs away (% possession attendu basé sur λ)\n- Frappes attendues (home/away)\n- Fautes attendues\n- Météo (impact uniforme depuis Open-Meteo si dispo)\n- Pression (croissante fin de match si score serré)\n- Intérêt du match (J1 group / finale / amical)\n- Momentum cumulé\n\nDétecte déséquilibres : 3+ séquences consécutives avec dominance > 70%","operationId":"match_sequences_api_wc2026_match_sequences__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Sequences Api Wc2026 Match Sequences  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/optimal-combos/{match_id}":{"get":{"tags":["wc2026"],"summary":"Optimal Combos","description":"V25.13 — N combos MyMatch (1 par scenario simulé).\n\nPour chaque scenario top (DOMINATION/SERREE/NUL/UPSET/etc.) :\n- Combo MyMatch cohérent : scores adaptés + MT goals + joueur décisif (buteur OU passeur)\n- Cote combinée\n- Proba conditionnelle (proba scenario × proba combo dans ce scenario)","operationId":"optimal_combos_api_wc2026_optimal_combos__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Optimal Combos Api Wc2026 Optimal Combos  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/scenarios-deep/{match_id}":{"get":{"tags":["wc2026"],"summary":"Scenarios Deep","description":"6-8 scénarios DEEP avec MT/FT scores + joueurs décisifs + bets + triggers.","operationId":"scenarios_deep_api_wc2026_scenarios_deep__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scenarios Deep Api Wc2026 Scenarios Deep  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/summary":{"get":{"tags":["wc2026"],"summary":"Summary","description":"Agrégat dashboard WC2026 : top 5 favoris + nb matchs + press — async parallel.","operationId":"summary_api_wc2026_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Summary Api Wc2026 Summary Get"}}}}}}},"/api/wc2026/client-report-extras/{match_id}":{"get":{"tags":["wc2026"],"summary":"Client Report Extras V56","description":"V25.56 — Extras helpers V25.49-V25.52 pour enrichir rapport client.\n\nRetourne bloc compact des 6 helpers les plus utiles pour visuel rapport :\nbankroll_stage, h2h_competitive_boost, h2h_total_goals_factor,\ndiversif_pct, stop_loss_check, sharpe_sample, threshold_fawcett.","operationId":"client_report_extras_v56_api_wc2026_client_report_extras__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"bankroll","in":"query","required":false,"schema":{"type":"number","default":10000.0,"title":"Bankroll"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/v105/top-scorers/{match_id}":{"get":{"tags":["wc2026"],"summary":"V105 Top Scorers","description":"V25.105+V25.108 — Top buteurs/passeurs face-à-face.\n\nsort_by : goals (default) | assists | decisive (goals+assists)","operationId":"v105_top_scorers_api_wc2026_v105_top_scorers__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"goals","title":"Sort By"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response V105 Top Scorers Api Wc2026 V105 Top Scorers  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/v74/bayesian-multi-modular/{match_id}":{"get":{"tags":["wc2026_ml_advanced"],"summary":"V74 Bayesian Multi Modular","description":"V25.74 — Modular endpoint pour BN DAG + Multi-XGB + Markov.\n\nVariante modulaire de /v72/bayesian-multi (qui reste dans wc2026.py historique).\nCette version est dans `wc2026_ml_advanced.py` pour démontrer refacto progressif.","operationId":"v74_bayesian_multi_modular_api_wc2026_v74_bayesian_multi_modular__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"use_xgb","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Use Xgb"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response V74 Bayesian Multi Modular Api Wc2026 V74 Bayesian Multi Modular  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/v74/deep-learning-modular/{match_id}":{"get":{"tags":["wc2026_ml_advanced"],"summary":"V74 Deep Learning Modular","description":"V25.74 — Modular endpoint pour DL stubs (LSTM+GNN+AE+Transformer+BERT).","operationId":"v74_deep_learning_modular_api_wc2026_v74_deep_learning_modular__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response V74 Deep Learning Modular Api Wc2026 V74 Deep Learning Modular  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/v75-78/dl-scaffolds/{match_id}":{"get":{"tags":["wc2026_dl_scaffolds"],"summary":"V75 78 Dl Scaffolds","description":"V25.75-V25.78 — Status scaffolds DL : torch/sb3/pyg/hf availability.","operationId":"v75_78_dl_scaffolds_api_wc2026_v75_78_dl_scaffolds__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response V75 78 Dl Scaffolds Api Wc2026 V75 78 Dl Scaffolds  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/health/coverage":{"get":{"tags":["wc2026_dl_scaffolds"],"summary":"V112 Health Coverage","description":"V25.112 — Audit santé EXHAUSTIF couvrant TOUS aspects projet.\n\nCouvre :\n- DBs (size + freshness)\n- Crons (count actifs + stale 24h + fail 24h)\n- Supervisor + cron_health_alerter + watchdog status\n- Anti-hallu rolling score 24h/7d\n- Models DL chargés (lstm/transformer/rl_ppo)\n- Disk + TLS cert + Memory\n- Service uvicorn uptime + restart count\n- Endpoints debug count","operationId":"v112_health_coverage_api_wc2026_health_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response V112 Health Coverage Api Wc2026 Health Coverage Get"}}}}}}},"/api/wc2026/v79/medium-cleanup-demo":{"get":{"tags":["wc2026_medium_advanced"],"summary":"V79 Medium Cleanup Demo","description":"V25.79 — Demo des 12 helpers MEDIUM cleanup catalogue.","operationId":"v79_medium_cleanup_demo_api_wc2026_v79_medium_cleanup_demo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response V79 Medium Cleanup Demo Api Wc2026 V79 Medium Cleanup Demo Get"}}}}}}},"/api/wc2026/v80-92/hard-proxies-demo":{"get":{"tags":["wc2026_hard_proxies"],"summary":"V80 92 Hard Proxies Demo","description":"V25.80-V25.92 — Demo 12 HARD proxies sans torch.","operationId":"v80_92_hard_proxies_demo_api_wc2026_v80_92_hard_proxies_demo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response V80 92 Hard Proxies Demo Api Wc2026 V80 92 Hard Proxies Demo Get"}}}}}}},"/api/wc2026/v93/final-27-demo":{"get":{"tags":["wc2026_final_27"],"summary":"V93 Final 27 Demo","description":"V25.93 — Demo des 27 derniers helpers pour atteindre 150/150 catalogue.","operationId":"v93_final_27_demo_api_wc2026_v93_final_27_demo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response V93 Final 27 Demo Api Wc2026 V93 Final 27 Demo Get"}}}}}}},"/api/wc2026/_inventory":{"get":{"tags":["wc2026_inventory"],"summary":"V139 Inventory","description":"V25.139 — Inventaire complet système ML/endpoints/modules (transparence).","operationId":"v139_inventory_api_wc2026__inventory_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response V139 Inventory Api Wc2026  Inventory Get"}}}}}}},"/api/wc2026/v53/helpers-snapshot/{match_id}":{"get":{"tags":["wc2026_endpoints_debug"],"summary":"V53 Helpers Snapshot","description":"V25.53 : Snapshot calcul tous les 41 helpers V25.49-V25.52 sur match.\n\nArgs:\n  match_id : WC2026 match_id (ex: wc26-spain-saudi)\n  bankroll : Bankroll utilisateur (€) pour helpers BK\n\nReturns:\n  JSON avec calcul de tous les helpers par catégorie.","operationId":"v53_helpers_snapshot_api_wc2026_v53_helpers_snapshot__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"bankroll","in":"query","required":false,"schema":{"type":"number","default":1000.0,"title":"Bankroll"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/v57/draws-elite/{match_id}":{"get":{"tags":["wc2026_endpoints_debug"],"summary":"V57 Draws Elite","description":"V25.57 — Compare Poisson naïf vs Skellam vs Dixon-Coles pour 1×2.\n\nSkellam corrige draws sous-estimés par Poisson indépendant.\nDixon-Coles ajoute correction τ pour scores faibles (0-0, 1-1).","operationId":"v57_draws_elite_api_wc2026_v57_draws_elite__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/v58/score-grid-deep/{match_id}":{"get":{"tags":["wc2026_endpoints_debug"],"summary":"V58 Score Grid Deep","description":"V25.58 — Grille score 36-class deep (Dixon-Coles) + RF demo + Hawkes profile.\n\nSi use_rf=True : entraîne RF sur 2000 Poisson samples (lent ~5-10s).","operationId":"v58_score_grid_deep_api_wc2026_v58_score_grid_deep__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"use_rf","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Use Rf"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/v59/ml-deep-suite/{match_id}":{"get":{"tags":["wc2026_endpoints_debug"],"summary":"V59 Ml Deep Suite","description":"V25.59 — Suite ML deep : GBDT + Bayesian + Survival + Bivariate Poisson + Quantiles + Stacking.","operationId":"v59_ml_deep_suite_api_wc2026_v59_ml_deep_suite__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"bankroll","in":"query","required":false,"schema":{"type":"number","default":1000.0,"title":"Bankroll"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/v72/bayesian-multi/{match_id}":{"get":{"tags":["wc2026_endpoints_debug"],"summary":"V72 Bayesian Multi","description":"V25.72 — BN DAG + Multi-XGB + Markov chain (use_xgb=true active XGB ~5s).","operationId":"v72_bayesian_multi_api_wc2026_v72_bayesian_multi__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"use_xgb","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Use Xgb"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/v73/deep-learning-stubs/{match_id}":{"get":{"tags":["wc2026_endpoints_debug"],"summary":"V73 Deep Learning Stubs","description":"V25.73 — Stubs Deep Learning (LSTM + GNN + Autoencoder + Transformer + BERT).","operationId":"v73_deep_learning_stubs_api_wc2026_v73_deep_learning_stubs__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/xg-live/snapshots":{"get":{"tags":["xg-live"],"summary":"Latest Snapshots","description":"Return the latest xG snapshot per live event (foot).\n\nEach snapshot includes home_xg, away_xg, home_shots, away_shots, minute,\nstatus. Sorted by fetched_at DESC.","operationId":"latest_snapshots_api_xg_live_snapshots_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"min_minute","in":"query","required":false,"schema":{"type":"integer","maximum":120,"minimum":0,"default":0,"title":"Min Minute"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Latest Snapshots Api Xg Live Snapshots Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/xg-live/event/{event_id}":{"get":{"tags":["xg-live"],"summary":"Event History","description":"Return all snapshots for one event (timeline).","operationId":"event_history_api_xg_live_event__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Event History Api Xg Live Event  Event Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tennis-pbp/live":{"get":{"tags":["tennis-pbp"],"summary":"Live Pbp","description":"Return latest pbp snapshot per live tennis match (slams/M1000).","operationId":"live_pbp_api_tennis_pbp_live_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":15,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Live Pbp Api Tennis Pbp Live Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tennis-pbp/event/{event_id}":{"get":{"tags":["tennis-pbp"],"summary":"Event History","description":"Return all pbp snapshots for one tennis match (timeline).","operationId":"event_history_api_tennis_pbp_event__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Event History Api Tennis Pbp Event  Event Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/sources/candidates":{"get":{"tags":["admin-sources"],"summary":"List Candidates","operationId":"list_candidates_api_admin_sources_candidates_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Candidates Api Admin Sources Candidates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/sources/stats":{"get":{"tags":["admin-sources"],"summary":"Stats","operationId":"stats_api_admin_sources_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stats Api Admin Sources Stats Get"}}}}}}},"/api/quant/walk-forward":{"get":{"tags":["quant-advanced"],"summary":"Walk Forward","description":"R13 — Walk-Forward backtest : split historique en fenêtres consécutives,\ncompute ROI par fenêtre pour détecter overfitting / regime change.","operationId":"walk_forward_api_quant_walk_forward_get","parameters":[{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":180,"minimum":7,"default":30,"title":"Window Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Walk Forward Api Quant Walk Forward Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/quant/performance-attribution":{"get":{"tags":["quant-advanced"],"summary":"Performance Attribution","description":"R15 — Décompose PnL total par sport, par odds-range, par type (simple/combiné).","operationId":"performance_attribution_api_quant_performance_attribution_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Performance Attribution Api Quant Performance Attribution Get"}}}}}}},"/api/quant/tail-risk":{"get":{"tags":["quant-advanced"],"summary":"Tail Risk","description":"R16 — Value-at-Risk historique + Expected Shortfall (CVaR) au percentile p.","operationId":"tail_risk_api_quant_tail_risk_get","parameters":[{"name":"percentile","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":5,"title":"Percentile"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Tail Risk Api Quant Tail Risk Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/quant/model-decay":{"get":{"tags":["quant-advanced"],"summary":"Model Decay","description":"R19 — Détecte décroissance accuracy ML prediction sur les N dernières semaines.","operationId":"model_decay_api_quant_model_decay_get","parameters":[{"name":"weeks","in":"query","required":false,"schema":{"type":"integer","maximum":26,"minimum":2,"default":8,"title":"Weeks"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Model Decay Api Quant Model Decay Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/quant/hedging":{"get":{"tags":["quant-advanced"],"summary":"Hedging","description":"R21 — Compute hedge stake pour locker un profit minimum avec cotes actuelles.","operationId":"hedging_api_quant_hedging_get","parameters":[{"name":"stake","in":"query","required":false,"schema":{"type":"number","maximum":10000,"minimum":1,"default":100,"title":"Stake"}},{"name":"current_odds","in":"query","required":false,"schema":{"type":"number","maximum":100,"minimum":1.01,"default":2.0,"title":"Current Odds"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Hedging Api Quant Hedging Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/quant-v2/granger":{"get":{"tags":["quant-v2"],"summary":"Granger Proxy","description":"R17 — Granger-style causality proxy : corrélation lagged entre volume\npress (T-lag_hours) et movement odds (T). Test simple Pearson lagged ;\nGranger F-test exact demanderait statsmodels (lib externe non installée).","operationId":"granger_proxy_api_quant_v2_granger_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"type":"string","default":"football","title":"Sport"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":180,"minimum":7,"default":30,"title":"Days"}},{"name":"lag_hours","in":"query","required":false,"schema":{"type":"integer","maximum":72,"minimum":1,"default":24,"title":"Lag Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Granger Proxy Api Quant V2 Granger Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/quant-v2/ensemble":{"get":{"tags":["quant-v2"],"summary":"Ensemble Inter Agents","description":"R18 — Combine prédictions de N sources (ML, AF predictions, tipsters consensus,\nrégression Poisson) en vote pondéré + confidence aggregate.","operationId":"ensemble_inter_agents_api_quant_v2_ensemble_get","parameters":[{"name":"match_id","in":"query","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ensemble Inter Agents Api Quant V2 Ensemble Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/photos/football/{player_id}":{"get":{"tags":["photos"],"summary":"Football Photo","operationId":"football_photo_api_photos_football__player_id__get","parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"string","title":"Player Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Football Photo Api Photos Football  Player Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/photos/rugby/{player_id}":{"get":{"tags":["photos"],"summary":"Rugby Photo","operationId":"rugby_photo_api_photos_rugby__player_id__get","parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"string","title":"Player Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rugby Photo Api Photos Rugby  Player Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/photos/tennis/{player_id}":{"get":{"tags":["photos"],"summary":"Tennis Photo","operationId":"tennis_photo_api_photos_tennis__player_id__get","parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"string","title":"Player Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Tennis Photo Api Photos Tennis  Player Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/photos/coverage":{"get":{"tags":["photos"],"summary":"Coverage Stats","description":"Statistiques de couverture photos par sport.","operationId":"coverage_stats_api_photos_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Coverage Stats Api Photos Coverage Get"}}}}}}},"/api/team-formation/{team_name}":{"get":{"tags":["team-formation"],"summary":"Get Formation","operationId":"get_formation_api_team_formation__team_name__get","parameters":[{"name":"team_name","in":"path","required":true,"schema":{"type":"string","title":"Team Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Formation Api Team Formation  Team Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/team-formation/{team_name}/svg":{"get":{"tags":["team-formation"],"summary":"Get Formation Svg","operationId":"get_formation_svg_api_team_formation__team_name__svg_get","parameters":[{"name":"team_name","in":"path","required":true,"schema":{"type":"string","title":"Team Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/official/matches":{"get":{"tags":["wc2026-official"],"summary":"All Matches","operationId":"all_matches_api_wc2026_official_matches_get","parameters":[{"name":"group","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"}},{"name":"upcoming_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Upcoming Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":300,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response All Matches Api Wc2026 Official Matches Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/official/groups":{"get":{"tags":["wc2026-official"],"summary":"Groups","operationId":"groups_api_wc2026_official_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Groups Api Wc2026 Official Groups Get"}}}}}}},"/api/wc2026/official/stadiums":{"get":{"tags":["wc2026-official"],"summary":"Stadiums","operationId":"stadiums_api_wc2026_official_stadiums_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stadiums Api Wc2026 Official Stadiums Get"}}}}}}},"/api/leagues/list":{"get":{"tags":["leagues-schedule"],"summary":"List Leagues","operationId":"list_leagues_api_leagues_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Leagues Api Leagues List Get"}}}}}}},"/api/leagues/{league_code}/matches":{"get":{"tags":["leagues-schedule"],"summary":"League Matches","operationId":"league_matches_api_leagues__league_code__matches_get","parameters":[{"name":"league_code","in":"path","required":true,"schema":{"type":"string","title":"League Code"}},{"name":"upcoming_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Upcoming Only"}},{"name":"team","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":400,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response League Matches Api Leagues  League Code  Matches Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/leagues/{league_code}/standings":{"get":{"tags":["leagues-schedule"],"summary":"Standings","description":"Computed standings from results (W/D/L + GF/GA + pts).","operationId":"standings_api_leagues__league_code__standings_get","parameters":[{"name":"league_code","in":"path","required":true,"schema":{"type":"string","title":"League Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Standings Api Leagues  League Code  Standings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/wc2026/simulator":{"get":{"tags":["wc2026-simulator"],"summary":"Simulator","description":"Monte Carlo simulator simplifié WC2026 — cache TTL 1h.","operationId":"simulator_api_wc2026_simulator_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":1000,"default":10000,"title":"N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Simulator Api Wc2026 Simulator Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calc/clv":{"get":{"tags":["betting-calculators"],"summary":"Clv Calc","description":"CLV = (closing_odds / bet_odds) - 1, en %. Positif = beat le marché.\nSource : Pinnacle Buchdahl methodology.","operationId":"clv_calc_api_calc_clv_get","parameters":[{"name":"bet_odds","in":"query","required":true,"schema":{"type":"number","minimum":1.01,"title":"Bet Odds"}},{"name":"closing_odds","in":"query","required":true,"schema":{"type":"number","minimum":1.01,"title":"Closing Odds"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Clv Calc Api Calc Clv Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calc/kelly":{"get":{"tags":["betting-calculators"],"summary":"Kelly Calc","description":"Kelly Criterion fractional. Pro standard = 0.25-0.5 (75% growth -50% volatility).\nFormula : f* = (bp - q) / b, où b = odds-1, p = prob, q = 1-p.","operationId":"kelly_calc_api_calc_kelly_get","parameters":[{"name":"prob","in":"query","required":true,"schema":{"type":"number","maximum":0.99,"minimum":0.01,"title":"Prob"}},{"name":"odds","in":"query","required":true,"schema":{"type":"number","minimum":1.01,"title":"Odds"}},{"name":"bankroll","in":"query","required":true,"schema":{"type":"number","minimum":1,"title":"Bankroll"}},{"name":"fraction","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.05,"description":"Fractional Kelly (0.25 = quarter, 1.0 = full)","default":0.25,"title":"Fraction"},"description":"Fractional Kelly (0.25 = quarter, 1.0 = full)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Kelly Calc Api Calc Kelly Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calc/arbitrage":{"get":{"tags":["betting-calculators"],"summary":"Arbitrage Calc","description":"Arbitrage detector 2-way/3-way + optimal stake distribution.\nFormula : sum(1/odds_i) < 1 = arb opportunity.","operationId":"arbitrage_calc_api_calc_arbitrage_get","parameters":[{"name":"odds","in":"query","required":true,"schema":{"type":"string","description":"Odds décimales séparées par virgule (2-3 outcomes), ex: 2.05,2.10 ou 3.5,3.6,3.4","title":"Odds"},"description":"Odds décimales séparées par virgule (2-3 outcomes), ex: 2.05,2.10 ou 3.5,3.6,3.4"},{"name":"stake_total","in":"query","required":false,"schema":{"type":"number","minimum":1,"default":100.0,"title":"Stake Total"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Arbitrage Calc Api Calc Arbitrage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calc/drawdown":{"get":{"tags":["betting-calculators"],"summary":"Drawdown Tracker","description":"Bankroll drawdown tracker : max DD, current DD, Sharpe-like ratio.","operationId":"drawdown_tracker_api_calc_drawdown_get","parameters":[{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":7,"default":90,"title":"Window Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Drawdown Tracker Api Calc Drawdown Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/leaderboard/global":{"get":{"tags":["leaderboard"],"summary":"Global Leaderboard","description":"Top users par ROI/Profit/Yield/WR sur N jours. Anonyme par défaut.","operationId":"global_leaderboard_api_leaderboard_global_get","parameters":[{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":30,"title":"Window Days"}},{"name":"min_bets","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":5,"default":10,"title":"Min Bets"}},{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(roi|profit|yield|win_rate|n_bets)$","default":"roi","title":"Sort By"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":10,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Global Leaderboard Api Leaderboard Global Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/leaderboard/streak/{user_id}":{"get":{"tags":["leaderboard"],"summary":"User Streak","description":"Win streak actif + max streak.","operationId":"user_streak_api_leaderboard_streak__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response User Streak Api Leaderboard Streak  User Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/leaderboard/sports/top":{"get":{"tags":["leaderboard"],"summary":"Top Sports","description":"Sports les plus rentables agrégés.","operationId":"top_sports_api_leaderboard_sports_top_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Top Sports Api Leaderboard Sports Top Get"}}}}}}},"/api/badges/catalog":{"get":{"tags":["badges-missions"],"summary":"Catalog","operationId":"catalog_api_badges_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Catalog Api Badges Catalog Get"}}}}}}},"/api/badges/me/{user_id}":{"get":{"tags":["badges-missions"],"summary":"My Badges","operationId":"my_badges_api_badges_me__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response My Badges Api Badges Me  User Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/missions/today/{user_id}":{"get":{"tags":["badges-missions"],"summary":"Missions Today","operationId":"missions_today_api_missions_today__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Missions Today Api Missions Today  User Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/missions/complete/{user_id}/{mission_id}":{"post":{"tags":["badges-missions"],"summary":"Complete Mission","operationId":"complete_mission_api_missions_complete__user_id___mission_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"mission_id","in":"path","required":true,"schema":{"type":"string","title":"Mission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Complete Mission Api Missions Complete  User Id   Mission Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/missions/leaderboard":{"get":{"tags":["badges-missions"],"summary":"Missions Lb","operationId":"missions_lb_api_missions_leaderboard_get","parameters":[{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":7,"title":"Window Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Missions Lb Api Missions Leaderboard Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/alerts/stream":{"get":{"tags":["alerts-sse"],"summary":"Stream","operationId":"stream_api_alerts_stream_get","parameters":[{"name":"types","in":"query","required":false,"schema":{"type":"string","default":"sharp,rlm,arb","title":"Types"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/alerts/status":{"get":{"tags":["alerts-sse"],"summary":"Sse Status","operationId":"sse_status_api_alerts_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sse Status Api Alerts Status Get"}}}}}}},"/api/xg/team/{team}":{"get":{"tags":["xg-analytics"],"summary":"Team Profile","description":"Profil xG complet — cache in-memory TTL 1h pour perf (Axe 14 fix sprint56).","operationId":"team_profile_api_xg_team__team__get","parameters":[{"name":"team","in":"path","required":true,"schema":{"type":"string","title":"Team"}},{"name":"window","in":"query","required":false,"schema":{"type":"integer","maximum":38,"minimum":3,"default":10,"title":"Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Team Profile Api Xg Team  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/xg/h2h/{home}/{away}":{"get":{"tags":["xg-analytics"],"summary":"H2H Xg","operationId":"h2h_xg_api_xg_h2h__home___away__get","parameters":[{"name":"home","in":"path","required":true,"schema":{"type":"string","title":"Home"}},{"name":"away","in":"path","required":true,"schema":{"type":"string","title":"Away"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response H2H Xg Api Xg H2H  Home   Away  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/xg/match/preview":{"get":{"tags":["xg-analytics"],"summary":"Match Preview","description":"Poisson-based 1X2 from xG aggregates (no LLM, deterministic).","operationId":"match_preview_api_xg_match_preview_get","parameters":[{"name":"home","in":"query","required":true,"schema":{"type":"string","title":"Home"}},{"name":"away","in":"query","required":true,"schema":{"type":"string","title":"Away"}},{"name":"max_goals","in":"query","required":false,"schema":{"type":"integer","maximum":8,"minimum":3,"default":5,"title":"Max Goals"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Preview Api Xg Match Preview Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/xg/league/{league}/top":{"get":{"tags":["xg-analytics"],"summary":"League Top Xg","operationId":"league_top_xg_api_xg_league__league__top_get","parameters":[{"name":"league","in":"path","required":true,"schema":{"type":"string","title":"League"}},{"name":"season","in":"query","required":false,"schema":{"type":"string","default":"2025","title":"Season"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response League Top Xg Api Xg League  League  Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/badges/progress/{user_id}":{"get":{"tags":["badges-engine"],"summary":"Progress","operationId":"progress_api_badges_progress__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Progress Api Badges Progress  User Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/badges/award/{user_id}":{"post":{"tags":["badges-engine"],"summary":"Award","operationId":"award_api_badges_award__user_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Award Api Badges Award  User Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/picks/today":{"get":{"tags":["daily-picks"],"summary":"Picks Today","operationId":"picks_today_api_picks_today_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":5,"title":"Limit"}},{"name":"min_confidence","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":0,"default":40,"title":"Min Confidence"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Picks Today Api Picks Today Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/picks/wc2026":{"get":{"tags":["daily-picks"],"summary":"Picks Wc2026","description":"Picks WC2026 — BLEND 50% Monte Carlo (Elo-based) + 50% Polymarket priors (J-3 fix sprint66).\n\nAvant : divergence avec marché (France sous-estimée à 9.9% vs marché 16.15%).\nAprès : blending corrige automatiquement vers consensus marché real-time.","operationId":"picks_wc2026_api_picks_wc2026_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Picks Wc2026 Api Picks Wc2026 Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pulse/{home}/{away}":{"get":{"tags":["match-pulse"],"summary":"Pulse","operationId":"pulse_api_pulse__home___away__get","parameters":[{"name":"home","in":"path","required":true,"schema":{"type":"string","title":"Home"}},{"name":"away","in":"path","required":true,"schema":{"type":"string","title":"Away"}},{"name":"with_h2h","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"With H2H"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Pulse Api Pulse  Home   Away  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/share/pick-card":{"get":{"tags":["share-pick"],"summary":"Share Pick Svg","operationId":"share_pick_svg_api_share_pick_card_get","parameters":[{"name":"match","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":80,"title":"Match"}},{"name":"pick","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":40,"title":"Pick"}},{"name":"odds","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{1,3}(\\.\\d{1,2})?$","title":"Odds"}},{"name":"confidence","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":0,"default":50,"title":"Confidence"}},{"name":"author","in":"query","required":false,"schema":{"type":"string","maxLength":24,"pattern":"^[a-zA-Z0-9_-]+$","default":"anonymous","title":"Author"}},{"name":"sport","in":"query","required":false,"schema":{"type":"string","maxLength":16,"pattern":"^[a-z]+$","default":"football","title":"Sport"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/share/pick-page":{"get":{"tags":["share-pick"],"summary":"Share Pick Html","operationId":"share_pick_html_api_share_pick_page_get","parameters":[{"name":"match","in":"query","required":true,"schema":{"type":"string","title":"Match"}},{"name":"pick","in":"query","required":true,"schema":{"type":"string","title":"Pick"}},{"name":"odds","in":"query","required":true,"schema":{"type":"string","title":"Odds"}},{"name":"confidence","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":0,"default":50,"title":"Confidence"}},{"name":"author","in":"query","required":false,"schema":{"type":"string","default":"anonymous","title":"Author"}},{"name":"sport","in":"query","required":false,"schema":{"type":"string","default":"football","title":"Sport"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/deep-analyst/analyze":{"post":{"tags":["deep_analyst"],"summary":"Analyze","operationId":"analyze_api_deep_analyst_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BetAnalysisRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BetAnalysisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/deep-analyst/verdict-types":{"get":{"tags":["deep_analyst"],"summary":"Verdict Types","description":"Liste des 5 verdicts possibles.","operationId":"verdict_types_api_deep_analyst_verdict_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Verdict Types Api Deep Analyst Verdict Types Get"}}}}}}},"/api/telegram/subscribe":{"post":{"tags":["telegram_optin"],"summary":"Subscribe","operationId":"subscribe_api_telegram_subscribe_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Subscribe Api Telegram Subscribe Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/telegram/unsubscribe":{"post":{"tags":["telegram_optin"],"summary":"Unsubscribe","operationId":"unsubscribe_api_telegram_unsubscribe_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Unsubscribe Api Telegram Unsubscribe Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/telegram/preferences":{"get":{"tags":["telegram_optin"],"summary":"Get Preferences","description":"Lecture preferences user — async.","operationId":"get_preferences_api_telegram_preferences_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Preferences Api Telegram Preferences Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["telegram_optin"],"summary":"Update Preferences","operationId":"update_preferences_api_telegram_preferences_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferencesUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Preferences Api Telegram Preferences Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/telegram/options":{"get":{"tags":["telegram_optin"],"summary":"List Options","operationId":"list_options_api_telegram_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Options Api Telegram Options Get"}}}}}}},"/api/arbitrage/find":{"get":{"tags":["arbitrage"],"summary":"Find Arbitrages","description":"Détecte opportunités arbitrage 1X2 fresh.","operationId":"find_arbitrages_api_arbitrage_find_get","parameters":[{"name":"min_roi_pct","in":"query","required":false,"schema":{"type":"number","maximum":50.0,"minimum":0.0,"default":0.5,"title":"Min Roi Pct"}},{"name":"max_age_h","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"default":12,"title":"Max Age H"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Find Arbitrages Api Arbitrage Find Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/arbitrage/health":{"get":{"tags":["arbitrage"],"summary":"Health","description":"Sanity check async : volume odds disponible + freshness.","operationId":"health_api_arbitrage_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Api Arbitrage Health Get"}}}}}}},"/api/tipsters/leaderboard":{"get":{"tags":["tipsters"],"summary":"Leaderboard","operationId":"leaderboard_api_tipsters_leaderboard_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard Api Tipsters Leaderboard Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tipsters/consensus":{"get":{"tags":["tipsters_leaderboard"],"summary":"Consensus","description":"Consensus tipsters pour un match (toutes sources qui ont prédit).","operationId":"consensus_api_tipsters_consensus_get","parameters":[{"name":"match_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Id"}},{"name":"home_team","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Home Team"}},{"name":"away_team","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Away Team"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Consensus Api Tipsters Consensus Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tipsters/sources":{"get":{"tags":["tipsters_leaderboard"],"summary":"List Sources","description":"Liste 20 sources tipsters actives + volume 7j (async aiosqlite).","operationId":"list_sources_api_tipsters_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Sources Api Tipsters Sources Get"}}}}}}},"/api/sports":{"get":{"tags":["sports_catalog"],"summary":"List Sports","description":"Liste les 8 sports couverts par BetRecord (cache 1h, data statique).","operationId":"list_sports_api_sports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Sports Api Sports Get"}}}}}}},"/api/sports/counts":{"get":{"tags":["sports_catalog"],"summary":"Sport Counts","description":"Counts live depuis DB (fixtures à venir) — version async aiosqlite POC.\n\nGain attendu vs sync version : ~30-40% sous charge (8 queries parallèles\nvia aiosqlite vs 8 séquentielles via sqlite3 thread-blocking).","operationId":"sport_counts_api_sports_counts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sport Counts Api Sports Counts Get"}}}}}}},"/api/system/diagnose":{"get":{"tags":["system_diagnose"],"summary":"Diagnose","description":"Diagnostic complet ops (cache 60s pour éviter spam DB).","operationId":"diagnose_api_system_diagnose_get","parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Diagnose Api System Diagnose Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/scan-summary":{"get":{"tags":["admin_scan"],"summary":"Scan Summary","description":"Scan summary léger pour scheduled jobs (cache 60s).\n\n16 dimensions essentielles condensées en 1 JSON.","operationId":"scan_summary_api_admin_scan_summary_get","parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scan Summary Api Admin Scan Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/fix-safe":{"post":{"tags":["admin_scan"],"summary":"Fix Safe","description":"Applique fixes safe : VACUUM DBs > 1GB + cleanup logs > 30j.\n\nAucune action destructive. Retourne {actions_applied: [...]}.","operationId":"fix_safe_api_admin_fix_safe_post","parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fix Safe Api Admin Fix Safe Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bet-slip/parse":{"post":{"tags":["screenshot_betslip"],"summary":"Parse Betslip","operationId":"parse_betslip_api_bet_slip_parse_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bet-slip/supported-bookmakers":{"get":{"tags":["screenshot_betslip"],"summary":"Supported Bookmakers","operationId":"supported_bookmakers_api_bet_slip_supported_bookmakers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Supported Bookmakers Api Bet Slip Supported Bookmakers Get"}}}}}}},"/api/regime/current":{"get":{"tags":["regime_detection"],"summary":"Current Regime","description":"Régime actuel + drawdown + recommendation — async.","operationId":"current_regime_api_regime_current_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Current Regime Api Regime Current Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/regime/forecast":{"get":{"tags":["regime_detection"],"summary":"Forecast Drawdown","description":"Prédiction drawdown maximum horizon N jours (VaR simplifiée) — async.","operationId":"forecast_drawdown_api_regime_forecast_get","parameters":[{"name":"horizon_days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":7,"title":"Horizon Days"}},{"name":"confidence","in":"query","required":false,"schema":{"type":"number","maximum":0.99,"minimum":0.5,"default":0.95,"title":"Confidence"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Forecast Drawdown Api Regime Forecast Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/regime/regimes":{"get":{"tags":["regime_detection"],"summary":"List Regimes","description":"Liste des régimes possibles + recos.","operationId":"list_regimes_api_regime_regimes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Regimes Api Regime Regimes Get"}}}}}}},"/api/rlm/signals":{"get":{"tags":["rlm_scoring"],"summary":"Rlm Signals","description":"Top N matches avec RLM détecté (line bouge inverse du public) — async.","operationId":"rlm_signals_api_rlm_signals_get","parameters":[{"name":"min_drift_pct","in":"query","required":false,"schema":{"type":"number","maximum":20.0,"minimum":0.5,"default":2.0,"title":"Min Drift Pct"}},{"name":"max_age_h","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"default":48,"title":"Max Age H"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rlm Signals Api Rlm Signals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rlm/explain":{"get":{"tags":["rlm_scoring"],"summary":"Explain Rlm","operationId":"explain_rlm_api_rlm_explain_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Explain Rlm Api Rlm Explain Get"}}}}}}},"/api/live/{match_id}/snapshot":{"get":{"tags":["live"],"summary":"Snapshot","operationId":"snapshot_api_live__match_id__snapshot_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Snapshot Api Live  Match Id  Snapshot Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/live/{match_id}/stream":{"get":{"tags":["live"],"summary":"Stream","description":"SSE stream — polling DB toutes les 1s.","operationId":"stream_api_live__match_id__stream_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/payments/tiers":{"get":{"tags":["payments"],"summary":"List Tiers","operationId":"list_tiers_api_payments_tiers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Tiers Api Payments Tiers Get"}}}}}}},"/api/payments/checkout":{"get":{"tags":["payments"],"summary":"Create Checkout","operationId":"create_checkout_api_payments_checkout_get","parameters":[{"name":"tier","in":"query","required":true,"schema":{"type":"string","title":"Tier"}},{"name":"user_id","in":"query","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"success_url","in":"query","required":false,"schema":{"type":"string","default":"/landing.html?status=success","title":"Success Url"}},{"name":"cancel_url","in":"query","required":false,"schema":{"type":"string","default":"/landing.html?status=cancel","title":"Cancel Url"}},{"name":"customer_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Checkout Api Payments Checkout Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/payments/webhook":{"post":{"tags":["payments"],"summary":"Webhook","operationId":"webhook_api_payments_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Webhook Api Payments Webhook Post"}}}}}}},"/api/push/subscribe":{"post":{"tags":["push"],"summary":"Subscribe","operationId":"subscribe_api_push_subscribe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Subscribe Api Push Subscribe Post"}}}}}}},"/api/push/subscriptions/count":{"get":{"tags":["push"],"summary":"Count Subscriptions","operationId":"count_subscriptions_api_push_subscriptions_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Count Subscriptions Api Push Subscriptions Count Get"}}}}}}},"/api/tipsters/register":{"post":{"tags":["tipsters"],"summary":"Register Tipster","operationId":"register_tipster_api_tipsters_register_post","parameters":[{"name":"tipster_id","in":"query","required":true,"schema":{"type":"string","title":"Tipster Id"}},{"name":"display_name","in":"query","required":true,"schema":{"type":"string","title":"Display Name"}},{"name":"bio","in":"query","required":false,"schema":{"type":"string","default":"","title":"Bio"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Register Tipster Api Tipsters Register Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tipsters/publish":{"post":{"tags":["tipsters"],"summary":"Publish Pick","operationId":"publish_pick_api_tipsters_publish_post","parameters":[{"name":"tipster_id","in":"query","required":true,"schema":{"type":"string","title":"Tipster Id"}},{"name":"match_id","in":"query","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"pick","in":"query","required":true,"schema":{"type":"string","title":"Pick"}},{"name":"p_home","in":"query","required":true,"schema":{"type":"number","title":"P Home"}},{"name":"p_draw","in":"query","required":true,"schema":{"type":"number","title":"P Draw"}},{"name":"p_away","in":"query","required":true,"schema":{"type":"number","title":"P Away"}},{"name":"stake_units","in":"query","required":false,"schema":{"type":"number","default":1.0,"title":"Stake Units"}},{"name":"reasoning","in":"query","required":false,"schema":{"type":"string","default":"","title":"Reasoning"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Publish Pick Api Tipsters Publish Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/badges/definitions":{"get":{"tags":["badges"],"summary":"Definitions","operationId":"definitions_api_badges_definitions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Definitions Api Badges Definitions Get"}}}}}}},"/api/badges/user/{user_id}":{"get":{"tags":["badges"],"summary":"User Badges","operationId":"user_badges_api_badges_user__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response User Badges Api Badges User  User Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/badges/check-eligibility/{user_id}":{"post":{"tags":["badges"],"summary":"Check","operationId":"check_api_badges_check_eligibility__user_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"season","in":"query","required":true,"schema":{"type":"string","title":"Season"}},{"name":"n_bets","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"N Bets"}},{"name":"clv_pct","in":"query","required":false,"schema":{"type":"number","default":0,"title":"Clv Pct"}},{"name":"roi_pct","in":"query","required":false,"schema":{"type":"number","default":0,"title":"Roi Pct"}},{"name":"consecutive_days_no_tilt","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Consecutive Days No Tilt"}},{"name":"reliability_200","in":"query","required":false,"schema":{"type":"number","default":1.0,"title":"Reliability 200"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Check Api Badges Check Eligibility  User Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/predict":{"post":{"tags":["b2b"],"summary":"B2B Predict","description":"Batch prediction endpoint B2B.","operationId":"b2b_predict_api_b2b_predict_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Match Ids"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response B2B Predict Api B2B Predict Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/usage":{"get":{"tags":["b2b"],"summary":"B2B Usage","operationId":"b2b_usage_api_b2b_usage_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response B2B Usage Api B2B Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/profiles/anonymized":{"get":{"tags":["b2b"],"summary":"Export Anonymized Profiles","description":"Export profils anonymisés (cible bookmaker — RGPD compliant).","operationId":"export_anonymized_profiles_api_b2b_profiles_anonymized_get","parameters":[{"name":"min_bets","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":10,"title":"Min Bets"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":100,"title":"Limit"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Export Anonymized Profiles Api B2B Profiles Anonymized Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/segments/summary":{"get":{"tags":["b2b"],"summary":"Segments Summary","description":"Distribution segments comportementaux (intelligence pour bookmaker).","operationId":"segments_summary_api_b2b_segments_summary_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Segments Summary Api B2B Segments Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/backtest/wf":{"get":{"tags":["backtest"],"summary":"Get Wf Backtest","description":"Renvoie le dernier backtest walk-forward 5 ligues × 3 saisons.","operationId":"get_wf_backtest_api_backtest_wf_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Wf Backtest Api Backtest Wf Get"}}}}}}},"/api/backtest/wf/summary":{"get":{"tags":["backtest"],"summary":"Get Wf Summary","description":"Résumé condensé : moyennes Brier + accuracy par predictor.","operationId":"get_wf_summary_api_backtest_wf_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Wf Summary Api Backtest Wf Summary Get"}}}}}}},"/api/user/calibration":{"get":{"tags":["user"],"summary":"Calibration","description":"Reliability curve à partir de bet_clv (tous bets confondus, agrégé global).","operationId":"calibration_api_user_calibration_get","parameters":[{"name":"n_bins","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":3,"default":10,"title":"N Bins"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":10,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Calibration Api User Calibration Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/cohort":{"get":{"tags":["user"],"summary":"Cohort Analytics","description":"Segmentation des bets par dimension : winrate + ROI + CLV moyen + EV moyen.","operationId":"cohort_analytics_api_user_cohort_get","parameters":[{"name":"dimension","in":"query","required":false,"schema":{"type":"string","pattern":"^(stake_bucket|day_of_week|hour|league_tier|is_weekend)$","default":"stake_bucket","title":"Dimension"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cohort Analytics Api User Cohort Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/postmatch-review":{"get":{"tags":["user"],"summary":"Postmatch Review","description":"Liste paris résolus + verdict actuel (won/lost) + stake/odds/profit.\n\nPagination via offset (évite charger 12k bets d'un coup).","operationId":"postmatch_review_api_user_postmatch_review_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Postmatch Review Api User Postmatch Review Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/matches/{match_id}/report":{"get":{"tags":["reports"],"summary":"Get Report","description":"Return the pre-match report for a given match_id in the requested tier.\nFree tier is public; pro/analyste require the right user plan.\nUse ?refresh=1 to skip cache (sprint66ter — for WC2026 enrichment validation).","operationId":"get_report_api_matches__match_id__report_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"tier","in":"query","required":false,"schema":{"type":"string","default":"basic","title":"Tier"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Refresh"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Report Api Matches  Match Id  Report Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/matches/{match_id}/sections":{"get":{"tags":["reports"],"summary":"Get Sections","description":"Return raw assembled sections dict (debug / dev).\nMulti-sport routing : tennis / rugby / basket → light dict from enriched\ntable ; football → build_sections_for_match.","operationId":"get_sections_api_matches__match_id__sections_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Sections Api Matches  Match Id  Sections Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/matches/{match_id}/refresh":{"post":{"tags":["reports"],"summary":"Refresh Match","description":"Refresh data sources for a match (odds, weather, lineups) before\nre-generating the report. Calls API-Football + open-meteo.","operationId":"refresh_match_api_matches__match_id__refresh_post","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Refresh Match Api Matches  Match Id  Refresh Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/roi":{"get":{"tags":["admin"],"summary":"Get Roi","description":"Stats ROI agrégées : hit_rate / roi_pct / total_profit sur N jours.","operationId":"get_roi_api_admin_roi_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(football|tennis|rugby|basket)$"},{"type":"null"}],"title":"Sport"}},{"name":"tier","in":"query","required":false,"schema":{"type":"string","pattern":"^(basic|pro|premium)$","default":"premium","title":"Tier"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Roi Api Admin Roi Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/risks":{"get":{"tags":["admin"],"summary":"Risks","description":"Risk alerts détectés N derniers jours par risk_monitor cron.","operationId":"risks_api_admin_risks_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":7,"title":"Days"}},{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Risks Api Admin Risks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/crons-health":{"get":{"tags":["admin"],"summary":"Crons Health","description":"Statut des crons : last check du cron_monitor + summary OK/stale/missing.","operationId":"crons_health_api_admin_crons_health_get","parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Crons Health Api Admin Crons Health Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/anti-hallu-stats":{"get":{"tags":["admin"],"summary":"Anti Hallu Stats","description":"Distribution scores anti-hallu sur N jours. KPIs pour monitoring qualité.","operationId":"anti_hallu_stats_api_admin_anti_hallu_stats_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Anti Hallu Stats Api Admin Anti Hallu Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/recommendations/recent":{"get":{"tags":["admin"],"summary":"List Recent","description":"Liste les N dernières recommandations + leur outcome si évalué.","operationId":"list_recent_api_admin_recommendations_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(football|tennis|rugby|basket)$"},{"type":"null"}],"title":"Sport"}},{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Recent Api Admin Recommendations Recent Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/cache/invalidate":{"post":{"tags":["admin","cache"],"summary":"Admin Invalidate","description":"Purge un cache (ou tous avec key='*'). Retourne nb d'entrées supprimées.","operationId":"admin_invalidate_api_admin_cache_invalidate_post","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string","description":"Nom du cache, ou '*' pour tous","title":"Key"},"description":"Nom du cache, ou '*' pour tous"},{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Invalidate Api Admin Cache Invalidate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/cache/stats":{"get":{"tags":["admin","cache"],"summary":"Admin Cache Stats","description":"Stats de tous les caches enregistrés (diagnostic).","operationId":"admin_cache_stats_api_admin_cache_stats_get","parameters":[{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Cache Stats Api Admin Cache Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/certification/patterns":{"get":{"tags":["certification"],"summary":"Get Patterns","description":"Retourne les patterns d'erreurs détectés sur N derniers jours.\n\nFiltrage optionnel par sport.","operationId":"get_patterns_api_certification_patterns_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Patterns Api Certification Patterns Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/certification/{match_id}":{"get":{"tags":["certification"],"summary":"Get Certification","description":"Retourne le résultat de certification post-match (404 si absent).","operationId":"get_certification_api_certification__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Certification Api Certification  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/recertify/{match_id}":{"post":{"tags":["admin","certification"],"summary":"Admin Recertify","description":"Re-certifie un match (forçant une nouvelle exécution + UPSERT).","operationId":"admin_recertify_api_admin_recertify__match_id__post","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"sport","in":"query","required":false,"schema":{"type":"string","default":"football","title":"Sport"}},{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Recertify Api Admin Recertify  Match Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/archetypes":{"get":{"tags":["archetypes"],"summary":"List Archetypes","description":"Liste catalog 28 archetypes. Filtre par category.","operationId":"list_archetypes_api_archetypes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(winner|loser|neutral)$"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Archetypes Api Archetypes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/archetypes/{code}":{"get":{"tags":["archetypes"],"summary":"Get Archetype","description":"Détail d'un archetype par code (ex: loss_chaser, sniper, distributeur).","operationId":"get_archetype_api_archetypes__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Archetype Api Archetypes  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/archetypes/classify":{"post":{"tags":["archetypes"],"summary":"Classify","description":"Classifie user via metrics → top 3 archetypes match.\n\nBody example :\n```\n{\n  \"n_picks_per_week\": 10, \"avg_odds\": 2.5, \"win_rate\": 0.55,\n  \"roi_90d\": 0.05, \"n_books_used\": 5, \"stake_cv\": 0.30,\n  \"stake_increase_after_loss_ratio\": 1.0,\n  \"drawdown_max\": 0.12, \"avg_stake_eur\": 50\n}\n```","operationId":"classify_api_archetypes_classify_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Metrics"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Classify Api Archetypes Classify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/v1/me":{"get":{"tags":["b2b"],"summary":"Me","description":"Info clé + usage. Tier+limites+requests this month+breakdown endpoints.","operationId":"me_api_b2b_v1_me_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Me Api B2B V1 Me Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/v1/match/{match_id}/full":{"get":{"tags":["b2b"],"summary":"Match Full","description":"Rapport pré-match complet : sections + ML predictions.","operationId":"match_full_api_b2b_v1_match__match_id__full_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Full Api B2B V1 Match  Match Id  Full Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/v1/recommendations/upcoming":{"get":{"tags":["b2b"],"summary":"Recommendations Upcoming","description":"Liste recommendations Premium en cours (status pending).","operationId":"recommendations_upcoming_api_b2b_v1_recommendations_upcoming_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Recommendations Upcoming Api B2B V1 Recommendations Upcoming Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/v1/odds/{match_id}":{"get":{"tags":["b2b"],"summary":"Odds Compare","description":"Cross-check 24 books pour un match (best/avg/min/max par outcome).","operationId":"odds_compare_api_b2b_v1_odds__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Odds Compare Api B2B V1 Odds  Match Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analyse/full":{"get":{"tags":["analyse"],"summary":"Analyse Full","description":"Analyse complète : 5 super-agents + scenarios + coverage + narratif.","operationId":"analyse_full_api_analyse_full_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Limite nombre de paris","title":"Limit"},"description":"Limite nombre de paris"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analyse Full Api Analyse Full Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analyse/behavior":{"get":{"tags":["analyse"],"summary":"Analyse Behavior","operationId":"analyse_behavior_api_analyse_behavior_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Analyse Behavior Api Analyse Behavior Get"}}}}}}},"/api/analyse/strategy":{"get":{"tags":["analyse"],"summary":"Analyse Strategy","operationId":"analyse_strategy_api_analyse_strategy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Analyse Strategy Api Analyse Strategy Get"}}}}}}},"/api/analyse/scenarios":{"get":{"tags":["analyse"],"summary":"Analyse Scenarios","operationId":"analyse_scenarios_api_analyse_scenarios_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Analyse Scenarios Api Analyse Scenarios Get"}}}}}}},"/api/analyse/coverage":{"get":{"tags":["analyse"],"summary":"Analyse Coverage","operationId":"analyse_coverage_api_analyse_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Analyse Coverage Api Analyse Coverage Get"}}}}}}},"/api/analyse/rag_query":{"post":{"tags":["analyse"],"summary":"Analyse Rag Query","description":"Recherche semantic sur corpus 62k matchs DIM 384.","operationId":"analyse_rag_query_api_analyse_rag_query_post","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","description":"Texte à embedder","title":"Query"},"description":"Texte à embedder"},{"name":"top_k","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Top K"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analyse Rag Query Api Analyse Rag Query Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analyse/heatmap":{"get":{"tags":["analyse_simple"],"summary":"Analyse Heatmap","description":"Heatmap jour × heure : ROI + volume par cellule.","operationId":"analyse_heatmap_api_analyse_heatmap_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Analyse Heatmap Api Analyse Heatmap Get"}}}}}}},"/api/analyse/sankey":{"get":{"tags":["analyse_simple"],"summary":"Analyse Sankey","description":"Sankey flow : total mise → wins/losses par catégorie.","operationId":"analyse_sankey_api_analyse_sankey_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Analyse Sankey Api Analyse Sankey Get"}}}}}}},"/api/analyse/cohort":{"get":{"tags":["analyse_simple"],"summary":"Analyse Cohort","description":"Benchmarking cohorte — percentile vs parieurs similaires.","operationId":"analyse_cohort_api_analyse_cohort_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Analyse Cohort Api Analyse Cohort Get"}}}}}}},"/api/analyse/insights":{"get":{"tags":["analyse_simple"],"summary":"Analyse Insights","description":"Top 5 insights comportementaux (depuis behavior_insights table).","operationId":"analyse_insights_api_analyse_insights_get","parameters":[{"name":"user","in":"query","required":false,"schema":{"type":"string","default":"default_user","title":"User"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analyse Insights Api Analyse Insights Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analyse/simple":{"get":{"tags":["analyse_simple"],"summary":"Analyse Simple","description":"Vue client vulgarisée — pas de jargon, storytelling.","operationId":"analyse_simple_api_analyse_simple_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Analyse Simple Api Analyse Simple Get"}}}}}}},"/api/analyse/ultra":{"get":{"tags":["analyse_ultra"],"summary":"Analyse Ultra","description":"Analyse ultra : étend /api/analyse/full avec corpus enrichi 12.5M.","operationId":"analyse_ultra_api_analyse_ultra_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"abs_clv","title":"Sort"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analyse Ultra Api Analyse Ultra Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analyse/ultra/coverage":{"get":{"tags":["analyse_ultra"],"summary":"Coverage Only","operationId":"coverage_only_api_analyse_ultra_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Coverage Only Api Analyse Ultra Coverage Get"}}}}}}},"/api/analyse/ultra/refresh":{"post":{"tags":["analyse_ultra"],"summary":"Refresh","description":"Trigger re-link + rebuild bet_enriched (sync).","operationId":"refresh_api_analyse_ultra_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Refresh Api Analyse Ultra Refresh Post"}}}}}}},"/api/bets/ingest":{"post":{"tags":["ingest"],"summary":"Ingest","operationId":"ingest_api_bets_ingest_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ingest Api Bets Ingest Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/ingest/stats":{"get":{"tags":["ingest"],"summary":"Ingest Stats","operationId":"ingest_stats_api_bets_ingest_stats_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ingest Stats Api Bets Ingest Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/ingest/latest":{"get":{"tags":["ingest"],"summary":"Ingest Latest","description":"Preview des N dernières captures (pour debug extension).","operationId":"ingest_latest_api_bets_ingest_latest_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ingest Latest Api Bets Ingest Latest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/ingest/normalize":{"post":{"tags":["ingest"],"summary":"Ingest Normalize","description":"Déclenche normalisation EN ARRIÈRE-PLAN (non-bloquant).\n\nStatus visible via GET /api/bets/ingest/normalize/status.","operationId":"ingest_normalize_api_bets_ingest_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ingest Normalize Api Bets Ingest Normalize Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/ingest/normalize/status":{"get":{"tags":["ingest"],"summary":"Normalize Status","operationId":"normalize_status_api_bets_ingest_normalize_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Normalize Status Api Bets Ingest Normalize Status Get"}}}}}}},"/api/bets/value-opportunities":{"get":{"tags":["ingest"],"summary":"Value Opportunities","description":"Scanne tous les matchs à venir et retourne les VALUE picks :\npositions où P(modèle Poisson) > P(cote fair market) de min_edge_pct.\n\nRetourne value pour 1N2 + Over/Under 2.5 + top-3 scores exacts.","operationId":"value_opportunities_api_bets_value_opportunities_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"min_edge_pct","in":"query","required":false,"schema":{"type":"number","default":5.0,"title":"Min Edge Pct"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Value Opportunities Api Bets Value Opportunities Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/retrospective":{"get":{"tags":["ingest"],"summary":"Retrospective Analysis","description":"Analyse rétrospective : applique le modèle Poisson sur les paris terminés\npour comparer ROI réel vs ROI théorique du modèle.","operationId":"retrospective_analysis_api_bets_retrospective_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Retrospective Analysis Api Bets Retrospective Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/upcoming-matches":{"get":{"tags":["ingest"],"summary":"Upcoming Matches","description":"Liste les matchs à venir (sans auth, public read).\nDefault : 10 jours (J-10 horizon), 2000 max, tous matchs.\nSet require_odds=true pour ne montrer que matchs cotés.","operationId":"upcoming_matches_api_bets_upcoming_matches_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Days"}},{"name":"league","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"League"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":2000,"title":"Limit"}},{"name":"require_odds","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Require Odds"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upcoming Matches Api Bets Upcoming Matches Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/upcoming-multisport":{"get":{"tags":["ingest"],"summary":"Upcoming Multisport","description":"Liste matchs upcoming par sport (tennis/rugby/basket).\n\nSi sport=None, retourne tous les sports concaténés.","operationId":"upcoming_multisport_api_bets_upcoming_multisport_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upcoming Multisport Api Bets Upcoming Multisport Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/match-scores/{match_ctx_id}":{"get":{"tags":["ingest"],"summary":"Match Score Distribution","description":"Distribution Poisson + top-10 scores + comparaison cotes Bet365 si dispo.\nmatch_ctx_id = ex 'af_1234567'.","operationId":"match_score_distribution_api_bets_match_scores__match_ctx_id__get","parameters":[{"name":"match_ctx_id","in":"path","required":true,"schema":{"type":"string","title":"Match Ctx Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Score Distribution Api Bets Match Scores  Match Ctx Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/live-analysis/{bet_id}":{"get":{"tags":["ingest"],"summary":"Live Analysis","description":"Niveau 3 analyse : cross-check chaque sélection avec match_contexts.db\n+ correction overround Winamax pour remonter la proba combinée vers la\nproba de marché équitable.","operationId":"live_analysis_api_bets_live_analysis__bet_id__get","parameters":[{"name":"bet_id","in":"path","required":true,"schema":{"type":"string","title":"Bet Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Live Analysis Api Bets Live Analysis  Bet Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/live":{"get":{"tags":["ingest"],"summary":"Live Bets","description":"Liste les paris pending avec raw_text pour analyse côté front.","operationId":"live_bets_api_bets_live_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Live Bets Api Bets Live Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/pending-count":{"get":{"tags":["ingest"],"summary":"Pending Count","description":"Compte les paris en cours (status='pending').","operationId":"pending_count_api_bets_pending_count_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Pending Count Api Bets Pending Count Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bets/known-refs":{"get":{"tags":["ingest"],"summary":"Known Refs","description":"Liste les bet_refs déjà en _bi_pkg().DB pour un user — pour stop incrémental côté extension.\nFormat bet_id : \"WNX-{ref}\" (nouveau) OU \"WNX-DOM-{hash}\" (legacy).\nRetourne uniquement les refs au format WNX-{ref}.","operationId":"known_refs_api_bets_known_refs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Known Refs Api Bets Known Refs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clv/realtime":{"post":{"tags":["clv_realtime"],"summary":"Clv Realtime","description":"Calcul CLV temps-réel pour un pari sur le point d'être placé.","operationId":"clv_realtime_api_clv_realtime_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClvRealtimeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Clv Realtime Api Clv Realtime Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/peer/benchmark":{"get":{"tags":["peer_benchmark"],"summary":"Peer Benchmark","description":"Calcule percentile rank d'un user vs ses pairs anonymisés.","operationId":"peer_benchmark_api_peer_benchmark_get","parameters":[{"name":"user_id","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100,"title":"User Id"}},{"name":"metric","in":"query","required":false,"schema":{"type":"string","default":"roi","title":"Metric"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Peer Benchmark Api Peer Benchmark Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/{user_id}/export":{"get":{"tags":["gdpr"],"summary":"Export User Data","description":"Export complet GDPR pour un user.","operationId":"export_user_data_api_user__user_id__export_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|csv)$","default":"json","title":"Format"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/{user_id}/data":{"delete":{"tags":["gdpr"],"summary":"Delete User Data","description":"Soft-delete : tag user comme deleted, anonymise email/nom.\n\nGarde les stats agrégées anonymisées (pas de DROP des bets, juste\ndéliage user_token → 'deleted_<hash>').","operationId":"delete_user_data_api_user__user_id__data_delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete User Data Api User  User Id  Data Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/prebet/warnings":{"post":{"tags":["prebet_warnings"],"summary":"Prebet Warnings","description":"Endpoint principal : warnings \"ce pari ressemble à X perdants\".","operationId":"prebet_warnings_api_prebet_warnings_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrebetWarningRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Prebet Warnings Api Prebet Warnings Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/simulate":{"post":{"tags":["scenario"],"summary":"Simulate","description":"Calcule les nouvelles probas ajustées et l'edge implicite vs odds.","operationId":"simulate_api_simulate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Simulate Api Simulate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","description":"Health check léger (uptime monitoring).","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/health/live":{"get":{"summary":"Health Live","description":"K8s/Docker liveness probe — process alive, return 200 if running.","operationId":"health_live_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Live Health Live Get"}}}}}}},"/health/ready":{"get":{"summary":"Health Ready","description":"K8s/Docker readiness probe — ready to serve traffic (DB accessible).","operationId":"health_ready_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Ready Health Ready Get"}}}}}}},"/health/full":{"get":{"summary":"Health Full","description":"Health check détaillé : DB connectivity + counts + crons.","operationId":"health_full_health_full_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Full Health Full Get"}}}}}}}},"components":{"schemas":{"BayesianKellyRequest":{"properties":{"wins":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Wins"},"losses":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Losses"},"odds":{"type":"number","maximum":1000.0,"exclusiveMinimum":1.01,"title":"Odds"},"quantile":{"type":"number","exclusiveMaximum":1.0,"exclusiveMinimum":0.0,"title":"Quantile","default":0.25},"bankroll":{"type":"number","exclusiveMinimum":0.0,"title":"Bankroll","default":1000.0},"fractional":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Fractional","default":0.25}},"type":"object","required":["wins","losses","odds"],"title":"BayesianKellyRequest"},"BetAnalysisRequest":{"properties":{"match_id":{"type":"string","maxLength":100,"title":"Match Id"},"user_odds":{"type":"number","exclusiveMaximum":1000.0,"exclusiveMinimum":1.0,"title":"User Odds"},"pick":{"type":"string","enum":["home","draw","away","1","X","2"],"title":"Pick"},"stake":{"type":"number","exclusiveMinimum":0.0,"title":"Stake","default":10.0},"result":{"type":"string","enum":["won","lost","void"],"title":"Result","default":"lost"},"generate_narrative":{"type":"boolean","title":"Generate Narrative","description":"Si True, appelle LLM","default":false}},"type":"object","required":["match_id","user_odds","pick"],"title":"BetAnalysisRequest"},"BetAnalysisResponse":{"properties":{"verdict":{"type":"string","enum":["MALCHANCE","RISQUE_ASSUMÉ","MAUVAIS_CHOIX","COUVERTURE_RATÉE","FACTEUR_EXTERNE","ANALYSE_INSUFFISANTE"],"title":"Verdict"},"verdict_label":{"type":"string","title":"Verdict Label"},"confidence":{"type":"number","title":"Confidence"},"explanation":{"type":"string","title":"Explanation"},"fair_prob":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fair Prob"},"closing_drift_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Closing Drift Pct"},"factors_detected":{"items":{"type":"string"},"type":"array","title":"Factors Detected"},"recommendation":{"type":"string","title":"Recommendation"},"narrative":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Narrative"}},"type":"object","required":["verdict","verdict_label","confidence","explanation","fair_prob","closing_drift_pct","factors_detected","recommendation"],"title":"BetAnalysisResponse"},"CapperRegisterRequest":{"properties":{"capper_id":{"type":"string","pattern":"^[a-z0-9_-]{3,40}$","title":"Capper Id"},"name":{"type":"string","maxLength":80,"title":"Name"},"bio":{"type":"string","maxLength":500,"title":"Bio","default":""},"sports":{"type":"string","maxLength":200,"title":"Sports","default":"football"},"price_pick_cents":{"type":"integer","maximum":9999.0,"minimum":99.0,"title":"Price Pick Cents","default":199}},"type":"object","required":["capper_id","name"],"title":"CapperRegisterRequest"},"ChatAskRequest":{"properties":{"question":{"type":"string","maxLength":500,"minLength":3,"title":"Question"},"sport":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Sport"},"match_id":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Match Id"},"lang":{"type":"string","maxLength":5,"title":"Lang","default":"fr"}},"type":"object","required":["question"],"title":"ChatAskRequest"},"ChatAskResponse":{"properties":{"answer":{"type":"string","title":"Answer"},"sources":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sources"},"model":{"type":"string","title":"Model"},"tokens_in":{"type":"integer","title":"Tokens In","default":0},"tokens_out":{"type":"integer","title":"Tokens Out","default":0},"cached":{"type":"boolean","title":"Cached","default":false}},"type":"object","required":["answer","sources","model"],"title":"ChatAskResponse"},"ClvRealtimeRequest":{"properties":{"match_id":{"type":"string","maxLength":200,"minLength":1,"title":"Match Id"},"sport":{"type":"string","maxLength":50,"minLength":1,"title":"Sport"},"market":{"type":"string","maxLength":50,"minLength":1,"title":"Market"},"side":{"type":"string","maxLength":20,"minLength":1,"title":"Side"},"taken_odds":{"type":"number","maximum":1000.0,"minimum":1.01,"title":"Taken Odds"},"taken_at_iso":{"type":"string","maxLength":40,"minLength":8,"title":"Taken At Iso"}},"type":"object","required":["match_id","sport","market","side","taken_odds","taken_at_iso"],"title":"ClvRealtimeRequest"},"EVQuickRequest":{"properties":{"odds_home":{"type":"number","exclusiveMaximum":1000.0,"exclusiveMinimum":1.0,"title":"Odds Home"},"odds_draw":{"type":"number","exclusiveMaximum":1000.0,"exclusiveMinimum":1.0,"title":"Odds Draw"},"odds_away":{"type":"number","exclusiveMaximum":1000.0,"exclusiveMinimum":1.0,"title":"Odds Away"},"user_odds":{"type":"number","exclusiveMaximum":1000.0,"exclusiveMinimum":1.0,"title":"User Odds"},"pick":{"type":"string","enum":["home","draw","away"],"title":"Pick"},"stake":{"type":"number","exclusiveMinimum":0.0,"title":"Stake","default":10.0},"method":{"type":"string","enum":["multiplicative","shin","power","logodds"],"title":"Method","default":"multiplicative"}},"type":"object","required":["odds_home","odds_draw","odds_away","user_odds","pick"],"title":"EVQuickRequest"},"EVQuickResponse":{"properties":{"fair_prob":{"type":"number","title":"Fair Prob"},"fair_odds":{"type":"number","title":"Fair Odds"},"edge_pct":{"type":"number","title":"Edge Pct"},"ev_value":{"type":"number","title":"Ev Value"},"ev_per_unit":{"type":"number","title":"Ev Per Unit"},"verdict":{"type":"string","enum":["+EV","-EV","neutral"],"title":"Verdict"},"method":{"type":"string","title":"Method"},"overround_pct":{"type":"number","title":"Overround Pct"},"kelly_fraction":{"type":"number","title":"Kelly Fraction"}},"type":"object","required":["fair_prob","fair_odds","edge_pct","ev_value","ev_per_unit","verdict","method","overround_pct","kelly_fraction"],"title":"EVQuickResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HawkesGoalsRequest":{"properties":{"minute":{"type":"integer","maximum":120.0,"minimum":0.0,"title":"Minute"},"home_score":{"type":"integer","maximum":20.0,"minimum":0.0,"title":"Home Score"},"away_score":{"type":"integer","maximum":20.0,"minimum":0.0,"title":"Away Score"},"home_xg_avg":{"type":"number","maximum":5.0,"minimum":0.0,"title":"Home Xg Avg","default":1.5},"away_xg_avg":{"type":"number","maximum":5.0,"minimum":0.0,"title":"Away Xg Avg","default":1.5},"mu_baseline":{"type":"number","maximum":0.5,"minimum":0.0,"title":"Mu Baseline","default":0.025},"alpha_excitation":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Alpha Excitation","default":0.3},"beta_decay":{"type":"number","maximum":1.0,"minimum":0.01,"title":"Beta Decay","default":0.05}},"type":"object","required":["minute","home_score","away_score"],"title":"HawkesGoalsRequest"},"MatchFeaturesRequest":{"properties":{"home_xg_avg":{"type":"number","maximum":5.0,"minimum":0.0,"title":"Home Xg Avg"},"away_xg_avg":{"type":"number","maximum":5.0,"minimum":0.0,"title":"Away Xg Avg"},"home_form_pts_last5":{"type":"number","maximum":15.0,"minimum":0.0,"title":"Home Form Pts Last5"},"away_form_pts_last5":{"type":"number","maximum":15.0,"minimum":0.0,"title":"Away Form Pts Last5"},"home_rank":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Home Rank"},"away_rank":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Away Rank"},"h2h_home_wins_last10":{"type":"integer","maximum":10.0,"minimum":0.0,"title":"H2H Home Wins Last10","default":0},"h2h_away_wins_last10":{"type":"integer","maximum":10.0,"minimum":0.0,"title":"H2H Away Wins Last10","default":0},"days_rest_home":{"type":"integer","maximum":60.0,"minimum":0.0,"title":"Days Rest Home","default":7},"days_rest_away":{"type":"integer","maximum":60.0,"minimum":0.0,"title":"Days Rest Away","default":7}},"type":"object","required":["home_xg_avg","away_xg_avg","home_form_pts_last5","away_form_pts_last5","home_rank","away_rank"],"title":"MatchFeaturesRequest"},"OnboardRequest":{"properties":{"email":{"type":"string","maxLength":200,"title":"Email"},"name":{"type":"string","maxLength":80,"title":"Name"},"token":{"type":"string","maxLength":80,"minLength":10,"title":"Token"},"plan":{"type":"string","maxLength":24,"title":"Plan","default":"beta"}},"type":"object","required":["email","name","token"],"title":"OnboardRequest"},"ParseRequest":{"properties":{"image_base64":{"type":"string","maxLength":8000000,"title":"Image Base64","description":"Screenshot bet slip base64"},"image_mime":{"type":"string","enum":["image/png","image/jpeg","image/webp"],"title":"Image Mime","default":"image/png"},"expected_sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Sport"}},"type":"object","required":["image_base64"],"title":"ParseRequest"},"ParseResponse":{"properties":{"parsed":{"$ref":"#/components/schemas/ParsedBet"},"raw_text":{"type":"string","title":"Raw Text"},"model":{"type":"string","title":"Model"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["parsed","raw_text","model"],"title":"ParseResponse"},"ParsedBet":{"properties":{"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"},"league":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"League"},"home_team":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Home Team"},"away_team":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Away Team"},"market":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market"},"pick":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pick"},"odds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Odds"},"stake":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stake"},"bookmaker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bookmaker"},"confidence":{"type":"number","title":"Confidence"}},"type":"object","required":["sport","league","home_team","away_team","market","pick","odds","stake","bookmaker","confidence"],"title":"ParsedBet"},"PreBetRequest":{"properties":{"odds":{"type":"number","maximum":1000.0,"minimum":1.0,"title":"Odds"},"stake":{"type":"number","maximum":10000.0,"minimum":0.1,"title":"Stake"},"sport":{"type":"string","title":"Sport","default":"football"},"bet_type":{"type":"string","title":"Bet Type","default":"simple"},"selection":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selection"},"user_token":{"type":"string","title":"User Token","default":"default_user"}},"type":"object","required":["odds","stake"],"title":"PreBetRequest"},"PrebetWarningRequest":{"properties":{"match_id":{"type":"string","maxLength":64,"minLength":1,"title":"Match Id"},"sport":{"type":"string","maxLength":32,"minLength":1,"title":"Sport"},"market":{"type":"string","maxLength":32,"minLength":1,"title":"Market"},"odds":{"type":"number","maximum":1000.0,"exclusiveMinimum":1.0,"title":"Odds"},"user_id":{"type":"string","maxLength":64,"minLength":1,"title":"User Id"}},"type":"object","required":["match_id","sport","market","odds","user_id"],"title":"PrebetWarningRequest"},"PreferencesUpdateRequest":{"properties":{"sports":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sports"},"alert_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Alert Types"},"min_edge_pct":{"anyOf":[{"type":"number","maximum":50.0,"minimum":0.0},{"type":"null"}],"title":"Min Edge Pct"},"pause":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pause"}},"type":"object","title":"PreferencesUpdateRequest"},"RegisterRequest":{"properties":{"email":{"type":"string","maxLength":200,"title":"Email"}},"type":"object","required":["email"],"title":"RegisterRequest"},"SimulateRequest":{"properties":{"baseline_proba_home":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Baseline Proba Home"},"baseline_proba_draw":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Baseline Proba Draw"},"baseline_proba_away":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Baseline Proba Away"},"odds_home":{"type":"number","maximum":1000.0,"exclusiveMinimum":1.0,"title":"Odds Home"},"player_out_impact_pct":{"type":"number","maximum":30.0,"minimum":0.0,"title":"Player Out Impact Pct","default":0.0},"weather_wind_kmh":{"type":"number","maximum":200.0,"minimum":0.0,"title":"Weather Wind Kmh","default":0.0},"ref_cards_per_match":{"type":"number","maximum":10.0,"minimum":0.0,"title":"Ref Cards Per Match","default":0.0}},"type":"object","required":["baseline_proba_home","baseline_proba_draw","baseline_proba_away","odds_home"],"title":"SimulateRequest"},"SubscribeRequest":{"properties":{"chat_id":{"type":"string","maxLength":50,"title":"Chat Id","description":"Telegram chat ID (numérique)"},"sports":{"items":{"type":"string"},"type":"array","title":"Sports"},"alert_types":{"items":{"type":"string"},"type":"array","title":"Alert Types"},"min_edge_pct":{"type":"number","maximum":50.0,"minimum":0.0,"title":"Min Edge Pct","default":3.0}},"type":"object","required":["chat_id"],"title":"SubscribeRequest"},"SupabaseAuthRequest":{"properties":{"email":{"type":"string","maxLength":200,"title":"Email"},"password":{"type":"string","maxLength":200,"minLength":6,"title":"Password"},"plan":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Plan"}},"type":"object","required":["email","password"],"title":"SupabaseAuthRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WalkForwardRequest":{"properties":{"returns":{"items":{"type":"number"},"type":"array","maxItems":10000,"minItems":30,"title":"Returns"},"n_bootstrap":{"type":"integer","maximum":10000.0,"minimum":100.0,"title":"N Bootstrap","default":1000},"block_size":{"type":"integer","maximum":100.0,"minimum":5.0,"title":"Block Size","default":20},"benchmark_sharpe":{"type":"number","minimum":0.0,"title":"Benchmark Sharpe","default":1.0}},"type":"object","required":["returns"],"title":"WalkForwardRequest"}}}}