curl --request POST \
--url https://api.arcus.xyz/v1/modifyOrder \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--header 'X-Signature: <api-key>' \
--header 'X-Timestamp: <api-key>' \
--data '
{
"address": "<string>",
"accountIndex": 4,
"marketId": 32767,
"goodTilTime": "<string>",
"quantity": "<string>",
"price": "<string>",
"reduceOnly": true,
"orderId": "<string>",
"clientId": "<string>",
"clientTime": "<string>",
"signature": "<string>"
}
'import requests
url = "https://api.arcus.xyz/v1/modifyOrder"
payload = {
"address": "<string>",
"accountIndex": 4,
"marketId": 32767,
"goodTilTime": "<string>",
"quantity": "<string>",
"price": "<string>",
"reduceOnly": True,
"orderId": "<string>",
"clientId": "<string>",
"clientTime": "<string>",
"signature": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"X-Timestamp": "<api-key>",
"X-Signature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-Key': '<api-key>',
'X-Timestamp': '<api-key>',
'X-Signature': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
address: '<string>',
accountIndex: 4,
marketId: 32767,
goodTilTime: '<string>',
quantity: '<string>',
price: '<string>',
reduceOnly: true,
orderId: '<string>',
clientId: '<string>',
clientTime: '<string>',
signature: '<string>'
})
};
fetch('https://api.arcus.xyz/v1/modifyOrder', 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.arcus.xyz/v1/modifyOrder",
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([
'address' => '<string>',
'accountIndex' => 4,
'marketId' => 32767,
'goodTilTime' => '<string>',
'quantity' => '<string>',
'price' => '<string>',
'reduceOnly' => true,
'orderId' => '<string>',
'clientId' => '<string>',
'clientTime' => '<string>',
'signature' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>",
"X-Signature: <api-key>",
"X-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.arcus.xyz/v1/modifyOrder"
payload := strings.NewReader("{\n \"address\": \"<string>\",\n \"accountIndex\": 4,\n \"marketId\": 32767,\n \"goodTilTime\": \"<string>\",\n \"quantity\": \"<string>\",\n \"price\": \"<string>\",\n \"reduceOnly\": true,\n \"orderId\": \"<string>\",\n \"clientId\": \"<string>\",\n \"clientTime\": \"<string>\",\n \"signature\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("X-Timestamp", "<api-key>")
req.Header.Add("X-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.arcus.xyz/v1/modifyOrder")
.header("X-API-Key", "<api-key>")
.header("X-Timestamp", "<api-key>")
.header("X-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"address\": \"<string>\",\n \"accountIndex\": 4,\n \"marketId\": 32767,\n \"goodTilTime\": \"<string>\",\n \"quantity\": \"<string>\",\n \"price\": \"<string>\",\n \"reduceOnly\": true,\n \"orderId\": \"<string>\",\n \"clientId\": \"<string>\",\n \"clientTime\": \"<string>\",\n \"signature\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/modifyOrder")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["X-Timestamp"] = '<api-key>'
request["X-Signature"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"address\": \"<string>\",\n \"accountIndex\": 4,\n \"marketId\": 32767,\n \"goodTilTime\": \"<string>\",\n \"quantity\": \"<string>\",\n \"price\": \"<string>\",\n \"reduceOnly\": true,\n \"orderId\": \"<string>\",\n \"clientId\": \"<string>\",\n \"clientTime\": \"<string>\",\n \"signature\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"address": "0x1234567890abcdef1234567890abcdef12345678",
"accountIndex": 4,
"clientTime": 123,
"orderId": "<string>",
"marketId": 32767,
"marketDisplayName": "BTC-USD",
"status": "ACK",
"updateTime": 123,
"clientId": "<string>",
"timeInForce": "GTT",
"goodTilTime": "<string>",
"remainingSize": "<string>",
"filledSize": "<string>",
"rejectionReason": "POST_ONLY_WOULD_CROSS",
"error": "<string>",
"rateLimit": {
"pool": "order",
"remaining": 9958
}
}{
"address": "0x1234567890abcdef1234567890abcdef12345678",
"accountIndex": 4,
"clientTime": 123,
"orderId": "<string>",
"marketId": 32767,
"marketDisplayName": "BTC-USD",
"status": "ACK",
"updateTime": 123,
"clientId": "<string>",
"timeInForce": "GTT",
"goodTilTime": "<string>",
"remainingSize": "<string>",
"filledSize": "<string>",
"rejectionReason": "POST_ONLY_WOULD_CROSS",
"error": "<string>",
"rateLimit": {
"pool": "order",
"remaining": 9958
}
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "rate limited",
"reason": "account_empty",
"retryAfterMs": 850,
"clientId": "my-order-42"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}Modify order
Modify the price and/or quantity of an open order.
curl --request POST \
--url https://api.arcus.xyz/v1/modifyOrder \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--header 'X-Signature: <api-key>' \
--header 'X-Timestamp: <api-key>' \
--data '
{
"address": "<string>",
"accountIndex": 4,
"marketId": 32767,
"goodTilTime": "<string>",
"quantity": "<string>",
"price": "<string>",
"reduceOnly": true,
"orderId": "<string>",
"clientId": "<string>",
"clientTime": "<string>",
"signature": "<string>"
}
'import requests
url = "https://api.arcus.xyz/v1/modifyOrder"
payload = {
"address": "<string>",
"accountIndex": 4,
"marketId": 32767,
"goodTilTime": "<string>",
"quantity": "<string>",
"price": "<string>",
"reduceOnly": True,
"orderId": "<string>",
"clientId": "<string>",
"clientTime": "<string>",
"signature": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"X-Timestamp": "<api-key>",
"X-Signature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-Key': '<api-key>',
'X-Timestamp': '<api-key>',
'X-Signature': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
address: '<string>',
accountIndex: 4,
marketId: 32767,
goodTilTime: '<string>',
quantity: '<string>',
price: '<string>',
reduceOnly: true,
orderId: '<string>',
clientId: '<string>',
clientTime: '<string>',
signature: '<string>'
})
};
fetch('https://api.arcus.xyz/v1/modifyOrder', 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.arcus.xyz/v1/modifyOrder",
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([
'address' => '<string>',
'accountIndex' => 4,
'marketId' => 32767,
'goodTilTime' => '<string>',
'quantity' => '<string>',
'price' => '<string>',
'reduceOnly' => true,
'orderId' => '<string>',
'clientId' => '<string>',
'clientTime' => '<string>',
'signature' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>",
"X-Signature: <api-key>",
"X-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.arcus.xyz/v1/modifyOrder"
payload := strings.NewReader("{\n \"address\": \"<string>\",\n \"accountIndex\": 4,\n \"marketId\": 32767,\n \"goodTilTime\": \"<string>\",\n \"quantity\": \"<string>\",\n \"price\": \"<string>\",\n \"reduceOnly\": true,\n \"orderId\": \"<string>\",\n \"clientId\": \"<string>\",\n \"clientTime\": \"<string>\",\n \"signature\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("X-Timestamp", "<api-key>")
req.Header.Add("X-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.arcus.xyz/v1/modifyOrder")
.header("X-API-Key", "<api-key>")
.header("X-Timestamp", "<api-key>")
.header("X-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"address\": \"<string>\",\n \"accountIndex\": 4,\n \"marketId\": 32767,\n \"goodTilTime\": \"<string>\",\n \"quantity\": \"<string>\",\n \"price\": \"<string>\",\n \"reduceOnly\": true,\n \"orderId\": \"<string>\",\n \"clientId\": \"<string>\",\n \"clientTime\": \"<string>\",\n \"signature\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/modifyOrder")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["X-Timestamp"] = '<api-key>'
request["X-Signature"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"address\": \"<string>\",\n \"accountIndex\": 4,\n \"marketId\": 32767,\n \"goodTilTime\": \"<string>\",\n \"quantity\": \"<string>\",\n \"price\": \"<string>\",\n \"reduceOnly\": true,\n \"orderId\": \"<string>\",\n \"clientId\": \"<string>\",\n \"clientTime\": \"<string>\",\n \"signature\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"address": "0x1234567890abcdef1234567890abcdef12345678",
"accountIndex": 4,
"clientTime": 123,
"orderId": "<string>",
"marketId": 32767,
"marketDisplayName": "BTC-USD",
"status": "ACK",
"updateTime": 123,
"clientId": "<string>",
"timeInForce": "GTT",
"goodTilTime": "<string>",
"remainingSize": "<string>",
"filledSize": "<string>",
"rejectionReason": "POST_ONLY_WOULD_CROSS",
"error": "<string>",
"rateLimit": {
"pool": "order",
"remaining": 9958
}
}{
"address": "0x1234567890abcdef1234567890abcdef12345678",
"accountIndex": 4,
"clientTime": 123,
"orderId": "<string>",
"marketId": 32767,
"marketDisplayName": "BTC-USD",
"status": "ACK",
"updateTime": 123,
"clientId": "<string>",
"timeInForce": "GTT",
"goodTilTime": "<string>",
"remainingSize": "<string>",
"filledSize": "<string>",
"rejectionReason": "POST_ONLY_WOULD_CROSS",
"error": "<string>",
"rateLimit": {
"pool": "order",
"remaining": 9958
}
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "rate limited",
"reason": "account_empty",
"retryAfterMs": 850,
"clientId": "my-order-42"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}orderId, createdAt and fill state (filledSize, avgFillPrice); quantity is the new total size, including any amount already filled. A same-price size decrease keeps the order’s queue priority; a price change or size increase rejoins the back of the queue. Requires address query parameter matching the master Ethereum address for X-API-Key.
Identify the order to modify by exactly one of orderId or clientId — setting both, or neither, is rejected with a validation error.
ALO modifies are prioritized like cancels. A modify on a post-only (ALO) order can only shrink or reprice a maker order — it can never take liquidity — so it is routed on the high-priority path ahead of order placements, the same as cancels (and skips the taker speed bump). Modifies with any other timeInForce ride the normal path and are subject to the speed bump. Like a cancel, a prioritized modify may be processed ahead of an earlier not-yet-sequenced placement of its own target, which would then reject as ORDER_NOT_FOUND_FOR_MODIFY (and be buffered briefly and applied when the placement arrives).
On the orders WebSocket channel, every modify that reaches the matching engine arrives as two consecutive updates for the same orderId: CANCELED with cancelReason: MODIFY_CANCELED, carrying the pre-modify price and size, then the order’s new state (open, a fill, or REJECTED). If the engine rejects the modified order (for example POST_ONLY_WOULD_CROSS or MODIFY_SIZE_ALREADY_FILLED), the original order is removed too; a request rejected with HTTP 400 leaves the original order untouched. Use the orders channel, not this response, for the outcome of a modify.
Other modify outcomes:
- A modify whose target has not yet reached the book is rejected with
ORDER_NOT_FOUND_FOR_MODIFYbut also buffered briefly — if the target placement arrives shortly after, it is canceled (MODIFY_CANCELED) and replaced with the modify’s parameters, mirroring buffered-cancel behavior. - Untriggered TPSL orders cannot be modified: the modify is rejected with
MODIFY_TPSL_NOT_SUPPORTEDand a live TPSL survives unchanged. If a buffered modify meets an arriving TPSL placement, the TPSL is canceled as a precaution. - A pending cancel always dominates a modify for the same order; the modify is rejected with
MODIFY_SUPERSEDED_BY_CANCELand the order’s final state is canceled.
Response behavior
Asynchronous. Returns either202 Accepted (common case — forwarded to the matching engine, body carries the orderId for correlation) or 200 OK (gateway already has definitive state for the order). Subscribe to the orders WebSocket channel to observe the order’s lifecycle.Authorizations
Unix time in nanoseconds as a decimal string (e.g. "1713825891591000000"). Millisecond or second epochs are rejected with 401 Unauthorized. Must be within ±30,000 ms of server wall-clock, or the request is rejected with 401 Unauthorized. Required on all mutating / credential-creating endpoints. This same value must appear as the ct field in the ordersign typed canonical payload (single-order endpoints) or in each element's ct field (batch endpoints).
Lowercase hex-encoded Ed25519 signature (128 chars).
Single-order endpoints (placeOrder, cancelOrder, modifyOrder, and other non-batch mutating routes) sign over the ordersign typed canonical payload — a compact, key-sorted JSON object built from parsed request fields using engine-native integer values:
placeOrder: {"ad":"0x…","ai":N,[,"c":"…"],"ct":N,"g":N,"m":N,"op":1,"p":N,"q":N,"r":0|1,"s":N,"t":N,"v":1}
cancelOrder: {"ad":"0x…","ai":N,[,"c":"…"],"ct":N,[,"id":"…"],"m":N,"op":2,"v":1}
modifyOrder: {"ad":"0x…","ai":N,[,"c":"…"],"ct":N,"g":N,[,"id":"…"],"m":N,"op":3,"p":N,"q":N,"r":0|1,"s":N,"t":N,"v":1} (exactly one of id / c)
ct must equal the X-Timestamp header value. Keys in brackets are conditional (omitted when empty). op values: 1=place, 2=cancel, 3=modify. See the ordersign package for field definitions and reference signing code.
Other signed routes (e.g. createApiKey) still use the legacy scheme: signing_message = X-Timestamp + ACTION + canonicalJSON(body), where ACTION is the camelCase final path segment.
Batch endpoints (batchPlaceOrders, batchCancelOrders, batchModifyOrders) do NOT use this header. They authenticate with per-element typed ordersign signatures embedded in the request body (see the global auth description and the per-field signature descriptions on OrderRequest / CancelOrderRequest / ModifyOrderRequest).
Read endpoints are authenticated by ?address= (and optionally X-API-Key) only — no signature is required, except for the signed affiliate reads (see the Referral tag), which require the full header triple; with no body their signing message is X-Timestamp + ACTION. canonicalJSON(body) is the JSON body with object keys sorted lexicographically at every level and no whitespace; the server canonicalizes the received body before verifying, so only the bytes signed over must be canonical. Required on all mutating / credential-creating endpoints.
Body
Modify the price and/or size of a single open order.
Identify the order to modify by exactly one of orderId (the server-generated id) or clientId (resolved engine-side against the account's client-id index). Setting both is rejected, and so is setting neither — supply one or the other, never both.
The order's expiry as an epoch-microsecond timestamp (string). Required — echo the resting order's goodTilTime from placement, and it must be at least one month ahead of the current system timestamp. If it differs from the resting order's value, the order takes the new expiry. Covered by the Ed25519 request signature (g field of the canonical modify payload, in nanoseconds).
1GTT = Good Till Time (rests until goodTilTime), IOC = Immediate or Cancel, FOK = Fill or Kill, ALO = Add Liquidity Only (post-only).
Submissions must use GTT for resting orders. Note: order reads (REST order queries and the orders WebSocket channel) currently report resting orders as GTC — the legacy name for the same bucket — for backward compatibility; see TimeInForceResponse.
GTT, IOC, FOK, ALO Identify the order to modify by its placement-time clientId. Subject to the same constraints as at placement: 1–36 characters, [A-Za-z0-9_-] only. The gateway resolves the value against the account's client-id index engine-side. Provide exactly one of orderId or clientId; supplying both is rejected with HTTP 400.
36^[A-Za-z0-9_-]+$Per-modify Ed25519 signature, required inside POST /batchModifyOrders only (single POST /modifyOrder signs via the X-Signature header instead). Covers the same typed canonical modify payload as a standalone modifyOrder — the signed bytes are identical whether the modify is submitted alone or in a batch: {"ad":"0x…","ai":N,[,"c":"…"],"ct":N,"g":N,[,"id":"…"],"m":N,"op":3,"p":N,"q":N,"r":0|1,"s":N,"t":N,"v":1}
Keys in brackets are conditional (omitted when empty — exactly one of id or c must be present, matching the request's identity field).
Response
Modify processed and the gateway already has definitive state for the replacement order. Treat as best-effort enrichment of the 202 path; the orders WebSocket channel is still the source of truth.
Modify-order response. The HTTP call is asynchronous and may return either:
202 Accepted— common case.statusisACKand the body carries the replacementorderIdfor correlation; theordersWebSocket channel delivers the lifecycle.200 OK— the gateway already had definitive state for the replacement order by the time it responded.
ACK on the 202 path. On the 200 path, the definitive state.
PENDING, OPEN, PARTIALLY_FILLED, FILLED, CANCELED, MARGIN_CANCELED, REJECTED, UNTRIGGERED, TPSL_PLACED, TPSL_TRIGGERED, TPSL_CANCELED, LIQUIDATED, ADL, ACK, CANCEL_ACKNOWLEDGED, CANCEL_ALL_ACKNOWLEDGED, CANCEL_PENDING, ERROR "ACK"
Populated when status is REJECTED on the 200 path.
POST_ONLY_WOULD_CROSS, SELF_TRADE, UNDERCOLLATERALIZED, COULD_NOT_FILL, IOC_CANCELED, FOK_FAILED, REDUCE_ONLY_WOULD_INCREASE, TOO_MANY_CLIENT_IDS, DUPLICATE_CLIENT_ID, POSITION_TPSL_ALREADY_EXISTS, ENTRY_TPSL_CANNOT_BE_POSITION_TPSL, ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT, ORDER_NOT_FOUND_FOR_MODIFY, MODIFY_CHANGED_IMMUTABLE_FIELD, MODIFY_ZERO_SIZE, PRICE_WILL_EXCEED_MAXIMUM_OUTSIDE_RTH_TRADING_BOUND, MODIFY_WOULD_CROSS_OUTSIDE_RTH_TRADING_BOUNDARY, FILL_WILL_EXCEED_TRADING_BOUND, OPEN_INTEREST_CAP_EXCEEDED, POSITION_SIZE_CAP_EXCEEDED, MODIFY_TPSL_NOT_SUPPORTED, MODIFY_SUPERSEDED_BY_CANCEL, MODIFY_SIZE_ALREADY_FILLED, ORDER_NOT_FOUND, OPEN_ORDER_CAP_EXCEEDED, EXPIRED Was this page helpful?