---
title: "Get parlay"
method: GET
path: "/v1/rfqs/{id}"
tags: ["RFQs"]
---

# Get parlay

`GET /v1/rfqs/{id}`

Fetch one of your parlays (RFQs) by id, with its quotes. Once the parlay is terminal the response also carries its settlement detail — per-leg outcomes, final status, payout, and the settle/buyback transaction signature. An id you don't own returns 404.

## Path parameters

- `id` string, uuid, required

## Response `200`

OK

- object
  - `data` 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

## Other responses

- `404` — Resource not found

---

[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)
