curl --request POST \
--url https://www.oceanx.trade/api/v1/wallets/summary \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"wallets": [
"<string>"
]
}
'import requests
url = "https://www.oceanx.trade/api/v1/wallets/summary"
payload = { "wallets": ["<string>"] }
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({wallets: ['<string>']})
};
fetch('https://www.oceanx.trade/api/v1/wallets/summary', 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/summary",
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([
'wallets' => [
'<string>'
]
]),
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/wallets/summary"
payload := strings.NewReader("{\n \"wallets\": [\n \"<string>\"\n ]\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/wallets/summary")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"wallets\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.oceanx.trade/api/v1/wallets/summary")
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 \"wallets\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"source": "local",
"data": {
"complete": false,
"wallets": [
{
"wallet": "<string>",
"identity": {
"label": "<string>",
"image": "<string>",
"twitter": "<string>",
"type": "<string>",
"flags": [
"<string>"
],
"source": "oceanx_wallet_labels",
"asOf": 1,
"profileSource": "wallet_label_reviews",
"profileAsOf": 1,
"sns": {
"domain": "<string>",
"nameAccount": "<string>",
"source": "oceanx_rpc_sns",
"method": "primary-direct-owner-v1",
"observedAtMs": 123
},
"platformEvidence": {
"label": "<string>",
"method": "native-terminal-fee-account-delta-v1",
"evidenceTx": "<string>",
"confidence": 9750,
"observedAtMs": 2
},
"classifications": [
{
"label": "exchange",
"method": "<string>",
"evidenceTx": "<string>",
"confidence": 9750,
"observedAtMs": 2,
"source": "wallet_label_reviews",
"name": "<string>"
}
]
},
"summary": {
"wallet": {
"realized": 123,
"unrealized": 123,
"total": 123
},
"token": {
"realized": 123,
"unrealized": 123,
"total": 123,
"costBasis": null,
"basisCoverage": "<string>",
"observedAtMs": 1
},
"source": "portfolio-ledger:fee-inclusive-weighted-average/v1",
"complete": false,
"pnlMode": "unknown-basis-null",
"asOf": 1,
"coverage": "<string>",
"historyCoverage": {},
"index": {}
},
"status": "partial"
}
]
}
}{
"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>"
}Batch native wallet PnL summaries and identities
1–100 unique Solana wallets, in input order. Native ledger projections first, then the retained observed-swap index with a shared 10,000-event / 4 MiB read budget, four concurrent index reads, a shared 64-mint price lookup and a 1.5-second PnL deadline. No wallet registration, history backfill or watch promotion. Unknown basis stays null; complete=false. Observed coverage excludes fees, transfers and pre-window inventory; truncation is explicit. Identities use wallet-scoped native labels, reviewed profiles and platform evidence independently of any mint. Reviewed classifications require method, transaction evidence and confidence >=9500 basis points. SNS is cache-only; tokenized/subdomains remain unknown. Native service admission: 2 concurrent/IP and 60 starts/minute/IP, shared with liquidity reads. The BFF forwards only its verified ingress caller with a service bearer; caller claims without that bearer do not create independent buckets. Admission failure closes the route. No account or signing authority.
curl --request POST \
--url https://www.oceanx.trade/api/v1/wallets/summary \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"wallets": [
"<string>"
]
}
'import requests
url = "https://www.oceanx.trade/api/v1/wallets/summary"
payload = { "wallets": ["<string>"] }
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({wallets: ['<string>']})
};
fetch('https://www.oceanx.trade/api/v1/wallets/summary', 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/summary",
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([
'wallets' => [
'<string>'
]
]),
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/wallets/summary"
payload := strings.NewReader("{\n \"wallets\": [\n \"<string>\"\n ]\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/wallets/summary")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"wallets\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.oceanx.trade/api/v1/wallets/summary")
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 \"wallets\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"source": "local",
"data": {
"complete": false,
"wallets": [
{
"wallet": "<string>",
"identity": {
"label": "<string>",
"image": "<string>",
"twitter": "<string>",
"type": "<string>",
"flags": [
"<string>"
],
"source": "oceanx_wallet_labels",
"asOf": 1,
"profileSource": "wallet_label_reviews",
"profileAsOf": 1,
"sns": {
"domain": "<string>",
"nameAccount": "<string>",
"source": "oceanx_rpc_sns",
"method": "primary-direct-owner-v1",
"observedAtMs": 123
},
"platformEvidence": {
"label": "<string>",
"method": "native-terminal-fee-account-delta-v1",
"evidenceTx": "<string>",
"confidence": 9750,
"observedAtMs": 2
},
"classifications": [
{
"label": "exchange",
"method": "<string>",
"evidenceTx": "<string>",
"confidence": 9750,
"observedAtMs": 2,
"source": "wallet_label_reviews",
"name": "<string>"
}
]
},
"summary": {
"wallet": {
"realized": 123,
"unrealized": 123,
"total": 123
},
"token": {
"realized": 123,
"unrealized": 123,
"total": 123,
"costBasis": null,
"basisCoverage": "<string>",
"observedAtMs": 1
},
"source": "portfolio-ledger:fee-inclusive-weighted-average/v1",
"complete": false,
"pnlMode": "unknown-basis-null",
"asOf": 1,
"coverage": "<string>",
"historyCoverage": {},
"index": {}
},
"status": "partial"
}
]
}
}{
"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, 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.
Body
1 - 100 elements^[1-9A-HJ-NP-Za-km-z]{32,44}$