Place an order: broker API endpoints compared
19 documented calls from 10 of the 12 APIs with endpoint records here, and 6 functions and messages from 4 APIs whose interfaces are not HTTP, each with the page it was read on.
Risk warning: CFDs and spread bets are complex instruments and come with a high risk of losing money rapidly due to leverage. You can lose money on these products, and each provider publishes its own loss figure under FCA rules. You should consider whether you understand how they work and whether you can afford to take the high risk of losing your money. Automated and API trading can amplify losses through bugs, connectivity failures and runaway orders.
What this task is
Placing an order sends an instruction to deal: the instrument, the direction, the size and the order type, often with a stop and a limit attached. Some APIs use one call for every order type, others separate dealing at market from orders that wait for a level.
A reply to this call is not always a fill. Many APIs answer with a reference and expect you to confirm the outcome with a second call. Never resend an order because a reply was slow until you have checked whether the first one was accepted.
The documented endpoint, API by API
Ordered by the name of the broker or platform API, then by path. The order is not a ranking. Open a row for the parameters, the response and a sample request.
| Broker or platform | Endpoint | What the record says it does | Source |
|---|---|---|---|
| Capital.com | POST/api/v1/positions | Open a position at market. The response is only a dealReference: confirm the result with GET /api/v1/confirms/{dealReference}. | open-api.capital.comchecked |
| Capital.com | POST/api/v1/workingorders | Create a LIMIT or STOP order at a price level, optionally with a cancellation date, stop loss and take profit. | open-api.capital.comchecked |
| DXtrade APIs | POST/accounts/{accountCode}/orders | Place a market, limit or stop order, or a group of orders, on an account. The client gives each order a code of its own so a repeat is refused. | demo.dx.tradechecked |
| eToro | POST/api/v2/trading/execution/demo/orders | Places an order on the demo account, by amount or units, with optional leverage, stop loss and take profit. The real account version is POST /api/v2/trading/execution/orders. | api-portal.etoro.comchecked |
| eToro | POST/api/v2/trading/execution/orders | Places an order on the real account, by amount, units or contracts, with optional leverage, stop loss and take profit. A 200 reply means the order was accepted, not that it was executed. | api-portal.etoro.comchecked |
| eToro | POST/api/v3/trading/execution/demo/orders | Submits an order on the demo account for processing in the background. The version 3 form of the order call: a 202 reply means it was queued, not executed. | api-portal.etoro.comchecked |
| eToro | POST/api/v3/trading/execution/orders | Submits an order on the real account for processing in the background. The version 3 form of the order call: a 202 reply means it was queued, not executed. | api-portal.etoro.comchecked |
| IG | POST/positions/otc | Open an OTC position. Returns a dealReference only: the deal is not confirmed until you call GET /confirms/{dealReference}. | labs.ig.comchecked |
| IG | POST/working-orders/otc | Create a working order (LIMIT or STOP) that triggers at a level. | labs.ig.comchecked |
| Interactive Brokers | POST/iserver/account/{accountId}/orders | Submits an order ticket, a bracket or an OCA group. The reply is either the order ID or a question you must confirm with POST /iserver/reply/{replyId}. | interactivebrokers.comchecked |
| Match-Trader Platform API | POST/mtr-api/{SYSTEM_UUID}/pending-order/create | Place a pending order that waits for a price, with a side, a volume, a type and an optional stop loss and take profit. | app.theneo.iochecked |
| Match-Trader Platform API | POST/mtr-api/{SYSTEM_UUID}/position/open | Open a position in an instrument, on the buy or the sell side, with a volume and an optional stop loss and take profit. | app.theneo.iochecked |
| OANDA | POST/v3/accounts/{accountID}/orders | Create an order. Market, limit, stop, market if touched and dependent orders all go through this one endpoint. Returns 201. | developer.oanda.comchecked |
| Saxo OpenAPI | POST/trade/v2/orders | Places a new order, optionally with related limit and stop orders as children. A 200 reply can still carry ErrorInfo, so check for OrderId before treating the order as placed. | developer.saxochecked |
| TradeLocker API | POST/trade/accounts/{accountId}/orders | Place a market, limit or stop order on the account, with an optional stop loss and take profit. The reply carries the new orderId. | public-api.tradelocker.comchecked |
| Trading 212 | POST/api/v0/equity/orders/limit | Place a limit order, which fills at the limit price or better. The sign of quantity sets the direction. | docs.trading212.comchecked |
| Trading 212 | POST/api/v0/equity/orders/market | Place a market order, to deal at the next available price. The sign of quantity sets the direction. If the market is closed the order waits for it to open. | docs.trading212.comchecked |
| Trading 212 | POST/api/v0/equity/orders/stop | Place a stop order, which becomes a market order once the last traded price reaches the stop price. The sign of quantity sets the direction. | docs.trading212.comchecked |
| Trading 212 | POST/api/v0/equity/orders/stop_limit | Place a stop limit order: when the last traded price reaches the stop price, a limit order is placed at the limit price. The sign of quantity sets the direction. | docs.trading212.comchecked |
The same task where the interface is not HTTP
Some platform APIs, and the streaming interfaces of some broker APIs, are not sent as HTTP requests. A function is called from a program in its language, and a message is sent over an open connection. None has a method or a path, so each row is labelled with its kind and its interface. A record is put on this page by hand, from what the vendor's page says the call does, and one call can do several jobs, so the same function can be on more than one task page. Ordered by the name of the broker or platform API, then interface, then name.
| API | Call | What the record says it does | Source |
|---|---|---|---|
| cTrader Open API | messageProtoOANewOrderReq cTrader Open API | Sends a new order. The definition allows it only where the access token has trade permission for the account. | help.ctrader.comchecked |
| Deriv | messagebuy Deriv WebSocket API | Buys a contract: either the one a proposal priced, by the id that proposal returned, or one described in full in parameters. price is the most you accept to pay. | developers.deriv.comchecked |
| MetaTrader 4 (MQL4) | functionOrderSend() MQL4 | Opens a market order or places a pending order. The page calls it the main function for doing either. | docs.mql4.comchecked |
| MetaTrader 5 (Python package and MQL5) | functionorder_send() MetaTrader5 Python package | Sends a trade request from the terminal to the trade server. One call covers a market order, a pending order, a change to an order or position, a cancellation and a close: the request's action field says which. | mql5.comchecked |
| MetaTrader 5 (Python package and MQL5) | functionOrderSend() MQL5 | Sends a trade request to the trade server and waits for its answer. One function covers a market order, a pending order, a change, a cancellation and a close: the action field of the request says which. | mql5.comchecked |
| MetaTrader 5 (Python package and MQL5) | functionOrderSendAsync() MQL5 | Sends a trade request to the trade server without waiting for its answer. The page describes it as made for high frequency trading, where waiting for the server is not acceptable. | mql5.comchecked |
None documented here yet
These APIs have endpoint records on this site, but none is assigned to this task. That describes this dataset. It is not a statement that the API lacks such a call.
Brokers and platforms with no endpoint records at all are not listed above. The broker directory shows what is recorded for each.