---
title: "Place orders on the exchange."
method: POST
path: "/v3/orders/"
tags: ["orders"]
---

# Place orders on the exchange.

`POST /v3/orders/`

## Description
This route only works for Smarkets API users, other users will receive a 403 status code response.<br><br>
For immediate_or_cancel orders type, the route will return when the order is matched (or cancelled).<br>
For all other order types, the route will return when the order is accepted by the exchange.<br>
In the latter case, GET v3/orders should be used to check the status of the order, using the order id
returned by this response.

##  Rate limits
Maximum 10 requests per second<br>

## Request body

- object
  - `contract_id` string, required — This ID uniquely identifies the contract
  - `label` string — Label is a user-defined string that will be stored in the order. It can be used to identify different trading strategies
  - `market_id` string, required — This ID uniquely identifies the market
  - `minimum_accepted_quantity` integer — If this minimum accepted quantity is not matched on bet placement time, the order will be cancelled and nothing will be matched.<br> Only applicable to immediate_or_cancel order types.
  - `price` integer, required — This price is in percentage basis points.<br> Example: 5000 = 50% <br> To convert it to decimal odds, just divide 10000 by it<br> Example: 10000 / 5000 = 2.0 (decimal odds).<br> This price has to conform to a valid tick on the exchange; an invalid price error will be returned if it does not.
  - `quantity` integer, required — Quantity is the sum of the total pot (back+lay) in case the order is matched<br> The units are 1/10000 * one unit of the user's currency.<br> Example: Quantity 500 = 0.05 GBP<br> To convert it to back stake, just multiply by the price and divide by 100000000<br> Example: 100000 (quantity) * 5000 (price) / 100000000 = 5 GBP back stake<br> The minimum stake is £0.05 or currency equivalent
  - `side` 'buy' | 'sell', required — side can either be:<ul> <li>buy: backing a contract <li>sell: laying a contract </ul>
  - `type` 'good_til_cancelled' | 'keep_in_play' | 'good_til_halted' | 'immediate_or_cancel' — Order types can have the following values: <ul> <li>good_til_cancelled: this order will be open until a reduction factor is applied or a market state changes to live, which will cancel the order. <li>keep_in_play: the same as good_til_cancelled, except it will not be cancelled on market state changes <li>good_til_halted: the same as good_til_cancelled, except a market <li>immediate_or_cancel: if the minimum_accepted_quantity is not matched at the time of order placement, this order will be cancelled. </ul> <p>The following table explains the lifetime of orders:</p> <table cellpadding="3" style="border: 1px solid white;"> <tr> <th>order_type</th> <th>Market Goes Live</th> <th>Market Halted</th> <th>Reduction Factor Applied</th> </tr> <tr> <td>good_til_cancelled</td> <td>Cancelled</td> <td>Cancelled</td> <td>Cancelled</td> </tr> <tr> <td>good_til_halted</td> <td>Kept</td> <td>Cancelled</td> <td>Cancelled</td> </tr> <tr> <td>keep_in_play</td> <td>Kept</td> <td>Kept</td> <td>Cancelled</td> </tr> </table><br> <p>Orders marked as immediate_or_cancel must be executed immediately and thus will not remain in the book.</p>

## Response `200`

Order placement success

- object — Order placement success
  - `available_balance` string, required — Current available balance on the account, it is equal to the balance deducted by the exposure
  - `available_quantity` integer, required — Quantity left to be matched in the order
  - `contract_id` string, required — This ID uniquely identifies the contract
  - `executed_avg_price` integer, nullable, required — The average price for the executions on the order
  - `exposure` string, required — Current exposure on the account
  - `market_id` string, required — This ID uniquely identifies the market
  - `order_id` string, required — This ID uniquely identifies an order
  - `orig_price` integer, nullable, required — The price at which the order was placed at, it can be different from the matched price. This value will be null if there were no executions.
  - `price` integer, required — This price is in percentage basis points.<br> Example: 5000 = 50% <br> To convert it to decimal odds, just divide 10000 by it<br> Example: 10000 / 5000 = 2.0 (decimal odds).<br> This price has to conform to a valid tick on the exchange; an invalid price error will be returned if it does not.
  - `quantity` integer, required — Quantity is the sum of the total pot (back+lay) in case the order is matched<br> The units are 1/10000 * one unit of the user's currency.<br> Example: Quantity 500 = 0.05 GBP<br> To convert it to back stake, just multiply by the price and divide by 100000000<br> Example: 100000 (quantity) * 5000 (price) / 100000000 = 5 GBP back stake<br> The minimum stake is £0.05 or currency equivalent
  - `side` 'buy' | 'sell', required — side can either be:<ul> <li>buy: backing a contract <li>sell: laying a contract </ul>
  - `total_executed_quantity` integer, required — Quantity matched (executed) in the order

## Other responses

- `400` — ORDER_INVALID_INVALID_PRICE, ORDER_INVALID_INVALID_QUANTITY, ORDER_REJECTED_CAPACITY_REACHED, ORDER_REJECTED_LIMIT_EXCEEDED, ORDER_REJECTED_MARKET_NOT_OPEN, ORDER_REJECTED_CROSSED_SELF, ORDER_REJECTED_CONTRACT_NOT_FOUND, ORDER_REJECTED_STAKE_LIMIT_EXCEEDED, REQUEST_VALIDATION_ERROR, ORDER_CANCELLED_INSUFFICIENT_LIQUIDITY, ORDER_INVALID_INVALID_QUANTITY, ORDER_INVALID_INVALID_PRICE, ORDER_CANCELLED_MARKET_HALTED, ORDER_REJECTED_MARKET_SETTLED, ORDER_REJECTED_INSUFFICIENT_FUNDS, ORDER_CANCELLED_ADMIN_REQUESTED, ORDER_INVALID_INVALID_PRICE, ORDER_REJECTED_THROTTLE_EXCEEDED, ORDER_REJECTED_TRADING_SUSPENDED, ORDER_INVALID_INVALID_QUANTITY, ORDER_REJECTED_MARKET_HALTED, ORDER_REJECTED_CONTRACT_SETTLED, ORDER_REJECTED_ACCOUNT_SUSPENDED, ORDER_CANCELLED_MEMBER_REQUESTED, ORDER_CANCELLED_TRADING_SUSPENDED, ORDER_REJECTED_MARKET_NOT_FOUND, ORDER_REJECTED_SERVICE_TEMPORARILY_UNAVAILABLE
- `401` — AUTH_REQUIRED
- `403` — KYC_PERMISSION_DENIED, ACCOUNT_UNVERIFIED, RG_ACK_REQUIRED, NO_DEPOSITS, FORBIDDEN, ACTION_BLOCKED
- `429` — RATE_LIMIT_EXCEEDED
- `451` — COUNTRY_BLOCKED
- `500` — Internal server error
- `503` — ORDER_UNAVAILABLE, KYC_SERVICE_UNAVAILABLE, CREATE_ORDER_TIMEOUT, AUTH_UNAVAILABLE, KYC_SERVICE_INTERNAL_ERROR

---

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