Skip to main content
The push channels (webhooks and the WebSocket) tell you when things happen; the read endpoints let you pull state on demand — for backfill, reconciliation, and display. See Real time & data channels for how the channels fit together. Authenticated reads accept a scoped API key (*:read scopes) and live under /v1. Market data at /markets is public — no key needed.

What to read

You want…EndpointScope
Balance + stats + status counts in one callGET /v1/portfoliopositions:read + balances:read
Vault balance + active positionsGET /v1/vaultbalances:read
Wallet address, all balances, locked fundsGET /v1/walletbalances:read
Your parlays, paginated (filter by status)GET /v1/rfqspositions:read
One parlay’s detail + settlement outcomeGET /v1/rfqs/{id}positions:read
Realized P&L timeseriesGET /v1/pnlpositions:read
Your profile (username, wallet address)GET /v1/meaccount:read
Live market data (prices, volume, open interest)GET /marketsnone — 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’s quotes array. Without it, quotes is null (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
Don’t subtract /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:
  1. Page through GET /v1/rfqs?status=settled (follow meta.cursor until has_more is false) to enumerate terminal parlays.
  2. For any you haven’t recorded, fetch GET /v1/rfqs/{id} for the settlement detail and tx signatures.
  3. Cross check realized P&L against GET /v1/pnl and current balances against GET /v1/vault.
Cursors are opaque — pass the meta.cursor value from the previous response as ?cursor=…; don’t parse or construct them.