Skip to main content
GET
/
v1
/
portfolio
curl
ADDR=0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb
curl "https://api.testnet.arcus.xyz/v1/portfolio?address=${ADDR}"
{
  "address": "<string>",
  "accountIndex": 4,
  "generatedAt": 123,
  "lifetimeVolume": "<string>",
  "data": [
    [
      null
    ]
  ]
}
Returns bundled account-equity and PnL time series for the requested address across preset ranges (24h, 7d, 30d, all-time) and per product (total/perp; spot when launched). The response carries every range in one payload so the frontend can switch tabs without an extra round-trip. Each range exposes its bucket resolution (“1h” or “1d”) and two parallel point series: accountEquityHistory (current equity) and pnlHistory (deposit-adjusted profit and loss). Data points are [timestamp_us, "decimal_value"] tuples. Values are stringified to preserve precision; clients should treat them as decimals, not floats. No authentication header is required.

Query Parameters

address
string
required

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 af after 0x.

Pattern: ^(0x|0X)?[0-9a-fA-F]{40}$

Response

Portfolio history bundle.

address
string
required

0x-prefixed 40-character hex Ethereum address echoed from the request.

Example:

"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"

accountIndex
integer
required

Subaccount index echoed from the request (0-9).

Required range: 0 <= x <= 9
generatedAt
integer<int64>
required

Server clock at response time (epoch microseconds).

lifetimeVolume
string
required

Subaccount cumulative filled notional in USD, decimal-stringified from quote_quantums. Sourced from the same counter that drives rate-limit replenishment; best-effort — "0" if the read fails or the subaccount has no fills yet.

Example:

"1234567.89"

data
tuple[]
required

Ordered series tuples. With both total* and perp* populated, today the array carries 8 entries (4 ranges × 2 products); when spot ships a third product joins as spot*.