> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cdp.coinbase.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Exchange Synthetic Product Orders

<Warning>
  Synthetic product orders are currently available in the sandbox environment only. Production launch date is TBD.
</Warning>

Synthetic product orders let you submit a single order for an unlisted pair, e.g. `QNT-DASH`, which Coinbase decomposes into two real legs sharing a hop currency (currently USD only - sell `QNT-USD`, buy `DASH-USD`) and executes atomically in the matching engine.

Synthetic product orders are supported in [FIX 5.0](/exchange/fix-api/order-entry-messages/order-entry-messages5#newordersingle-35=d) and with the [Create a new order](/api-reference/exchange-api/rest-api/orders/create-new-order#synthetic-product-orders) REST API (`is_synthetic=true`).

## NewOrderSingle (35=D)

These parameters are required for synthetic product orders in addition to the standard [NewOrderSingle](/exchange/fix-api/order-entry-messages/order-entry-messages5#newordersingle-35=d) fields:

| Tag  | Name          | Type    | Required | Description                                                                                                                                                                                                                                                  |
| :--- | :------------ | :------ | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 167  | SecurityType  | String  | Y        | Must be `MLEG` - required to denote a synthetic product (multi-leg) order.                                                                                                                                                                                   |
| 55   | Symbol        | String  | Y        | The synthetic pair, e.g. `QNT-DASH`. Both underlying legs (`BASE-USD` and `QUOTE-USD`) must be listed and in `FULL_TRADING`.                                                                                                                                 |
| 54   | Side          | Char    | Y        | Must be `2` (Sell). `1` (Buy) is rejected - to buy, submit a sell on the inverted pair.                                                                                                                                                                      |
| 40   | OrdType       | Char    | Y        | `1` = Market<br />`2` = Limit                                                                                                                                                                                                                                |
| 44   | Price         | Decimal | C        | Required for Limit orders only. The ratio of quote asset received to base asset sold (quote/base, same convention as a regular pair's price).                                                                                                                |
| 38   | OrderQty      | Decimal | Y        | Amount of the base asset to sell. Required for both Market and Limit orders - `CashOrderQty` is not supported for synthetic product orders.                                                                                                                  |
| 59   | TimeInForce   | Char    | C        | Required for Limit orders, must be `4` (FOK). Not applicable to Market orders.                                                                                                                                                                               |
| 7928 | SelfTradeType | Char    | Y        | Must be `O` (Cancel Oldest) or `N` (Cancel Newest); `D` (Decrement and Cancel) and `B` (Cancel Both) are rejected. Required - if the tag is omitted it defaults to `D`, which is not valid for synthetic product orders and causes the order to be rejected. |

`SecurityType=MLEG|Symbol=QNT-DASH|Side=2|OrdType=2|Price=3|OrderQty=10|TimeInForce=4|SelfTradeType=O`

<Warning>
  Any other order shape for a synthetic pair is rejected. Non-FOK Limit, Stop, TPSL, and batch orders don't apply, since there is no resting book for a synthetic pair.
</Warning>

### Price and size increments

A synthetic pair has no market of its own, so its increments are derived from the underlying legs rather than from the synthetic `Symbol`:

* **Price (44)** - No tick size is enforced. Because the price is a ratio of two underlying markets, any positive value is accepted as long as it has no more than 15 significant digits. The executed price is reported as the realized ratio (quote asset received ÷ base asset sold), rounded down to 15 significant digits.
* **OrderQty (38)** - Must be positive, no larger than 15 significant digits, and an exact multiple of the leg-1 (`BASE-USD`) product's `base_increment` (and no smaller than that increment). The base asset's real market defines the size increment; the synthetic pair itself has none.

### Market vs. Limit behavior

|                       | Market                                                                       | Limit                                                        |
| :-------------------- | :--------------------------------------------------------------------------- | :----------------------------------------------------------- |
| Self Trade Prevention | Cancel Oldest / Cancel Newest                                                | Cancel Oldest / Cancel Newest                                |
| Side                  | Sell only                                                                    | Sell only                                                    |
| Time In Force         | N/A                                                                          | Fill-or-Kill only                                            |
| Partial fills         | Allowed - excess base asset is simply never sold, no unwind or re-buy needed | Not allowed - entire size must fill or the order is rejected |
| Buy-leg size          | As much as possible, bounded by available liquidity on both legs             | Bounded to `limitPrice × size`                               |

<Note>
  **Market orders are always balanced.** The proceeds from selling the base asset are fully redeployed into buying the quote asset, so no USD is left over. Any base asset that couldn't be sold (both books exhausted) is simply never sold - there is no unwind or re-buy.
</Note>

<Note>
  **Limit orders sell the full `OrderQty` and buy up to `limitPrice × OrderQty`** of the quote asset. If the market has moved such that acquiring `limitPrice × OrderQty` costs less than the proceeds of selling `OrderQty`, the unused proceeds remain in your account as USD.
</Note>

## ExecutionReport (35=8)

A filled synthetic product order produces **two** trade ExecutionReports (`ExecType (150) = F`), one per underlying leg (one for the sell leg, one for the buy leg). Both share the same `OrderID`/`ClOrdID` as the parent order so you can link them, and each is marked `MultiLegReportingType (442) = 2` (individual leg of a multi-leg security).

The parent synthetic order separately produces its own `New` and `Done` ExecutionReports on the synthetic `Symbol` (e.g. `QNT-DASH`); those carry `MultiLegReportingType (442) = 3` (multi-leg security).

Fill detail on each leg's report is carried in the standard last-fill and cumulative tags - there is no `FillsGrp` repeating group:

| Tag | Name    | Type    | Description                                 |
| :-- | :------ | :------ | :------------------------------------------ |
| 31  | LastPx  | Decimal | Price of the fill on that leg.              |
| 32  | LastQty | Decimal | Quantity of the fill on that leg.           |
| 14  | CumQty  | Decimal | Total filled quantity on that leg.          |
| 6   | AvgPx   | Decimal | Volume-weighted average price for that leg. |

Each leg's report also carries its own real `Symbol` (55) and `Side` (54).

Sell-leg and buy-leg trade reports for the same synthetic product order (sell 10 `QNT-DASH` at price `3`: sell 10 QNT on `QNT-USD`, buy 30 DASH on `DASH-USD`):

```
35=8|150=F|55=QNT-USD|54=2|31=75|32=10|14=10|6=75|442=2
35=8|150=F|55=DASH-USD|54=1|31=25|32=30|14=30|6=25|442=2
```

### Caveats

* No market data (order book, candles, ticker) is published for synthetic pairs - compute your own price ratio before submitting a limit order.
* Both underlying legs must be in `FULL_TRADING` status, or the order is rejected.
* Requires a USD account.
* Coinbase reserves the right to disable synthetic product orders for any currency pair.
* Sequence numbers for drop-copy/feed consumers: a synthetic product order's own received/done/reject events (and its inverse pair's) are not tracked per literal `Symbol` - they share a single sequence stream. A consumer doing its own per-symbol gap detection should not key on the synthetic `Symbol` directly.
