curl --request POST \
--url https://api.rivermarkets.com/v1/orders \
--header 'Content-Type: application/json' \
--header 'X-River-Key-Id: <api-key>' \
--header 'X-River-Signature: <api-key>' \
--header 'X-River-Timestamp: <api-key>' \
--data '
{
"qty": 123,
"buy_flag": true,
"subaccount_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"price": 0.5,
"post_only": false,
"cancel_order_on_pause": true,
"river_id": 123,
"generic_asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"expiry_ts_utc": "2023-11-07T05:31:56Z",
"conditional_orders_params": [
{
"trigger_order": {
"qty": 123,
"buy_flag": true,
"price": 0.5,
"stop_order_price": 0.5
},
"stop_order_price": 0.5,
"parent_river_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_complex_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
}
'import requests
url = "https://api.rivermarkets.com/v1/orders"
payload = {
"qty": 123,
"buy_flag": True,
"subaccount_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"price": 0.5,
"post_only": False,
"cancel_order_on_pause": True,
"river_id": 123,
"generic_asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"expiry_ts_utc": "2023-11-07T05:31:56Z",
"conditional_orders_params": [
{
"trigger_order": {
"qty": 123,
"buy_flag": True,
"price": 0.5,
"stop_order_price": 0.5
},
"stop_order_price": 0.5,
"parent_river_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_complex_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
}
headers = {
"X-River-Key-Id": "<api-key>",
"X-River-Timestamp": "<api-key>",
"X-River-Signature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-River-Key-Id': '<api-key>',
'X-River-Timestamp': '<api-key>',
'X-River-Signature': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
qty: 123,
buy_flag: true,
subaccount_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
price: 0.5,
post_only: false,
cancel_order_on_pause: true,
river_id: 123,
generic_asset_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
expiry_ts_utc: '2023-11-07T05:31:56Z',
conditional_orders_params: [
{
trigger_order: {qty: 123, buy_flag: true, price: 0.5, stop_order_price: 0.5},
stop_order_price: 0.5,
parent_river_order_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
parent_complex_order_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
]
})
};
fetch('https://api.rivermarkets.com/v1/orders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.rivermarkets.com/v1/orders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'qty' => 123,
'buy_flag' => true,
'subaccount_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'price' => 0.5,
'post_only' => false,
'cancel_order_on_pause' => true,
'river_id' => 123,
'generic_asset_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'expiry_ts_utc' => '2023-11-07T05:31:56Z',
'conditional_orders_params' => [
[
'trigger_order' => [
'qty' => 123,
'buy_flag' => true,
'price' => 0.5,
'stop_order_price' => 0.5
],
'stop_order_price' => 0.5,
'parent_river_order_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'parent_complex_order_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-River-Key-Id: <api-key>",
"X-River-Signature: <api-key>",
"X-River-Timestamp: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.rivermarkets.com/v1/orders"
payload := strings.NewReader("{\n \"qty\": 123,\n \"buy_flag\": true,\n \"subaccount_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"price\": 0.5,\n \"post_only\": false,\n \"cancel_order_on_pause\": true,\n \"river_id\": 123,\n \"generic_asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"expiry_ts_utc\": \"2023-11-07T05:31:56Z\",\n \"conditional_orders_params\": [\n {\n \"trigger_order\": {\n \"qty\": 123,\n \"buy_flag\": true,\n \"price\": 0.5,\n \"stop_order_price\": 0.5\n },\n \"stop_order_price\": 0.5,\n \"parent_river_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_complex_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-River-Key-Id", "<api-key>")
req.Header.Add("X-River-Timestamp", "<api-key>")
req.Header.Add("X-River-Signature", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.rivermarkets.com/v1/orders")
.header("X-River-Key-Id", "<api-key>")
.header("X-River-Timestamp", "<api-key>")
.header("X-River-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"qty\": 123,\n \"buy_flag\": true,\n \"subaccount_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"price\": 0.5,\n \"post_only\": false,\n \"cancel_order_on_pause\": true,\n \"river_id\": 123,\n \"generic_asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"expiry_ts_utc\": \"2023-11-07T05:31:56Z\",\n \"conditional_orders_params\": [\n {\n \"trigger_order\": {\n \"qty\": 123,\n \"buy_flag\": true,\n \"price\": 0.5,\n \"stop_order_price\": 0.5\n },\n \"stop_order_price\": 0.5,\n \"parent_river_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_complex_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rivermarkets.com/v1/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-River-Key-Id"] = '<api-key>'
request["X-River-Timestamp"] = '<api-key>'
request["X-River-Signature"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"qty\": 123,\n \"buy_flag\": true,\n \"subaccount_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"price\": 0.5,\n \"post_only\": false,\n \"cancel_order_on_pause\": true,\n \"river_id\": 123,\n \"generic_asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"expiry_ts_utc\": \"2023-11-07T05:31:56Z\",\n \"conditional_orders_params\": [\n {\n \"trigger_order\": {\n \"qty\": 123,\n \"buy_flag\": true,\n \"price\": 0.5,\n \"stop_order_price\": 0.5\n },\n \"stop_order_price\": 0.5,\n \"parent_river_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_complex_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"river_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"complex_orders": {}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Create Order
Place a new order.
Submits an order for asynchronous processing. The order is persisted immediately and queued for execution on the target exchange.
See Orders and Order Types for more information.
Asset Selection:
Provide exactly one of river_id (standard instrument) or generic_asset_id (user-defined basket).
Generic asset orders only support MARKET order type — the system automatically routes
IOC limit orders to each underlying instrument at optimal prices.
Response:
Returns 202 Accepted with the order_id and associated complex_orders ids (TP/SL).
Poll GET /v1/orders/{order_id} or use webhooks to track execution.
curl --request POST \
--url https://api.rivermarkets.com/v1/orders \
--header 'Content-Type: application/json' \
--header 'X-River-Key-Id: <api-key>' \
--header 'X-River-Signature: <api-key>' \
--header 'X-River-Timestamp: <api-key>' \
--data '
{
"qty": 123,
"buy_flag": true,
"subaccount_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"price": 0.5,
"post_only": false,
"cancel_order_on_pause": true,
"river_id": 123,
"generic_asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"expiry_ts_utc": "2023-11-07T05:31:56Z",
"conditional_orders_params": [
{
"trigger_order": {
"qty": 123,
"buy_flag": true,
"price": 0.5,
"stop_order_price": 0.5
},
"stop_order_price": 0.5,
"parent_river_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_complex_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
}
'import requests
url = "https://api.rivermarkets.com/v1/orders"
payload = {
"qty": 123,
"buy_flag": True,
"subaccount_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"price": 0.5,
"post_only": False,
"cancel_order_on_pause": True,
"river_id": 123,
"generic_asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"expiry_ts_utc": "2023-11-07T05:31:56Z",
"conditional_orders_params": [
{
"trigger_order": {
"qty": 123,
"buy_flag": True,
"price": 0.5,
"stop_order_price": 0.5
},
"stop_order_price": 0.5,
"parent_river_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_complex_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
}
headers = {
"X-River-Key-Id": "<api-key>",
"X-River-Timestamp": "<api-key>",
"X-River-Signature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-River-Key-Id': '<api-key>',
'X-River-Timestamp': '<api-key>',
'X-River-Signature': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
qty: 123,
buy_flag: true,
subaccount_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
price: 0.5,
post_only: false,
cancel_order_on_pause: true,
river_id: 123,
generic_asset_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
expiry_ts_utc: '2023-11-07T05:31:56Z',
conditional_orders_params: [
{
trigger_order: {qty: 123, buy_flag: true, price: 0.5, stop_order_price: 0.5},
stop_order_price: 0.5,
parent_river_order_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
parent_complex_order_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
]
})
};
fetch('https://api.rivermarkets.com/v1/orders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.rivermarkets.com/v1/orders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'qty' => 123,
'buy_flag' => true,
'subaccount_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'price' => 0.5,
'post_only' => false,
'cancel_order_on_pause' => true,
'river_id' => 123,
'generic_asset_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'expiry_ts_utc' => '2023-11-07T05:31:56Z',
'conditional_orders_params' => [
[
'trigger_order' => [
'qty' => 123,
'buy_flag' => true,
'price' => 0.5,
'stop_order_price' => 0.5
],
'stop_order_price' => 0.5,
'parent_river_order_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'parent_complex_order_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-River-Key-Id: <api-key>",
"X-River-Signature: <api-key>",
"X-River-Timestamp: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.rivermarkets.com/v1/orders"
payload := strings.NewReader("{\n \"qty\": 123,\n \"buy_flag\": true,\n \"subaccount_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"price\": 0.5,\n \"post_only\": false,\n \"cancel_order_on_pause\": true,\n \"river_id\": 123,\n \"generic_asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"expiry_ts_utc\": \"2023-11-07T05:31:56Z\",\n \"conditional_orders_params\": [\n {\n \"trigger_order\": {\n \"qty\": 123,\n \"buy_flag\": true,\n \"price\": 0.5,\n \"stop_order_price\": 0.5\n },\n \"stop_order_price\": 0.5,\n \"parent_river_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_complex_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-River-Key-Id", "<api-key>")
req.Header.Add("X-River-Timestamp", "<api-key>")
req.Header.Add("X-River-Signature", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.rivermarkets.com/v1/orders")
.header("X-River-Key-Id", "<api-key>")
.header("X-River-Timestamp", "<api-key>")
.header("X-River-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"qty\": 123,\n \"buy_flag\": true,\n \"subaccount_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"price\": 0.5,\n \"post_only\": false,\n \"cancel_order_on_pause\": true,\n \"river_id\": 123,\n \"generic_asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"expiry_ts_utc\": \"2023-11-07T05:31:56Z\",\n \"conditional_orders_params\": [\n {\n \"trigger_order\": {\n \"qty\": 123,\n \"buy_flag\": true,\n \"price\": 0.5,\n \"stop_order_price\": 0.5\n },\n \"stop_order_price\": 0.5,\n \"parent_river_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_complex_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rivermarkets.com/v1/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-River-Key-Id"] = '<api-key>'
request["X-River-Timestamp"] = '<api-key>'
request["X-River-Signature"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"qty\": 123,\n \"buy_flag\": true,\n \"subaccount_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"price\": 0.5,\n \"post_only\": false,\n \"cancel_order_on_pause\": true,\n \"river_id\": 123,\n \"generic_asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"expiry_ts_utc\": \"2023-11-07T05:31:56Z\",\n \"conditional_orders_params\": [\n {\n \"trigger_order\": {\n \"qty\": 123,\n \"buy_flag\": true,\n \"price\": 0.5,\n \"stop_order_price\": 0.5\n },\n \"stop_order_price\": 0.5,\n \"parent_river_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"parent_complex_order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"river_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"complex_orders": {}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
UUID of your API key (from Settings → API Keys).
Current unix seconds. Must be within 30s of server time.
Base64 Ed25519 signature over the canonical request: METHOD\nPATH\nSORTED_QUERY\nTIMESTAMP\nSHA256(body) hex. See /api-reference/authentication for the full recipe.
Body
Schema for creating a new order.
Order type: 'LIMIT' or 'MARKET'
LIMIT, MARKET Time in force: 'FOK', 'GTC', 'GTD', or 'IOC'
FOK, GTC, GTD, IOC Order quantity (number of contracts)
Order direction: true=buy, false=sell
Subaccount to place the order under
Limit price between 0 and 1. Required for LIMIT orders.
0 < x < 1If true, the order is rejected instead of taking liquidity. Only valid for LIMIT orders with a resting time in force (GTC or GTD).
Kalshi only: if true, the resting order is cancelled by the exchange when it enters a trading pause. Ignored on other venues.
Instrument ID. Mutually exclusive with generic_asset_id.
Generic asset basket UUID. Mutually exclusive with river_id.
Expiry timestamp in UTC(ISO 8601). Required for GTD orders. i.e '2023-11-07T05:31:56Z'
Optional list of conditional orders (TP/SL) to attach to this order.
Show child attributes
Show child attributes

