Skip to main content
GET
/
v1
/
wallet-sets
/
pnl
Get wallet set PnL
curl --request GET \
  --url https://api.zerion.io/v1/wallet-sets/pnl \
  --header 'Authorization: Basic <encoded-value>'
{
  "links": {
    "self": "https://api.zerion.io/v1/wallet-sets/pnl?addresses=0x42b9df65b219b3dd36ff330a4dd8f327a6ada990%2C8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K&currency=eth&filter%5Bchain_ids%5D=ethereum%2Csolana&filter%5Bfungible_ids%5D=11111111111111111111111111111111%2Ceth"
  },
  "data": {
    "type": "pnl",
    "id": "0x42b9df65b219b3dd36ff330a4dd8f327a6ada990,8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K",
    "attributes": {
      "total_gain": -637.8173517,
      "realized_gain": -655.3618983,
      "unrealized_gain": 17.5445466,
      "relative_total_gain_percentage": -11.38,
      "relative_realized_gain_percentage": -15.15,
      "relative_unrealized_gain_percentage": -0.19,
      "total_fee": 281.9088917,
      "total_invested": 701.2,
      "realized_cost_basis": 655.36,
      "net_invested": 45.84218703,
      "received_external": 133971.2931,
      "sent_external": 133270.089,
      "sent_for_nfts": 133971.2931,
      "received_for_nfts": 133971.2931,
      "breakdown": {
        "by_id": {
          "eth": {
            "average_buy_price": 1258.8,
            "average_sell_price": 1224.96,
            "total_gain": -6900.85,
            "realized_gain": -6871.21,
            "unrealized_gain": -29.64,
            "relative_total_gain_percentage": -11.38,
            "relative_realized_gain_percentage": -15.15,
            "relative_unrealized_gain_percentage": -0.19,
            "total_fee": 4679.93,
            "total_invested": 60643.33,
            "realized_cost_basis": 45363.2,
            "net_invested": 15280.13,
            "received_external": 35402.73,
            "sent_external": 22213.21,
            "sent_for_nfts": 1713.23,
            "received_for_nfts": 1635.05
          }
        },
        "by_implementation": {
          "ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": {
            "average_buy_price": 1,
            "average_sell_price": 1,
            "total_gain": 0,
            "realized_gain": 0,
            "unrealized_gain": 0,
            "relative_total_gain_percentage": 0,
            "relative_realized_gain_percentage": 0,
            "relative_unrealized_gain_percentage": 0,
            "total_fee": 12.5,
            "total_invested": 5000,
            "realized_cost_basis": 3000,
            "net_invested": 2000,
            "received_external": 1000,
            "sent_external": 500,
            "sent_for_nfts": 0,
            "received_for_nfts": 0
          }
        }
      }
    }
  },
  "meta": {
    "excluded_fungible_ids": [
      "4a702a34-5cfd-41af-96ad-bd1c45c3672e"
    ],
    "excluded_fungible_implementations": [
      "ethereum:0x6b175474e89094c44da98b954eedeac495271d0f",
      "ethereum:"
    ]
  }
}

Authorizations

Authorization
string
header
required

Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.

Query Parameters

addresses
string[]
required

A list of wallet addresses forming a wallet set. example: 0x42b9df65b219b3dd36ff330a4dd8f327a6ada990,8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K

The set must contain at least one address and may include at most one address per supported chain type (currently EVM and Solana). The order of addresses does not matter.

Required array length: 1 - 2 elements
currency
enum<string>
default:usd

Denominated currency value of returned prices

Available options:
eth,
btc,
usd,
eur,
krw,
rub,
gbp,
aud,
cad,
inr,
jpy,
nzd,
try,
zar,
cny,
chf
filter[chain_ids]
string[]

Calculate PnL only for specified chains (comma-separated list).

Maximum array length: 25
Example:
["ethereum", "polygon"]
filter[fungible_ids]
string[]

Account only for PnL related to given fungible assets (comma-separated list). Maximum of 100 fungible IDs allowed.

When filtering by fungible_ids or fungible_implementations, assets without available prices are automatically excluded from calculations instead of causing an error. Excluded assets are returned in the response metadata for transparency.

Maximum array length: 100
Maximum string length: 44
filter[fungible_implementations]
string[]

Account only for PnL related to given fungible asset implementations (comma-separated list of chain:address pairs). Maximum of 100 implementations allowed. example: "base:0xae16c445d8a4082cecb49a9465e4dd5499df947d,ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"

When filtering by fungible_ids or fungible_implementations, assets without available prices are automatically excluded from calculations instead of causing an error. Excluded assets are returned in the response metadata for transparency.

Maximum array length: 100
since
string

Only account sales since the given date. A unix timestamp in milliseconds. Note: high performance is only guaranteed for certain time ranges (now, 1 day ago, 1 week ago, 1 month ago, 1 year ago, or the beginning of the year).

Required string length: 13
Example:

"1688842525735"

till
string

Only account sales till the given date. A unix timestamp in milliseconds. Note: high performance is only guaranteed for certain time ranges (now, 1 day ago, 1 week ago, 1 month ago, 1 year ago, or the beginning of the year).

Required string length: 13
Example:

"1688842525735"

Response

Response for requested wallet set PnL

data
object
required
meta
object

Metadata about the PnL calculation (only present when assets were excluded from the calculation). The structure matches the filter type used in the request:

  • When filtering by fungible_ids, the meta contains an excluded_fungible_ids array
  • When filtering by fungible_implementations, the meta contains an excluded_fungible_implementations array
  • If both filters are used, both fields may appear in the meta