Feature: Pacifica Multi-Account Hedging System
Date: 2024-12-19
Status: Complete
Endpoint: POST /hedging-sessions
Purpose: Create a new hedging session with multiple accounts
Request Schema:
interface CreateHedgingSessionRequest {
name: string; // Session name (3-50 chars)
accountIds: string[]; // Array of account IDs (min 2)
volumeTarget: number; // Target trading volume
strategy: {
symbol: string; // Trading pair (e.g., "ETH/USD")
volumeDistribution: 'equal' | 'weighted'; // Volume distribution method
priceRange: {
min: number; // Minimum price deviation
max: number; // Maximum price deviation
};
timing: {
minInterval: number; // Minimum seconds between orders
maxInterval: number; // Maximum seconds between orders
orderSize: {
min: number; // Minimum order size
max: number; // Maximum order size
};
};
riskLimits: {
maxPositionSize: number; // Max position size per account
stopLossThreshold: number; // Portfolio loss % to trigger halt
maxSlippage: number; // Maximum acceptable slippage
};
};
}
Response Schema:
interface CreateHedgingSessionResponse {
success: boolean;
session: {
id: string;
name: string;
status: 'pending';
accounts: string[];
strategy: HedgingStrategy;
volumeTarget: number;
volumeGenerated: number;
startTime: string; // ISO timestamp
riskBreaches: [];
orders: [];
};
message?: string;
}
Validation Rules:
Endpoint: GET /hedging-sessions
Purpose: Retrieve all hedging sessions
Request Schema: None (query parameters optional)
Response Schema:
interface ListHedgingSessionsResponse {
success: boolean;
sessions: Array<{
id: string;
name: string;
status: SessionStatus;
accounts: string[];
volumeTarget: number;
volumeGenerated: number;
startTime: string;
endTime?: string;
}>;
total: number;
}
Query Parameters:
status
: Filter by session statusaccountId
: Filter by participating accountlimit
: Maximum number of sessions to returnoffset
: Number of sessions to skipEndpoint: GET /hedging-sessions/{id}
Purpose: Retrieve detailed information for a specific session
Request Schema: Session ID in URL path
Response Schema:
interface GetHedgingSessionResponse {
success: boolean;
session: {
id: string;
name: string;
status: SessionStatus;
accounts: string[];
strategy: HedgingStrategy;
volumeTarget: number;
volumeGenerated: number;
startTime: string;
endTime?: string;
riskBreaches: Array<{
id: string;
breachType: string;
severity: 'warning' | 'critical';
timestamp: string;
resolved: boolean;
}>;
orders: Array<{
id: string;
accountId: string;
symbol: string;
side: 'buy' | 'sell';
size: number;
price: number;
status: string;
createdAt: string;
}>;
};
}
Endpoint: POST /hedging-sessions/{id}/start
Purpose: Start a pending hedging session
Request Schema: Session ID in URL path
Response Schema:
interface StartHedgingSessionResponse {
success: boolean;
session: {
id: string;
status: 'active';
startTime: string;
};
message?: string;
}
Validation Rules:
Endpoint: POST /hedging-sessions/{id}/pause
Purpose: Pause an active hedging session
Request Schema: Session ID in URL path
Response Schema:
interface PauseHedgingSessionResponse {
success: boolean;
session: {
id: string;
status: 'paused';
pausedAt: string;
};
message?: string;
}
Validation Rules:
Endpoint: POST /hedging-sessions/{id}/resume
Purpose: Resume a paused hedging session
Request Schema: Session ID in URL path
Response Schema:
interface ResumeHedgingSessionResponse {
success: boolean;
session: {
id: string;
status: 'active';
resumedAt: string;
};
message?: string;
}
Validation Rules:
Endpoint: POST /hedging-sessions/{id}/stop
Purpose: Stop a hedging session (active or paused)
Request Schema: Session ID in URL path
Response Schema:
interface StopHedgingSessionResponse {
success: boolean;
session: {
id: string;
status: 'completed';
endTime: string;
finalVolume: number;
};
message?: string;
}
Validation Rules:
Endpoint: GET /hedging-sessions/{id}/orders
Purpose: Retrieve all orders for a hedging session
Request Schema: Session ID in URL path
Response Schema:
interface GetSessionOrdersResponse {
success: boolean;
orders: Array<{
id: string;
accountId: string;
symbol: string;
side: 'buy' | 'sell';
type: 'market' | 'limit';
size: number;
price?: number;
status: OrderStatus;
fillPrice?: number;
fillSize?: number;
fees: number;
slippage?: number;
createdAt: string;
updatedAt: string;
pacificaOrderId?: string;
}>;
total: number;
}
Query Parameters:
status
: Filter by order statusaccountId
: Filter by accountside
: Filter by order sidelimit
: Maximum number of orders to returnoffset
: Number of orders to skipEndpoint: WebSocket /ws/market-data
Purpose: Real-time market data streaming
Connection Schema:
interface MarketDataSubscription {
type: 'subscribe';
symbols: string[]; // Trading pairs to subscribe to
channels: ('price' | 'orderbook' | 'trades')[];
}
Message Schema:
interface MarketDataMessage {
type: 'price' | 'orderbook' | 'trade';
symbol: string;
data: {
price?: number;
volume24h?: number;
change24h?: number;
bids?: PriceLevel[];
asks?: PriceLevel[];
tradePrice?: number;
tradeSize?: number;
};
timestamp: number;
}
Endpoint: WebSocket /ws/sessions/{id}
Purpose: Real-time session status updates
Message Schema:
interface SessionUpdateMessage {
type: 'session_update';
sessionId: string;
data: {
status: SessionStatus;
volumeGenerated: number;
volumeTarget: number;
activeOrders: number;
riskBreaches: number;
};
timestamp: number;
}
Endpoint: GET /hedging-sessions/{id}/risk-status
Purpose: Get current risk status for a session
Response Schema:
interface RiskStatusResponse {
success: boolean;
riskStatus: {
sessionId: string;
overallRisk: 'low' | 'medium' | 'high';
accountRisks: Array<{
accountId: string;
riskLevel: 'low' | 'medium' | 'high';
positionSize: number;
marginRatio: number;
pnl: number;
}>;
portfolioRisk: {
totalPnl: number;
maxDrawdown: number;
var95: number;
};
activeBreaches: Array<{
id: string;
breachType: string;
severity: 'warning' | 'critical';
timestamp: string;
}>;
};
}
Endpoint: POST /hedging-sessions/{id}/risk-breaches/{breachId}/acknowledge
Purpose: Acknowledge and resolve a risk breach
Request Schema:
interface AcknowledgeRiskBreachRequest {
action: 'resolve' | 'ignore';
comment?: string;
}
Response Schema:
interface AcknowledgeRiskBreachResponse {
success: boolean;
breach: {
id: string;
resolved: boolean;
acknowledgedAt: string;
action: string;
};
message?: string;
}
interface ErrorResponse {
success: false;
error: {
code: string;
message: string;
details?: any;
};
timestamp: string;
}
SESSION_NOT_FOUND
: Hedging session does not existINVALID_SESSION_STATUS
: Session not in required statusINSUFFICIENT_ACCOUNTS
: Not enough accounts for hedgingINSUFFICIENT_BALANCE
: Not enough balance in accountsRISK_LIMIT_EXCEEDED
: Risk limits would be exceededMARKET_DATA_UNAVAILABLE
: Real-time data not availableORDER_EXECUTION_FAILED
: Order could not be executedAuthorization
headerBearer <api-key>
?api_key=<api-key>
success: true
for successful operationssuccess: false
for failed operations