{"openapi":"3.1.0","info":{"title":"Signal Hub","description":"Zentraler Trading-Signal-Hub fuer Telegram-Tools","version":"1.0.0"},"paths":{"/api/v1/health":{"get":{"summary":"Health","operationId":"health_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/dashboard/stats":{"get":{"tags":["dashboard"],"summary":"Dashboard Stats","operationId":"dashboard_stats_api_v1_dashboard_stats_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":3650,"minimum":1},{"type":"null"}],"description":"Zeitfenster in Tagen; leer = gesamt","title":"Days"},"description":"Zeitfenster in Tagen; leer = gesamt"},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/customers":{"get":{"tags":["dashboard"],"summary":"List Customers","description":"Pro Customer-Bot (eindeutige _client_id) eine Auswertung.\nInklusive: Top 3 Provider die der Customer konsumiert.","operationId":"list_customers_api_v1_dashboard_customers_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":3650,"minimum":1},{"type":"null"}],"description":"Zeitfenster in Tagen; leer = gesamt","title":"Days"},"description":"Zeitfenster in Tagen; leer = gesamt"},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/matrix":{"get":{"tags":["dashboard"],"summary":"Customer Provider Matrix","description":"Customer × Provider Cross-Tab mit Win-Rate-Heatmap.\n\nReturns:\n  - customers: Top-N nach Total-Signalen\n  - providers: Top-N nach Total-Signalen\n  - cells: 2D-Array [customer_idx][provider_idx] mit cell-Daten oder null\n  - top_combos: Top-5 Customer×Provider Kombis nach Volume+WinRate","operationId":"customer_provider_matrix_api_v1_dashboard_matrix_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"max_customers","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":15,"title":"Max Customers"}},{"name":"max_providers","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Max Providers"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/timeseries":{"get":{"tags":["dashboard"],"summary":"Timeseries","description":"Taegliche Zeitreihen: Signal-Volume, Win/Loss, Cumulative Pips.","operationId":"timeseries_api_v1_dashboard_timeseries_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/leaderboard":{"get":{"tags":["dashboard"],"summary":"Leaderboard","description":"Top + Worst Customer und Provider nach Volume / Pips / Win-Rate.","operationId":"leaderboard_api_v1_dashboard_leaderboard_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":5,"title":"Limit"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/signals/ingest":{"post":{"tags":["ingest"],"summary":"Ingest Signal","operationId":"ingest_signal_api_v1_signals_ingest_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/signals/{signal_id}/events":{"post":{"tags":["ingest"],"summary":"Add Event","operationId":"add_event_api_v1_signals__signal_id__events_post","parameters":[{"name":"signal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Signal Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["signals"],"summary":"Get Signal Events","operationId":"get_signal_events_api_v1_signals__signal_id__events_get","parameters":[{"name":"signal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Signal Id"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SignalEventOut"},"title":"Response Get Signal Events Api V1 Signals  Signal Id  Events Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/signals":{"get":{"tags":["signals"],"summary":"List Signals","operationId":"list_signals_api_v1_signals_get","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbol"}},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direction"}},{"name":"source_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/signals/poll":{"get":{"tags":["signals"],"summary":"Poll Signals","operationId":"poll_signals_api_v1_signals_poll_get","parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PollResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/signals/{signal_id}":{"get":{"tags":["signals"],"summary":"Get Signal","operationId":"get_signal_api_v1_signals__signal_id__get","parameters":[{"name":"signal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Signal Id"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalDetailOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sources":{"get":{"tags":["sources"],"summary":"List Sources","operationId":"list_sources_api_v1_sources_get","parameters":[{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SourceOut"},"title":"Response List Sources Api V1 Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["sources"],"summary":"Create Source","operationId":"create_source_api_v1_sources_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sources/{source_id}":{"get":{"tags":["sources"],"summary":"Get Source","operationId":"get_source_api_v1_sources__source_id__get","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Source Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["sources"],"summary":"Update Source","operationId":"update_source_api_v1_sources__source_id__patch","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Source Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["sources"],"summary":"Delete Source","operationId":"delete_source_api_v1_sources__source_id__delete","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Source Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/clients":{"get":{"tags":["clients"],"summary":"List Clients","operationId":"list_clients_api_v1_clients_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientOut"},"title":"Response List Clients Api V1 Clients Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["clients"],"summary":"Create Client","operationId":"create_client_api_v1_clients_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/clients/{client_id}":{"get":{"tags":["clients"],"summary":"Get Client","operationId":"get_client_api_v1_clients__client_id__get","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["clients"],"summary":"Update Client","operationId":"update_client_api_v1_clients__client_id__patch","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["clients"],"summary":"Delete Client","operationId":"delete_client_api_v1_clients__client_id__delete","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/clients/{client_id}/filters":{"get":{"tags":["clients"],"summary":"List Filters","operationId":"list_filters_api_v1_clients__client_id__filters_get","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientFilterOut"},"title":"Response List Filters Api V1 Clients  Client Id  Filters Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["clients"],"summary":"Create Filter","operationId":"create_filter_api_v1_clients__client_id__filters_post","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFilterCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFilterOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/clients/{client_id}/filters/{filter_id}":{"patch":{"tags":["clients"],"summary":"Update Filter","operationId":"update_filter_api_v1_clients__client_id__filters__filter_id__patch","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"filter_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Filter Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFilterUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFilterOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["clients"],"summary":"Delete Filter","operationId":"delete_filter_api_v1_clients__client_id__filters__filter_id__delete","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"filter_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Filter Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/deliveries":{"get":{"tags":["deliveries"],"summary":"List Deliveries","operationId":"list_deliveries_api_v1_deliveries_get","parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Client Id"}},{"name":"signal_event_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Signal Event Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/heartbeat":{"post":{"tags":["heartbeat"],"summary":"Heartbeat","operationId":"heartbeat_api_v1_heartbeat_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeartbeatRequest","default":{"hostname":"","signal_count":0,"reported_ip":"","client_id":"","bot_version":""}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/heartbeat/active":{"get":{"tags":["heartbeat"],"summary":"Heartbeat Active","description":"v7.7.34 Bug 32: Liste aller aktiven (und juengst offline) Trader.\nOeffentlich (kein Auth) fuer einfaches Monitoring.","operationId":"heartbeat_active_api_v1_heartbeat_active_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/export/signals.csv":{"get":{"tags":["export"],"summary":"Export Signals Csv","operationId":"export_signals_csv_api_v1_export_signals_csv_get","parameters":[{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"symbol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbol"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO date, e.g. 2026-01-01","title":"Since"},"description":"ISO date, e.g. 2026-01-01"},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/export/signals.json":{"get":{"tags":["export"],"summary":"Export Signals Json","operationId":"export_signals_json_api_v1_export_signals_json_get","parameters":[{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"symbol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbol"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/export/events.csv":{"get":{"tags":["export"],"summary":"Export Events Csv","operationId":"export_events_csv_api_v1_export_events_csv_get","parameters":[{"name":"signal_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Id"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback/ingest":{"post":{"tags":["feedback"],"summary":"Ingest Feedback","description":"Multipart-Empfaenger fuer Customer-Feedback-ZIPs.\nKEIN Auth — jeder Bot darf senden. Rate Limit 10/min per IP.\nBei internem Fehler 202 + generische Antwort — nie den Client mit 5xx belasten.","operationId":"ingest_feedback_api_v1_feedback_ingest_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_ingest_feedback_api_v1_feedback_ingest_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback":{"get":{"tags":["feedback"],"summary":"List Feedback","description":"Liste aller Feedbacks (Dashboard-Auth). Sortierung: neueste zuerst.","operationId":"list_feedback_api_v1_feedback_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"reviewed","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reviewed"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback/{feedback_id}":{"get":{"tags":["feedback"],"summary":"Get Feedback","operationId":"get_feedback_api_v1_feedback__feedback_id__get","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","title":"Feedback Id"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback/{feedback_id}/download":{"get":{"tags":["feedback"],"summary":"Download Feedback","operationId":"download_feedback_api_v1_feedback__feedback_id__download_get","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","title":"Feedback Id"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback/{feedback_id}/reviewed":{"patch":{"tags":["feedback"],"summary":"Mark Reviewed","operationId":"mark_reviewed_api_v1_feedback__feedback_id__reviewed_patch","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","title":"Feedback Id"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_ingest_feedback_api_v1_feedback_ingest_post":{"properties":{"title":{"type":"string","title":"Title","default":""},"description":{"type":"string","title":"Description","default":""},"bundle":{"type":"string","contentMediaType":"application/octet-stream","title":"Bundle"}},"type":"object","required":["bundle"],"title":"Body_ingest_feedback_api_v1_feedback_ingest_post"},"ClientCreate":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name"},"description":{"type":"string","title":"Description","default":""},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"webhook_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Secret"},"webhook_timeout_sec":{"type":"integer","title":"Webhook Timeout Sec","default":10},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["name"],"title":"ClientCreate"},"ClientFilterCreate":{"properties":{"symbols":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbols"},"source_ids":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ids"},"event_types":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Types"},"directions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Directions"},"min_confidence":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Min Confidence"}},"type":"object","title":"ClientFilterCreate"},"ClientFilterOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"symbols":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbols"},"source_ids":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ids"},"event_types":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Types"},"directions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Directions"},"min_confidence":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Min Confidence"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","client_id","symbols","source_ids","event_types","directions","min_confidence","is_active","created_at"],"title":"ClientFilterOut"},"ClientFilterUpdate":{"properties":{"symbols":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbols"},"source_ids":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ids"},"event_types":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Types"},"directions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Directions"},"min_confidence":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Min Confidence"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ClientFilterUpdate"},"ClientOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"is_active":{"type":"boolean","title":"Is Active"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"webhook_timeout_sec":{"type":"integer","title":"Webhook Timeout Sec"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"filters":{"items":{"$ref":"#/components/schemas/ClientFilterOut"},"type":"array","title":"Filters","default":[]}},"type":"object","required":["id","name","description","is_active","webhook_url","webhook_timeout_sec","created_at","updated_at"],"title":"ClientOut"},"ClientUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"webhook_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Secret"},"webhook_timeout_sec":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Webhook Timeout Sec"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","title":"ClientUpdate"},"DeliveryListResponse":{"properties":{"deliveries":{"items":{"$ref":"#/components/schemas/DeliveryOut"},"type":"array","title":"Deliveries"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["deliveries","total"],"title":"DeliveryListResponse"},"DeliveryOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"signal_event_id":{"type":"string","format":"uuid","title":"Signal Event Id"},"delivery_type":{"type":"string","title":"Delivery Type"},"status":{"type":"string","title":"Status"},"attempts":{"type":"integer","title":"Attempts"},"max_attempts":{"type":"integer","title":"Max Attempts"},"last_attempt_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Attempt At"},"next_retry_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Retry At"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At"}},"type":"object","required":["id","client_id","signal_event_id","delivery_type","status","attempts","max_attempts","last_attempt_at","next_retry_at","response_status","error_message","created_at","delivered_at"],"title":"DeliveryOut"},"EventRequest":{"properties":{"event_type":{"type":"string","pattern":"^(update_sl|update_tp|update_entry|tp_hit|sl_hit|partial_close|close|cancel|breakeven|trade_result|comment)$","title":"Event Type"},"data":{"additionalProperties":true,"type":"object","title":"Data"}},"type":"object","required":["event_type"],"title":"EventRequest"},"EventResponse":{"properties":{"event_id":{"type":"string","format":"uuid","title":"Event Id"},"signal_id":{"type":"string","format":"uuid","title":"Signal Id"},"event_type":{"type":"string","title":"Event Type"},"version":{"type":"integer","title":"Version"}},"type":"object","required":["event_id","signal_id","event_type","version"],"title":"EventResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HeartbeatRequest":{"properties":{"hostname":{"type":"string","title":"Hostname","default":""},"signal_count":{"type":"integer","title":"Signal Count","default":0},"reported_ip":{"type":"string","title":"Reported Ip","default":""},"client_id":{"type":"string","title":"Client Id","default":""},"bot_version":{"type":"string","title":"Bot Version","default":""}},"type":"object","title":"HeartbeatRequest"},"IngestRequest":{"properties":{"channel":{"type":"string","title":"Channel","default":""},"external_id":{"type":"string","title":"External Id","default":""},"raw_text":{"type":"string","title":"Raw Text","default":""},"signal":{"$ref":"#/components/schemas/SignalData"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["signal"],"title":"IngestRequest"},"IngestResponse":{"properties":{"signal_id":{"type":"string","format":"uuid","title":"Signal Id"},"event_id":{"type":"string","format":"uuid","title":"Event Id"},"status":{"type":"string","title":"Status"},"dedupe":{"type":"boolean","title":"Dedupe"}},"type":"object","required":["signal_id","event_id","status","dedupe"],"title":"IngestResponse"},"PollResponse":{"properties":{"events":{"items":{"$ref":"#/components/schemas/SignalEventOut"},"type":"array","title":"Events"},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},"type":"object","required":["events"],"title":"PollResponse"},"SignalData":{"properties":{"symbol":{"type":"string","maxLength":30,"title":"Symbol"},"direction":{"type":"string","pattern":"^(BUY|SELL)$","title":"Direction"},"entry_price":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Entry Price"},"entry_low":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Entry Low"},"entry_high":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Entry High"},"stop_loss":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Stop Loss"},"take_profit_1":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 1"},"take_profit_2":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 2"},"take_profit_3":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 3"},"take_profit_4":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 4"},"take_profit_5":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 5"},"confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Confidence"},"strategy":{"type":"string","title":"Strategy","default":""}},"type":"object","required":["symbol","direction"],"title":"SignalData"},"SignalDetailOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"raw_message_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Raw Message Id"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"symbol":{"type":"string","title":"Symbol"},"direction":{"type":"string","title":"Direction"},"signal_type":{"type":"string","title":"Signal Type"},"entry_price":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Entry Price"},"entry_low":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Entry Low"},"entry_high":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Entry High"},"stop_loss":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Stop Loss"},"take_profit_1":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 1"},"take_profit_2":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 2"},"take_profit_3":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 3"},"take_profit_4":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 4"},"take_profit_5":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 5"},"confidence":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Confidence"},"strategy":{"type":"string","title":"Strategy"},"status":{"type":"string","title":"Status"},"channel":{"type":"string","title":"Channel"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"version":{"type":"integer","title":"Version"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"events":{"items":{"$ref":"#/components/schemas/SignalEventOut"},"type":"array","title":"Events","default":[]}},"type":"object","required":["id","raw_message_id","source_id","symbol","direction","signal_type","entry_price","entry_low","entry_high","stop_loss","take_profit_1","take_profit_2","take_profit_3","take_profit_4","take_profit_5","confidence","strategy","status","channel","version","created_at","updated_at"],"title":"SignalDetailOut"},"SignalEventOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"signal_id":{"type":"string","format":"uuid","title":"Signal Id"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"event_type":{"type":"string","title":"Event Type"},"data":{"additionalProperties":true,"type":"object","title":"Data"},"version":{"type":"integer","title":"Version"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","signal_id","source_id","event_type","data","version","created_at"],"title":"SignalEventOut"},"SignalListResponse":{"properties":{"signals":{"items":{"$ref":"#/components/schemas/SignalOut"},"type":"array","title":"Signals"},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["signals","total"],"title":"SignalListResponse"},"SignalOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"raw_message_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Raw Message Id"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"symbol":{"type":"string","title":"Symbol"},"direction":{"type":"string","title":"Direction"},"signal_type":{"type":"string","title":"Signal Type"},"entry_price":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Entry Price"},"entry_low":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Entry Low"},"entry_high":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Entry High"},"stop_loss":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Stop Loss"},"take_profit_1":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 1"},"take_profit_2":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 2"},"take_profit_3":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 3"},"take_profit_4":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 4"},"take_profit_5":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit 5"},"confidence":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Confidence"},"strategy":{"type":"string","title":"Strategy"},"status":{"type":"string","title":"Status"},"channel":{"type":"string","title":"Channel"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"version":{"type":"integer","title":"Version"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","raw_message_id","source_id","symbol","direction","signal_type","entry_price","entry_low","entry_high","stop_loss","take_profit_1","take_profit_2","take_profit_3","take_profit_4","take_profit_5","confidence","strategy","status","channel","version","created_at","updated_at"],"title":"SignalOut"},"SourceCreate":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name"},"description":{"type":"string","title":"Description","default":""},"source_type":{"type":"string","maxLength":30,"title":"Source Type","default":"telegram_tool"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["name"],"title":"SourceCreate"},"SourceOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"source_type":{"type":"string","title":"Source Type"},"is_active":{"type":"boolean","title":"Is Active"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","description","source_type","is_active","created_at","updated_at"],"title":"SourceOut"},"SourceUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Type"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","title":"SourceUpdate"},"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"}}}}