curl --request GET \
--url https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token}', 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/wallets/{wallet}/tokens/{token}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"wallet": "<string>",
"token": "<string>",
"currency": "usd",
"pnlMode": "unknown-basis-null",
"source": "<string>",
"status": "partial",
"complete": false,
"coverage": "<string>",
"position": {
"balance": 123,
"value": 123,
"invested": 123,
"proceeds": 123,
"realized": 123,
"unrealized": 123,
"roiPct": 123,
"buys": 123,
"sells": 123,
"basisCoverage": "<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>"
}Observed native wallet-token PnL
Public Solana chain facts from OceanX’s fee-inclusive ledger, falling back to its observed swap index. No SolanaTracker reads. Partial coverage is explicit; missing basis, unpriced holdings and absent positions are null. Sold more than observed bought invalidates basis; no zero-basis profit or raw mode. USD is supported; SOL/EUR return 503 until qualified FX is available. No account data or transaction authority.
curl --request GET \
--url https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token}', 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/wallets/{wallet}/tokens/{token}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.oceanx.trade/api/v1/wallets/{wallet}/tokens/{token}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"wallet": "<string>",
"token": "<string>",
"currency": "usd",
"pnlMode": "unknown-basis-null",
"source": "<string>",
"status": "partial",
"complete": false,
"coverage": "<string>",
"position": {
"balance": 123,
"value": 123,
"invested": 123,
"proceeds": 123,
"realized": 123,
"unrealized": 123,
"roiPct": 123,
"buys": 123,
"sells": 123,
"basisCoverage": "<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, and alert operations use alerts.read or alerts.write. New scopes require explicit selection and grant no trading authority. Existing perps operations retain their documented scopes.
Path Parameters
^[1-9A-HJ-NP-Za-km-z]{32,44}$^[1-9A-HJ-NP-Za-km-z]{32,44}$Query Parameters
usd, sol, eur unknown-basis-null Response
Observed position or explicit unknown; never lifetime completeness.
Show child attributes
Show child attributes
