Skip to main content

Positions

Get Positions List​

Retrieve a paginated list of your positions with filtering and search options.

Endpoint: GET /api/v1/positions

Query Parameters:

ParameterTypeDescription
statusstringFilter by position status (open, closed, settled)
pagenumberPage number for pagination
pageSizenumberNumber of results per page

Position Status​

Positions can have the following statuses:

StatusDescription
openPosition is active with unrealized gains/losses
closedPosition has been closed and profits realized
settledMarket resolved and position automatically settled

Understanding Positions​

A position represents your holdings in a specific market outcome. Key properties include:

  • Outcome ID: The specific outcome you're trading
  • Quantity: Number of shares held
  • Average Price: Your average entry price
  • Current Price: Latest market price
  • Unrealized P&L: Current profit/loss (open positions)
  • Realized P&L: Actual profit/loss (closed positions)

Code Examples​

Fetch All Open Positions​

const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://engine.xmarket.app/api/v1';

async function getOpenPositions() {
const response = await fetch(
`${BASE_URL}/positions?status=open&pageSize=50`,
{
headers: {
'x-api-key': API_KEY,
'Content-Type': 'application/json'
}
}
);

const data = await response.json();
return data.items;
}

// Example usage
const positions = await getOpenPositions();
positions.forEach(position => {
console.log(`Market: ${position.market.name}`);
console.log(`Outcome: ${position.outcome.name}`);
console.log(`Quantity: ${position.quantity}`);
console.log(`Unrealized P&L: ${position.unrealizedPnL}`);
console.log('---');
});

Calculate Total Portfolio Value​

async function getPortfolioSummary() {
const response = await fetch(
`${BASE_URL}/positions?status=open&pageSize=1000`,
{
headers: {
'x-api-key': API_KEY,
'Content-Type': 'application/json'
}
}
);

const data = await response.json();
const positions = data.items;

const totalValue = positions.reduce((sum, pos) => {
return sum + (pos.quantity * pos.currentPrice);
}, 0);

const totalUnrealizedPnL = positions.reduce((sum, pos) => {
return sum + pos.unrealizedPnL;
}, 0);

return {
positionCount: positions.length,
totalValue,
totalUnrealizedPnL,
markets: [...new Set(positions.map(p => p.market.id))].length
};
}

// Example usage
const summary = await getPortfolioSummary();
console.log(`Active Positions: ${summary.positionCount}`);
console.log(`Total Value: $${summary.totalValue.toFixed(2)}`);
console.log(`Total Unrealized P&L: $${summary.totalUnrealizedPnL.toFixed(2)}`);
console.log(`Markets: ${summary.markets}`);

Common Use Cases​

Portfolio Dashboard​

Fetch all open positions to display current holdings, values, and unrealized P&L in a dashboard.

Position Monitoring​

Set up alerts based on unrealized P&L thresholds by regularly polling positions endpoint.

Performance Analytics​

Analyze closed positions to calculate historical performance metrics and win rates.

Market Exposure​

Calculate exposure across different market categories by aggregating position values.