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"
}
],
"exchanges": [
"<string>"
]
}
'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"
}
],
"exchanges": ["<string>"]
}
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'
}
],
exchanges: ['<string>']
})
};
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'
]
],
'exchanges' => [
'<string>'
]
]),
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 \"exchanges\": [\n \"<string>\"\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 \"exchanges\": [\n \"<string>\"\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 \"exchanges\": [\n \"<string>\"\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 are LIMIT only — the system routes IOC limit orders to each
underlying instrument at optimal prices. price bounds the fills (max for buys, min
for sells); liquidity beyond it is not taken and the unfilled remainder is cancelled.
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"
}
],
"exchanges": [
"<string>"
]
}
'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"
}
],
"exchanges": ["<string>"]
}
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'
}
],
exchanges: ['<string>']
})
};
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'
]
],
'exchanges' => [
'<string>'
]
]),
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 \"exchanges\": [\n \"<string>\"\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 \"exchanges\": [\n \"<string>\"\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 \"exchanges\": [\n \"<string>\"\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, RFQ_TAKER 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
Generic asset orders only: restrict routing to these exchanges (e.g. ['KALSHI', 'POLYMARKET']). Omit to route across all member venues.

