# Combos Request-for-Quote (RFQ)

:::caution
**Status: Beta.** The discovery and private-delivery streams and the maker quote methods are live. Quoting requires an eligible account with the capabilities described in [Quote Methods](/prediction-markets/combos-rfq/quote-methods).
:::

## What combo RFQ is

Combo RFQ is a **private, sealed-bid auction** for multi-leg combo (parlay) prediction-market contracts. A requester (taker) opens an RFQ on a combo — a single tradable bundle of two or more prediction-market contracts — and market makers respond with private quotes during a short auction window. The best quote is selected, the requester accepts it, the winning maker confirms, and the trade settles.

The quoting window is sealed from every customer: quote submissions and withdrawals are not delivered to the requester or other makers while the auction is open. After close, only the selected quote is disclosed privately to the requester; losing quotes remain undisclosed.

The entire maker surface is WebSocket: discovery and deliveries arrive as streams, and quotes are submitted as request/response methods on the same connection.

## End-to-end flow

```
 Requester                    Venue                        Makers
 ─────────                    ─────                        ──────
 opens RFQ ───────────────►  broadcast on requestForQuote ───► all subscribers (anonymous)
                             ◄─── rfq.submit_quote ─────────── each interested maker
                             (sealed while open; no quote deliveries)
 selected quote ◄──────────  auction window closes; best eligible quote selected
 accepts winning quote ────► ACCEPTED delivered ────────────► winning maker only
                             ◄─── rfq.confirm_quote ────────── winning maker (last-look)
 CONFIRMED delivered ◄─────  trade proceeds to settlement
```

## Lifecycle timing

The auction uses three fixed decision windows. Quote submission or withdrawal, requester acceptance, and maker confirmation or decline must complete strictly before their respective deadlines; an action arriving exactly at its deadline is rejected.

| Phase | Window |
|---|---|
| Maker quoting | 1 second from RFQ creation. The public `w` timestamp is the quote-submission deadline. |
| Requester decision | 5 seconds from the transition to `PENDING_ACCEPTANCE` to accept the selected quote. |
| Maker confirmation | 1 second from the transition to `CONFIRMING` for the winning maker to confirm or decline. |

The hard-expiry timestamp `x` is an absolute upper bound. If it arrives first, it shortens a later lifecycle window.

## Winner selection

When the quoting window ends, the venue considers only active quotes that:

- were submitted before `w` and have `validUntil >= w`;
- cover the complete requested size;
- are at or below the requester's private limit price, when one is set; and
- pass a fresh available-collateral check at close.

Eligible quotes are ranked by lowest price, with an equal-price tie going to the earliest submission. The venue checks candidates in that order and selects the first maker with sufficient available collateral. If a candidate fails that fresh check, the venue continues to the next ranked quote. If none qualifies, the RFQ expires without disclosing a quote.

Quote validity is evaluated against the logical close `w`, even if close processing runs later. Once a quote is selected, `validUntil` is not checked again during requester acceptance, maker confirmation, or finalization; those stages use their own lifecycle deadlines.

## Request lifecycle

An RFQ moves through these states (`S` on every stream event):

```
 OPEN ──► PENDING_ACCEPTANCE ──► CONFIRMING ──► FINALIZING ──► FINALIZED
   │              │                   │              │
   ├── CANCELLED  ├── CANCELLED       └── FAILED     └── FAILED
   └── EXPIRED    └── EXPIRED             (declined or timed out)
```

| State | Meaning |
|---|---|
| `OPEN` | Live and quotable. Quotes are accepted during the 1-second quoting window, until `w` on the broadcast. |
| `PENDING_ACCEPTANCE` | The window closed and a winning quote was selected; the requester has up to 5 seconds from this transition to accept. |
| `CONFIRMING` | The requester accepted; the winning maker has up to 1 second from this transition to confirm or decline. |
| `FINALIZING` | The maker confirmed; the venue is executing and settling the trade. |
| `FINALIZED` | Execution completed successfully. `f` is present on the terminal broadcast. |
| `CANCELLED` | The requester cancelled before accepting the winning quote. |
| `EXPIRED` | No feasible quote existed at the window close, or the requester did not accept the winner in time. |
| `FAILED` | The maker declined or timed out, or execution could not be completed. |

:::note
`f` can also be present on a `FAILED` event because the execution quantity is calculated when the requester accepts. Only `S: "FINALIZED"` confirms successful execution; do not infer a fill from `f` alone.
:::

:::caution Requester full-size does not guarantee maker full-size
The requester's execution order is fill-or-kill and must fill in full for the RFQ to finalize. The selected maker's post-only order executes independently on the normal order book and may fill partially or not at all. A maker partial fill can remain even if the requester order fails and the RFQ ends in `FAILED`; only the maker order's unfilled remainder is cancelled. See [Execution and partial-fill risk](/prediction-markets/combos-rfq/maker-integration#execution-and-partial-fill-risk).
:::

## Anonymity and privacy guarantees

- The public `requestForQuote` feed carries only the auction's existence and parameters — **no requester identity, no maker identities, no quote contents**.
- While the auction is open, a quote is visible only to the maker who submitted it; the requester receives no submission or withdrawal events.
- After close, only the selected quote is disclosed privately to the requester. Losing quotes remain undisclosed.
- The requester is never told which maker quoted: quotes are keyed by `quoteId` only.
- The service does not assign participant pseudonyms. `rfqId` identifies an auction and `quoteId` identifies a quote; neither identifies a participant or account.
- RFQ streams do not disclose counterparty account identity, including after execution.

## Surface map

| You want to... | Use |
|---|---|
| Discover open RFQ auctions | [`requestForQuote` stream](/prediction-markets/combos-rfq/websocket-streams#requestforquote) (public) |
| Receive the selected quote on your RFQ or acceptance of your quote | [`requestForQuote@account` stream](/prediction-markets/combos-rfq/websocket-streams#requestforquoteaccount) (authenticated) |
| Submit a quote | [`rfq.submit_quote`](/prediction-markets/combos-rfq/quote-methods#rfqsubmit_quote) |
| Withdraw your quote | [`rfq.withdraw_quote`](/prediction-markets/combos-rfq/quote-methods#rfqwithdraw_quote) |
| Confirm or decline after winning | [`rfq.confirm_quote`](/prediction-markets/combos-rfq/quote-methods#rfqconfirm_quote) |

## Glossary

| Term | Meaning |
|---|---|
| RFQ | One request-for-quote auction, identified by `rfqId` (a ULID). |
| Leg | One prediction-market contract inside the combo, with the outcome (`YES`/`NO`) the combo takes on it. |
| Notional | RFQ sized as a USD amount (`n`). Mutually exclusive with requested quantity. |
| Requested quantity | RFQ sized as a whole-contract count (`q`). Mutually exclusive with notional. |
| Quote | A maker's private, immutable price + maximum quantity on an RFQ. One per account per RFQ. |
| Last-look | The winning maker's confirm/decline step after the requester accepts. |

## Read next

- [WebSocket Streams](/prediction-markets/combos-rfq/websocket-streams) — message shapes for the discovery and delivery streams.
- [Quote Methods](/prediction-markets/combos-rfq/quote-methods) — submit, withdraw, and confirm.
- [Maker Integration](/prediction-markets/combos-rfq/maker-integration) — the end-to-end maker workflow.
- [Examples](/prediction-markets/combos-rfq/examples) — a worked auction from broadcast to settlement.
- [Combo Contracts](/prediction-markets/combo-contracts/overview) — what a combo is and how it settles.
