API and SaaS Layer

FastAPI REST Routes

Comprehensive overview of the FastAPI application, modular router architecture, all 22+ route modules, the Redis command bus, security middleware, and rate limiting.

โฑ๏ธ 6 min read๐Ÿ“Š Level: Intermediate

The FastAPI backend (api/depthsight_api.py, ~2,220 lines) acts as the administrative control panel of the DepthSight platform. It manages user credentials, strategy definitions, exchange API keys, subscription billing, and issues process signals to bot workers via the Redis command bus.


Endpoint Architecture

The API is organized into modular APIRouters with a two-tier registration pattern:

Tier 1 โ€” Master api_router (line 1575)

Sources:

Tier 2 โ€” include_application_routers() (lines 2185โ€“2215)

All routers are passed to a central registration function:

Sources:

Conditional routers (hub, simulation, phantom) are loaded based on environment configuration.


Complete Route Module Reference

Router VariableSource FilePrefixAuth
public_routerroutes/public.py/api/v1/shared/...Public
auth_routerroutes/auth.py/api/v1/authMixed
strategies_routerroutes/strategies.py/api/v1/strategiesget_current_user
backtests_routerroutes/backtests.py/api/v1/backtestsget_current_user
payments_routerroutes/payments.py/api/v1/paymentsget_current_user
webhooks_routerroutes/webhooks.py/webhooksPublic
admin_routerroutes/admin.py/api/v1/adminrequire_admin_role
affiliate_routerroutes/affiliate.py/api/v1/affiliateMixed
model_lab_routerroutes/model_lab.py/api/v1/model-labget_current_user
users_extra_routerroutes/users.py/api/v1/usersget_current_user
notifications_routerroutes/notifications.py/api/v1/notificationsget_current_user
support_routerroutes/support.py/api/v1/supportget_current_user
admin_support_routerroutes/support.py/api/v1/admin/supportrequire_admin_role
discovery_routerroutes/discovery.py/api/v1/discoveryget_current_user
ai_meta_routerroutes/ai.py/api/v1/aiget_current_user
ai_core_routerroutes/ai.py/api/v1/aiget_current_user + use_ai_assistant
api_keys_routerroutes/api_keys.py/api/v1/config/api-keysget_current_user
account_routerroutes/account.py/api/v1/accountget_current_user
portfolio_routerroutes/portfolio.py/portfolio/...get_current_user
config_routerroutes/config.py/configget_current_user
diagnostics_routerroutes/diagnostics.py/statusMixed
tasks_routerroutes/tasks.py/tasksget_current_user
gamification_routerroutes/gamification.py/gamificationget_current_user
hft_routerhft_router.py/hft (under /api/v1)get_current_user

Key Endpoint Actions

Route PathMethodPurpose
/api/v1/auth/registerPOSTUser registration with default workspace, referral tracking
/api/v1/auth/tokenPOSTJWT access + refresh token generation (OAuth2)
/api/v1/strategies/savePOSTSaves/updates visual block JSON strategies to PostgreSQL
/api/v1/strategies/startPOSTPublishes a start event to the Redis Command Bus
/api/v1/strategies/stopPOSTSignals bot engine to exit/liquidate
/api/v1/backtests/runPOSTEnqueues backtest via Celery task
/api/v1/backtests/geneticPOSTEnqueues genetic optimization via Celery
/api/v1/payments/invoicePOSTCreates Bitcart payment invoice
/api/v1/ai/chatPOSTAI Co-Pilot chat with RAG context
/api/v1/admin/usersGETAdmin panel user management
/webhooks/tradingviewPOSTTradingView webhook signal receiver
/api/v1/hft/commandPOSTHigh-frequency trading commands

The Command Bus Control Flow

When a user initiates an action via the frontend (e.g., clicking "Start Bot"), the REST API does not execute the bot directly. It serializes the command and pushes it to Redis to maintain stateless architecture:

Frontend (Click Start)
    |
    |- HTTP POST /api/v1/strategies/start
    |
    v
FastAPI Backend
    |
    |- Redis PUBLISH to depthsight:commands
    |  {"command": "INITIALIZE_USER_CONTROLLER", "payload": {"user_id": 42}}
    |
    v
Redis Command Bus
    |
    v
bot_runner.py (listens on depthsight:commands)
    |
    |- Spawns isolated controller process
    v
Active Bot Worker (user_id=42, TradingController)

Command Bus Helpers (api/live_runtime.py)

FunctionCommandPurpose
build_initialize_user_controller_command(user_id)INITIALIZE_USER_CONTROLLERStart user trading controller
build_activate_api_key_command(user_id, api_key_id)ACTIVATE_API_KEYActivate API key for live trading
build_deactivate_api_key_command(user_id, api_key_id)DEACTIVATE_API_KEYDeactivate API key

Plan Change Sync (_sync_live_runtime_for_plan_change, lines 532-616)

The API automatically manages bot state on plan transitions:

TransitionAction
Free to Standard/ProPublish INITIALIZE_USER_CONTROLLER
Standard/Pro to FreeDeactivate non-Bybit API keys
No live to Live allowedInitialize controller for all active keys

Security Middleware and Rate Limiting

CORS Configuration (lines 1561-1573)

Sources:

Security Headers (lines 1425-1450)

Every HTTP response includes:

  • X-Content-Type-Options: nosniff
  • X-Frame-Options: DENY
  • Strict-Transport-Security: max-age=31536000; includeSubDomains
  • Content-Security-Policy with allowed connect-src for Binance/Bybit APIs, Google OAuth

Rate Limiting (lines 1496-1512)

Uses slowapi.Limiter with Redis-backed storage (DB 1) in production:

Endpoint GroupLimit
Backtest execution100/hour
Login attempts5/minute
Default600/minute

Lifespan Management (lines 1243-1401)

The FastAPI lifespan context manager handles:

  1. Building and caching AI prompts for the Co-Pilot.
  2. Starting the aiohttp client session.
  3. Central Hub: auto-creating/migrating DB tables.
  4. Non-Hub nodes: background sync loop to Federation Hub (with Redis lock).
  5. Pre-loading the Oracle ML model for simulation.
  6. Graceful shutdown of the aiohttp session.