curl --request POST \
--url https://www.oceanx.trade/api/v1/spot/orders \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"chain": "<string>",
"wallet": "<string>",
"token": "<string>",
"quoteToken": "<string>",
"amount": "<string>",
"slippageBps": 500,
"clientOrderId": "<string>",
"orderType": "limit",
"limitPriceUsd": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://www.oceanx.trade/api/v1/spot/orders"
payload = {
"chain": "<string>",
"wallet": "<string>",
"token": "<string>",
"quoteToken": "<string>",
"amount": "<string>",
"slippageBps": 500,
"clientOrderId": "<string>",
"orderType": "limit",
"limitPriceUsd": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
chain: '<string>',
wallet: '<string>',
token: '<string>',
quoteToken: '<string>',
amount: '<string>',
slippageBps: 500,
clientOrderId: '<string>',
orderType: 'limit',
limitPriceUsd: '<string>',
expiresAt: '2023-11-07T05:31:56Z'
})
};
fetch('https://www.oceanx.trade/api/v1/spot/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://www.oceanx.trade/api/v1/spot/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([
'chain' => '<string>',
'wallet' => '<string>',
'token' => '<string>',
'quoteToken' => '<string>',
'amount' => '<string>',
'slippageBps' => 500,
'clientOrderId' => '<string>',
'orderType' => 'limit',
'limitPriceUsd' => '<string>',
'expiresAt' => '2023-11-07T05:31:56Z'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://www.oceanx.trade/api/v1/spot/orders"
payload := strings.NewReader("{\n \"chain\": \"<string>\",\n \"wallet\": \"<string>\",\n \"token\": \"<string>\",\n \"quoteToken\": \"<string>\",\n \"amount\": \"<string>\",\n \"slippageBps\": 500,\n \"clientOrderId\": \"<string>\",\n \"orderType\": \"limit\",\n \"limitPriceUsd\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://www.oceanx.trade/api/v1/spot/orders")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"chain\": \"<string>\",\n \"wallet\": \"<string>\",\n \"token\": \"<string>\",\n \"quoteToken\": \"<string>\",\n \"amount\": \"<string>\",\n \"slippageBps\": 500,\n \"clientOrderId\": \"<string>\",\n \"orderType\": \"limit\",\n \"limitPriceUsd\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.oceanx.trade/api/v1/spot/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"chain\": \"<string>\",\n \"wallet\": \"<string>\",\n \"token\": \"<string>\",\n \"quoteToken\": \"<string>\",\n \"amount\": \"<string>\",\n \"slippageBps\": 500,\n \"clientOrderId\": \"<string>\",\n \"orderType\": \"limit\",\n \"limitPriceUsd\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}Limit, TWAP or snipe (unavailable)
Closed intake pending signing-contracts. The scope is reserved, unavailable in the dashboard and never added to existing keys. Authentication, key/IP policy and a bounded read of the exact wire bytes precede mandatory request-signature admission. The signature gate runs before JSON parsing, input validation and provider wallet lookup, so unsigned callers cannot probe wallet ownership. Every state-changing call requires per-key request signing before activation: signed timestamp, nonce, method/path and exact body hash, with an atomic bounded replay window. No signing wire/verifier is released; bearer credentials or caller-supplied signature headers cannot pass the independent request-signing gate even if a backend signer becomes available. No order, journal, permit, signature or submission is created. After future signature verification, amount is input atoms (quoteToken on buy, token on sell), bounded by u64 on Solana/u256 on EVM; addresses must match the explicit chain. Strict input validation, ownership checks and an independent signer refusal remain in the verified continuation. This is not an execution preview or admission proof. Enabling requires a reviewed released backend contract, not removal of the refusal.
curl --request POST \
--url https://www.oceanx.trade/api/v1/spot/orders \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"chain": "<string>",
"wallet": "<string>",
"token": "<string>",
"quoteToken": "<string>",
"amount": "<string>",
"slippageBps": 500,
"clientOrderId": "<string>",
"orderType": "limit",
"limitPriceUsd": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://www.oceanx.trade/api/v1/spot/orders"
payload = {
"chain": "<string>",
"wallet": "<string>",
"token": "<string>",
"quoteToken": "<string>",
"amount": "<string>",
"slippageBps": 500,
"clientOrderId": "<string>",
"orderType": "limit",
"limitPriceUsd": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
chain: '<string>',
wallet: '<string>',
token: '<string>',
quoteToken: '<string>',
amount: '<string>',
slippageBps: 500,
clientOrderId: '<string>',
orderType: 'limit',
limitPriceUsd: '<string>',
expiresAt: '2023-11-07T05:31:56Z'
})
};
fetch('https://www.oceanx.trade/api/v1/spot/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://www.oceanx.trade/api/v1/spot/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([
'chain' => '<string>',
'wallet' => '<string>',
'token' => '<string>',
'quoteToken' => '<string>',
'amount' => '<string>',
'slippageBps' => 500,
'clientOrderId' => '<string>',
'orderType' => 'limit',
'limitPriceUsd' => '<string>',
'expiresAt' => '2023-11-07T05:31:56Z'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://www.oceanx.trade/api/v1/spot/orders"
payload := strings.NewReader("{\n \"chain\": \"<string>\",\n \"wallet\": \"<string>\",\n \"token\": \"<string>\",\n \"quoteToken\": \"<string>\",\n \"amount\": \"<string>\",\n \"slippageBps\": 500,\n \"clientOrderId\": \"<string>\",\n \"orderType\": \"limit\",\n \"limitPriceUsd\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://www.oceanx.trade/api/v1/spot/orders")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"chain\": \"<string>\",\n \"wallet\": \"<string>\",\n \"token\": \"<string>\",\n \"quoteToken\": \"<string>\",\n \"amount\": \"<string>\",\n \"slippageBps\": 500,\n \"clientOrderId\": \"<string>\",\n \"orderType\": \"limit\",\n \"limitPriceUsd\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.oceanx.trade/api/v1/spot/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"chain\": \"<string>\",\n \"wallet\": \"<string>\",\n \"token\": \"<string>\",\n \"quoteToken\": \"<string>\",\n \"amount\": \"<string>\",\n \"slippageBps\": 500,\n \"clientOrderId\": \"<string>\",\n \"orderType\": \"limit\",\n \"limitPriceUsd\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "no_route",
"message": "<string>"
},
"requestId": "<string>"
}Authorizations
An OceanX API key, created in the app under Settings → Developer API. Send it as Authorization: Bearer ox_live_…. Required scopes are operation-specific: market reads use md.read, tracker uses tracker.read, copy reads use copy.read, alert operations use alerts.read or alerts.write, and owned wallet/funding reads require explicit account.read. New scopes require explicit selection and grant no trading authority. Existing perps operations retain their documented scopes.
Body
- Option 1
- Option 2
- Option 3
444444buy, sell 78^[1-9]\d*$1 <= x <= 10001 - 64^[A-Za-z0-9_-]+$"limit"48^(0|[1-9]\d{0,19})(\.\d{1,18})?$^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$