● CHECKING...

LIVE IBKR POSITIONS

Real-time portfolio snapshot from mphinance's autonomous trading swarm. Positions, cost basis, and PnL — refreshed every 60 seconds from a live account.

Open Positions
Daily PnL
Data Age (sec)
60s
Refresh Interval
Bridge
...
Cache
...
Positions
...
Last Poll
...
Method Path Auth Description
GET /v1/positions API KEY Full position + PnL snapshot
GET /health OPEN Cache status, age, key count
GET /metrics OPEN Prometheus metrics

Pass your key in the X-API-Key header

# Fetch current positions
curl -H "X-API-Key: your_key_here" \
     https://positions.mphinance.com/v1/positions
# Python
import requests

r = requests.get(
    "https://positions.mphinance.com/v1/positions",
    headers={"X-API-Key": "your_key_here"}
)
data = r.json()
print(data["positions"])   # list of positions
print(data["pnl"])           # {dailyPnL, unrealizedPnL, realizedPnL}

GET /v1/positions

FieldTypeDescription
positionsarrayList of open position objects (see below)
countintegerNumber of open positions
pnl.dailyPnLfloatToday's realized + unrealized PnL (USD)
pnl.unrealizedPnLfloatUnrealized PnL across all positions
pnl.realizedPnLfloatRealized PnL today
as_ofISO 8601Timestamp of last successful poll
data_age_secondsintegerSeconds since last poll
stalebooleantrue if data older than 2 minutes

Position object

FieldTypeDescription
accountstringObfuscated account ID (e.g. U234***12)
symbolstringTicker symbol
secTypestringSTK, OPT, FUT, etc.
currencystringUSD
quantityfloatShares/contracts (negative = short)
avgCostfloatAverage cost basis per share/contract
strikefloat|nullOptions only
rightstring|nullC or P — options only
expirystring|nullYYYYMMDD — options only
multiplierstring|nullContract multiplier — options only
# Example response
{
  "positions": [
    {
      "account": "U234***12",
      "symbol": "AAPL",  "secType": "STK",  "currency": "USD",
      "quantity": 10,  "avgCost": 172.34,
      "strike": null,  "right": null,  "expiry": null,  "multiplier": null
    },
    {
      "account": "U234***12",
      "symbol": "SPY",   "secType": "OPT",  "currency": "USD",
      "quantity": -2,   "avgCost": 3.45,
      "strike": 580.0,  "right": "P",  "expiry": "20260515",  "multiplier": "100"
    }
  ],
  "count": 2,
  "pnl": { "dailyPnL": 124.50, "unrealizedPnL": 340.20, "realizedPnL": 0.0 },
  "as_of": "2026-05-12T01:00:00+00:00",
  "data_age_seconds": 12,
  "stale": false
}
LimitWindowResponse
60 requests per minute per IP 429 Too Many Requests

REQUEST ACCESS

API keys are issued manually. Drop a line with your use case and I'll send one over.

REQUEST A KEY

Future: Substack subscriber auth. For now, email works.