Feature: Pacifica Multi-Account Hedging System
Date: 2024-12-19
Status: Complete
Endpoint: POST /accounts
Purpose: Add a new trading account to the system
Request Schema:
interface AddAccountRequest {
name: string; // Account name (3-30 chars)
privateKey: string; // Encrypted private key
initialUSDC: number; // Initial USDC balance
riskLimits: {
maxPositionSize: number; // Max position size (0-1)
maxDailyLoss: number; // Max daily loss (0-1)
maxLeverage: number; // Max leverage (≥1)
stopLossThreshold: number; // Stop loss threshold (0-1)
maxSlippage: number; // Max slippage (≥0)
minMarginRatio: number; // Min margin ratio (0-1)
};
}
Response Schema:
interface AddAccountResponse {
success: boolean;
account: {
id: string;
name: string;
publicKey: string;
balance: {
usdc: number;
margin: number;
};
riskLimits: RiskLimits;
isActive: boolean;
createdAt: string; // ISO timestamp
};
message?: string;
}
Validation Rules:
Error Responses:
400 Bad Request
: Invalid input data409 Conflict
: Account name already exists500 Internal Server Error
: System errorEndpoint: GET /accounts
Purpose: Retrieve all configured accounts
Request Schema: None (query parameters optional)
Response Schema:
interface ListAccountsResponse {
success: boolean;
accounts: Array<{
id: string;
name: string;
publicKey: string;
balance: {
usdc: number;
margin: number;
};
riskLimits: RiskLimits;
isActive: boolean;
createdAt: string;
lastUpdated: string;
}>;
total: number;
}
Query Parameters:
active
: Filter by active status (boolean)limit
: Maximum number of accounts to return (number)offset
: Number of accounts to skip (number)Endpoint: GET /accounts/{id}
Purpose: Retrieve detailed information for a specific account
Request Schema: Account ID in URL path
Response Schema:
interface GetAccountResponse {
success: boolean;
account: {
id: string;
name: string;
publicKey: string;
balance: {
usdc: number;
margin: number;
totalValue: number;
};
positions: Array<{
id: string;
symbol: string;
side: 'long' | 'short';
size: number;
entryPrice: number;
markPrice: number;
pnl: number;
margin: number;
liquidationPrice: number;
}>;
riskLimits: RiskLimits;
isActive: boolean;
createdAt: string;
lastUpdated: string;
};
}
Error Responses:
404 Not Found
: Account not found500 Internal Server Error
: System errorEndpoint: PUT /accounts/{id}/risk-limits
Purpose: Update risk management parameters for an account
Request Schema:
interface UpdateRiskLimitsRequest {
riskLimits: {
maxPositionSize?: number; // Optional updates
maxDailyLoss?: number;
maxLeverage?: number;
stopLossThreshold?: number;
maxSlippage?: number;
minMarginRatio?: number;
};
}
Response Schema:
interface UpdateRiskLimitsResponse {
success: boolean;
account: {
id: string;
riskLimits: RiskLimits;
lastUpdated: string;
};
message?: string;
}
Validation Rules:
Endpoint: DELETE /accounts/{id}
Purpose: Remove an account from the system
Request Schema: Account ID in URL path
Response Schema:
interface RemoveAccountResponse {
success: boolean;
message: string;
}
Validation Rules:
Error Responses:
400 Bad Request
: Account has active positions or sessions404 Not Found
: Account not found500 Internal Server Error
: System errorEndpoint: GET /portfolio
Purpose: Retrieve aggregated portfolio information across all accounts
Request Schema: None
Response Schema:
interface PortfolioResponse {
success: boolean;
portfolio: {
totalValue: number;
totalPnl: number;
totalMargin: number;
totalVolume: number;
accountCount: number;
positions: Array<{
symbol: string;
netSize: number;
avgEntryPrice: number;
totalPnl: number;
}>;
riskMetrics: {
maxDrawdown: number;
sharpeRatio: number;
var95: number;
};
lastUpdated: string;
};
}
interface ErrorResponse {
success: false;
error: {
code: string; // Error code
message: string; // Human-readable message
details?: any; // Additional error details
};
timestamp: string; // ISO timestamp
}
VALIDATION_ERROR
: Input validation failedACCOUNT_NOT_FOUND
: Account does not existACCOUNT_EXISTS
: Account name already existsINSUFFICIENT_BALANCE
: Not enough balance for operationRISK_LIMIT_EXCEEDED
: Risk limit would be exceededSYSTEM_ERROR
: Internal system errorX-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1640995200
Authorization
headerBearer <api-key>
X-Signature
headersuccess: true
for successful operationssuccess: false
for failed operations/api/v1/accounts