*:read scopes) and live under /v1. Market data at
/markets is public — no key needed.
What to read
| You want… | Endpoint | Scope |
|---|---|---|
| Balance + stats + status counts in one call | GET /v1/portfolio | positions:read + balances:read |
| Vault balance + active positions | GET /v1/vault | balances:read |
| Wallet address, all balances, locked funds | GET /v1/wallet | balances:read |
| Your parlays, paginated (filter by status) | GET /v1/rfqs | positions:read |
| One parlay’s detail + settlement outcome | GET /v1/rfqs/{id} | positions:read |
| Realized P&L timeseries | GET /v1/pnl | positions:read |
| Your profile (username, wallet address) | GET /v1/me | account:read |
| Live market data (prices, volume, open interest) | GET /markets | none — public |
Filtering parlays
GET /v1/rfqs takes two query params:
status— comma joined, e.g.?status=executed,settled. See the status reference for the full set.include=quotes— attach each parlay’squotesarray. Without it,quotesisnull(not requested); with it, an empty array means no quotes were submitted.
P&L windows
GET /v1/pnl returns realized P&L per day. Pick the window with
?period=1D|1W|1M|ALL (default 1W).
Everything on the read surface is realized.
portfolio.summary.portfolio_value is your
deposited USDC — it does not mark open positions to market, and there is no unrealized P&L field.
To value open positions yourself, price each leg against the live /markets data.Balances
GET /v1/wallet returns every balance in one call:
usdc_balance (your wallet), vault_balance (gross USDC in your vault, including locked
collateral), and locked_amount (everything you’ve committed — in flight RFQs, stakes on live
positions, and maker side collateral).
- Total USDC you control =
usdc_balance + vault_balance - Available cash =
usdc_balance + vault_balance − locked_amount
/v1/vault’s locked_collateral on top — it’s already inside locked_amount.
Settlement outcomes
GET /v1/rfqs/{id} is the source of truth for how a parlay resolved. Once it’s terminal the response
carries the full settlement detail: each leg’s outcome, the terminal status
(settled / cancelled / bought_back), the payout, and the on chain transaction signatures
(settle_tx, cancel_tx, buyback_tx). A parlay id you don’t own returns 404.
Reconciling
A typical reconcile loop:- Page through
GET /v1/rfqs?status=settled(followmeta.cursoruntilhas_moreis false) to enumerate terminal parlays. - For any you haven’t recorded, fetch
GET /v1/rfqs/{id}for the settlement detail and tx signatures. - Cross check realized P&L against
GET /v1/pnland current balances againstGET /v1/vault.
Cursors are opaque — pass the
meta.cursor value from the previous response as ?cursor=…; don’t
parse or construct them.