trading-platform/orchestration/tareas/2026-01-25/TASK-2026-01-25-002-FRONTEND-COMPREHENSIVE-AUDIT/entregables/API-CONTRACTS-MASTER-MATRIX.md
Adrian Flores Cortes 31b1846fea [TASK-009] refactor: Reorganize tasks to date folders
Moved loose tasks to date folders:
- 2026-01-25/: TASK-002-FRONTEND-COMPREHENSIVE-AUDIT, TASK-FRONTEND-MODULE-DOCS
- 2026-01-27/: TASK-BLOCKER-001-TOKEN-REFRESH, TASK-MASTER-ANALYSIS-PLAN

Moved utility files to _utils/:
- ARCHIVE-INFO.md
- ATOMIC-TASKS-INDEX.yml

Aligns with workspace-v2 orchestration standards.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 17:57:14 -06:00

18 KiB

API-CONTRACTS-MASTER-MATRIX.md

Matriz Maestra de Contratos API - Trading Platform Frontend

Proyecto: trading-platform Fecha: 2026-01-25 Total Endpoints: 113


Tabla Maestra de Endpoints API

OQI-001: Auth (15 endpoints)

# Método Endpoint Componente Consumidor Request Body Response 200 Estado
1 POST /auth/register Register.tsx { email, password, name } { token, user }
2 POST /auth/login Login.tsx { email, password } { token, user, refreshToken }
3 POST /auth/logout SecuritySettings {} { success: true }
4 POST /auth/logout-all SecuritySettings {} { success: true }
5 POST /auth/refresh AuthService (auto) { refreshToken } { token } TODO
6 POST /auth/forgot-password ForgotPassword { email } { success: true }
7 POST /auth/reset-password ResetPassword { token, password } { success: true }
8 POST /auth/verify-email VerifyEmail { token } { success: true }
9 POST /auth/phone/send-otp PhoneLoginForm { phone } { success: true }
10 POST /auth/phone/verify-otp PhoneLoginForm { phone, code } { token, user }
11 POST /auth/oauth/callback AuthCallback { code, provider } { token, user }
12 GET /auth/sessions SecuritySettings - [ { id, device, ip, lastActive } ]
13 DELETE /auth/sessions/:sessionId SessionsList - { success: true }
14 POST /auth/2fa/enable SecuritySettings (UI falta) { method: 'totp' } { qrCode, secret } TODO
15 POST /auth/2fa/verify SecuritySettings (UI falta) { code } { success: true } TODO

Cobertura: 87% (13/15)


OQI-002: Educación (14 endpoints)

# Método Endpoint Componente Consumidor Request Body Response 200 Estado
16 GET /education/categories Courses (filtros) - [ { id, name, slug } ]
17 GET /education/courses Courses ?category=&level=&search=&sort=&page=&limit= { courses: [], total, page }
18 GET /education/courses/:slug CourseDetail - { id, title, modules: [...] }
19 POST /education/courses/:courseId/enroll CourseDetail (botón) {} { enrollmentId }
20 GET /education/lessons/:lessonId Lesson - { id, title, videoUrl, content }
21 POST /education/lessons/:lessonId/progress VideoProgressPlayer { progress: 0-100, timestamp } { success: true }
22 POST /education/lessons/:lessonId/complete Lesson (auto) {} { xpGained, badge? }
23 GET /education/quizzes/:quizId Quiz - { id, questions: [...] }
24 POST /education/quizzes/:quizId/submit Quiz (submit) { answers: [] } { score, passed, xpGained }
25 GET /education/achievements MyLearning - [ { id, title, icon, earnedAt } ]
26 GET /education/leaderboard Leaderboard ?period=all_time|week|month [ { rank, userId, name, xp } ]
27 GET /education/gamification/profile MyLearning (stats) - { xp, level, badges, streak }
28 GET /education/enrollments MyLearning - [ { courseId, progress, lastAccessed } ]
29 POST /education/videos/upload Creator Dashboard (NO EXISTE) multipart/form-data (video) { videoId, processingStatus } FALTA

Cobertura: 93% (13/14) - Video upload bloqueante


OQI-003: Trading (20 endpoints)

# Método Endpoint Componente Consumidor Request Body Response 200 Estado
30 GET /trading/market/klines/:symbol CandlestickChart ?interval=1h&limit=500 [ [timestamp, open, high, low, close, volume] ]
31 GET /trading/market/price/:symbol SymbolInfoPanel - { symbol, price, change24h }
32 GET /trading/market/ticker/:symbol SymbolInfoPanel - { high, low, volume, ... }
33 GET /trading/market/order-book/:symbol OrderBookPanel ?limit=20 { bids: [], asks: [] }
34 GET /trading/indicators/sma/:symbol IndicatorConfigPanel ?period=20&interval=1h [ { timestamp, value } ] ⚠️ NO RENDERIZA
35 GET /trading/indicators/ema/:symbol IndicatorConfigPanel ?period=12&interval=1h [ { timestamp, value } ] ⚠️ NO RENDERIZA
36 GET /trading/indicators/rsi/:symbol IndicatorConfigPanel ?period=14&interval=1h [ { timestamp, value } ] ⚠️ NO RENDERIZA
37 GET /trading/indicators/macd/:symbol IndicatorConfigPanel ?interval=1h [ { timestamp, macd, signal, histogram } ] ⚠️ NO RENDERIZA
38 GET /trading/indicators/bollinger/:symbol IndicatorConfigPanel ?period=20&stdDev=2&interval=1h [ { timestamp, upper, middle, lower } ] ⚠️ NO RENDERIZA
39 GET /trading/paper/account PaperTradingPanel - { balance, equity, margin, ... }
40 GET /trading/paper/positions PositionsList - [ { symbol, side, size, entryPrice, pnl } ]
41 GET /trading/paper/orders TradesHistory ?status=open|closed [ { id, symbol, side, type, status } ]
42 POST /trading/paper/orders OrderForm { symbol, side, type, quantity, price? } { orderId, status }
43 DELETE /trading/paper/orders/:orderId TradesHistory (cancel) - { success: true }
44 GET /trading/alerts AlertsPanel - [ { id, symbol, condition, price } ]
45 POST /trading/alerts AlertsPanel (crear) { symbol, condition, price } { alertId }
46 DELETE /trading/alerts/:alertId AlertsPanel (eliminar) - { success: true }
47 POST /trading/drawings/save ChartDrawingToolsPanel { symbol, interval, drawings: [] } { success: true } FALTA
48 GET /trading/drawings/:symbol ChartDrawingToolsPanel ?interval=1h { drawings: [] } FALTA
49 WebSocket ws://localhost:3082/trading useTradingWebSocket - Real-time price updates FALTA

Cobertura: 65% (13/20) - Indicadores renderizado, drawings persistencia, WebSocket faltan


OQI-004: Inversión (10 endpoints)

# Método Endpoint Componente Consumidor Request Body Response 200 Estado
50 GET /investment/accounts/summary Investment (overview) - { totalValue, totalGain, accounts: [] }
51 GET /investment/products Products - [ { id, name, type, minInvestment, expectedReturn } ]
52 GET /investment/products/:productId ProductDetail - { id, name, description, performance: [] }
53 GET /investment/products/:productId/performance ProductDetail (chart) ?period=1M|3M|1Y [ { date, value } ]
54 GET /investment/accounts/:accountId AccountDetail - { id, balance, product, createdAt }
55 GET /investment/accounts/:accountId/transactions Transactions ?type=&startDate=&endDate= [ { id, type, amount, date } ]
56 GET /investment/accounts/:accountId/withdrawals Withdrawals - [ { id, amount, status, requestedAt } ]
57 POST /investment/accounts/:accountId/deposits DepositForm { amount, paymentMethodId } { depositId }
58 POST /investment/accounts/:accountId/withdrawals WithdrawForm { amount, bankAccountId } { withdrawalId }
59 POST /investment/accounts CreateAccountForm (NO EXISTE) { productId, initialAmount } { accountId } FALTA

Cobertura: 90% (9/10) - Creación cuentas bloqueante


OQI-005: Pagos Stripe (24 endpoints)

# Método Endpoint Componente Consumidor Request Body Response 200 Estado
60 GET /payments/plans Pricing - [ { id, name, price, features: [] } ]
61 GET /payments/plans/:slug Pricing (detalle) - { id, name, price, features, stripePriceId }
62 GET /payments/subscription Billing - { id, planId, status, currentPeriodEnd }
63 POST /payments/subscription Pricing (subscribe) { planId, paymentMethodId } { subscriptionId }
64 POST /payments/subscription/change-plan SubscriptionUpgradeFlow { newPlanId } { subscriptionId, proratedAmount }
65 POST /payments/subscription/cancel Billing (cancel) {} { success: true }
66 POST /payments/subscription/reactivate Billing (reactivate) {} { success: true }
67 GET /payments/methods PaymentMethodsList - [ { id, brand, last4, expiryMonth, expiryYear } ]
68 POST /payments/methods PaymentMethodForm { cardNumber, expMonth, expYear, cvc } { methodId } ⚠️ PCI-DSS RISK
69 POST /payments/methods/default PaymentMethodsList { methodId } { success: true }
70 DELETE /payments/methods/:methodId PaymentMethodsList - { success: true }
71 POST /payments/checkout Pricing (Hosted Checkout) { planId, successUrl, cancelUrl } { sessionId, checkoutUrl }
72 POST /payments/billing-portal Billing (Stripe Portal) { returnUrl } { portalUrl }
73 GET /payments/invoices InvoiceList ?limit=10 [ { id, amount, status, date, pdfUrl } ]
74 GET /payments/invoices/:invoiceId InvoiceDetail - { id, lineItems: [], total, pdfUrl }
75 GET /payments/invoices/:invoiceId/pdf InvoiceDetail (download) - PDF binary
76 GET /payments/wallet WalletCard - { balance, available, pending }
77 POST /payments/wallet/deposit WalletDepositModal { amount, paymentMethodId } { transactionId }
78 POST /payments/wallet/withdraw WalletWithdrawModal { amount, bankAccountId } { withdrawalId }
79 GET /payments/wallet/transactions TransactionHistory ?type=&startDate=&endDate=&page=&limit= [ { id, type, amount, status, date } ]
80 POST /payments/coupons/validate CouponForm { code } { valid: true, discount: 20 }
81 POST /payments/refunds RefundModal (NO EXISTE) { invoiceId, reason } { refundId } FALTA
82 GET /payments/usage Billing (uso plan) - { limit, used, percentage }
83 POST /payments/payment-intent PaymentMethodForm (Stripe.js) { amount } { clientSecret } FALTA

Cobertura: 96% (23/24) - Payment Intent (PCI-DSS) crítico falta


OQI-006: ML Signals (12 endpoints)

# Método Endpoint Componente Consumidor Request Body Response 200 Estado
84 GET /api/v1/signals/active MLDashboard ?symbol=&status=active [ { id, symbol, direction, entry, sl, tp, confidence } ]
85 GET /api/v1/signals/latest/:symbol PredictionCard - { signal: {...}, validUntil }
86 GET /api/v1/amd/detect/:symbol AMDPhaseIndicator ?timeframe=1H { currentPhase, probabilities: {...}, keyLevels: [] }
87 GET /api/v1/predict/range/:symbol RangePredictor ?timeframe=1H { predictedHigh, predictedLow, confidence }
88 POST /api/v1/signals/generate MLDashboard (refresh) { symbol, timeframe } { signal: {...} }
89 POST /api/ict/:symbol ICTAnalysisCard { timeframe: '1H' } { orderBlocks: [], fvg: [], bias: 'bullish' }
90 POST /api/ensemble/:symbol EnsembleSignalCard { timeframe: '1H' } { strategies: [], aggregatedSignal: {...} }
91 GET /api/ensemble/quick/:symbol EnsembleSignalCard (quick) - { signal: {...} }
92 POST /api/scan MLDashboard (multi-symbol) { symbols: [], timeframe } [ { symbol, signal: {...} } ]
93 GET /api/v1/backtest/results/:strategyId BacktestResultsVisualization - { trades: [], metrics: { winRate, profitFactor } }
94 WebSocket ws://localhost:3083/signals useMLWebSocket - Real-time signal updates FALTA
95 POST /api/v1/signals/:signalId/export MLDashboard (export) { format: 'csv' | 'pdf' } Blob (file download) FALTA

Cobertura: 83% (10/12) - WebSocket y exportación faltan


OQI-007: LLM Agent (6 endpoints)

# Método Endpoint Componente Consumidor Request Body Response 200 Estado
96 POST /api/v1/llm/sessions Assistant (new chat) { title? } { sessionId, title }
97 GET /api/v1/llm/sessions ConversationHistory - [ { id, title, createdAt, messageCount } ]
98 GET /api/v1/llm/sessions/:sessionId Assistant (load) - { id, title, messages: [] }
99 POST /api/v1/llm/sessions/:sessionId/chat ChatInput (send) { content, role: 'user' } { id, role: 'assistant', content, toolCalls: [] }
100 DELETE /api/v1/llm/sessions/:sessionId ConversationHistory (delete) - { success: true }
101 GET /api/v1/llm/analyze/:symbol Assistant (quick analyze) - { analysis: '...' }

Cobertura: 100% (6/6) - Backend funcional, falta persistencia BD y streaming


OQI-008: Portfolio (12 endpoints)

# Método Endpoint Componente Consumidor Request Body Response 200 Estado
102 GET /portfolio/portfolios PortfolioDashboard - [ { id, name, totalValue, allocations: [] } ]
103 GET /portfolio/portfolios/:portfolioId PortfolioDashboard (detalle) - { id, name, allocations: [], performance: [] }
104 POST /portfolio/portfolios CreatePortfolio { name, riskProfile, allocations: [] } { portfolioId }
105 PUT /portfolio/portfolios/:portfolioId EditAllocations { name?, allocations? } { success: true }
106 DELETE /portfolio/portfolios/:portfolioId PortfolioDashboard (delete) - { success: true }
107 GET /portfolio/portfolios/:portfolioId/performance PerformanceChart ?period=1M|3M|1Y [ { date, value } ]
108 PUT /portfolio/portfolios/:portfolioId/allocations EditAllocations (save) { allocations: [] } { success: true }
109 GET /portfolio/goals PortfolioDashboard (goals) - [ { id, name, targetAmount, deadline } ]
110 POST /portfolio/goals CreateGoal { name, targetAmount, deadline } { goalId }
111 DELETE /portfolio/goals/:goalId PortfolioDashboard (delete goal) - { success: true }
112 GET /portfolio/recommendations/rebalance/:portfolioId RebalanceCard - { recommended: [], changes: [] }
113 POST /portfolio/optimize/:portfolioId OptimizeButton (NO EXISTE) { method: 'markowitz', constraints: {} } { optimizedAllocations: [] } FALTA

Cobertura: 92% (11/12) - Markowitz optimization bloqueante


OQI-009: MT4 Gateway (0 endpoints - TODO completo)

# Método Endpoint Componente Consumidor Request Body Response 200 Estado
- - TODOS FALTANTES MT4 components (stubs) - - 0%

Cobertura: 0% - Epic completo NO IMPLEMENTADO


Resumen Global

Epic Total Endpoints Implementados Faltantes Cobertura
OQI-001 (Auth) 15 13 2 87%
OQI-002 (Educación) 14 13 1 93%
OQI-003 (Trading) 20 13 7 65%
OQI-004 (Inversión) 10 9 1 90%
OQI-005 (Pagos) 24 23 1 96%
OQI-006 (ML Signals) 12 10 2 83%
OQI-007 (LLM Agent) 6 6 0 100%
OQI-008 (Portfolio) 12 11 1 92%
OQI-009 (MT4) 0 0 0+ 0%
TOTAL 113 98 15 87%

Endpoints Críticos Faltantes (Bloqueantes)

Epic Endpoint Criticidad Impacto
OQI-001 POST /auth/refresh P0 Token refresh manual
OQI-002 POST /education/videos/upload P0 Video upload bloqueado
OQI-003 WebSocket trading P0 Real-time data (polling 30s)
OQI-003 POST /trading/drawings/save P1 Drawing tools orphaned
OQI-004 POST /investment/accounts P0 Creación cuentas bloqueada
OQI-005 POST /payments/payment-intent P0 PCI-DSS non-compliant
OQI-006 WebSocket signals P1 Polling 60s vs real-time
OQI-008 POST /portfolio/optimize P0 Markowitz optimization
OQI-009 ALL P0 Epic completo NO FUNCIONA

Actualizado: 2026-01-25 Próxima actualización: Después de implementar Fase 1