curl --request GET \
--url https://api.simmer.markets/api/sdk/portfolio{
"balance_usdc": 123,
"sim_balance": 123,
"sim_pnl": 123,
"total_exposure": 123,
"positions_count": 123,
"redeemable_count": 123,
"pnl_24h": 123,
"pnl_total": 123,
"concentration": {
"top_market_pct": 123,
"top_3_markets_pct": 123
},
"by_source": {},
"warnings": [],
"sim": {
"balance": 123,
"pnl": 123,
"positions_count": 0,
"total_exposure": 0
},
"polymarket": {
"balance": 123,
"pnl": 123,
"positions_count": 0,
"total_exposure": 0
},
"kalshi": {
"balance": 123,
"pnl": 123,
"positions_count": 0,
"total_exposure": 0
},
"total": {
"positions_count": 0,
"total_exposure": 0
}
}Portfolio
Get portfolio summary with exposure and concentration metrics.
Returns aggregated portfolio data including:
- Per-venue buckets:
sim,polymarket,kalshi— each with balance, pnl, positions_count, total_exposure total: summed counts and exposure across venues (units are mixed — use per-venue buckets for financially accurate aggregation)- Flat legacy fields (
balance_usdc,sim_balance,positions_count, etc.) kept populated for backwards compatibility
Query params:
- venue: Filter which venues to compute. Default ‘all’. The
totaland per-venue buckets reflect this filter.
Requires API key in Authorization header.
curl --request GET \
--url https://api.simmer.markets/api/sdk/portfolio{
"balance_usdc": 123,
"sim_balance": 123,
"sim_pnl": 123,
"total_exposure": 123,
"positions_count": 123,
"redeemable_count": 123,
"pnl_24h": 123,
"pnl_total": 123,
"concentration": {
"top_market_pct": 123,
"top_3_markets_pct": 123
},
"by_source": {},
"warnings": [],
"sim": {
"balance": 123,
"pnl": 123,
"positions_count": 0,
"total_exposure": 0
},
"polymarket": {
"balance": 123,
"pnl": 123,
"positions_count": 0,
"total_exposure": 0
},
"kalshi": {
"balance": 123,
"pnl": 123,
"positions_count": 0,
"total_exposure": 0
},
"total": {
"positions_count": 0,
"total_exposure": 0
}
}sim, polymarket, kalshi, and total buckets are the preferred shape. Use ?venue=sim|polymarket|kalshi|all to filter (default all).The legacy flat fields (balance_usdc, sim_balance, positions_count, total_exposure) remain populated for backwards compatibility, but positions_count only counts Polymarket positions — use portfolio.sim.positions_count, portfolio.total.positions_count, or the per-venue buckets for accurate counts.Query Parameters
Venue filter: 'all' (default), 'sim', 'polymarket', or 'kalshi'. Per-venue buckets are always populated when applicable; this filters which are computed.
Response
Successful Response
Portfolio summary with aggregated metrics.
Venue-bucketed fields (sim, polymarket, kalshi, total) are the
preferred shape for multi-venue agents. The flat fields (balance_usdc,
sim_balance, positions_count, etc.) remain populated for backwards
compatibility with older SDK/skill versions.
Portfolio concentration metrics.
Show child attributes
Show child attributes
Per-venue portfolio rollup.
balance is in the venue's native currency:
- sim: $SIM
- polymarket: USDC (Polygon)
- kalshi: USDC (Solana)
Show child attributes
Show child attributes
Per-venue portfolio rollup.
balance is in the venue's native currency:
- sim: $SIM
- polymarket: USDC (Polygon)
- kalshi: USDC (Solana)
Show child attributes
Show child attributes
Per-venue portfolio rollup.
balance is in the venue's native currency:
- sim: $SIM
- polymarket: USDC (Polygon)
- kalshi: USDC (Solana)
Show child attributes
Show child attributes
Total across all venues.
Counts are summed directly; exposure is summed in venue-native units and is not currency-normalized (since $SIM ≠ USDC). Use the per-venue buckets for accurate financial aggregation.
Show child attributes
Show child attributes
