---
title: "List parlays"
method: GET
path: "/v1/rfqs"
tags: ["RFQs"]
---

# List parlays

`GET /v1/rfqs`

List your parlays (RFQs), newest first, with cursor pagination. Filter by status (`?status=settled`, or comma-separated `?status=open,quoted`); `?include=quotes` embeds each parlay's quotes.

## Query parameters

- `status` RfqStatus[]
- `include` 'quotes'
- `limit` integer
- `cursor` string

## Response `200`

OK

- object
  - `data` object
    - `rfqs` Rfq[]
      - `id` string, uuid
      - `user_id` string
      - `status` 'open' | 'quoted' | 'accepted' | 'confirmed' | 'executed' | 'cancelled' | 'expired' | 'settled' | 'bought_back'
      - `bet_amount` number
      - `implied_probability` number
      - `legs` Leg[]
        - `leg_index` integer — Zero-based ordering index for the leg within the RFQ
        - `market_ticker` string
        - `event_ticker` string
        - `side` 'yes' | 'no' — Bet side.
        - `venue` 'kalshi' | 'polymarket' — Source venue for a market.
        - `market_title` string
        - `event_title` string
        - `yes_sub_title` string, nullable — Snapshot of `Market.yes_sub_title` at RFQ creation (e.g. team name on a sports market). Lets clients render the side-specific subtitle after the underlying market has rolled out of the live `/markets` cache. Null on binary markets that carry no per-side subtitle and on legs created before this field was persisted.
        - `no_sub_title` string, nullable — Snapshot of `Market.no_sub_title` at RFQ creation — opposing-side counterpart to `yes_sub_title`. Same null semantics.
        - `venue_url` string, nullable — Canonical URL of the leg's market on its source venue (Kalshi or Polymarket). Hydrated from marketd Redis hashes, falling back to the parlay-leg snapshot when the market hash has been purged.
        - `image_url` string, nullable — Image URL for the leg's market. Hydrated from the marketd Redis hash and whitelist metadata, falling back to the parlay-leg snapshot when the market hash has been purged.
        - `expected_expiration_time` string, date-time, nullable — Expected market resolution time for the leg. Hydrated from marketd Redis hashes, falling back to the parlay-leg snapshot when the market hash has been purged.
        - `current_yes_price` number — Yes ask price at RFQ creation time, decimal probability (0-1)
        - `current_no_price` number — No ask price at RFQ creation time, decimal probability (0-1)
        - `outcome` 'win' | 'loss' | 'push' | 'pending'
      - `quotes` Quote[], nullable — null = not requested (fetched without include=quotes). [] = requested but no quotes yet.
        - `id` string, uuid
        - `rfq_id` string, uuid
        - `payout_odds` number — Multiplier on the net stake (`user_stake`) that produces the total payout if the parlay wins. When the taker fee is off, `user_stake == bet_amount`.
        - `user_cost` number — Net stake the MM quotes on = bet_amount - taker_fee (== bet_amount when the taker fee is off).
        - `mm_cost` number — Market maker's max risk = `total_payout - user_cost`.
        - `total_payout` number — Total payout on a win = `user_cost + mm_cost`.
        - `leg_prices` object[] — Per-leg price snapshot captured at submit time. `leg_odds` is a decimal (0-1).
          - `leg_id` string, uuid, required
          - `leg_odds` number, required — Implied per-leg price, decimal (0-1).
        - `status` 'pending' | 'accepted' | 'confirmed' | 'executed' | 'rejected' | 'expired' | 'withdrawn' — Lifecycle status of a quote.
        - `valid_until` string, date-time
        - `created_at` string, date-time
        - `updated_at` string, date-time
      - `accepted_quote_id` string, uuid, nullable — Set once status >= accepted
      - `market_maker_id` string, nullable — Set once status >= accepted
      - `position_pda` string, nullable — On-chain position address. Set once status >= confirmed.
      - `position_id` string, nullable — On-chain position id — the 16-byte vault_positions.position_id, hex-encoded (32 chars). Distinct from position_pda (a base58 address): this is the id the early-cashout endpoints key on (/internal/positions/cashout-eligibility, POST /v1/cashout-requests). Set once status >= confirmed.
      - `position_status` 'pending' | 'processing' | 'active' | 'settling' | 'cancelling' | 'settled_win' | 'settled_loss' | 'cancelled' | 'reconciling_mm_release' | 'expired_pending_mm_release' | 'expired' | 'reconciling_bought_back_db' | 'bought_back_pending_db' | 'bought_back' | 'error' — Vault position lifecycle. `pending`/`processing` are intermediate states before on-chain creation; `settling`/`cancelling` are intermediate states for settlement/cancellation; `settled_win`/`settled_loss`/`cancelled` are terminal; the `*_mm_release` and `expired` states cover the permissionless-expiry path; the buyback path is `active → bought_back_pending_db → bought_back` (with `reconciling_bought_back_db` as the short-lived reconciler sentinel); `error` means retries are exhausted and manual intervention is required.
      - `position_error` string, nullable — Last error recorded on the vault position. Populated when position_status === 'error'; null otherwise.
      - `cancellation_reason` string, nullable — Why the ticket was cancelled.
      - `is_failed` boolean — True when the vault position errored (on-chain execution failed). Derived from position_status === 'error'. Omitted (not false) for non-failed parlays.
      - `fee_amount` number, nullable — Set on settled RFQs only
      - `settlement` Settlement
        - `id` string, uuid, required
        - `rfq_id` string, uuid, required
        - `winner` 'user' | 'mm', required — Winner of a settled parlay position.
        - `payout` number, required — Full pot transferred to the winner — equals user_stake + mm_risk (i.e. bet_amount * payout_odds). NOT just the MM-side movement. For MM PnL on a loss, use -(payout - user_stake) = -mm_risk.
        - `user_stake` number, required — Bettor's stake at settle time. Surfaced so the MM dashboard can derive PnL without a second fetch — MM win = +user_stake - fee, MM loss = -(payout - user_stake) = -mm_risk.
        - `mm_risk` number, required — Maker's max risk at settle time. Equal to payout - user_stake; the MM dashboard renders loss-side PnL directly off this field.
        - `fee_amount` number, required — Protocol fee deducted from the winner's payout.
        - `settle_tx` string, required
        - `settled_at` string, date-time, required
      - `settled_at` string, date-time, nullable — Set on settled RFQs only
      - `cashout` Cashout — Early-cashout (buyback) summary attached to a bought_back RFQ — the buyback analogue of Settlement. realized_pnl is the user's net P&L (stake nets out; the directional `amount` is the realized delta, less the profit fee on the profiting side and the create-time taker fee).
        - `realized_pnl` number, required — User's realized P&L from the early cashout (USDC, signed).
        - `amount` number, required — Directional buyback transfer (USDC, >= 0).
        - `mm_pays_user` boolean, required — True when the MM paid the user (user was up on the position).
        - `cashed_out_at` string, date-time, nullable — Time the position was bought back / cashed out (the buyback fee insert = finalize moment). The buyback analogue of settled_at; clients sort the History cashed-out row by this. Absent on legacy rows without a fee.
      - `create_position_tx` string, nullable — create_position transaction signature. Set once the on-chain vault position is created (status >= confirmed).
      - `settle_tx` string, nullable — settle_position transaction signature — the on-chain proof a settled RFQ paid out. Set on settled RFQs (the settle analogue of buyback_tx).
      - `cancel_tx` string, nullable — cancel_position transaction signature. Set on cancelled RFQs.
      - `buyback_tx` string, nullable — Buyback (early-cashout) transaction signature, surfaced at the RFQ root by the serializer. Set on bought_back RFQs — the on-chain proof of the cashout, the buyback analogue of settle_tx.
      - `created_at` string, date-time
      - `updated_at` string, date-time
      - `expires_at` string, date-time
  - `meta` PaginationMeta
    - `cursor` string, nullable
    - `has_more` boolean
    - `limit` integer — Maximum number of items requested for this page.
    - `offset` integer — Number of items skipped before this page.
    - `total` integer — Total number of items available across all pages, when returned by the endpoint.

---

[API](https://skmtc.net/totalistrading/apis/totalis-rfq-api.md) · [All operations](https://skmtc.net/totalistrading/apis/totalis-rfq-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/totalistrading/totalis-rfq-api/revisions/b0adb9a590b4/schema)
