{"openapi":"3.1.0","info":{"title":"NeuroTrade Gateway","description":"Unified API gateway for the NeuroTrade AI copy-trading platform. Serves both the subscriber SPA (JWT auth) and the B2B Signal API (nt_ Bearer tokens). Authentication: JWT Bearer for subscriber endpoints; `Authorization: Bearer nt_<key>` for B2B Signal API endpoints (/api/v1/signals/generate, /api/v1/account). B2B plans: Developer $49/mo (500 calls/mo), Professional $149/mo (5 000 calls/mo), Enterprise $299/mo (unlimited). Obtain keys via the developer portal.","version":"1.0.0"},"servers":[{"url":"https://neurotrade.a3eecosystem.com","description":"Production"}],"paths":{"/health":{"get":{"tags":["Account"],"summary":"Health Check","description":"Gateway health + aggregated service health. No authentication required.","operationId":"gatewayHealth","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/register":{"post":{"summary":"Auth Register","operationId":"auth_register_api_v1_auth_register_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/login":{"post":{"summary":"Auth Login","operationId":"auth_login_api_v1_auth_login_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/me":{"get":{"summary":"Get Me","operationId":"get_me_api_v1_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/candles/{symbol}":{"get":{"summary":"Get Candles","operationId":"get_candles_api_v1_candles__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indicators/{symbol}":{"get":{"summary":"Get Indicators","operationId":"get_indicators_api_v1_indicators__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/regime/{symbol}":{"get":{"summary":"Get Regime","operationId":"get_regime_api_v1_regime__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/strategies":{"get":{"summary":"Get Strategies","operationId":"get_strategies_api_v1_strategies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/strategies/cards":{"get":{"summary":"Get Strategy Cards","description":"Proxy to strategy-engine /cards â€” the rich subscriber-facing cards.\n\nEach card has display_name, tagline, what_it_does, best_in_regime,\ntypical_hold/target/stop, typical_signals_per_day, tier_required,\nsubscriber_expectation, risks, ideal_for, not_ideal_for. The SPA\nrenders these as the primary strategy-browse experience.","operationId":"get_strategy_cards_api_v1_strategies_cards_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/strategies/card/{strategy_type}":{"get":{"summary":"Get Strategy Card","description":"Proxy to strategy-engine /card/{strategy_type} for a single rich card.","operationId":"get_strategy_card_api_v1_strategies_card__strategy_type__get","parameters":[{"name":"strategy_type","in":"path","required":true,"schema":{"type":"string","title":"Strategy Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/strategies/deploy":{"post":{"summary":"Deploy Strategy","operationId":"deploy_strategy_api_v1_strategies_deploy_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/strategies/mine":{"get":{"summary":"Get My Strategies","operationId":"get_my_strategies_api_v1_strategies_mine_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/execute":{"post":{"summary":"Execute Order","operationId":"execute_order_api_v1_execute_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/positions":{"get":{"summary":"Get Positions","operationId":"get_positions_api_v1_positions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/trades":{"get":{"summary":"Get Trades","operationId":"get_trades_api_v1_trades_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/pnl":{"get":{"summary":"Get Pnl","operationId":"get_pnl_api_v1_pnl_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/emergency-stop":{"post":{"summary":"Emergency Stop","operationId":"emergency_stop_api_v1_emergency_stop_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/risk/profile":{"get":{"summary":"Get Risk Profile","operationId":"get_risk_profile_api_v1_risk_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Update Risk Profile","operationId":"update_risk_profile_api_v1_risk_profile_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/risk/profile/limits":{"get":{"summary":"Get Risk Profile Limits","description":"Return the slot-slider range for the user's tier + current state.","operationId":"get_risk_profile_limits_api_v1_risk_profile_limits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/risk/profile/slots":{"post":{"summary":"Update Risk Profile Slots","description":"Slot-slider setter. Body: {\"slots\": N}. Clamped server-side to tier cap.","operationId":"update_risk_profile_slots_api_v1_risk_profile_slots_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/risk/profile/watchlist":{"get":{"summary":"Get Risk Profile Watchlist","description":"Return the user's watchlist + full pool for the picker UI.","operationId":"get_risk_profile_watchlist_api_v1_risk_profile_watchlist_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Update Risk Profile Watchlist","description":"Watchlist setter. Body: {\"auto\": bool, \"assets\": [...]}.","operationId":"update_risk_profile_watchlist_api_v1_risk_profile_watchlist_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/risk/profile/leverage":{"get":{"summary":"Get Risk Profile Leverage","description":"Return leverage slider range + per-category breakdown.","operationId":"get_risk_profile_leverage_api_v1_risk_profile_leverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Update Risk Profile Leverage","description":"Leverage slider setter. Body: {\"leverage\": float}.","operationId":"update_risk_profile_leverage_api_v1_risk_profile_leverage_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/backtest":{"post":{"summary":"Run Backtest","operationId":"run_backtest_api_v1_backtest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/backtest/ai":{"post":{"summary":"Run Ai Backtest","description":"Brainiac-driven historical replay. Calls brain.trading_intelligence\nper candle with a personality prompt and reports every decision.","operationId":"run_ai_backtest_api_v1_backtest_ai_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/backtest/{backtest_id}":{"get":{"summary":"Get Backtest Result","operationId":"get_backtest_result_api_v1_backtest__backtest_id__get","parameters":[{"name":"backtest_id","in":"path","required":true,"schema":{"type":"string","title":"Backtest Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/plans":{"get":{"summary":"Get Plans","operationId":"get_plans_api_v1_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/entitlements":{"get":{"summary":"Get Entitlements","description":"Proxy to billing-service /entitlements.\n\nReturns the full tierâ†’strategies + tierâ†’personalities allow-list map.\nPublic endpoint (in PUBLIC_PREFIXES via /api/v1/plans is already public;\nwe add /api/v1/entitlements separately). Used by the SPA marketplace and\nonboarding walkthrough to render tier locks.","operationId":"get_entitlements_api_v1_entitlements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/checkout":{"post":{"summary":"Create Checkout","operationId":"create_checkout_api_v1_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/subscription":{"get":{"summary":"Get Subscription","operationId":"get_subscription_api_v1_subscription_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/stripe/webhook":{"post":{"summary":"Stripe Webhook","operationId":"stripe_webhook_api_v1_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/subscription/cancel":{"post":{"summary":"Cancel Subscription","description":"Cancel the authenticated user's subscription. Drops them to TRIAL.","operationId":"cancel_subscription_api_v1_subscription_cancel_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/subscription/change":{"post":{"summary":"Change Subscription Tier","description":"Change tier (downgrade or sideways). Body: {target_tier, immediate}.\nuser_id is taken from the JWT, not the body â€” security.","operationId":"change_subscription_tier_api_v1_subscription_change_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/invoices":{"get":{"summary":"Get Invoices","description":"Return the authenticated user's billing invoices (Stripe).","operationId":"get_invoices_api_v1_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/capacity":{"get":{"summary":"Get Capacity","operationId":"get_capacity_api_v1_capacity_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/exchange-accounts":{"get":{"summary":"List Exchange Accounts","operationId":"list_exchange_accounts_api_v1_exchange_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Add Exchange Account","operationId":"add_exchange_account_api_v1_exchange_accounts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/owner/grant-access":{"post":{"summary":"Owner Grant","operationId":"owner_grant_api_v1_owner_grant_access_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/owner/users":{"get":{"summary":"Owner Users","operationId":"owner_users_api_v1_owner_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/owner/user-tier":{"put":{"summary":"Owner Tier","operationId":"owner_tier_api_v1_owner_user_tier_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/owner/user-status":{"put":{"summary":"Owner Status","operationId":"owner_status_api_v1_owner_user_status_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/owner/promo-codes":{"get":{"summary":"Owner List Promos","operationId":"owner_list_promos_api_v1_owner_promo_codes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Owner Create Promo","operationId":"owner_create_promo_api_v1_owner_promo_codes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/owner/promo-codes/{code}":{"delete":{"summary":"Owner Delete Promo","operationId":"owner_delete_promo_api_v1_owner_promo_codes__code__delete","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/redeem-promo":{"post":{"summary":"Redeem Promo","operationId":"redeem_promo_api_v1_redeem_promo_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin":{"get":{"summary":"Admin Panel","description":"Serve the owner admin panel.","operationId":"admin_panel_admin_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/maintenance":{"get":{"summary":"Maintenance Page","description":"Under maintenance page.","operationId":"maintenance_page_maintenance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Landing Page","description":"Serve the NeuroTrade landing page for public visitors.","operationId":"landing_page__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/about":{"get":{"summary":"About Page","description":"Serve the NeuroTrade about page.","operationId":"about_page_about_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/vs/{competitor}":{"get":{"summary":"Competitor Comparison","description":"Serve a NeuroTrade-vs-<competitor> comparison page (Phase 13.10 surface).\n\nPages live as static HTML at web/public/vs-<competitor>.html, rendered by the\na3e-competitor-comparison-page skill from canonical markdown at\nD:/A3E_MEDIA/landing_pages/vs_<competitor>/page.md. To add a new comparison\npage, render the markdown via the skill and drop the produced HTML here.\n\ncompetitor slug is sanitised (lowercase, alphanumeric + dash/underscore only)\nto prevent path traversal.","operationId":"competitor_comparison_vs__competitor__get","parameters":[{"name":"competitor","in":"path","required":true,"schema":{"type":"string","title":"Competitor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/signup":{"get":{"summary":"Signup Redirect","operationId":"signup_redirect_signup_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/login":{"get":{"summary":"Login Redirect","operationId":"login_redirect_login_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/{path}":{"get":{"summary":"Docs Page","description":"Serve documentation pages and images.","operationId":"docs_page_docs__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/support-widget.js":{"get":{"summary":"Support Widget Js","description":"Serve the support chat widget JavaScript.","operationId":"support_widget_js_support_widget_js_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/activity":{"get":{"summary":"Get Activity","description":"Live scanning activity â€” what the AI is analyzing right now.","operationId":"get_activity_api_v1_activity_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/ai/decisions":{"get":{"summary":"Ai Decisions","description":"Return recent trading_decisions for the authenticated user.\n\nQuery params (all optional): limit, personality, action, since_hours.\nUses request.state.user_id set by AuthMiddleware.","operationId":"ai_decisions_api_v1_ai_decisions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/ai/thesis":{"get":{"summary":"Ai Thesis","description":"Return the per-personality rollup for Today's AI Thesis.\n\nQuery params: hours (default 24).","operationId":"ai_thesis_api_v1_ai_thesis_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/support/chat":{"post":{"summary":"Support Chat","description":"AI customer support chatbot. Tier-aware response prioritization.","operationId":"support_chat_api_v1_support_chat_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/support/ticket":{"post":{"summary":"Submit Support Ticket","description":"Submit a support ticket. Tier-prioritized response window enforced.\n\nBody: {subject, message, category (optional)}.\nCreates a row in support_tickets with tier-derived priority and\nSLA-deadline timestamp. The ops team reads support_tickets ordered by\n(priority DESC, created_at ASC) so higher tiers get attended first.","operationId":"submit_support_ticket_api_v1_support_ticket_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/support/sla":{"get":{"summary":"Support Sla For User","description":"Return the requesting user's SLA tier + response window.","operationId":"support_sla_for_user_api_v1_support_sla_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/api-key":{"post":{"summary":"B2B Create Api Key","description":"Issue a B2B Developer API key for the authenticated user.\n\nRequires: Authorization: Bearer <JWT> (standard NeuroTrade login token).\nReturns the raw key once â€” store it securely.\nAuth is enforced by user-service internally (get_current_user).\nThe gateway's /api/v1/auth/ prefix is already public â€” user-service\nrejects requests without a valid JWT via its own dependency.","operationId":"b2b_create_api_key_api_v1_auth_api_key_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/account":{"get":{"tags":["Account"],"summary":"Get B2B API Quota","description":"Return B2B API plan and call quota.\n\nRequires: Authorization: Bearer nt_<key>. Public (no JWT required).\nReturns plan tier (Developer/Professional/Enterprise), calls_used, calls_remaining, reset_date.","operationId":"b2bGetAccount","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/signals/generate":{"post":{"tags":["Signals"],"summary":"Generate Trading Signal","description":"B2B Signal API â€” generate an AI trading signal for a crypto pair.\n\nRequires: Authorization: Bearer nt_<key>. Rate-limited by plan quota. Returns 429 when exhausted.\nPlans: Developer $49/mo (500 calls/mo), Professional $149/mo (5k/mo), Enterprise $299/mo (unlimited).\nReturns: action (OPEN_LONG/OPEN_SHORT/CLOSE), confidence (0.0-1.0), entry_price, take_profit,\nstop_loss, risk_reward, indicators (RSI/MACD/EMA/ATR), risk_flags, thesis, quota_remaining.","operationId":"b2bGenerateSignal","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp":{"post":{"tags":["MCP"],"summary":"MCP Tool Endpoint","description":"MCP Streamable HTTP transport â€” exposes generate_signal + get_account as tools.\n\nAuth: Authorization: Bearer nt_<api_key> header required for tool calls.\nProtocol: Model Context Protocol 2024-11-05.\nListed on registry.modelcontextprotocol.io as com.a3eecosystem/neurotrade-signal.","operationId":"mcpEndpoint","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/mcp-registry-auth":{"get":{"summary":"Mcp Registry Auth","description":"Domain ownership verification file for registry.modelcontextprotocol.io HTTP auth.\n\nContent is generated by mcp-publisher and placed in data/mcp_registry_auth.txt.","operationId":"mcp_registry_auth__well_known_mcp_registry_auth_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/glama.json":{"get":{"summary":"Glama Claim","description":"Domain ownership file for the Glama MCP directory (claim of the NeuroTrade Signal API listing).\n\nContent lives in data/glama_claim.json, written 2026-09-29 from Glama's claim dialog; Glama re-checks it\ndaily, so it stays published. Same shape as the MCP registry route above.","operationId":"glama_claim__well_known_glama_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/app/{path}":{"get":{"summary":"App Pages","description":"Serve the NeuroTrade web app. Client-side routing handles all pages.","operationId":"app_pages_app__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/app":{"get":{"summary":"App Pages","description":"Serve the NeuroTrade web app. Client-side routing handles all pages.","operationId":"app_pages_app_get","parameters":[{"name":"path","in":"query","required":false,"schema":{"type":"string","default":"","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"nt_<api_key>","description":"B2B Signal API authentication. Keys begin with `nt_`. Obtain via the developer portal at https://neurotrade.a3eecosystem.com/app. Example: Authorization: Bearer nt_abc1xyz2..."},"jwtAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Subscriber JWT authentication. Obtain a token via POST /api/v1/auth/login. Example: Authorization: Bearer eyJ..."}}},"tags":[{"name":"Auth","description":"User registration, login, and B2B API key issuance."},{"name":"Signals","description":"B2B Signal API â€” AI-generated crypto trading signals."},{"name":"Account","description":"B2B API quota, plan, and health endpoints."},{"name":"Strategies","description":"Strategy catalogue and subscriber deployments."},{"name":"Execution","description":"Order execution, positions, trades, and PnL."},{"name":"Risk","description":"Risk profile management and slot/leverage controls."},{"name":"Backtest","description":"Historical and AI-driven backtests."},{"name":"Billing","description":"Plans, subscriptions, checkout, and invoices."},{"name":"Support","description":"AI customer support chatbot and ticket submission."},{"name":"MCP","description":"Model Context Protocol Streamable HTTP endpoint."}]}