HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/vnd.oai.openapi+json
Vary: Accept
{
"openapi": "3.0.2",
"info": {
"title": "Trader Dashboard API",
"version": "1.0.0",
"description": "Interactive documentation for the Trader Dashboard service."
},
"paths": {
"/api/all-alerts/": {
"get": {
"operationId": "listAllAlerts",
"description": "Return all alert types using a DB-level union for speed.\n\nOptionally include `is_in_watchlist` and/or filter by watchlist with\n`?is_in_watchlist=1`.",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/trading-alerts/{alert_id}/plan/": {
"get": {
"operationId": "listTradingPlanDetails",
"description": "",
"parameters": [
{
"name": "alert_id",
"in": "path",
"required": true,
"description": "",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/stocks/all/": {
"get": {
"operationId": "listAllStocks",
"description": "Return all active stocks with ticker and name only.",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/stocks/": {
"get": {
"operationId": "listStocks",
"description": "Return paginated stock data with watchlist info.",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/stocks/{stock_symbol}/": {
"get": {
"operationId": "retrieveAPIStockDetail",
"description": "Return detailed information for a single stock.",
"parameters": [
{
"name": "stock_symbol",
"in": "path",
"required": true,
"description": "",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/portfolio/": {
"get": {
"operationId": "listAPIPortfolios",
"description": "Return portfolio summary, chart data and positions for the authenticated user.",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/portfolio/asset-allocation/": {
"get": {
"operationId": "listAPIAssetAllocations",
"description": "Return allocation by sector and by holding (percent of total).",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/portfolio/risk/": {
"get": {
"operationId": "listAPIPortfolioRisks",
"description": "Return basic risk metrics computed from portfolio daily values.",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/portfolio/goals/": {
"get": {
"operationId": "listAPIGoalListCreates",
"description": "",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
},
"post": {
"operationId": "createAPIGoalList",
"description": "",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/user/": {
"get": {
"operationId": "listAPIUserInfos",
"description": "Return basic information for the authenticated user.",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
},
"patch": {
"operationId": "partialUpdateAPIUserInfo",
"description": "Allow a user to update first and last name.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/manage-subscription/": {
"get": {
"operationId": "listAPIManageSubscriptions",
"description": "Return a billing portal session URL or checkout redirect.",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/subscription-info/": {
"get": {
"operationId": "listAPISubscriptionInfos",
"description": "Return the user's current plan and upcoming billing details.",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/create-checkout-session/": {
"get": {
"operationId": "listAPICreateCheckoutSessions",
"description": "Create a checkout session and return the URL for the frontend.",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/user/alert-preferences/": {
"get": {
"operationId": "listAlertPreferencesViewSets",
"description": "Retrieve and update alert preferences for the authenticated user.",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
},
"patch": {
"operationId": "partialUpdateAlertPreferencesViewSet",
"description": "Retrieve and update alert preferences for the authenticated user.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/dashboard/": {
"get": {
"operationId": "listAPIDashboards",
"description": "Return summary information for the dashboard.",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {}
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/stripe/webhook/": {
"post": {
"operationId": "createStripeWebhook",
"description": "Stripe webhook endpoint (no auth, no CSRF via DRF).\n\nStripe posts signed JSON payloads; we verify the signature using the\n`STRIPE_WEBHOOK_SECRET` from settings and update local subscription state.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"stripe"
]
}
},
"/api/contact/": {
"post": {
"operationId": "createAPIContact",
"description": "Receive contact form submissions and email support.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/signup/": {
"post": {
"operationId": "createAPISignup",
"description": "Create a new user and send a verification email.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/resend-verification/": {
"post": {
"operationId": "createAPIResendVerification",
"description": "Resend verification email for inactive users.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/verify-email/": {
"post": {
"operationId": "createAPIVerifyEmail",
"description": "Verify a user's email using a token.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/stripe-success/": {
"post": {
"operationId": "createAPIStripeSuccess",
"description": "Handle Stripe checkout success via API.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/unified-endpoint/": {
"post": {
"operationId": "createUnifiedEndpoint",
"description": "Accept raw unified payload and queue async processing.\n\nThis keeps the endpoint fast during spikes (e.g., market close).",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/stocks/values": {
"post": {
"operationId": "createStockValue",
"description": "",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/stocks/{stock_symbol}/weekly-trend/": {
"post": {
"operationId": "createWeeklyTrendSave",
"description": "Queue async regeneration of the weekly trend snapshot for a stock.",
"parameters": [
{
"name": "stock_symbol",
"in": "path",
"required": true,
"description": "",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/watchlist/{stock_symbol}/": {
"post": {
"operationId": "createAPIWatchlist",
"description": "Add a stock to the user's watchlist.",
"parameters": [
{
"name": "stock_symbol",
"in": "path",
"required": true,
"description": "",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
},
"delete": {
"operationId": "destroyAPIWatchlist",
"description": "Remove a stock from the user's watchlist.",
"parameters": [
{
"name": "stock_symbol",
"in": "path",
"required": true,
"description": "",
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/portfolio/transactions/": {
"post": {
"operationId": "createAPITransaction",
"description": "Add a new transaction for the authenticated user.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/change-password/": {
"post": {
"operationId": "createAPIChangePassword",
"description": "Allow an authenticated user to change their password.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/reset-password/": {
"post": {
"operationId": "createAPIRequestPasswordReset",
"description": "Handle password reset requests by sending a reset link.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/reset-password/confirm/": {
"post": {
"operationId": "createAPIResetPasswordConfirm",
"description": "Confirm a password reset using a valid token.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/token/": {
"post": {
"operationId": "createStripeTokenObtainPair",
"description": "",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StripeTokenObtainPair"
}
},
"application/x-www-form-urlencoded": {
"schema": {
"$ref": "#/components/schemas/StripeTokenObtainPair"
}
},
"multipart/form-data": {
"schema": {
"$ref": "#/components/schemas/StripeTokenObtainPair"
}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StripeTokenObtainPair"
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/token/refresh/": {
"post": {
"operationId": "createTokenRefresh",
"description": "Takes a refresh type JSON web token and returns an access type JSON web\ntoken if the refresh token is valid.",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TokenRefresh"
}
},
"application/x-www-form-urlencoded": {
"schema": {
"$ref": "#/components/schemas/TokenRefresh"
}
},
"multipart/form-data": {
"schema": {
"$ref": "#/components/schemas/TokenRefresh"
}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TokenRefresh"
}
}
},
"description": ""
}
},
"tags": [
"api"
]
}
},
"/api/portfolio/goals/{goal_id}/": {
"patch": {
"operationId": "partialUpdateAPIGoalDetail",
"description": "",
"parameters": [
{
"name": "goal_id",
"in": "path",
"required": true,
"description": "",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {}
},
"application/x-www-form-urlencoded": {
"schema": {}
},
"multipart/form-data": {
"schema": {}
}
}
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {}
}
},
"description": ""
}
},
"tags": [
"api"
]
},
"delete": {
"operationId": "destroyAPIGoalDetail",
"description": "",
"parameters": [
{
"name": "goal_id",
"in": "path",
"required": true,
"description": "",
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"description": ""
}
},
"tags": [
"api"
]
}
}
},
"components": {
"schemas": {
"StripeTokenObtainPair": {
"type": "object",
"properties": {
"username": {
"type": "string",
"writeOnly": true
},
"password": {
"type": "string",
"writeOnly": true
}
},
"required": [
"username",
"password"
]
},
"TokenRefresh": {
"type": "object",
"properties": {
"refresh": {
"type": "string"
},
"access": {
"type": "string",
"readOnly": true
}
},
"required": [
"refresh"
]
}
}
}
}