OpenPoly logo
Dashboard

Market PnL

Interpret confirmed user cash flow, quoted fees, and unresolved payouts for resolved Opinion markets.

Market PnL

Open Operator Dashboard → Operations → Market PnL (/market-pnl). Both trades:read and redemptions:read are required, or *. Data is restricted to the authenticated operator.

This is user cash PnL, one row per user and resolved Opinion market. It is not open-position valuation, a payout forecast, an unpaid entitlement, operator profit, or the monthly settlement. Polyflight reporting is separate.

Select the evidence window

  • Defaults to the last 30 operator-local calendar days, including today, newest resolved first.
  • Filter by exact positive Market ID, market title/slug search, and exact external user ID.
  • The date controls select market resolution dates, not operation/trade creation dates. Amounts cover each selected market's entire lifetime, including earlier buys and sells.
  • Clear both dates for all resolved markets. Reset restores the last 30 days.
  • Sort by newest/oldest resolution, highest/lowest user PnL, most spent, or most returned; choose 25, 50, or 100 rows per page.
  • Select Apply filters before reading totals or exporting. The URL records applied filters, sort, and pagination, not pending edits.

Resolution time currently uses the market's recorded update timestamp (markets.updated_at), not a dedicated resolution-event timestamp. Later market updates can therefore affect date selection.

Read amounts correctly

Cash columns are exact integers in the labeled operator-currency minor units (currently IDR for Opinion wallet operations). Quoted Credits are a different unit.

Column/cardMeaning
Spent / Balance spentSuccessful buy debits less successful debit reversals; includes buy fees.
From salesSuccessful order credits less credit reversals. Sales are net of trading fees.
From redemptionsSuccessful redemption wallet credits less credit reversals; a resolved winning position alone is not received cash.
Total returned / Balance returnedFrom sales + from redemptions.
User cash PnLTotal returned − spent; positive is a user cash gain, not an operator settlement receivable.
Acc. Quoted Fees (operator currency)Buy and sell executed-trade fees converted per trade with its historical conversion and rounding.
Acc. Quoted Fees (Credits)The same lifetime executed-trade fee reference in Credits, accumulated once per order rather than per wallet-operation row.

Both accumulated quoted-fee columns are reference-only. They do not change PnL: buy fees are already in spent, and sell credits are already net. Do not subtract either column again or add Credits to external currency.

The three cards and row/user/market counts cover all filtered results, not the current page. Confirmed wallet movements remain in cash totals even if the source order/redemption status later fails or enters review. Distinct successful wallet keys are distinct cash movements; an accidental duplicate payment is not silently deduplicated out of PnL.

Pending and failed/unpaid warnings

  • Pending / Cash flow needs review: unresolved wallet outcomes or a source-level blocker exist. PnL includes confirmed cash only; it is not final while unknown outcomes remain.
  • Failed / unpaid: recorded failed payout work still leaves an amount owed. A terminal failed decision does not write off the debt.
  • Confirmed cash: no current pending/failed-unpaid warning for that row; this does not certify bank settlement or all-time accounting closure.

With the additional balance_operations:read grant, banner buttons and row badges open Cash Flow Triage, preserving market/user/search and resolution dates. A row link narrows to that user and market. Without the extra grant, ask an authorized operator colleague to collect the wallet evidence. Operator access cannot record a completed/failed cash outcome or send a corrective payment.

Export and escalation

Export CSV (all filtered) fetches all matching pages. Copy as HTML copies only the current page, with or without headers. Exported cash/fee amounts are unformatted integers with units in their column headers; retain those headers. CSV also includes identities, market slug/outcome, pending counts, and failed/unpaid amounts.

For discrepancies, retain the applied filters, timezone, market ID, exact external user ID, and relevant source/operation IDs. Compare the original idempotency key against your wallet ledger, not only a timeout or source status. Send sanitized evidence through Operator Support; do not retry an unknown mutation under a fresh key.

Source API

GET /api/operator/market-pnl requires both reporting scopes. The dashboard uses market_id, search, external_user_id, resolved_from_date, resolved_to_date, sort, page, and page_size. Operator selectors are rejected; the session determines ownership. Monetary response fields are exact integer strings.

See the Market PnL API reference for the complete response fields and query rules.

Copyright © 2026