Portfolio
/portfolio is a public snapshot of a connected wallet’s CLOB activity across configured networks. Data comes from GET /api/portfolio/:address (optional ?chain_id=). No SIWE is required to read; wallet connection is required to exercise, withdraw, or claim.
Sections
| Section | Source | Actions |
|---|---|---|
| Currently owned | networks[].holdings (balanceOf > 0) | Longs: exercise in window. Shorts: withdraw remaining underlying after expiry |
| Exercised / withdrawn | closed_holdings / settled_holdings | Read-only history |
| Open orders | networks[].open_orders | Claim a fill (mint option tokens). Withdraw an unfilled order (refund collateral) |
Filter by network in the UI (persisted locally). Spot / moneyness uses Moralis when VITE_MORALIS_API_KEY is set; local and some testnets often have no price.
Click an opshun name for its payoff diagram.
Holding status
| Status | Meaning |
|---|---|
active | Live position; may become exercisable |
exercisable | Inside the exercise window |
expired | Past expiry; longs can no longer exercise |
withdrawable | Writer can withdraw remaining collateral after expiry |
exercised | Long was exercised |
withdrawn | Short collateral withdrawn after expiry |
closed | No longer an open position |
unknown | Indexer could not classify |
Order status
| Status | Meaning |
|---|---|
queued / unfilled | Resting on the book |
filled | Filled; claim to receive option tokens |
claimable | Ready to claim |
partial | Partial fill — claim the fill and/or withdraw the remainder |
expired | Order expired |
API
GET /api/portfolio/0xYourAddress
GET /api/portfolio/0xYourAddress?chain_id=84532
Response shape:
{
"address": "0x…",
"networks": [
{
"chain_id": 31337,
"name": "Anvil Local",
"holdings": [],
"open_orders": [],
"closed_holdings": [],
"settled_holdings": [],
"discovery": {
"note": "…",
"candidate_token_count": 0,
"candidate_order_count": 0,
"transfer_rows": 0
}
}
]
}
Each holding / order includes clob, side, balance or amount, status, pair_key (option type, timestamps, strike, premium rate), and token addresses (underlying, quote, premium_token).
Returns 503 when the indexer or RPC is unavailable. Indexer endpoints: Networks & public settings.