---
title: "Place an order"
method: POST
path: "/orders"
tags: ["Orders"]
---

# Place an order

`POST /orders`

Places a new order for an instrument. After the request is accepted, the order is processed asynchronously — use the returned `id` to poll for status or subscribe to order webhook events.

See the Orders guide ([TOL](https://docs.upvest.co/products/tol/guides/orders) / [BYOL](https://docs.upvest.co/products/byol/guides/orders) / [Omnibus](https://docs.upvest.co/products/omnibus/guides/orders)) for order lifecycle details.

## Headers

- `idempotency-key` string, uuid, required

## Request body

- object — Request body for placing a new order. Either `cash_amount` or `quantity` must be provided, not both. `account_id`, `side`, `instrument_id`, and `instrument_id_type` are always required.
  - `user_id` string, uuid — The ID of the user. Either user ID or business ID must be specified.
  - `business_id` string, uuid — The ID of the business. Either user ID or business ID must be specified.
  - `account_id` string, uuid, required — The ID of the account that owns the order
  - `cash_amount` string — Cash amount for a nominal order, not required if a share quantity is specified.
  - `currency` 'EUR' | 'GBP' | 'USD' — The currency for the order.
  - `side` 'BUY' | 'SELL', required — Side of the order. * BUY — purchases the specified instrument. * SELL — disposes of the specified instrument.
  - `instrument_id` string, required — International securities identification number defined by [ISO 6166](https://en.wikipedia.org/wiki/International_Securities_Identification_Number).
  - `instrument_id_type` 'ISIN', required — The type of the ID used in the request. * ISIN -
  - `order_type` 'MARKET' | 'LIMIT' | 'STOP' — Type of the order. * MARKET — executes immediately at the best available market price. * LIMIT — executes only at or better than the specified `limit_price`. * STOP — triggers when the market price reaches `stop_price`, then executes at the prevailing market price.
  - `quantity` string — Quantity of securities for the order. Only required if the cash amount is not specified.
  - `user_instrument_fit_acknowledgement` boolean — Only applicable if the user has failed the instrument fit check for the instrument type being ordered. True if the user has acknowledged their willingness to trade.
  - `limit_price` string — The limit price for orders of the type 'limit'.
  - `stop_price` string — The stop price for orders of the type 'stop'.
  - `expiry_date` string — The order expiration date (last day the order can trade) in the YYYY-MM-DD format. The expiry date can only be set for LIMIT and STOP orders. [RFC 3339, section 5.6](https://json-schema.org/draft/2020-12/json-schema-validation.html#RFC3339) RFC 3339. The default value is order creation date + 359 days
  - `client_reference` string — Immutable reference to the API flow that initiated the order. For client initiated API flows, this is a client provided ID. For internal initiations, it is set to the ID of the related object.
  - `execution_flow` 'STRAIGHT_THROUGH' | 'BLOCK' — Execution flow for order processing. Defaults to `STRAIGHT_THROUGH` if not specified. * STRAIGHT_THROUGH — the order is routed and executed directly without manual intervention. * BLOCK — the order is bundled with other orders for block execution.
  - `fee_configuration` union[] — fee configuration
    - union — A fee applied to an order. Either a fixed absolute cash fee (`absolute_fee_configuration_item`) or a reference to a predefined transaction fee model.
      - object — A fixed cash fee applied to an order, specified as an absolute amount in a given currency.
        - `type` 'TRANSACTION_FEE_BUY' | 'TRANSACTION_FEE_SELL', required — Fee type * TRANSACTION_FEE_BUY - * TRANSACTION_FEE_SELL -
        - `value_type` string, required — The value type must be “ABSOLUTE”.
        - `charge_method` 'CHARGED_BY_CLIENT' | 'COLLECTED_BY_UPVEST', required — Indicates whether the fee will be charged by client or by other methods. * CHARGED_BY_CLIENT - * COLLECTED_BY_UPVEST -
        - `cash_amount` string, required
        - `currency` 'EUR' | 'GBP' | 'USD', required — Alphabetic three-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. * EUR - Euro * GBP - British Pound * USD - US Dollar
      - object — A fee configuration that references a predefined transaction fee model by its ID, rather than specifying a fee amount directly.
        - `type` 'TRANSACTION_FEE_BUY' | 'TRANSACTION_FEE_SELL', required — Fee type * TRANSACTION_FEE_BUY - * TRANSACTION_FEE_SELL -
        - `transaction_fee_model_id` string, uuid, required — The ID of the transaction fee model.
  - `decision_maker_id` string — ID of the user behind the decision to place an order. Required only if different from the user_id. (e.g. child account order placed by a guardian)

## Response `202`

The request for the order creation has been accepted for processing.

- object — Represents an investment order placed by an end user or on their behalf. An order transitions through states (`NEW` → `PROCESSING` → `FILLED` or `CANCELLED`) as it is routed and executed.
  - `id` string, uuid, required — Unique identifier for an order. Universally Unique Identifier (UUID).
  - `created_at` string, date-time, required — Date and time when the resource was created. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
  - `updated_at` string, date-time, required — Date and time when the resource was last updated. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
  - `user_id` string, uuid — The ID of the user. Either user ID or business ID must be specified.
  - `business_id` string, uuid — The ID of the business. Either user ID or business ID must be specified.
  - `account_id` string, uuid, required — The ID of the account that owns the order
  - `cash_amount` string, required — Cash amount for a nominal order, not required if a share quantity is specified.
  - `currency` 'EUR' | 'GBP' | 'USD', required — The currency for the order.
  - `side` 'BUY' | 'SELL', required — Side of the order. * BUY — purchases the specified instrument. * SELL — disposes of the specified instrument.
  - `instrument_id` string, required — International securities identification number defined by [ISO 6166](https://en.wikipedia.org/wiki/International_Securities_Identification_Number).
  - `instrument_id_type` 'ISIN', required — The type of the ID used in the request. * ISIN -
  - `order_type` 'MARKET' | 'LIMIT' | 'STOP', required — Type of the order. * MARKET — executes immediately at the best available market price. * LIMIT — executes only at or better than the specified `limit_price`. * STOP — triggers when the market price reaches `stop_price`, then executes at the prevailing market price.
  - `quantity` string, required — Quantity of securities for the order. Only required if the cash amount is not specified.
  - `user_instrument_fit_acknowledgement` boolean — Only applicable if the user has failed the instrument fit check for the instrument type being ordered. True if the user has acknowledged their willingness to trade.
  - `limit_price` string — The limit price for orders of the type 'limit'.
  - `stop_price` string — The stop price for orders of the type 'stop'.
  - `expiry_date` string — The order expiration date (last day the order can trade) in the YYYY-MM-DD format. The expiry date can only be set for LIMIT and STOP orders. [RFC 3339, section 5.6](https://json-schema.org/draft/2020-12/json-schema-validation.html#RFC3339) RFC 3339. The default value is order creation date + 359 days
  - `status` 'NEW' | 'PROCESSING' | 'FILLED' | 'CANCELLED', required — The execution status of the order. * NEW — the order has been received and validated, awaiting routing. * PROCESSING — the order is being routed for execution. * FILLED — the order has been fully executed. * CANCELLED — the order was cancelled before being fully executed.
  - `fee` string, required
  - `cancellation_reason` 'CANCELLED_BY_CLIENT' | 'CANCELLED_BY_UPVEST_OPERATIONS' | 'CANCELLED_BY_TRADING_PARTNER' | 'CANCELLED_BY_UPVEST_PLATFORM' — Reason for order cancellation. Present only when `status` is `CANCELLED`. * CANCELLED_BY_CLIENT — cancelled at the end user's or client's request via the API. * CANCELLED_BY_UPVEST_OPERATIONS — cancelled by Upvest operations. * CANCELLED_BY_TRADING_PARTNER — cancelled by the executing partner. * CANCELLED_BY_UPVEST_PLATFORM — cancelled automatically by the Upvest platform.
  - `initiation_flow` 'API' | 'PORTFOLIO' | 'CASH_DIVIDEND_REINVESTMENT' | 'PORTFOLIO_REBALANCING' | 'SELL_TO_COVER_FEES' | 'SELL_TO_COVER_TAXES' | 'ACCOUNT_LIQUIDATION' | 'UPVEST_OPERATIONS' | 'SAVINGS_PLAN' | 'CLIENT_OPERATIONS', required — Identifies what triggered the order. * API — initiated directly via the client API. * PORTFOLIO — initiated by a portfolio rebalancing flow. * CASH_DIVIDEND_REINVESTMENT — initiated as part of dividend reinvestment. * PORTFOLIO_REBALANCING — initiated by an automated rebalancing. * SELL_TO_COVER_FEES — initiated automatically to cover outstanding fees. * SELL_TO_COVER_TAXES — initiated automatically to cover tax obligations. * ACCOUNT_LIQUIDATION — initiated as part of an account liquidation. * UPVEST_OPERATIONS — initiated by Upvest operations. * SAVINGS_PLAN — initiated by a savings plan execution. * CLIENT_OPERATIONS — initiated by client operations.
  - `execution_flow` 'STRAIGHT_THROUGH' | 'BLOCK' — Execution flow for order processing. Defaults to `STRAIGHT_THROUGH` if not specified. * STRAIGHT_THROUGH — the order is routed and executed directly without manual intervention. * BLOCK — the order is bundled with other orders for block execution.
  - `executions` object[], required — Order executions associated with this order
    - `id` string, uuid, required
    - `cash_amount` string, required
    - `share_quantity` string, required
    - `price` string, required — Price of an instrument for a trade execution provided as a decimal string.
    - `transaction_time` string, date-time, required — Timestamp of when the trade was executed at the market. [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) date-time format.
    - `taxes` object[], required — Taxes deducted as part of this execution.
      - `type` 'TOTAL', required — Tax type * TOTAL -
      - `amount` string, required
    - `order_id` string, uuid, required — Unique identifier for an order. Universally Unique Identifier (UUID).
    - `status` 'FILLED' | 'SETTLED' | 'CANCELLED', required — Status of the execution. * FILLED — the execution has been filled. * SETTLED — the execution has settled and securities and cash have been exchanged. * CANCELLED — the execution was cancelled before settlement.
    - `side` 'BUY' | 'SELL', required — Side of the execution. * BUY — a buy execution. * SELL — a sell execution.
    - `currency` 'EUR' | 'GBP' | 'USD', required — Alphabetic three-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. * EUR - Euro * GBP - British Pound * USD - US Dollar
    - `settlement_date` string — Order execution settlement date in the YYYY-MM-DD format. [RFC 3339, section 5.6](https://json-schema.org/draft/2020-12/json-schema-validation.html#RFC3339) RFC 3339
    - `venue_id` string, uuid, required — The ID of the venue
  - `client_reference` string — Immutable reference to the API flow that initiated the order. For client initiated API flows, this is a client provided ID. For internal initiations, it is set to the ID of the related object.
  - `fee_configuration` union[] — Fee configuration applied to this order. Determines how the order fee is calculated.
    - union — A fee applied to an order. Either a fixed absolute cash fee (`absolute_fee_configuration_item`) or a reference to a predefined transaction fee model.
      - object — A fixed cash fee applied to an order, specified as an absolute amount in a given currency.
        - `type` 'TRANSACTION_FEE_BUY' | 'TRANSACTION_FEE_SELL', required — Fee type * TRANSACTION_FEE_BUY - * TRANSACTION_FEE_SELL -
        - `value_type` string, required — The value type must be “ABSOLUTE”.
        - `charge_method` 'CHARGED_BY_CLIENT' | 'COLLECTED_BY_UPVEST', required — Indicates whether the fee will be charged by client or by other methods. * CHARGED_BY_CLIENT - * COLLECTED_BY_UPVEST -
        - `cash_amount` string, required
        - `currency` 'EUR' | 'GBP' | 'USD', required — Alphabetic three-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. * EUR - Euro * GBP - British Pound * USD - US Dollar
      - object — A fee configuration that references a predefined transaction fee model by its ID, rather than specifying a fee amount directly.
        - `type` 'TRANSACTION_FEE_BUY' | 'TRANSACTION_FEE_SELL', required — Fee type * TRANSACTION_FEE_BUY - * TRANSACTION_FEE_SELL -
        - `transaction_fee_model_id` string, uuid, required — The ID of the transaction fee model.
  - `decision_maker_id` string — ID of the user behind the decision to place an order. Required only if different from the user_id. (e.g. child account order placed by a guardian)

## Other responses

- `400` — Bad Request. The incoming request had a malformed parameter/object.
- `401` — Unauthorized. The caller has not been authenticated.
- `403` — Forbidden. The caller has been authenticated but is not allowed to take the requested action.
- `406` — Not Acceptable. The resource does not have a current representation that would be acceptable to the user agent. "Accept" header defined unsupported value.
- `422` — Unprocessable Entity. The syntax of request is correct but server can't process it due a semantic error.
- `429` — Too Many Requests. The caller has exceeded their quota for the time period and has been throttled.
- `500` — Internal Server Error. The service encountered an unexpected error.
- `503` — Service Unavailable. The service handling for this request cannot be reached at this time.
- `504` — Gateway Timeout. The service gateway has reached its internal timeout.

---

[API](https://skmtc.dev/upvest/apis/upvest-investment-api.md) · [All operations](https://skmtc.dev/upvest/apis/upvest-investment-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/upvest/upvest-investment-api/revisions/f6ee5fcc0337/schema)
