ADDR=0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb
curl "https://api.arcus.xyz/v1/account?address=${ADDR}"import requests
r = requests.get(
"https://api.arcus.xyz/v1/account",
params={"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"},
)
print(r.json())
const url = new URL("https://api.arcus.xyz/v1/account");
url.searchParams.set("address", "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb");
const res = await fetch(url);
console.log(await res.json());
const options = {method: 'GET'};
fetch('https://api.arcus.xyz/v1/account', 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/account",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.arcus.xyz/v1/account"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.arcus.xyz/v1/account")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/account")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"accountIndex": 4,
"address": "<string>",
"netQuoteBalance": "100000",
"equity": "<string>",
"freeCollateral": "<string>",
"netDeposits": "100000",
"pendingDeposits": "<string>",
"pendingWithdrawals": "<string>",
"positions": {},
"sequenceNumber": 123
}{
"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"
}Get account
Returns account information for the requested address, including balances, collateral, and open positions. No authentication header is required.
ADDR=0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb
curl "https://api.arcus.xyz/v1/account?address=${ADDR}"import requests
r = requests.get(
"https://api.arcus.xyz/v1/account",
params={"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"},
)
print(r.json())
const url = new URL("https://api.arcus.xyz/v1/account");
url.searchParams.set("address", "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb");
const res = await fetch(url);
console.log(await res.json());
const options = {method: 'GET'};
fetch('https://api.arcus.xyz/v1/account', 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/account",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.arcus.xyz/v1/account"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.arcus.xyz/v1/account")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/account")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"accountIndex": 4,
"address": "<string>",
"netQuoteBalance": "100000",
"equity": "<string>",
"freeCollateral": "<string>",
"netDeposits": "100000",
"pendingDeposits": "<string>",
"pendingWithdrawals": "<string>",
"positions": {},
"sequenceNumber": 123
}{
"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"
}Query Parameters
Master Ethereum address for this API key (must match address from POST /createApiKey for the same key). Required on REST for account-scoped reads and for place/cancel. Invalid hex → 400; mismatch with key → 403.
20-byte EVM address as hex: optional 0x or 0X prefix and exactly 40 hexadecimal digits. API responses normalize to lowercase a–f after 0x.
^(0x|0X)?[0-9a-fA-F]{40}$Subaccount index (0–9) to scope the request to. Defaults to 0 (the primary account). Values above 9 → 400.
0 <= x <= 9Response
Account details.
Account state including balances, collateral, and open positions. Returned by GET /account. Orders are served via the dedicated orders channel/endpoint.
Account index (account index, 0–9). Identifies the account for orders, positions, fills, and API keys.
0 <= x <= 9Ethereum address associated with the account.
^(0x|0X)?[0-9a-fA-F]{40}$Account's aggregate cash balance as of the last event, in full quote currency (decimal string). Equals Account.QuoteBalance + Σ Position.QuoteBalance (cross-margin scope). Changes only on external cash flows: deposits, withdrawals, fill cash flows (-sizeDelta × fillPrice), trading fees, and funding settlements. Internal margin reallocations leave it unchanged. Combine with live oracle prices to derive equity: equity = netQuoteBalance + Σ (size × oracle).
"100000"
"-25.5"
Total account equity in full quote currency (decimal string). Computed as netQuoteBalance + Σ (size × oracle) over all open positions. May differ from the engine's netQuoteBalance snapshot between fills as oracle prices move.
Collateral available for trading in full quote currency (decimal string). Computed as equity − Σ initial_margin_required across open positions.
Lifetime net USDG deposits in full quote currency (decimal string): cumulative inflows minus cumulative outflows across every applied account transfer — deposits, withdrawals, internal transfers, and self transfers between your own account indices. Rejected transfers are excluded.
This is the capital you have put in, not what it is worth now. Unlike equity and freeCollateral it does not move with oracle prices; only a transfer changes it. Subtract it from equity for all-time PnL — the same basis GET /portfolio uses, so the two agree.
"100000"
"-25.5"
Pending deposit amount.
Pending withdrawal amount.
Open positions keyed by marketId (integer; 1=BTC-USD, 2=ETH-USD, etc). JSON keys are stringified integers.
Show child attributes
Show child attributes
Last processed engine sequence number for this account. Clients can use this to filter duplicate diffs and reconcile against streaming AccountUpdate events on the accounts channel.
Was this page helpful?