---
title: "GET /private/sell"
method: GET
path: "/private/sell"
tags: ["Trading", "Matching Engine", "Private"]
---

# GET /private/sell

`GET /private/sell`

Places a sell order for an instrument. Supports various order types including limit, market, stop, and advanced order types (stop-limit, take-profit, take-profit-limit, trailing-stop, etc.).

You can specify order parameters such as price, quantity, time-in-force, post-only, reduce-only, and trigger conditions. Orders can be labeled for easier management and tracking. Market Maker Protection (MMP) can be enabled to prevent excessive quoting.

**📖 Related Article:** [Order Management Best Practices](https://docs.deribit.com/articles/order-management-best-practices)

**Scope:** `trade:read_write`

[Try in API console](https://test.deribit.com/api_console?method=%2Fprivate%2Fsell)

## Query parameters

- `instrument_name` string, required — Unique instrument identifier
- `amount` number
- `contracts` number
- `type` 'limit' | 'stop_limit' | 'take_limit' | 'market' | 'stop_market' | 'take_market' | 'market_limit' | 'trailing_stop'
- `label` string
- `price` number
- `time_in_force` 'good_til_cancelled' | 'good_til_day' | 'fill_or_kill' | 'immediate_or_cancel'
- `display_amount` number
- `post_only` boolean
- `reject_post_only` boolean
- `reduce_only` boolean
- `trigger_price` number
- `trigger_offset` number
- `trigger` 'index_price' | 'mark_price' | 'last_price' — Trigger type (only for trigger orders). Allowed values: `"index_price"`, `"mark_price"`, `"last_price"`.
- `advanced` 'usd' | 'implv' — advanced type: `"usd"` or `"implv"` (Only for options; field is omitted if not applicable).
- `mmp` boolean
- `valid_until` integer
- `linked_order_type` 'one_triggers_other' | 'one_cancels_other' | 'one_triggers_one_cancels_other'
- `trigger_fill_condition` 'first_hit' | 'complete_fill' | 'incremental'
- `otoco_config` object[]
  - `amount` number — **Required.** The secondary order size. For perpetual and inverse futures the amount is in USD units. For options and linear futures it is the underlying base currency coin.
  - `direction` 'buy' | 'sell' — **Required.** Direction of the secondary order.
  - `type` 'limit' | 'stop_limit' | 'take_limit' | 'market' | 'stop_market' | 'take_market' | 'market_limit' | 'trailing_stop' — The order type, default: `"limit"`
  - `label` string — User defined label for the order (maximum 64 characters).
  - `price` number — The order price in base currency. Required for limit and stop_limit orders.
  - `reduce_only` boolean — If true, the order is considered reduce-only which is intended to only reduce a current position.
  - `time_in_force` 'good_til_cancelled' | 'good_til_day' | 'fill_or_kill' | 'immediate_or_cancel' — Specifies how long the order remains in effect. Default `"good_til_cancelled"`.
  - `post_only` boolean — If true, the order is considered post-only. If the new price would cause the order to be filled immediately (as taker), the price will be changed to be just below or above the spread (according to the direction of the order).
  - `reject_post_only` boolean — If an order is considered post-only and this field is set to true then the order is put to the order book unmodified or the request is rejected.
  - `trigger_price` number — Trigger price. Required for trigger orders (stop-loss or take-profit orders).
  - `trigger_offset` number — The maximum deviation from the price peak beyond which the order will be triggered. Used for trailing stop orders.
  - `trigger` 'index_price' | 'mark_price' | 'last_price' — Defines the trigger type. Required for stop-loss, take-profit, and trailing stop orders.

## Response `200`

Success response

- PrivateBuyAndSellResponse
  - `jsonrpc` '2.0', required — The JSON-RPC version (2.0)
  - `id` integer — The id that was sent in the request
  - `result` object, required
    - `order` Order, required
      - `order_id` string, required — Unique order identifier
      - `starbase_order_id` integer — Raw Starbase order id, in Starbase's own (non currency-prefixed) id namespace. Only present for orders matched on Starbase.
      - `order_state` 'open' | 'filled' | 'rejected' | 'cancelled' | 'untriggered' | 'triggered', required — Order state: `"open"`, `"filled"`, `"rejected"`, `"cancelled"`, `"untriggered"`
      - `order_type` 'market' | 'limit' | 'stop_market' | 'stop_limit' | 'take_market' | 'take_limit' | 'trailing_stop', required — Order type: `"limit"`, `"market"`, `"stop_limit"`, `"stop_market"`, `"take_limit"`, `"take_market"`, `"trailing_stop"`
      - `original_order_type` 'market' | 'market_limit' — Original order type. Optional field
      - `time_in_force` 'good_til_cancelled' | 'good_til_day' | 'fill_or_kill' | 'immediate_or_cancel', required — Order time in force: `"good_til_cancelled"`, `"good_til_day"`, `"fill_or_kill"` or `"immediate_or_cancel"`
      - `is_rebalance` boolean — Optional (only for spot). `true` if order was automatically created during cross-collateral balance restoration
      - `is_liquidation` boolean — Optional (not added for spot). `true` if order was automatically created during liquidation
      - `instrument_name` string, required — Unique instrument identifier
      - `creation_timestamp` integer, required — The timestamp (milliseconds since the Unix epoch)
      - `last_update_timestamp` integer, required — The timestamp (milliseconds since the Unix epoch)
      - `starbase_last_update_timestamp` integer — The Starbase causal timestamp (nanoseconds since the Unix epoch) of the last book update that affected this order. Present only for orders placed in Starbase; not always available for direct access orders
      - `direction` 'buy' | 'sell', required — Direction: `buy`, or `sell`
      - `price` union, required — Price in base currency or "market_price" in case of open trigger market orders
        - number
        - 'market_price'
      - `label` string, required — User defined label (up to 64 characters)
      - `post_only` boolean, required — `true` for post-only orders only
      - `reject_post_only` boolean — `true` if order has `reject_post_only` flag (field is present only when `post_only` is `true`)
      - `reduce_only` boolean — Optional (not added for spot). '`true` for reduce-only orders only'
      - `api` boolean, required — `true` if created with API
      - `web` boolean — `true` if created via Deribit frontend (optional)
      - `mobile` boolean — Optional field with value `true` added only when created with Mobile Application
      - `refresh_amount` number — The initial display amount of iceberg order. Iceberg order display amount will be refreshed to that value after match consuming actual display amount. Absent for other types of orders
      - `display_amount` number — The actual display amount of iceberg order. Absent for other types of orders.
      - `amount` number — It represents the requested order size. For perpetual and inverse futures the amount is in USD units. For options and linear futures it is the underlying base currency coin.
      - `contracts` number — It represents the order size in contract units. (Optional, may be absent in historical data).
      - `filled_amount` number — Filled amount of the order. For perpetual and futures the filled_amount is in USD units, for options - in units or corresponding cryptocurrency contracts, e.g., BTC or ETH.
      - `average_price` number — Average fill price of the order
      - `advanced` 'usd' | 'implv' — advanced type: `"usd"` or `"implv"` (Only for options; field is omitted if not applicable).
      - `implv` number — Implied volatility in percent. (Only if `advanced="implv"`)
      - `usd` number — Option price in USD (Only if `advanced="usd"`)
      - `triggered` boolean — Whether the trigger order has been triggered
      - `trigger` 'index_price' | 'mark_price' | 'last_price' — Trigger type (only for trigger orders). Allowed values: `"index_price"`, `"mark_price"`, `"last_price"`.
      - `trigger_price` number — Trigger price (Only for future trigger orders)
      - `trigger_offset` number — The maximum deviation from the price peak beyond which the order will be triggered (Only for trailing trigger orders)
      - `trigger_reference_price` number — The price of the given trigger at the time when the order was placed (Only for trailing trigger orders)
      - `block_trade` boolean — `true` if order made from block_trade trade, added only in that case.
      - `mmp` boolean — `true` if the order is a MMP order, otherwise `false`.
      - `risk_reducing` boolean — `true` if the order is marked by the platform as a risk reducing order (can apply only to orders placed by PM users), otherwise `false`.
      - `replaced` boolean — `true` if the order was edited (by user or - in case of advanced options orders - by pricing engine), otherwise `false`.
      - `auto_replaced` boolean — Options, advanced orders only - `true` if last modification of the order was performed by the pricing engine, otherwise `false`.
      - `quote` boolean — If order is a quote. Present only if true.
      - `mmp_group` string — Name of the MMP group supplied in the `private/mass_quote` request. Only present for quote orders.
      - `quote_set_id` string — Identifier of the QuoteSet supplied in the `private/mass_quote` request. Only present for quote orders.
      - `quote_id` string — The same QuoteID as supplied in the `private/mass_quote` request. Only present for quote orders.
      - `trigger_order_id` string — Id of the trigger order that created the order (Only for orders that were created by triggered orders).
      - `combo_order_id` string — Id of the combo order that created this order (only present for orders that were created as legs of a combo order).
      - `app_name` string — The name of the application that placed the order on behalf of the user (optional).
      - `mmp_cancelled` boolean — `true` if order was cancelled by mmp trigger (optional)
      - `cancel_reason` 'user_request' | 'autoliquidation' | 'cancel_on_disconnect' | 'risk_mitigation' | 'pme_risk_reduction' | 'pme_account_locked' | 'position_locked' | 'mmp_trigger' | 'mmp_config_curtailment' | 'edit_post_only_reject' | 'oco_other_closed' | 'oto_primary_closed' | 'settlement' — Enumerated reason behind cancel `"user_request"`, `"autoliquidation"`, `"cancel_on_disconnect"`, `"risk_mitigation"`, `"pme_risk_reduction"` (portfolio margining risk reduction), `"pme_account_locked"` (portfolio margining account locked per currency), `"position_locked"`, `"mmp_trigger"` (market maker protection), `"mmp_config_curtailment"` (market maker configured quantity decreased), `"edit_post_only_reject"` (cancelled on edit because of `reject_post_only` setting), `"oco_other_closed"` (the oco order linked to this order was closed), `"oto_primary_closed"` (the oto primary order that was going to trigger this order was cancelled), `"settlement"` (closed because of a settlement)
      - `oto_order_ids` OrderId[] — The Ids of the orders that will be triggered if the order is filled
      - `trigger_fill_condition` 'first_hit' | 'complete_fill' | 'incremental' — <p>The fill condition of the linked order (Only for linked order types), default: `first_hit`.</p> <ul> <li>`"first_hit"` - any execution of the primary order will fully cancel/place all secondary orders.</li> <li>`"complete_fill"` - a complete execution (meaning the primary order no longer exists) will cancel/place the secondary orders.</li> <li>`"incremental"` - any fill of the primary order will cause proportional partial cancellation/placement of the secondary order. The amount that will be subtracted/added to the secondary order will be rounded down to the contract size.</li> </ul>
      - `oco_ref` string — Unique reference that identifies a one_cancels_others (OCO) pair.
      - `primary_order_id` string — Unique order identifier
      - `is_secondary_oto` boolean — `true` if the order is an order that can be triggered by another order, otherwise not present.
      - `is_primary_otoco` boolean — `true` if the order is an order that can trigger an OCO pair, otherwise not present.
    - `trades` UserTrade[], required
      - `trade_id` string, required — Unique (per currency) trade identifier
      - `trade_seq` integer, required — The sequence number of the trade within instrument
      - `instrument_name` string, required — Unique instrument identifier
      - `timestamp` integer, required — The timestamp of the trade (milliseconds since the UNIX epoch)
      - `starbase_timestamp` integer — Optional field: timestamp of the match (trade) in [Starbase](https://docs.deribit.com/starbase/overview), in nanoseconds since the UNIX epoch (present only for trades matched in Starbase)
      - `order_type` 'limit' | 'market' | 'liquidation' — Order type: `"limit`, `"market"`, or `"liquidation"`
      - `advanced` 'usd' | 'implv' — Advanced type of user order: `"usd"` or `"implv"` (only for options; omitted if not applicable)
      - `order_id` string, required — Id of the user order (maker or taker), i.e. subscriber's order id that took part in the trade
      - `matching_id` string, required — Always `null`
      - `starbase_match_id` integer — Optional field containing the Starbase match identifier (present only for trades matched via Starbase)
      - `starbase_order_id` integer — Optional field: the id in [Starbase](https://docs.deribit.com/starbase/overview) of the user's own order (maker or taker side) that took part in the trade; for self-trades this is always the taker order's id, and for combo legs it is the parent combo order's id (present only for trades matched in Starbase)
      - `direction` 'buy' | 'sell', required — Direction: `buy`, or `sell`
      - `tick_direction` 0 | 1 | 2 | 3, required — Direction of the "tick" (`0` = Plus Tick, `1` = Zero-Plus Tick, `2` = Minus Tick, `3` = Zero-Minus Tick).
      - `index_price` number, required — Index Price at the moment of trade
      - `price` number, required — Price in base currency
      - `amount` number, required — Trade amount. For perpetual and inverse futures the amount is in USD units. For options and linear futures it is the underlying base currency coin.
      - `contracts` number — Trade size in contract units (optional, may be absent in historical trades)
      - `iv` number — Option implied volatility for the price (Option only)
      - `underlying_price` number — Underlying price for implied volatility calculations (Options only)
      - `liquidation` 'M' | 'T' | 'MT' — Optional field (only for trades caused by liquidation): `"M"` when maker side of trade was under liquidation, `"T"` when taker side was under liquidation, `"MT"` when both sides of trade were under liquidation
      - `liquidity` 'M' | 'T' — Describes what was role of users order: `"M"` when it was maker order, `"T"` when it was taker order
      - `fee` number, required — User's fee in units of the specified `fee_currency`
      - `fee_currency` 'BTC' | 'ETH' | 'USDC' | 'USDT' | 'EURR', required — Currency, i.e `"BTC"`, `"ETH"`, `"USDC"`
      - `label` string — User defined label (presented only when previously set for order by user)
      - `state` 'open' | 'filled' | 'rejected' | 'cancelled' | 'untriggered' | 'archive', required — Order state: `"open"`, `"filled"`, `"rejected"`, `"cancelled"`, `"untriggered"` or `"archive"` (if order was archived)
      - `block_trade_id` string — Block trade id - when trade was part of a block trade
      - `block_rfq_id` integer — ID of the Block RFQ - when trade was part of the Block RFQ
      - `block_rfq_quote_id` integer — ID of the Block RFQ quote - when trade was part of the Block RFQ
      - `reduce_only` string — `true` if user order is reduce-only
      - `post_only` string — `true` if user order is post-only
      - `mmp` boolean — `true` if user order is MMP
      - `risk_reducing` boolean — `true` if user order is marked by the platform as a risk reducing order (can apply only to orders placed by PM users)
      - `api` boolean — `true` if user order was created with API
      - `profit_loss` number — Profit and loss in base currency.
      - `mark_price` number, required — Mark Price at the moment of trade
      - `legs` unknown[] — Optional field containing leg trades if trade is a combo trade (present when querying for **only** combo trades and in `combo_trades` events)
        - unknown
      - `combo_id` string — Optional field containing combo instrument name if the trade is a combo trade
      - `combo_trade_id` string — Optional field containing combo trade identifier if the trade is a combo trade
      - `quote_set_id` string — QuoteSet of the user order (optional, present only for orders placed with `private/mass_quote`)
      - `quote_id` string — QuoteID of the user order (optional, present only for orders placed with `private/mass_quote`)
      - `trade_allocations` object[] — List of allocations for Block RFQ pre-allocation. Each allocation specifies `user_id`, `amount`, and `fee` for the allocated part of the trade. For broker client allocations, a `client_info` object will be included.
        - `user_id` integer — User ID to which part of the trade is allocated. For brokers the User ID is obstructed.
        - `amount` number, required — Amount allocated to this user.
        - `fee` number, required — Fee for the allocated part of the trade.
        - `client_info` object — Optional client allocation info for brokers.
          - `client_id` integer — ID of a client; available to broker. Represents a group of users under a common name.
          - `client_link_id` integer — ID assigned to a single user in a client; available to broker.
          - `name` string — Name of the linked user within the client; available to broker.

---

[API](https://skmtc.net/deribit/apis/deribit-api-2.md) · [All operations](https://skmtc.net/deribit/apis/deribit-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/deribit/deribit-api-2/versions/430b3f0bc67c/schema)
