{"openapi":"3.1.0","info":{"title":"Investor BFF","version":"0.1.0"},"paths":{"/health/live":{"get":{"tags":["health"],"summary":"Liveness","description":"Liveness probe - service is running.","operationId":"liveness_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Liveness Health Live Get"}}}}}}},"/health/ready":{"get":{"tags":["health"],"summary":"Readiness","description":"Readiness probe - service is ready to accept traffic.","operationId":"readiness_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Readiness Health Ready Get"}}}}}}},"/health":{"get":{"tags":["health"],"summary":"Health Detail","description":"Detailed health check.","operationId":"health_detail_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Detail Health Get"}}}}}}},"/api/auth/login":{"post":{"tags":["auth"],"summary":"Login","description":"Issue local JWT for tests only. When Auth0 is configured (AUTH0_DOMAIN), use Auth0 for login.","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","description":"Logout (client should discard token).\n\nFor Auth0, the frontend should also call Auth0's logout endpoint.","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Logout Api Auth Logout Post"}}}}}}},"/api/auth/me":{"get":{"tags":["auth"],"summary":"Get Me","description":"Get current user info including tier.","operationId":"get_me_api_auth_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/config":{"get":{"tags":["auth"],"summary":"Get Auth Config","description":"Return auth config for frontend. Provider is auth0 when AUTH0_DOMAIN set, else local (tests).","operationId":"get_auth_config_api_auth_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Auth Config Api Auth Config Get"}}}}}}},"/api/users/me":{"get":{"tags":["users"],"summary":"Get Profile","description":"Get current user's profile.","operationId":"get_profile_api_users_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["users"],"summary":"Update Profile","description":"Update current user's profile.","operationId":"update_profile_api_users_me_put","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/preferences":{"get":{"tags":["users"],"summary":"Get Preferences","description":"Get current user's preferences.","operationId":"get_preferences_api_users_me_preferences_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["users"],"summary":"Update Preferences","description":"Update current user's preferences.","operationId":"update_preferences_api_users_me_preferences_put","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferenceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/saved-filters":{"get":{"tags":["users"],"summary":"List Saved Filters","description":"List current user's saved instrument filters.","operationId":"list_saved_filters_api_users_me_saved_filters_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SavedFilterResponse"},"title":"Response List Saved Filters Api Users Me Saved Filters Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["users"],"summary":"Create Saved Filter","description":"Create a saved instrument filter.","operationId":"create_saved_filter_api_users_me_saved_filters_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedFilterCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedFilterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/api-tokens":{"get":{"tags":["users"],"summary":"List Api Tokens","operationId":"list_api_tokens_api_users_me_api_tokens_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiTokenResponse"},"title":"Response List Api Tokens Api Users Me Api Tokens Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["users"],"summary":"Create Api Token","operationId":"create_api_token_api_users_me_api_tokens_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiTokenCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiTokenCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/api-tokens/{token_id}":{"delete":{"tags":["users"],"summary":"Revoke Api Token","operationId":"revoke_api_token_api_users_me_api_tokens__token_id__delete","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string","title":"Token Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/saved-filters/{filter_id}":{"delete":{"tags":["users"],"summary":"Delete Saved Filter","description":"Delete a saved instrument filter.","operationId":"delete_saved_filter_api_users_me_saved_filters__filter_id__delete","parameters":[{"name":"filter_id","in":"path","required":true,"schema":{"type":"string","title":"Filter Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/default-commands":{"get":{"tags":["admin-default-commands"],"summary":"List Default Commands","description":"List default commands (admin only).","operationId":"list_default_commands_api_admin_default_commands_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefaultCommandList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin-default-commands"],"summary":"Create Default Command","description":"Create a default command (admin only).","operationId":"create_default_command_api_admin_default_commands_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefaultCommandCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefaultCommandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/default-commands/{command_id}":{"get":{"tags":["admin-default-commands"],"summary":"Get Default Command","description":"Get a default command by ID (admin only).","operationId":"get_default_command_api_admin_default_commands__command_id__get","parameters":[{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefaultCommandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin-default-commands"],"summary":"Update Default Command","description":"Update a default command (admin only).","operationId":"update_default_command_api_admin_default_commands__command_id__put","parameters":[{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefaultCommandUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefaultCommandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin-default-commands"],"summary":"Delete Default Command","description":"Delete a default command (admin only).","operationId":"delete_default_command_api_admin_default_commands__command_id__delete","parameters":[{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/commands":{"get":{"tags":["proxy"],"summary":"List Commands","description":"List commands for the current user.","operationId":"list_commands_api_commands_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["proxy"],"summary":"Create Command","description":"Create a command.","operationId":"create_command_api_commands_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/commands/sync-defaults":{"post":{"tags":["commands"],"summary":"Sync Defaults","description":"Add any missing default commands for the current user.","operationId":"sync_defaults_api_commands_sync_defaults_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sync Defaults Api Commands Sync Defaults Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/commands/{command_id}":{"get":{"tags":["proxy"],"summary":"Get Command","description":"Get a command by ID.","operationId":"get_command_api_commands__command_id__get","parameters":[{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["proxy"],"summary":"Update Command","description":"Update a command.","operationId":"update_command_api_commands__command_id__put","parameters":[{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["proxy"],"summary":"Delete Command Endpoint","description":"Delete a command.","operationId":"delete_command_endpoint_api_commands__command_id__delete","parameters":[{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/commands/{command_id}/restore":{"post":{"tags":["commands"],"summary":"Restore Command","description":"Restore a command to its default template (only if it was copied from a default).","operationId":"restore_command_api_commands__command_id__restore_post","parameters":[{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/commands":{"get":{"tags":["proxy"],"summary":"Internal List Commands","description":"List commands (service-to-service for AI Service).","operationId":"internal_list_commands_internal_commands_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["proxy"],"summary":"Internal Create Command","description":"Create a command (service-to-service for AI Service).","operationId":"internal_create_command_internal_commands_post","parameters":[{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/commands/{command_id}":{"get":{"tags":["proxy"],"summary":"Internal Get Command","description":"Get a command by ID (service-to-service for AI Service).","operationId":"internal_get_command_internal_commands__command_id__get","parameters":[{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["proxy"],"summary":"Internal Update Command","description":"Update a command (service-to-service for AI Service).","operationId":"internal_update_command_internal_commands__command_id__put","parameters":[{"name":"command_id","in":"path","required":true,"schema":{"type":"string","title":"Command Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/documents/tree":{"get":{"tags":["documents"],"summary":"Get Document Tree","description":"Hierarchical view of user documents under commands/ or rules/.","operationId":"get_document_tree_api_documents_tree_get","parameters":[{"name":"prefix","in":"query","required":false,"schema":{"type":"string","default":"commands","title":"Prefix"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentTreeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/documents/folders":{"post":{"tags":["documents"],"summary":"Create Folder","description":"Create an empty folder under commands/ or rules/.","operationId":"create_folder_api_documents_folders_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Create Folder Api Documents Folders Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rules":{"get":{"tags":["rules"],"summary":"List Rules","operationId":"list_rules_api_rules_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["rules"],"summary":"Create Rule","operationId":"create_rule_api_rules_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rules/{rule_id}":{"get":{"tags":["rules"],"summary":"Get Rule","operationId":"get_rule_api_rules__rule_id__get","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["rules"],"summary":"Update Rule","operationId":"update_rule_api_rules__rule_id__put","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["rules"],"summary":"Delete Rule","operationId":"delete_rule_api_rules__rule_id__delete","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/rules":{"get":{"tags":["internal-rules"],"summary":"Internal List Rules","operationId":"internal_list_rules_internal_rules_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"x-service-key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["internal-rules"],"summary":"Internal Create Rule","operationId":"internal_create_rule_internal_rules_post","parameters":[{"name":"x-service-key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/rules/{rule_id}":{"get":{"tags":["internal-rules"],"summary":"Internal Get Rule","operationId":"internal_get_rule_internal_rules__rule_id__get","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"x-service-key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["internal-rules"],"summary":"Internal Update Rule","operationId":"internal_update_rule_internal_rules__rule_id__put","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"x-service-key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portfolio":{"get":{"tags":["portfolio"],"summary":"Get Portfolio","operationId":"get_portfolio_api_portfolio_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["portfolio"],"summary":"Update Portfolio","operationId":"update_portfolio_api_portfolio_put","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portfolio/risk-metrics":{"get":{"tags":["portfolio"],"summary":"Get Portfolio Risk Metrics","operationId":"get_portfolio_risk_metrics_api_portfolio_risk_metrics_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioRiskMetricsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/portfolio":{"get":{"tags":["internal-portfolio"],"summary":"Internal Get Portfolio","operationId":"internal_get_portfolio_internal_portfolio_get","parameters":[{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["internal-portfolio"],"summary":"Internal Update Portfolio","operationId":"internal_update_portfolio_internal_portfolio_put","parameters":[{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/portfolio/risk-metrics":{"get":{"tags":["internal-portfolio"],"summary":"Internal Get Portfolio Risk Metrics","operationId":"internal_get_portfolio_risk_metrics_internal_portfolio_risk_metrics_get","parameters":[{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioRiskMetricsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/stats":{"get":{"tags":["trade-ideas"],"summary":"Get Trade Idea Stats","operationId":"get_trade_idea_stats_api_orders_stats_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/shared/{share_token}":{"get":{"tags":["trade-ideas"],"summary":"Get Shared Trade Idea","operationId":"get_shared_trade_idea_api_orders_shared__share_token__get","parameters":[{"name":"share_token","in":"path","required":true,"schema":{"type":"string","title":"Share Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders":{"get":{"tags":["trade-ideas"],"summary":"List Trade Ideas","operationId":"list_trade_ideas_api_orders_get","parameters":[{"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":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date To"}},{"name":"sleeves","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Sleeves"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["trade-ideas"],"summary":"Create Trade Idea","operationId":"create_trade_idea_api_orders_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/performance-attribution":{"get":{"tags":["trade-ideas"],"summary":"Get Performance Attribution","operationId":"get_performance_attribution_api_orders_performance_attribution_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"$ref":"#/components/schemas/AttributionPeriod","description":"Window for realized PnL: 7d, 30d, 90d, ytd, all","default":"30d"},"description":"Window for realized PnL: 7d, 30d, 90d, ytd, all"},{"name":"symbol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional ticker filter for closed trades and positions","title":"Symbol"},"description":"Optional ticker filter for closed trades and positions"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformanceAttributionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/{trade_idea_id}":{"get":{"tags":["trade-ideas"],"summary":"Get Trade Idea","operationId":"get_trade_idea_api_orders__trade_idea_id__get","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["trade-ideas"],"summary":"Update Trade Idea","operationId":"update_trade_idea_api_orders__trade_idea_id__put","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["trade-ideas"],"summary":"Delete Trade Idea","operationId":"delete_trade_idea_api_orders__trade_idea_id__delete","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/{trade_idea_id}/approve":{"post":{"tags":["trade-ideas"],"summary":"Approve Trade Idea","operationId":"approve_trade_idea_api_orders__trade_idea_id__approve_post","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/{trade_idea_id}/place":{"post":{"tags":["trade-ideas"],"summary":"Place Trade Idea","operationId":"place_trade_idea_api_orders__trade_idea_id__place_post","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaPlaceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/{trade_idea_id}/fail":{"post":{"tags":["trade-ideas"],"summary":"Fail Trade Idea","operationId":"fail_trade_idea_api_orders__trade_idea_id__fail_post","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaFailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/{trade_idea_id}/execute":{"post":{"tags":["trade-ideas"],"summary":"Execute Trade Idea","operationId":"execute_trade_idea_api_orders__trade_idea_id__execute_post","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaExecuteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/{trade_idea_id}/apply-to-portfolio":{"post":{"tags":["trade-ideas"],"summary":"Apply Trade Idea To Portfolio","operationId":"apply_trade_idea_to_portfolio_api_orders__trade_idea_id__apply_to_portfolio_post","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/orders":{"get":{"tags":["internal-trade-ideas"],"summary":"Internal List Trade Ideas","operationId":"internal_list_trade_ideas_internal_orders_get","parameters":[{"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":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date To"}},{"name":"sleeves","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Sleeves"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["internal-trade-ideas"],"summary":"Internal Create Trade Idea","operationId":"internal_create_trade_idea_internal_orders_post","parameters":[{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalTradeIdeaCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/orders/performance-attribution":{"get":{"tags":["internal-trade-ideas"],"summary":"Internal Get Performance Attribution","operationId":"internal_get_performance_attribution_internal_orders_performance_attribution_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"$ref":"#/components/schemas/AttributionPeriod","description":"Window for realized PnL: 7d, 30d, 90d, ytd, all","default":"30d"},"description":"Window for realized PnL: 7d, 30d, 90d, ytd, all"},{"name":"symbol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional ticker filter for closed trades and positions","title":"Symbol"},"description":"Optional ticker filter for closed trades and positions"},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformanceAttributionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/orders/{trade_idea_id}":{"get":{"tags":["internal-trade-ideas"],"summary":"Internal Get Trade Idea","operationId":"internal_get_trade_idea_internal_orders__trade_idea_id__get","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["internal-trade-ideas"],"summary":"Internal Update Trade Idea","operationId":"internal_update_trade_idea_internal_orders__trade_idea_id__put","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal-trade-ideas"],"summary":"Internal Delete Trade Idea","operationId":"internal_delete_trade_idea_internal_orders__trade_idea_id__delete","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/orders/{trade_idea_id}/approve":{"post":{"tags":["internal-trade-ideas"],"summary":"Internal Approve Trade Idea","operationId":"internal_approve_trade_idea_internal_orders__trade_idea_id__approve_post","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/orders/{trade_idea_id}/place":{"post":{"tags":["internal-trade-ideas"],"summary":"Internal Place Trade Idea","operationId":"internal_place_trade_idea_internal_orders__trade_idea_id__place_post","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaPlaceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/orders/{trade_idea_id}/fail":{"post":{"tags":["internal-trade-ideas"],"summary":"Internal Fail Trade Idea","operationId":"internal_fail_trade_idea_internal_orders__trade_idea_id__fail_post","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaFailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/orders/{trade_idea_id}/execute":{"post":{"tags":["internal-trade-ideas"],"summary":"Internal Execute Trade Idea","operationId":"internal_execute_trade_idea_internal_orders__trade_idea_id__execute_post","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaExecuteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeIdeaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/orders/{trade_idea_id}/apply-to-portfolio":{"post":{"tags":["internal-trade-ideas"],"summary":"Internal Apply Trade Idea To Portfolio","operationId":"internal_apply_trade_idea_to_portfolio_internal_orders__trade_idea_id__apply_to_portfolio_post","parameters":[{"name":"trade_idea_id","in":"path","required":true,"schema":{"type":"string","title":"Trade Idea Id"}},{"name":"X-User-Id","in":"header","required":true,"schema":{"type":"string","title":"X-User-Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/admin/users/by-ids":{"post":{"tags":["internal-admin"],"summary":"Internal Users By Ids","description":"Return id+email for registered users only; unknown ids omitted.","operationId":"internal_users_by_ids_internal_admin_users_by_ids_post","parameters":[{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserIdsBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserEmailBatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/admin/users/{user_id}/tier":{"put":{"tags":["internal-admin"],"summary":"Internal Set User Tier","description":"Canonical entitlement: update ``users.tier`` (admin-bff calls this when editing quotas).","operationId":"internal_set_user_tier_internal_admin_users__user_id__tier_put","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserTierUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserTierUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ref/{slug}":{"get":{"tags":["referral-redirect"],"summary":"Ref Slug Redirect","description":"Redirect to frontend with UTM params and set jd_ref cookie. Increment click_count.","operationId":"ref_slug_redirect_ref__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/s/o-{share_token}":{"get":{"tags":["share-redirect"],"summary":"Share Order Redirect","description":"Redirect to frontend shared order page and set jd_ref for attribution.","operationId":"share_order_redirect_s_o__share_token__get","parameters":[{"name":"share_token","in":"path","required":true,"schema":{"type":"string","title":"Share Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/referrals/validate/{slug}":{"get":{"tags":["referrals"],"summary":"Validate Slug","description":"Return referral link info for landing page personalization (public).","operationId":"validate_slug_api_referrals_validate__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralValidateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/referrals":{"get":{"tags":["admin-referrals"],"summary":"List Referral Links","description":"List all referral links (admin only).","operationId":"list_referral_links_api_admin_referrals_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralLinkList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin-referrals"],"summary":"Create Referral Link","description":"Create a referral link (admin only).","operationId":"create_referral_link_api_admin_referrals_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralLinkCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/referrals/{referral_id}":{"get":{"tags":["admin-referrals"],"summary":"Get Referral Link","description":"Get a referral link by ID (admin only).","operationId":"get_referral_link_api_admin_referrals__referral_id__get","parameters":[{"name":"referral_id","in":"path","required":true,"schema":{"type":"string","title":"Referral Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin-referrals"],"summary":"Update Referral Link","description":"Update a referral link (admin only).","operationId":"update_referral_link_api_admin_referrals__referral_id__put","parameters":[{"name":"referral_id","in":"path","required":true,"schema":{"type":"string","title":"Referral Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralLinkUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin-referrals"],"summary":"Deactivate Referral Link","description":"Soft-deactivate a referral link (admin only).","operationId":"deactivate_referral_link_api_admin_referrals__referral_id__delete","parameters":[{"name":"referral_id","in":"path","required":true,"schema":{"type":"string","title":"Referral Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/referrals/{referral_id}/signups":{"get":{"tags":["admin-referrals"],"summary":"Get Referral Signups","description":"List users who signed up via this referral link (admin only).","operationId":"get_referral_signups_api_admin_referrals__referral_id__signups_get","parameters":[{"name":"referral_id","in":"path","required":true,"schema":{"type":"string","title":"Referral Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralSignupsList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users":{"get":{"tags":["admin-users"],"summary":"List Users","description":"List users for admin (email, name, tier, referral_source, created_at).","operationId":"list_users_api_admin_users_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"}},{"name":"referral_source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Source"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/subscription":{"put":{"tags":["admin-users"],"summary":"Set User Subscription","description":"Set granted tier + optional subscription end date for one user.","operationId":"set_user_subscription_api_admin_users__user_id__subscription_put","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"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSetSubscription"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserListItem"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subscriptions/provider":{"get":{"tags":["subscriptions"],"summary":"Get Provider Info","description":"Get information about the configured payment provider.\n\nUseful for frontend to know which checkout flow to use.","operationId":"get_provider_info_api_subscriptions_provider_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderInfoResponse"}}}}}}},"/api/subscriptions/checkout":{"post":{"tags":["subscriptions"],"summary":"Create Checkout","description":"Create a checkout session for Pro subscription.\n\nFor LemonSqueezy: Returns a pre-built checkout URL\nFor Stripe: Creates a Checkout session and returns URL\n\nPrice: $39/month for Pro tier (100 queries/day).","operationId":"create_checkout_api_subscriptions_checkout_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subscriptions/portal":{"post":{"tags":["subscriptions"],"summary":"Create Portal","description":"Create a Customer Portal session.\n\nAllows users to:\n- View billing history\n- Update payment method\n- Cancel subscription","operationId":"create_portal_api_subscriptions_portal_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subscriptions/status":{"get":{"tags":["subscriptions"],"summary":"Get Subscription Status","description":"Get current subscription status.\n\nReturns tier, status, and subscription details.","operationId":"get_subscription_status_api_subscriptions_status_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subscriptions/webhook":{"post":{"tags":["subscriptions"],"summary":"Handle Webhook","description":"Handle payment provider webhook events.\n\nAutomatically detects provider from signature header:\n- Stripe-Signature header -> Stripe provider\n- X-Signature header -> LemonSqueezy provider\n\nEvents processed:\n- Subscription created/updated/cancelled\n- Payment failed","operationId":"handle_webhook_api_subscriptions_webhook_post","parameters":[{"name":"Stripe-Signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe-Signature"}},{"name":"X-Signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/onboarding/status":{"get":{"tags":["onboarding"],"summary":"Get Onboarding Status","operationId":"get_onboarding_status_api_onboarding_status_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/onboarding/start-chat":{"post":{"tags":["onboarding"],"summary":"Start Onboarding Chat","operationId":"start_onboarding_chat_api_onboarding_start_chat_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingStartChatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingStartChatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/onboarding/draft":{"put":{"tags":["onboarding"],"summary":"Save Onboarding Draft","operationId":"save_onboarding_draft_api_onboarding_draft_put","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingDraftRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/instruments":{"get":{"tags":["proxy"],"summary":"List Instruments","description":"List instruments (proxied to Data Service).","operationId":"list_instruments_api_instruments_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Instruments Api Instruments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/instruments/{symbol}":{"get":{"tags":["proxy"],"summary":"Get Instrument","description":"Get instrument by symbol (proxied to Data Service).","operationId":"get_instrument_api_instruments__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Instrument Api Instruments  Symbol  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ohlcv/{symbol}":{"get":{"tags":["proxy"],"summary":"Get Ohlcv","description":"Get OHLCV data (proxied to Data Service).","operationId":"get_ohlcv_api_ohlcv__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Ohlcv Api Ohlcv  Symbol  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analysis/indicators/{symbol}":{"get":{"tags":["proxy"],"summary":"Get Indicators","description":"Get technical indicators (proxied to Data Service).","operationId":"get_indicators_api_analysis_indicators__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"indicators","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated indicators","title":"Indicators"},"description":"Comma-separated indicators"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Indicators Api Analysis Indicators  Symbol  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analysis/options/chain/{symbol}":{"get":{"tags":["proxy"],"summary":"Get Option Chain","description":"Get options chain (proxied to Data Service).","operationId":"get_option_chain_api_analysis_options_chain__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"expiry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiry"}},{"name":"option_type","in":"query","required":false,"schema":{"type":"string","pattern":"^(call|put|both)$","default":"both","title":"Option Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"min_open_interest","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Min Open Interest"}},{"name":"min_volume","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Min Volume"}},{"name":"max_spread_pct","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Max Spread Pct"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Option Chain Api Analysis Options Chain  Symbol  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analysis/options/greeks/{symbol}":{"get":{"tags":["proxy"],"summary":"Get Options Greeks","description":"Get options greeks (proxied to Data Service).","operationId":"get_options_greeks_api_analysis_options_greeks__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"expiry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiry"}},{"name":"option_type","in":"query","required":false,"schema":{"type":"string","pattern":"^(call|put|both)$","default":"both","title":"Option Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"risk_free_rate","in":"query","required":false,"schema":{"type":"number","maximum":0.2,"minimum":0.0,"default":0.05,"title":"Risk Free Rate"}},{"name":"min_open_interest","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Min Open Interest"}},{"name":"min_volume","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Min Volume"}},{"name":"max_spread_pct","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Max Spread Pct"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Options Greeks Api Analysis Options Greeks  Symbol  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analysis/options/iv-rank/{symbol}":{"get":{"tags":["proxy"],"summary":"Get Iv Rank","description":"Get IV rank estimate (proxied to Data Service).","operationId":"get_iv_rank_api_analysis_options_iv_rank__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"lookback_days","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":30,"default":252,"title":"Lookback Days"}},{"name":"max_expiries","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":6,"title":"Max Expiries"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Iv Rank Api Analysis Options Iv Rank  Symbol  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analysis/futures/contracts":{"get":{"tags":["proxy"],"summary":"Get Futures Contracts","description":"List futures contracts (proxied to Data Service).","operationId":"get_futures_contracts_api_analysis_futures_contracts_get","parameters":[{"name":"root","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":12,"title":"Root"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Futures Contracts Api Analysis Futures Contracts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analysis/fx-rate":{"get":{"tags":["proxy"],"summary":"Get Fx Rate","description":"Get FX rate (proxied to Data Service).","operationId":"get_fx_rate_api_analysis_fx_rate_get","parameters":[{"name":"base_currency","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":3,"title":"Base Currency"}},{"name":"quote_currency","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":3,"title":"Quote Currency"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Fx Rate Api Analysis Fx Rate Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analysis/market-breadth":{"get":{"tags":["proxy"],"summary":"Get Market Breadth","description":"Get market breadth diagnostics (proxied to Data Service).","operationId":"get_market_breadth_api_analysis_market_breadth_get","parameters":[{"name":"index","in":"query","required":false,"schema":{"type":"string","default":"SP500","title":"Index"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Market Breadth Api Analysis Market Breadth Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calendar/dividends":{"get":{"tags":["proxy"],"summary":"Get Dividend Calendar","description":"Get dividend calendar (proxied to Data Service).","operationId":"get_dividend_calendar_api_calendar_dividends_get","parameters":[{"name":"symbols","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated symbols","title":"Symbols"},"description":"Comma-separated symbols"},{"name":"days_ahead","in":"query","required":false,"schema":{"type":"integer","maximum":180,"minimum":1,"default":30,"title":"Days Ahead"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Dividend Calendar Api Calendar Dividends Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analysis/analyst-estimates/{symbol}":{"get":{"tags":["proxy"],"summary":"Get Analyst Estimates","description":"Get analyst estimates (proxied to Data Service).","operationId":"get_analyst_estimates_api_analysis_analyst_estimates__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Analyst Estimates Api Analysis Analyst Estimates  Symbol  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chats":{"get":{"tags":["proxy"],"summary":"List Chats","description":"List user's chats (proxied to AI Service). Requires authentication.","operationId":"list_chats_api_chats_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["proxy"],"summary":"Create Chat","description":"Create a new chat (proxied to AI Service). Supports anonymous.","operationId":"create_chat_api_chats_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chats/{chat_id}":{"get":{"tags":["proxy"],"summary":"Get Chat","description":"Get chat with messages (proxied to AI Service). Supports anonymous.","operationId":"get_chat_api_chats__chat_id__get","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["proxy"],"summary":"Update Chat","description":"Update a chat's title (proxied to AI Service). Supports anonymous.","operationId":"update_chat_api_chats__chat_id__put","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["proxy"],"summary":"Delete Chat","description":"Delete a chat (proxied to AI Service). Supports anonymous.","operationId":"delete_chat_api_chats__chat_id__delete","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chats/{chat_id}/messages":{"post":{"tags":["proxy"],"summary":"Add Message","description":"Add message to chat (proxied to AI Service).","operationId":"add_message_api_chats__chat_id__messages_post","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Add Message Api Chats  Chat Id  Messages Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chats/{chat_id}/messages/{message_id}/feedback":{"post":{"tags":["proxy"],"summary":"Submit Message Feedback","description":"Submit feedback (like/dislike) for an assistant message. Supports anonymous.","operationId":"submit_message_feedback_api_chats__chat_id__messages__message_id__feedback_post","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageFeedbackRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Submit Message Feedback Api Chats  Chat Id  Messages  Message Id  Feedback Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/completions":{"post":{"tags":["proxy"],"summary":"Get Completion","description":"Get AI completion (proxied to AI Service). Supports anonymous.","operationId":"get_completion_api_completions_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompletionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Completion Api Completions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dsl/from-natural-language":{"post":{"tags":["proxy"],"summary":"Dsl From Natural Language","description":"Build DSL query from natural language (proxied to AI Service).","operationId":"dsl_from_natural_language_api_dsl_from_natural_language_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DSLFromNaturalLanguageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Dsl From Natural Language Api Dsl From Natural Language Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/models":{"get":{"tags":["proxy"],"summary":"List Models","description":"List available AI models (proxied to AI Service). Supports anonymous.","operationId":"list_models_api_models_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Models Api Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/usage":{"get":{"tags":["proxy"],"summary":"Get Usage","description":"Get usage statistics (proxied to AI Service). Supports anonymous.","operationId":"get_usage_api_usage_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Usage Api Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tier-config":{"get":{"tags":["proxy"],"summary":"Get Tier Config","description":"Get tier configuration for all tiers (proxied to AI Service, public endpoint, no auth required).","operationId":"get_tier_config_api_tier_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Tier Config Api Tier Config Get"}}}}}}},"/api/agent/chat":{"post":{"tags":["proxy"],"summary":"Agent Chat","description":"Send message through AI agent (proxied to AI Service). Supports anonymous.","operationId":"agent_chat_api_agent_chat_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentChatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Agent Chat Api Agent Chat Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chats/{chat_id}/stream":{"post":{"tags":["proxy"],"summary":"Chat Stream","description":"Stream chat message through AI service over SSE.","operationId":"chat_stream_api_chats__chat_id__stream_post","parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatStreamRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/stream":{"post":{"tags":["proxy"],"summary":"Agent Stream","description":"Stream message through AI agent (proxied to AI Service). Supports anonymous.\n\nReturns a Server-Sent Events stream with the following event types:\n- text_delta: Incremental text content\n- tool_call_start: Tool call detected\n- tool_call_end: Tool call completed\n- done: Stream finished with usage stats\n- error: Error occurred during processing","operationId":"agent_stream_api_agent_stream_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentStreamRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mcp/keys":{"post":{"tags":["proxy"],"summary":"Create Mcp Key","description":"Create an MCP API key for the current user.","operationId":"create_mcp_key_api_mcp_keys_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpKeyCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Mcp Key Api Mcp Keys Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["proxy"],"summary":"List Mcp Keys","description":"List MCP API keys for the current user.","operationId":"list_mcp_keys_api_mcp_keys_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Mcp Keys Api Mcp Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mcp/keys/{key_id}":{"delete":{"tags":["proxy"],"summary":"Delete Mcp Key","description":"Revoke an MCP API key.","operationId":"delete_mcp_key_api_mcp_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bearer token","title":"Authorization"},"description":"Bearer token"},{"name":"X-Referral-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Referral-Source"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/data/{full_path}":{"put":{"tags":["proxy"],"summary":"Internal Data Proxy","description":"Forward data-service requests from AI service. All agent data tools go through BFF.","operationId":"internal_data_proxy_internal_data__full_path__put","parameters":[{"name":"full_path","in":"path","required":true,"schema":{"type":"string","title":"Full Path"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["proxy"],"summary":"Internal Data Proxy","description":"Forward data-service requests from AI service. All agent data tools go through BFF.","operationId":"internal_data_proxy_internal_data__full_path__put","parameters":[{"name":"full_path","in":"path","required":true,"schema":{"type":"string","title":"Full Path"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["proxy"],"summary":"Internal Data Proxy","description":"Forward data-service requests from AI service. All agent data tools go through BFF.","operationId":"internal_data_proxy_internal_data__full_path__put","parameters":[{"name":"full_path","in":"path","required":true,"schema":{"type":"string","title":"Full Path"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["proxy"],"summary":"Internal Data Proxy","description":"Forward data-service requests from AI service. All agent data tools go through BFF.","operationId":"internal_data_proxy_internal_data__full_path__put","parameters":[{"name":"full_path","in":"path","required":true,"schema":{"type":"string","title":"Full Path"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["proxy"],"summary":"Internal Data Proxy","description":"Forward data-service requests from AI service. All agent data tools go through BFF.","operationId":"internal_data_proxy_internal_data__full_path__put","parameters":[{"name":"full_path","in":"path","required":true,"schema":{"type":"string","title":"Full Path"}},{"name":"X-Service-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Service-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AdminSetSubscription":{"properties":{"tier":{"type":"string","pattern":"^(free|pro|trader_plus)$","title":"Tier"},"subscription_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription Ends At"}},"type":"object","required":["tier"],"title":"AdminSetSubscription","description":"Admin-set grant tier and optional end date."},"AdminUserList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminUserListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"AdminUserList"},"AdminUserListItem":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"tier":{"type":"string","title":"Tier"},"granted_tier":{"type":"string","title":"Granted Tier"},"subscription_status":{"type":"string","title":"Subscription Status"},"subscription_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription Ends At"},"referral_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Source"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","name","tier","granted_tier","subscription_status","subscription_ends_at","referral_source","created_at"],"title":"AdminUserListItem","description":"Minimal user fields for admin user list."},"AgentChatRequest":{"properties":{"chat_id":{"type":"string","title":"Chat Id"},"message":{"type":"string","title":"Message"},"model":{"type":"string","title":"Model","default":"claude-sonnet-4.6"},"max_tokens":{"type":"integer","title":"Max Tokens","default":4096},"temperature":{"type":"number","title":"Temperature","default":0.7},"include_debug":{"type":"boolean","title":"Include Debug","default":false},"image_base64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Base64"},"image_media_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Media Type"}},"type":"object","required":["chat_id","message"],"title":"AgentChatRequest"},"AgentStreamRequest":{"properties":{"chat_id":{"type":"string","title":"Chat Id"},"message":{"type":"string","title":"Message"},"model":{"type":"string","title":"Model","default":"claude-sonnet-4.6"},"max_tokens":{"type":"integer","title":"Max Tokens","default":4096},"temperature":{"type":"number","title":"Temperature","default":0.7}},"type":"object","required":["chat_id","message"],"title":"AgentStreamRequest","description":"Request for streaming agent chat."},"ApiTokenCreateRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name","default":"CLI"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","title":"ApiTokenCreateRequest"},"ApiTokenCreatedResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"token":{"type":"string","title":"Token","description":"Raw bearer token; shown only at creation"}},"type":"object","required":["id","name","prefix","created_at","token"],"title":"ApiTokenCreatedResponse","description":"Returned once from create — includes the raw secret."},"ApiTokenResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","prefix","created_at"],"title":"ApiTokenResponse"},"AttributionPeriod":{"type":"string","enum":["7d","30d","90d","ytd","all"],"title":"AttributionPeriod","description":"Rolling / calendar window for realized PnL attribution."},"ChatCreateRequest":{"properties":{"title":{"type":"string","title":"Title"}},"type":"object","required":["title"],"title":"ChatCreateRequest"},"ChatStreamRequest":{"properties":{"message":{"type":"string","title":"Message"},"mode":{"type":"string","title":"Mode","default":"default"}},"type":"object","required":["message"],"title":"ChatStreamRequest","description":"Request for modern SSE chat streaming."},"ChatUpdateRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}},"type":"object","title":"ChatUpdateRequest"},"CheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","required":["checkout_url"],"title":"CheckoutResponse","description":"Response from checkout session creation."},"CommandCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"content":{"type":"string","title":"Content","default":""},"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"parent_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Path","description":"Optional folder path under commands/, e.g. commands/trading"}},"type":"object","required":["name"],"title":"CommandCreate","description":"Schema for creating a command."},"CommandList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CommandResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"CommandList","description":"Schema for list of commands."},"CommandResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"name":{"type":"string","title":"Name"},"content":{"type":"string","title":"Content"},"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"is_active":{"type":"boolean","title":"Is Active"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Run At"},"source_default_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Default Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"path":{"type":"string","title":"Path","default":""},"slug":{"type":"string","title":"Slug","default":""}},"type":"object","required":["id","user_id","name","content","settings","is_active","last_run_at","source_default_id","created_at","updated_at"],"title":"CommandResponse","description":"Schema for command response."},"CommandUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Settings"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"CommandUpdate","description":"Schema for updating a command."},"CompletionRequest":{"properties":{"model":{"type":"string","title":"Model"},"messages":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Messages"},"max_tokens":{"type":"integer","title":"Max Tokens","default":4096},"temperature":{"type":"number","title":"Temperature","default":0.7}},"type":"object","required":["model","messages"],"title":"CompletionRequest"},"DSLFromNaturalLanguageRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"}},"type":"object","required":["prompt"],"title":"DSLFromNaturalLanguageRequest"},"DefaultCommandCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"slug":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Slug"},"description":{"type":"string","maxLength":500,"title":"Description","default":""},"content":{"type":"string","title":"Content","default":""},"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"sort_order":{"type":"integer","minimum":0.0,"title":"Sort Order","default":0}},"type":"object","required":["name"],"title":"DefaultCommandCreate","description":"Schema for creating a default command."},"DefaultCommandList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DefaultCommandResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"DefaultCommandList","description":"Schema for list of default commands."},"DefaultCommandResponse":{"properties":{"id":{"type":"string","title":"Id"},"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"content":{"type":"string","title":"Content"},"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"sort_order":{"type":"integer","title":"Sort Order"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","slug","name","description","content","settings","sort_order","is_active","created_at","updated_at"],"title":"DefaultCommandResponse","description":"Schema for default command response."},"DefaultCommandUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"slug":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Settings"},"sort_order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Sort Order"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"DefaultCommandUpdate","description":"Schema for updating a default command."},"DocumentTreeNodeResponse":{"properties":{"name":{"type":"string","title":"Name"},"path":{"type":"string","title":"Path"},"kind":{"type":"string","title":"Kind"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"children":{"items":{"$ref":"#/components/schemas/DocumentTreeNodeResponse"},"type":"array","title":"Children"}},"type":"object","required":["name","path","kind"],"title":"DocumentTreeNodeResponse"},"DocumentTreeResponse":{"properties":{"root":{"type":"string","title":"Root","default":"commands"},"children":{"items":{"$ref":"#/components/schemas/DocumentTreeNodeResponse"},"type":"array","title":"Children"}},"type":"object","required":["children"],"title":"DocumentTreeResponse"},"FolderCreate":{"properties":{"path":{"type":"string","title":"Path","description":"Folder path under commands/ or rules/, e.g. trading, commands/trading, rules/strategy"}},"type":"object","required":["path"],"title":"FolderCreate","description":"Create an empty folder under commands/ or rules/."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InternalTradeIdeaCreate":{"properties":{"symbol":{"type":"string","maxLength":20,"minLength":1,"title":"Symbol"},"instrument_name":{"type":"string","maxLength":200,"title":"Instrument Name","default":""},"side":{"type":"string","pattern":"^(buy|sell)$","title":"Side"},"idea_type":{"type":"string","pattern":"^(market|limit|complex)$","title":"Idea Type","default":"market"},"instrument_type":{"type":"string","pattern":"^(stock|etf|option|binary_option|future|forex|crypto|spread|other)$","title":"Instrument Type","default":"stock"},"underlying_symbol":{"anyOf":[{"type":"string","maxLength":20,"minLength":1},{"type":"null"}],"title":"Underlying Symbol"},"strike_price":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Strike Price"},"expiry_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Expiry Date"},"option_type":{"anyOf":[{"type":"string","pattern":"^(call|put)$"},{"type":"null"}],"title":"Option Type"},"contract_size":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Contract Size","default":100},"legs":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Legs"},"payout_ratio":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Payout Ratio"},"quantity":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Quantity"},"entry_price":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Entry Price"},"stop_loss":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Stop Loss"},"take_profit":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit"},"reason":{"type":"string","title":"Reason","default":""},"notes":{"type":"string","title":"Notes","default":""},"sleeve":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Sleeve"},"chat_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Id"},"message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Id"},"status":{"type":"string","pattern":"^(suggested|saved|approved)$","title":"Status","default":"suggested"}},"type":"object","required":["symbol","side","quantity","entry_price"],"title":"InternalTradeIdeaCreate","description":"Used by AI service via X-Service-Key. status defaults to 'suggested'; use 'saved' for save_trade_idea."},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":1,"title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest","description":"Schema for login request (mocked auth)."},"LoginResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["access_token","expires_in"],"title":"LoginResponse","description":"Schema for login response."},"McpKeyCreateRequest":{"properties":{"name":{"type":"string","title":"Name","default":"Default"}},"type":"object","title":"McpKeyCreateRequest"},"MessageCreateRequest":{"properties":{"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"tool_calls":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Tool Calls"},"content_parts":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Content Parts"},"run_trace":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Run Trace"}},"type":"object","required":["role","content"],"title":"MessageCreateRequest"},"MessageFeedbackRequest":{"properties":{"sentiment":{"type":"string","title":"Sentiment"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},"type":"object","required":["sentiment"],"title":"MessageFeedbackRequest"},"OnboardingDraftRequest":{"properties":{"answers":{"additionalProperties":true,"type":"object","title":"Answers"}},"type":"object","title":"OnboardingDraftRequest","description":"Persisted draft answers for onboarding resume."},"OnboardingStartChatRequest":{"properties":{"answers":{"additionalProperties":true,"type":"object","title":"Answers"},"playbook_policy":{"type":"string","enum":["keep_existing","replace_onboarding_generated"],"title":"Playbook Policy","default":"keep_existing"},"source":{"type":"string","title":"Source","default":"onboarding"},"is_rerun":{"type":"boolean","title":"Is Rerun","default":false}},"type":"object","title":"OnboardingStartChatRequest","description":"Request payload to start onboarding in regular chat mode."},"OnboardingStartChatResponse":{"properties":{"completed":{"type":"boolean","title":"Completed"},"completed_at":{"type":"string","format":"date-time","title":"Completed At"},"initial_message":{"type":"string","title":"Initial Message"}},"type":"object","required":["completed","completed_at","initial_message"],"title":"OnboardingStartChatResponse","description":"Response for onboarding chat bootstrap."},"OnboardingStatusResponse":{"properties":{"completed":{"type":"boolean","title":"Completed"},"draft_answers":{"additionalProperties":true,"type":"object","title":"Draft Answers"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"generated_rule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generated Rule Id"},"generated_playbook_ids":{"items":{"type":"string"},"type":"array","title":"Generated Playbook Ids"},"last_playbook_policy":{"anyOf":[{"type":"string","enum":["keep_existing","replace_onboarding_generated"]},{"type":"null"}],"title":"Last Playbook Policy"},"last_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Source"},"last_is_rerun":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Last Is Rerun"}},"type":"object","required":["completed"],"title":"OnboardingStatusResponse","description":"Current onboarding status for authenticated user."},"PerformanceAttributionBucket":{"properties":{"key":{"type":"string","title":"Key","description":"Symbol, side, or month label (YYYY-MM)."},"realized_pnl":{"type":"number","title":"Realized Pnl","default":0.0},"trade_count":{"type":"integer","title":"Trade Count","default":0}},"type":"object","required":["key"],"title":"PerformanceAttributionBucket","description":"Aggregated realized PnL for a grouping key."},"PerformanceAttributionResponse":{"properties":{"period":{"type":"string","title":"Period"},"symbol_filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbol Filter"},"as_of":{"type":"string","format":"date-time","title":"As Of"},"summary":{"$ref":"#/components/schemas/PerformanceAttributionSummary"},"by_symbol":{"items":{"$ref":"#/components/schemas/PerformanceAttributionBucket"},"type":"array","title":"By Symbol"},"by_side":{"items":{"$ref":"#/components/schemas/PerformanceAttributionBucket"},"type":"array","title":"By Side"},"by_month":{"items":{"$ref":"#/components/schemas/PerformanceAttributionBucket"},"type":"array","title":"By Month"},"warnings":{"items":{"$ref":"#/components/schemas/PerformanceAttributionWarning"},"type":"array","title":"Warnings"}},"type":"object","required":["period","as_of","summary"],"title":"PerformanceAttributionResponse"},"PerformanceAttributionSummary":{"properties":{"realized_pnl":{"type":"number","title":"Realized Pnl","default":0.0},"unrealized_pnl":{"type":"number","title":"Unrealized Pnl","default":0.0},"total_pnl":{"type":"number","title":"Total Pnl","default":0.0},"win_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Win Rate"},"trade_count":{"type":"integer","title":"Trade Count","default":0}},"type":"object","title":"PerformanceAttributionSummary"},"PerformanceAttributionWarning":{"properties":{"code":{"type":"string","title":"Code"},"level":{"type":"string","pattern":"^(info|warning|high)$","title":"Level"},"message":{"type":"string","title":"Message"}},"type":"object","required":["code","level","message"],"title":"PerformanceAttributionWarning"},"PortalResponse":{"properties":{"portal_url":{"type":"string","title":"Portal Url"}},"type":"object","required":["portal_url"],"title":"PortalResponse","description":"Response from portal session creation."},"PortfolioPosition":{"properties":{"symbol":{"type":"string","maxLength":32,"minLength":1,"title":"Symbol"},"quantity":{"type":"number","title":"Quantity"},"average_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Cost"},"cost_basis":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Basis"},"current_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price"},"market_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Market Value"},"unrealized_pnl":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Unrealized Pnl"},"unrealized_pnl_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Unrealized Pnl Percent"},"asset_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Type"},"sleeves":{"items":{"$ref":"#/components/schemas/PortfolioSleeveAllocation"},"type":"array","title":"Sleeves"}},"additionalProperties":true,"type":"object","required":["symbol","quantity"],"title":"PortfolioPosition"},"PortfolioResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"positions":{"items":{"$ref":"#/components/schemas/PortfolioPosition"},"type":"array","title":"Positions"},"cash":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cash"},"notes":{"type":"string","title":"Notes"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"sleeves":{"items":{"$ref":"#/components/schemas/PortfolioSleeveSummary"},"type":"array","title":"Sleeves"}},"type":"object","required":["id","user_id","positions","cash","notes","updated_at"],"title":"PortfolioResponse"},"PortfolioRiskMetricsResponse":{"properties":{"portfolio_value":{"type":"number","title":"Portfolio Value","default":0.0},"cash":{"type":"number","title":"Cash","default":0.0},"cash_weight":{"type":"number","title":"Cash Weight","default":0.0},"gross_exposure_pct":{"type":"number","title":"Gross Exposure Pct","default":0.0},"net_exposure_pct":{"type":"number","title":"Net Exposure Pct","default":0.0},"long_exposure_pct":{"type":"number","title":"Long Exposure Pct","default":0.0},"short_exposure_pct":{"type":"number","title":"Short Exposure Pct","default":0.0},"position_count":{"type":"integer","title":"Position Count","default":0},"concentration_top_1_pct":{"type":"number","title":"Concentration Top 1 Pct","default":0.0},"concentration_top_3_pct":{"type":"number","title":"Concentration Top 3 Pct","default":0.0},"concentration_top_5_pct":{"type":"number","title":"Concentration Top 5 Pct","default":0.0},"portfolio_beta_vs_spy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Portfolio Beta Vs Spy"},"portfolio_realized_vol_20d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Portfolio Realized Vol 20D"},"correlation_concentration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Correlation Concentration"},"top_positions":{"items":{"$ref":"#/components/schemas/PortfolioRiskPosition"},"type":"array","title":"Top Positions"},"sector_breakdown":{"items":{"$ref":"#/components/schemas/PortfolioSectorExposure"},"type":"array","title":"Sector Breakdown"},"warnings":{"items":{"$ref":"#/components/schemas/PortfolioRiskWarning"},"type":"array","title":"Warnings"}},"type":"object","title":"PortfolioRiskMetricsResponse"},"PortfolioRiskPosition":{"properties":{"symbol":{"type":"string","title":"Symbol"},"quantity":{"type":"number","title":"Quantity"},"market_value":{"type":"number","title":"Market Value"},"weight_pct":{"type":"number","title":"Weight Pct"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"}},"type":"object","required":["symbol","quantity","market_value","weight_pct"],"title":"PortfolioRiskPosition"},"PortfolioRiskWarning":{"properties":{"code":{"type":"string","title":"Code"},"level":{"type":"string","pattern":"^(info|warning|high)$","title":"Level"},"message":{"type":"string","title":"Message"}},"type":"object","required":["code","level","message"],"title":"PortfolioRiskWarning"},"PortfolioSectorExposure":{"properties":{"sector":{"type":"string","title":"Sector"},"weight_pct":{"type":"number","title":"Weight Pct"},"market_value":{"type":"number","title":"Market Value"}},"type":"object","required":["sector","weight_pct","market_value"],"title":"PortfolioSectorExposure"},"PortfolioSleeveAllocation":{"properties":{"sleeve":{"type":"string","maxLength":64,"minLength":1,"title":"Sleeve"},"quantity":{"type":"number","exclusiveMinimum":0.0,"title":"Quantity"}},"type":"object","required":["sleeve","quantity"],"title":"PortfolioSleeveAllocation"},"PortfolioSleeveSummary":{"properties":{"sleeve":{"type":"string","title":"Sleeve"},"symbol_count":{"type":"integer","title":"Symbol Count"},"position_count":{"type":"integer","title":"Position Count"},"allocated_quantity":{"type":"number","title":"Allocated Quantity"},"market_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Market Value"}},"type":"object","required":["sleeve","symbol_count","position_count","allocated_quantity"],"title":"PortfolioSleeveSummary"},"PortfolioUpdate":{"properties":{"positions":{"anyOf":[{"items":{"$ref":"#/components/schemas/PortfolioPosition"},"type":"array"},{"type":"null"}],"title":"Positions"},"cash":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cash"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"PortfolioUpdate"},"PreferenceResponse":{"properties":{"custom_settings":{"additionalProperties":true,"type":"object","title":"Custom Settings"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["custom_settings","updated_at"],"title":"PreferenceResponse","description":"Schema for user preferences response."},"PreferenceUpdate":{"properties":{"custom_settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Settings"}},"type":"object","title":"PreferenceUpdate","description":"Schema for updating user preferences."},"ProviderInfoResponse":{"properties":{"provider":{"type":"string","title":"Provider"},"checkout_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Url"}},"type":"object","required":["provider"],"title":"ProviderInfoResponse","description":"Information about the configured payment provider."},"ReferralLinkCreate":{"properties":{"slug":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Slug","description":"Custom slug; auto-generated if omitted"},"creator_name":{"type":"string","maxLength":200,"title":"Creator Name","default":""},"creator_email":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Creator Email"},"link_type":{"type":"string","pattern":"^(admin_invite|creator_referral|campaign)$","title":"Link Type","default":"admin_invite"},"grant_tier":{"type":"string","pattern":"^(free|pro)$","title":"Grant Tier","default":"free"},"trial_days":{"anyOf":[{"type":"integer","maximum":90.0,"minimum":1.0},{"type":"null"}],"title":"Trial Days"},"discount_code":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Discount Code"},"revenue_share_pct":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Revenue Share Pct"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"max_signups":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":1.0},{"type":"null"}],"title":"Max Signups"}},"type":"object","title":"ReferralLinkCreate"},"ReferralLinkList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ReferralLinkResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"ReferralLinkList"},"ReferralLinkResponse":{"properties":{"id":{"type":"string","title":"Id"},"slug":{"type":"string","title":"Slug"},"creator_name":{"type":"string","title":"Creator Name"},"creator_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Email"},"link_type":{"type":"string","title":"Link Type"},"created_by_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By User Id"},"grant_tier":{"type":"string","title":"Grant Tier"},"trial_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trial Days"},"discount_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discount Code"},"revenue_share_pct":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue Share Pct"},"is_active":{"type":"boolean","title":"Is Active"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"max_signups":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Signups"},"click_count":{"type":"integer","title":"Click Count"},"signup_count":{"type":"integer","title":"Signup Count"},"pro_conversion_count":{"type":"integer","title":"Pro Conversion Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","slug","creator_name","creator_email","link_type","created_by_user_id","grant_tier","trial_days","discount_code","revenue_share_pct","is_active","expires_at","max_signups","click_count","signup_count","pro_conversion_count","created_at","updated_at"],"title":"ReferralLinkResponse"},"ReferralLinkUpdate":{"properties":{"creator_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Creator Name"},"creator_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Email"},"grant_tier":{"anyOf":[{"type":"string","pattern":"^(free|pro)$"},{"type":"null"}],"title":"Grant Tier"},"trial_days":{"anyOf":[{"type":"integer","maximum":90.0,"minimum":1.0},{"type":"null"}],"title":"Trial Days"},"discount_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discount Code"},"revenue_share_pct":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Revenue Share Pct"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"max_signups":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":1.0},{"type":"null"}],"title":"Max Signups"}},"type":"object","title":"ReferralLinkUpdate"},"ReferralSignupUser":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"tier":{"type":"string","title":"Tier"},"referral_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Source"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","name","tier","referral_source","created_at"],"title":"ReferralSignupUser"},"ReferralSignupsList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ReferralSignupUser"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"ReferralSignupsList"},"ReferralValidateResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"creator_name":{"type":"string","title":"Creator Name"},"grant_tier":{"type":"string","title":"Grant Tier"},"trial_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trial Days"},"discount_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discount Code"},"is_active":{"type":"boolean","title":"Is Active"},"is_usable":{"type":"boolean","title":"Is Usable"},"rejection_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejection Reason"}},"type":"object","required":["slug","creator_name","grant_tier","trial_days","discount_code","is_active","is_usable"],"title":"ReferralValidateResponse"},"RuleCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"content":{"type":"string","title":"Content","default":""}},"type":"object","required":["name"],"title":"RuleCreate","description":"Schema for creating a rule file."},"RuleList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RuleResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"RuleList","description":"Schema for list of rules."},"RuleResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"name":{"type":"string","title":"Name"},"content":{"type":"string","title":"Content"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"path":{"type":"string","title":"Path","default":""},"slug":{"type":"string","title":"Slug","default":""}},"type":"object","required":["id","user_id","name","content","is_active","created_at","updated_at"],"title":"RuleResponse","description":"Schema for rule response."},"RuleUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"RuleUpdate","description":"Schema for updating a rule file."},"SavedFilterCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"query":{"type":"string","minLength":1,"title":"Query"},"override":{"type":"boolean","title":"Override","default":false}},"type":"object","required":["name","query"],"title":"SavedFilterCreate","description":"Schema for creating a saved instrument filter."},"SavedFilterResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"query":{"type":"string","title":"Query"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","query","created_at"],"title":"SavedFilterResponse","description":"Schema for a saved instrument filter."},"SubscriptionStatusResponse":{"properties":{"tier":{"type":"string","title":"Tier"},"status":{"type":"string","title":"Status"},"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"},"ends_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ends At"},"cancel_at_period_end":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cancel At Period End"}},"type":"object","required":["tier","status","subscription_id","ends_at"],"title":"SubscriptionStatusResponse","description":"Current subscription status."},"TradeIdeaCreate":{"properties":{"symbol":{"type":"string","maxLength":20,"minLength":1,"title":"Symbol"},"instrument_name":{"type":"string","maxLength":200,"title":"Instrument Name","default":""},"side":{"type":"string","pattern":"^(buy|sell)$","title":"Side"},"idea_type":{"type":"string","pattern":"^(market|limit|complex)$","title":"Idea Type","default":"market"},"instrument_type":{"type":"string","pattern":"^(stock|etf|option|binary_option|future|forex|crypto|spread|other)$","title":"Instrument Type","default":"stock"},"underlying_symbol":{"anyOf":[{"type":"string","maxLength":20,"minLength":1},{"type":"null"}],"title":"Underlying Symbol"},"strike_price":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Strike Price"},"expiry_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Expiry Date"},"option_type":{"anyOf":[{"type":"string","pattern":"^(call|put)$"},{"type":"null"}],"title":"Option Type"},"contract_size":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Contract Size","default":100},"legs":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Legs"},"payout_ratio":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Payout Ratio"},"quantity":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Quantity"},"entry_price":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Entry Price"},"stop_loss":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Stop Loss"},"take_profit":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit"},"reason":{"type":"string","title":"Reason","default":""},"notes":{"type":"string","title":"Notes","default":""},"sleeve":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Sleeve"},"chat_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Id"},"message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Id"}},"type":"object","required":["symbol","side","quantity","entry_price"],"title":"TradeIdeaCreate"},"TradeIdeaExecuteRequest":{"properties":{"executed_price":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Executed Price"},"executed_quantity":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Executed Quantity"},"fees":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Fees"},"executed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Executed At"},"broker_ref":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Broker Ref"}},"type":"object","required":["executed_price"],"title":"TradeIdeaExecuteRequest","description":"Record execution / fill (e.g. from Flex reconciliation)."},"TradeIdeaFailRequest":{"properties":{"failure_reason":{"type":"string","maxLength":2000,"minLength":1,"title":"Failure Reason"}},"type":"object","required":["failure_reason"],"title":"TradeIdeaFailRequest","description":"Mark broker submission or working order as failed."},"TradeIdeaList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TradeIdeaResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"TradeIdeaList"},"TradeIdeaPlaceRequest":{"properties":{"broker_order_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Broker Order Id"},"broker_perm_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Broker Perm Id"},"broker_ref":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Broker Ref"},"broker_status":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Broker Status"},"placed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Placed At"}},"type":"object","title":"TradeIdeaPlaceRequest","description":"Mark a trade idea placed at the broker (after IB accepts submission)."},"TradeIdeaResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"chat_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Id"},"message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Id"},"symbol":{"type":"string","title":"Symbol"},"instrument_name":{"type":"string","title":"Instrument Name"},"side":{"type":"string","title":"Side"},"idea_type":{"type":"string","title":"Idea Type"},"instrument_type":{"type":"string","title":"Instrument Type"},"underlying_symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Underlying Symbol"},"strike_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Strike Price"},"expiry_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Expiry Date"},"option_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Option Type"},"contract_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contract Size"},"legs":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Legs"},"payout_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Payout Ratio"},"quantity":{"type":"number","title":"Quantity"},"entry_price":{"type":"number","title":"Entry Price"},"stop_loss":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stop Loss"},"take_profit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Take Profit"},"reason":{"type":"string","title":"Reason"},"notes":{"type":"string","title":"Notes"},"sleeve":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sleeve"},"status":{"type":"string","title":"Status"},"executed_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Executed Price"},"executed_quantity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Executed Quantity"},"fees":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fees"},"executed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Executed At"},"broker_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Broker Ref"},"placed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Placed At"},"broker_order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Broker Order Id"},"broker_perm_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Broker Perm Id"},"broker_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Broker Status"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"portfolio_applied_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Portfolio Applied At"},"close_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Close Price"},"closed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Closed At"},"share_token":{"type":"string","title":"Share Token"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"current_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price"},"last_change":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Change"},"last_change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Change Pct"},"market_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Market Value"},"pnl":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pnl"},"pnl_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pnl Pct"}},"type":"object","required":["id","user_id","chat_id","message_id","symbol","instrument_name","side","idea_type","instrument_type","underlying_symbol","strike_price","expiry_date","option_type","contract_size","legs","payout_ratio","quantity","entry_price","stop_loss","take_profit","reason","notes","sleeve","status","executed_price","executed_quantity","fees","executed_at","broker_ref","portfolio_applied_at","close_price","closed_at","share_token","created_at","updated_at"],"title":"TradeIdeaResponse"},"TradeIdeaStats":{"properties":{"total_orders":{"type":"integer","title":"Total Orders","default":0},"saved_orders":{"type":"integer","title":"Saved Orders","default":0},"closed_orders":{"type":"integer","title":"Closed Orders","default":0},"winning_trades":{"type":"integer","title":"Winning Trades","default":0},"losing_trades":{"type":"integer","title":"Losing Trades","default":0},"win_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Win Rate"},"total_pnl":{"type":"number","title":"Total Pnl","default":0.0},"realized_pnl":{"type":"number","title":"Realized Pnl","default":0.0},"unrealized_pnl":{"type":"number","title":"Unrealized Pnl","default":0.0},"best_trade_pnl":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Best Trade Pnl"},"worst_trade_pnl":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Worst Trade Pnl"},"by_symbol":{"items":{"$ref":"#/components/schemas/TradeIdeaSymbolStats"},"type":"array","title":"By Symbol"}},"type":"object","title":"TradeIdeaStats"},"TradeIdeaSymbolStats":{"properties":{"symbol":{"type":"string","title":"Symbol"},"count":{"type":"integer","title":"Count","default":0},"realized_pnl":{"type":"number","title":"Realized Pnl","default":0.0},"unrealized_pnl":{"type":"number","title":"Unrealized Pnl","default":0.0},"total_pnl":{"type":"number","title":"Total Pnl","default":0.0},"market_value":{"type":"number","title":"Market Value","default":0.0}},"type":"object","required":["symbol"],"title":"TradeIdeaSymbolStats"},"TradeIdeaUpdate":{"properties":{"status":{"anyOf":[{"type":"string","pattern":"^(suggested|saved|approved|placed|failed|executed|cancelled|expired|open|closed)$"},{"type":"null"}],"title":"Status"},"close_price":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Close Price"},"executed_price":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Executed Price"},"executed_quantity":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Executed Quantity"},"fees":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Fees"},"executed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Executed At"},"broker_ref":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Broker Ref"},"placed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Placed At"},"broker_order_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Broker Order Id"},"broker_perm_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Broker Perm Id"},"broker_status":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Broker Status"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"sleeve":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Sleeve"},"stop_loss":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Stop Loss"},"take_profit":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Take Profit"}},"type":"object","title":"TradeIdeaUpdate"},"UserEmailBatchResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserEmailItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"UserEmailBatchResponse"},"UserEmailItem":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"}},"type":"object","required":["id","email"],"title":"UserEmailItem"},"UserIdsBatchRequest":{"properties":{"ids":{"items":{"type":"string"},"type":"array","maxItems":200,"title":"Ids"}},"type":"object","title":"UserIdsBatchRequest","description":"List of user UUIDs to resolve to emails (anonymous / invalid ids ignored)."},"UserResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"picture_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Picture Url"},"tier":{"type":"string","title":"Tier","default":"free"},"granted_tier":{"type":"string","title":"Granted Tier","default":"free"},"effective_tier":{"type":"string","title":"Effective Tier","default":"free"},"subscription_status":{"type":"string","title":"Subscription Status","default":"none"},"subscription_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription Ends At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","name","created_at"],"title":"UserResponse","description":"Schema for user response."},"UserTierUpdateRequest":{"properties":{"tier":{"type":"string","maxLength":32,"minLength":1,"title":"Tier"}},"type":"object","required":["tier"],"title":"UserTierUpdateRequest","description":"Tier from admin Rate Limits / ai-service quota (free, pro, anonymous, trader_plus)."},"UserTierUpdateResponse":{"properties":{"id":{"type":"string","title":"Id"},"tier":{"type":"string","title":"Tier"}},"type":"object","required":["id","tier"],"title":"UserTierUpdateResponse"},"UserUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"picture_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Picture Url"}},"type":"object","title":"UserUpdate","description":"Schema for updating user profile."},"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"},"WebhookResponse":{"properties":{"status":{"type":"string","title":"Status"},"event_type":{"type":"string","title":"Event Type"}},"type":"object","required":["status","event_type"],"title":"WebhookResponse","description":"Webhook processing response."}}}}