curl --request GET \
--url https://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews', 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.mainnet.aptoslabs.com/decibel/api/v1/account_overviews",
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://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews"
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://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews")
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{
"cross_account_leverage_ratio": 40.99,
"cross_available_to_trade": 4791.47,
"cross_margin_ratio": 0.01,
"maintenance_margin": 115.29,
"margin_deficit": -12.06,
"perp_equity_balance": 10064.88,
"perp_equity_haircutted": 10054.92,
"total_margin": 9998.72,
"unrealized_funding_cost": -87.84,
"unrealized_pnl": 154,
"usdc_cross_balance": 9998.72,
"usdc_cross_withdrawable_balance": 9843.79,
"usdc_isolated_withdrawable_balance": 0,
"all_time_return": 123,
"average_cash_position": 123,
"average_leverage": 123,
"cross_account_position": 123,
"fee_income": 5386,
"free_vault_equity": 14.65,
"liquidation_fees_paid": 45.5,
"liquidation_losses": -500,
"max_drawdown": 123,
"net_deposits": 30277044.96,
"pnl_90d": 123,
"realized_pnl": 1250.5,
"secondary_collateral": [
{
"amount": 150,
"asset_type": "0x1234...",
"haircut_bps": 500,
"nav_per_unit": 1.05,
"value_in_usdc": 142.5,
"withdrawable_amount": 100
}
],
"sharpe_ratio": 123,
"spot": {
"in_flight_orders": [
{
"is_bid": true,
"market_addr": "0x26f1dd...",
"order_id": "1234",
"reserved_amount": 500,
"reserved_asset": "<string>",
"reserved_usd_value": 500
}
],
"positions": [
{
"amount": 10,
"asset_addr": "0x000000000000000000000000000000000000000000000000000000000000000a",
"asset_symbol": "APT",
"entry_notional_usd": 82.4,
"unrealized_pnl_usd": 4.75,
"usd_value": 87.15
}
],
"total_unrealized_pnl_usd": 4.75,
"total_usd": 872.3,
"metrics": {
"cumulative_maker_fees_usd": 4.1,
"cumulative_realized_pnl_usd": 142.55,
"cumulative_taker_fees_usd": 12.29,
"cumulative_volume_usd": 24580.1
}
},
"vault_equity": 259.73,
"volume": 123,
"weekly_win_rate_12w": 123
}Get account overview
Retrieve comprehensive perp account information including equity,
realized/unrealized PnL, margin utilization, and optional performance metrics.
Use include_performance=true to get historical return metrics.
curl --request GET \
--url https://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews', 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.mainnet.aptoslabs.com/decibel/api/v1/account_overviews",
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://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews"
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://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mainnet.aptoslabs.com/decibel/api/v1/account_overviews")
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{
"cross_account_leverage_ratio": 40.99,
"cross_available_to_trade": 4791.47,
"cross_margin_ratio": 0.01,
"maintenance_margin": 115.29,
"margin_deficit": -12.06,
"perp_equity_balance": 10064.88,
"perp_equity_haircutted": 10054.92,
"total_margin": 9998.72,
"unrealized_funding_cost": -87.84,
"unrealized_pnl": 154,
"usdc_cross_balance": 9998.72,
"usdc_cross_withdrawable_balance": 9843.79,
"usdc_isolated_withdrawable_balance": 0,
"all_time_return": 123,
"average_cash_position": 123,
"average_leverage": 123,
"cross_account_position": 123,
"fee_income": 5386,
"free_vault_equity": 14.65,
"liquidation_fees_paid": 45.5,
"liquidation_losses": -500,
"max_drawdown": 123,
"net_deposits": 30277044.96,
"pnl_90d": 123,
"realized_pnl": 1250.5,
"secondary_collateral": [
{
"amount": 150,
"asset_type": "0x1234...",
"haircut_bps": 500,
"nav_per_unit": 1.05,
"value_in_usdc": 142.5,
"withdrawable_amount": 100
}
],
"sharpe_ratio": 123,
"spot": {
"in_flight_orders": [
{
"is_bid": true,
"market_addr": "0x26f1dd...",
"order_id": "1234",
"reserved_amount": 500,
"reserved_asset": "<string>",
"reserved_usd_value": 500
}
],
"positions": [
{
"amount": 10,
"asset_addr": "0x000000000000000000000000000000000000000000000000000000000000000a",
"asset_symbol": "APT",
"entry_notional_usd": 82.4,
"unrealized_pnl_usd": 4.75,
"usd_value": 87.15
}
],
"total_unrealized_pnl_usd": 4.75,
"total_usd": 872.3,
"metrics": {
"cumulative_maker_fees_usd": 4.1,
"cumulative_realized_pnl_usd": 142.55,
"cumulative_taker_fees_usd": 12.29,
"cumulative_volume_usd": 24580.1
}
},
"vault_equity": 259.73,
"volume": 123,
"weekly_win_rate_12w": 123
}Authorizations
Bearer token from Geomi. See Authentication for setup instructions.
Query Parameters
User account address (user query alias is also accepted)
Volume time window (e.g., "7d", "14d", "30d", "90d"). Omit to exclude volume data. Time window for volume queries
7d, 14d, 30d, 90d Include performance metrics
Performance lookback window in days.
x >= 0Response
Account overview retrieved successfully
40.99
Total cross-margin buying power across all collateral assets (USDC + secondary). Formula: max(0, raw_free_collateral − order_margin) = max(0, cross_margin + secondary_collateral_value + min(0, uPnL − funding) − initial_margin − order_margin) Use this for "Available to Trade" display. Unlike usdc_cross_withdrawable_balance (which is capped at the USDC balance), this reflects the full buying power including DLP and other secondary collateral.
4791.47
0.01
115.29
Cross-margin deficit: 0 when healthy, negative when the account has a margin hole. When negative, new deposits will partially fill this deficit before becoming available to trade. For example, deficit = -12 means a $185 deposit yields only $173 available (the first $12 fills the hole). Formula: min(0, margin_balance - margin_for_free_collateral + min(0, unrealized_pnl - funding) - order_margin)
-12.06
Perp equity at FULL NAV — DLP / secondary collateral counted at oracle/computed
price WITHOUT the haircut discount. Intended for display ("your total
account value"). Do NOT use this as the equity input to client-side liquidation
price estimation; use perp_equity_haircutted instead so the estimate matches
the on-chain liquidation threshold.
10064.88
Perp equity with the haircut applied to secondary collateral. This is the value
the on-chain liquidation engine uses to decide whether to liquidate. The order
form's pre-trade liquidation-price estimate must consume this (not
perp_equity_balance) to match the positions tab.
Difference from perp_equity_balance: perp_equity_balance - perp_equity_haircutted
equals the secondary collateral haircut discount (i.e. sum(amount × NAV × haircut_bps/10000)).
For accounts with no secondary collateral the two fields are equal.
10054.92
9998.72
-87.84
154
USDC sitting in the subaccount's CROSS margin pool, before any withdrawable cap. Can be negative when the account is underwater.
Distinct from total_margin, which is cross_margin + isolated_margin + secondary_collateral_value: subtracting the secondary breakdown from that leaves
cross AND isolated together, and isolated margin is locked behind isolated positions.
Any client sizing a cross-collateral move (dex_accounts_entry:: transfer_assets_between_non_collateral_and_collateral only touches the cross pool)
needs this figure, not that difference.
Also distinct from usdc_cross_withdrawable_balance, which is this balance capped by
free collateral and pending order margin — a limit on what may leave, not what is held.
9998.72
9843.79
0
Non-trade fee income (vault/BLP accounts only). Protocol fee distributions recorded as CBH Fee entries but not captured in trade fee_amount. Regular users: always null (their CBH fee entries exactly match trade fee amounts).
5386
USDC value of vault shares NOT currently pledged as DLP collateral on this
subaccount's perp account ("free" shares × NAV). This is the additive
complement to perp_equity_balance: summing the two gives the subaccount's
total wealth with no double-count of pledged DLP (which perp_equity_balance
already covers via secondary_collateral).
Equals 0.0 for users who pledge all their vault shares as collateral. The
full pre-pledge total is still visible in vault_equity for display.
NULL when not yet available (e.g., WebSocket updates before real-time vault tracking).
14.65
Total fees paid during margin call liquidations (always positive). Fee rate is configurable per market (default 0.5%, max 2% of notional). This is already included in realized_pnl but shown separately for transparency. Null for accounts that have never been margin called.
45.5
Net collateral balance changes from liquidations (vault/BLP accounts only). Regular users: always null - their liquidation loss is in realized_pnl via BackStopLiquidation trades. Vault accounts: positive = margin received from liquidated users (profit), negative = bad debt covered when users were underwater (loss).
-500
Net deposits (total deposits - total withdrawals) in USDC. Used to verify all_time_return: all_time_return = ((equity - net_deposits) / net_deposits) * 100
30277044.96
1250.5
Secondary (non-USDC) collateral held in cross margin. NULL when no secondary collateral exists or oracle data is unavailable.
Show child attributes
Show child attributes
Spot-tradable inventory for this subaccount, sourced from PFS holdings.
USDC held in the PFS IS included as a PnL-less position priced 1.0: a
token sits in exactly one store, so PFS USDC can never overlap the CBS
balance that perp equity counts (no double-count possible), and the
spot_value_snapshots series counts it too — the live overview and the
portfolio chart must agree. in_flight_orders covers amounts locked in
escrow for open spot orders. NULL for wallet-only owners (no subaccount).
Show child attributes
Show child attributes
Total USDC value of vault shares attributed to this subaccount (free shares in the subaccount's primary store plus shares pledged as DLP collateral on its perp account). Intended for direct display ("your total vault position is worth $X") — answers the question "what do I own in vaults?".
Do not add to perp_equity_balance to compute total wealth. The pledged
portion is already counted in perp_equity_balance via secondary_collateral,
so summing the two double-counts pledged DLP. Use free_vault_equity (below)
as the additive complement instead: perp_equity_balance + free_vault_equity
gives total wealth with no overlap.
NULL when not yet available (e.g., WebSocket updates before real-time vault tracking).
259.73

