# Combos reference

> The combo channels, their commands and their models.

Source: https://docs.stxapp.io/sdks/csharp/reference/combos/

Namespace `STX.Sdk.Combos`. See [Combos](/sdks/csharp/combos/) for the flow.

## STXRfqChannel (player)

| Method | Returns |
|---|---|
| `RequestQuoteAsync(IEnumerable<ComboLeg> legs, string amount)` | `QuoteRequest`: `RfqId` |
| `AcceptAsync(rfqId, quoteId, amount)` | `ComboPlacement`; `STXComboPriceMovedException` when the best fell below `amount` |
| `CancelAsync(rfqId)` | `CancelledRequest` |
| `SnapshotAsync(rfqId)` | `RfqSnapshot`: `Status`, `Side`, `Amount`, `Quantity`, `ExpiresAt`, `BestQuote` |
| `CashOutAsync(marketId)` | `CashOut`: `RfqId`, `MarketId`, `Quantity` |

Pushes (`msg.Data`): `best_quote` as `BestQuote`, `placed` as `ComboPlacement`, `negotiation_closed` as `NegotiationClosed`.

## STXComboQuoteChannel (maker)

| Method | Returns |
|---|---|
| `QuoteAsync(rfqId, amount, expiresInMs, clientOrderId)` | `ComboQuote` |
| `WithdrawQuoteAsync(rfqId, quoteId)` | `WithdrawnQuote` |

Pushes: `rfq_opened` as `RfqOpened`, `rfq_closed` as `RfqClosed`, `quote_accepted` as `QuoteAccepted`, `placed` as `MakerPlacement`, `negotiation_closed` as `NegotiationClosed`.

Both channels have `JoinReply` (`ExternalId`, your pseudonym) and every `STXChannel` member. Each command takes an optional `timeout` and `ct`.

## Models

`ComboLeg(marketId, outcome)` with `outcome` `won` or `lost`. Amounts are dollar strings, quantities contract strings, `ExpiresAt` Unix microseconds.
