@pioneer-platform/zapper-client 8.11.0 → 8.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/LINK_INVESTIGATION_REPORT.md +164 -0
- package/ZAPPER_API_FINDINGS.md +246 -0
- package/docs/zapper-graql.md +5512 -0
- package/docs/zapper_api.md +1514 -0
- package/lib/index.d.ts +30 -1
- package/lib/index.js +259 -266
- package/package.json +2 -2
- package/lib/index.js.map +0 -75
|
@@ -0,0 +1,1514 @@
|
|
|
1
|
+
Portfolio Data
|
|
2
|
+
|
|
3
|
+
Access complete onchain portfolio data with a single query. The portfolio query provides comprehensive access to balances across tokens, apps, and NFTs, along with detailed portfolio totals and breakdowns.
|
|
4
|
+
|
|
5
|
+
NOTE
|
|
6
|
+
|
|
7
|
+
Use portfolioV2 to query portfolio data and ensure up-to-date information. Avoid using the deprecated portfolio endpoint, as it will soon be made unavailable.
|
|
8
|
+
|
|
9
|
+
Overview
|
|
10
|
+
|
|
11
|
+
The portfolioV2 query takes an array of addresses as input, and an optional array of chainIds. It returns a complete view of onchain holdings including:
|
|
12
|
+
|
|
13
|
+
Token balances
|
|
14
|
+
App balances
|
|
15
|
+
NFT balances
|
|
16
|
+
Portfolio totals and breakdowns
|
|
17
|
+
Claimables
|
|
18
|
+
Portfolio Fields
|
|
19
|
+
tokenBalances
|
|
20
|
+
|
|
21
|
+
Access native token holdings across different networks with real-time computation built in.
|
|
22
|
+
|
|
23
|
+
Try it now
|
|
24
|
+
Example Variables
|
|
25
|
+
{
|
|
26
|
+
"addresses": ["0x849151d7d0bf1f34b70d5cad5149d28cc2308bf1"],
|
|
27
|
+
"first": 5,
|
|
28
|
+
"chainIds": [8453], // Optional (Returns all chains when omitted)
|
|
29
|
+
"filters": {"minBalanceUSD": 10} // Optional
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
Example Query
|
|
33
|
+
query TokenBalances($addresses: [Address!]!, $first: Int, $chainIds: [Int!]) {
|
|
34
|
+
portfolioV2(addresses: $addresses, chainIds: $chainIds) {
|
|
35
|
+
tokenBalances {
|
|
36
|
+
totalBalanceUSD
|
|
37
|
+
byToken(first: $first) {
|
|
38
|
+
totalCount
|
|
39
|
+
edges {
|
|
40
|
+
node {
|
|
41
|
+
symbol
|
|
42
|
+
tokenAddress
|
|
43
|
+
balance
|
|
44
|
+
balanceUSD
|
|
45
|
+
price
|
|
46
|
+
imgUrlV2
|
|
47
|
+
name
|
|
48
|
+
network {
|
|
49
|
+
name
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
Example Response
|
|
59
|
+
{
|
|
60
|
+
"data": {
|
|
61
|
+
"portfolioV2": {
|
|
62
|
+
"tokenBalances": {
|
|
63
|
+
"totalBalanceUSD": 251379.07705505722,
|
|
64
|
+
"byToken": {
|
|
65
|
+
"totalCount": 6443,
|
|
66
|
+
"edges": [
|
|
67
|
+
{
|
|
68
|
+
"node": {
|
|
69
|
+
"symbol": "BKIT",
|
|
70
|
+
"tokenAddress": "0x262a9f4e84efa2816d87a68606bb4c1ea3874bf1",
|
|
71
|
+
"balance": 28980487535.238518,
|
|
72
|
+
"balanceUSD": 31298.9265380576,
|
|
73
|
+
"price": 0.00000108,
|
|
74
|
+
"imgUrlV2": "https://storage.googleapis.com/zapper-fi-assets/tokens/base/0x262a9f4e84efa2816d87a68606bb4c1ea3874bf1.png",
|
|
75
|
+
"name": "Bangkit",
|
|
76
|
+
"network": {
|
|
77
|
+
"name": "Base"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"node": {
|
|
83
|
+
"symbol": "SYNDOG",
|
|
84
|
+
"tokenAddress": "0x3d1d651761d535df881740ab50ba4bd8a2ec2c00",
|
|
85
|
+
"balance": 30000000,
|
|
86
|
+
"balanceUSD": 23449.8,
|
|
87
|
+
"price": 0.00078166,
|
|
88
|
+
"imgUrlV2": "https://storage.googleapis.com/zapper-fi-assets/tokens/base/0x3d1d651761d535df881740ab50ba4bd8a2ec2c00.png",
|
|
89
|
+
"name": "Synthesizer Dog",
|
|
90
|
+
"network": {
|
|
91
|
+
"name": "Base"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"node": {
|
|
97
|
+
"symbol": "BNKR",
|
|
98
|
+
"tokenAddress": "0x22af33fe49fd1fa80c7149773dde5890d3c76f3b",
|
|
99
|
+
"balance": 55181351.17643974,
|
|
100
|
+
"balanceUSD": 17482.251815591913,
|
|
101
|
+
"price": 0.00031681449335470687,
|
|
102
|
+
"imgUrlV2": "https://storage.googleapis.com/zapper-fi-assets/tokens/base/0x22af33fe49fd1fa80c7149773dde5890d3c76f3b.png",
|
|
103
|
+
"name": "BankrCoin",
|
|
104
|
+
"network": {
|
|
105
|
+
"name": "Base"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"node": {
|
|
111
|
+
"symbol": "GEKO",
|
|
112
|
+
"tokenAddress": "0x64baa63f3eedf9661f736d8e4d42c6f8aa0cda71",
|
|
113
|
+
"balance": 10000000,
|
|
114
|
+
"balanceUSD": 14040.5,
|
|
115
|
+
"price": 0.00140405,
|
|
116
|
+
"imgUrlV2": "https://storage.googleapis.com/zapper-fi-assets/tokens/base/0x64baa63f3eedf9661f736d8e4d42c6f8aa0cda71.png",
|
|
117
|
+
"name": "Geko Base",
|
|
118
|
+
"network": {
|
|
119
|
+
"name": "Base"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"node": {
|
|
125
|
+
"symbol": "SAINT",
|
|
126
|
+
"tokenAddress": "0x7588880d9c78e81fade7b7e8dc0781e95995a792",
|
|
127
|
+
"balance": 10000000,
|
|
128
|
+
"balanceUSD": 9881.1,
|
|
129
|
+
"price": 0.00098811,
|
|
130
|
+
"imgUrlV2": "https://storage.googleapis.com/zapper-fi-assets/tokens/base/0x7588880d9c78e81fade7b7e8dc0781e95995a792.png",
|
|
131
|
+
"name": "Satoshi AI agent by Virtuals",
|
|
132
|
+
"network": {
|
|
133
|
+
"name": "Base"
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
Key Features
|
|
145
|
+
Real-time Computation: No separate computation jobs needed
|
|
146
|
+
Flexible Querying: View balances by token, account, or network
|
|
147
|
+
Detailed Token Data: Complete token metadata and balances
|
|
148
|
+
Account-level Breakdown: See individual wallet contributions to total balances
|
|
149
|
+
Available Fields
|
|
150
|
+
Token Balance Root Fields
|
|
151
|
+
Field Description Type
|
|
152
|
+
totalBalanceUSD Total portfolio value in USD Float!
|
|
153
|
+
byToken Token-centric view of balances PortfolioV2TokenBalanceByTokenConnection!
|
|
154
|
+
byAccount Account-centric view of balances PortfolioV2TokenBalancesByAccountConnection!
|
|
155
|
+
byNetwork Network-centric view of balances PortfolioV2TokenBalancesByNetworkConnection!
|
|
156
|
+
Token Balance Node Fields
|
|
157
|
+
Field Description Type
|
|
158
|
+
tokenAddress Token contract address String!
|
|
159
|
+
networkId Network identifier ID!
|
|
160
|
+
name Token name String!
|
|
161
|
+
symbol Token symbol String!
|
|
162
|
+
decimals Token decimal places Float!
|
|
163
|
+
price Current token price Float!
|
|
164
|
+
balance Total balance across all accounts Float!
|
|
165
|
+
balanceUSD USD value of total balance Float!
|
|
166
|
+
balanceRaw Raw balance amount (pre-decimal adjustment) String!
|
|
167
|
+
network Detailed network information NetworkObject!
|
|
168
|
+
imgUrl Token icon URL (deprecated) String!
|
|
169
|
+
imgUrlV2 Token icon URL (null if not found) String
|
|
170
|
+
Account Balance Fields
|
|
171
|
+
Field Description Type
|
|
172
|
+
accountAddress Wallet address Address!
|
|
173
|
+
balance Token balance for this account Float!
|
|
174
|
+
balanceUSD USD value for this account Float!
|
|
175
|
+
balanceRaw Raw balance for this account String!
|
|
176
|
+
account Detailed account information Account!
|
|
177
|
+
Filtering Options
|
|
178
|
+
|
|
179
|
+
The byToken query accepts several filtering parameters:
|
|
180
|
+
|
|
181
|
+
byToken(
|
|
182
|
+
first: Int = 25,
|
|
183
|
+
after: String,
|
|
184
|
+
filters: {
|
|
185
|
+
minBalanceUSD: Float
|
|
186
|
+
symbolLike: String
|
|
187
|
+
tokenAddress: String
|
|
188
|
+
includeTokensWithMissingPrices: Boolean
|
|
189
|
+
}
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
Similar filtering options are available for byAccount and byNetwork queries.
|
|
194
|
+
|
|
195
|
+
TIP
|
|
196
|
+
|
|
197
|
+
When working with raw balances, remember to adjust for token decimals. For example, a balanceRaw of "1000000000000000000" with 18 decimals represents 1.0 tokens.
|
|
198
|
+
|
|
199
|
+
appBalances
|
|
200
|
+
|
|
201
|
+
View positions within onchain applications like lending protocols, DEXes, etc.
|
|
202
|
+
|
|
203
|
+
Try it now
|
|
204
|
+
Key Features
|
|
205
|
+
Real-time Computation: No separate computation jobs needed
|
|
206
|
+
Flexible Querying: View app positions by app, account, meta-type, network, or token
|
|
207
|
+
Detailed Position Data: Complete position metadata and underlying assets
|
|
208
|
+
Account-level Breakdown: See individual wallet contributions to positions
|
|
209
|
+
Key Fields
|
|
210
|
+
totalBalanceUSD: Total value of all app positions
|
|
211
|
+
byApp: View positions grouped by application
|
|
212
|
+
byAccount: View positions grouped by wallet address (useful for accounts with smart accounts)
|
|
213
|
+
byMetaType: View positions grouped by their classification (SUPPLIED, BORROWED, etc.)
|
|
214
|
+
byNetwork: View positions grouped by blockchain network
|
|
215
|
+
byToken: View positions grouped by underlying token
|
|
216
|
+
|
|
217
|
+
Position balances come in two types that require GraphQL fragments to access their specific fields:
|
|
218
|
+
|
|
219
|
+
AppTokenPositionBalance (for fungible tokens like LP tokens):
|
|
220
|
+
|
|
221
|
+
type: "app-token"
|
|
222
|
+
balance: Token balance
|
|
223
|
+
balanceUSD: USD value
|
|
224
|
+
price: Token price
|
|
225
|
+
symbol: Token symbol
|
|
226
|
+
tokens: Array of underlying tokens
|
|
227
|
+
|
|
228
|
+
ContractPositionBalance (for positions like a lending position):
|
|
229
|
+
|
|
230
|
+
type: "contract-position"
|
|
231
|
+
balanceUSD: Position USD value
|
|
232
|
+
tokens: Array of underlying tokens with their meta-types
|
|
233
|
+
displayProps: Formatted data for UI rendering
|
|
234
|
+
Example Variables
|
|
235
|
+
{
|
|
236
|
+
"addresses": ["0xaf06a5ee843215e156e1b42efbc4de5404607164"],
|
|
237
|
+
"first": 5,
|
|
238
|
+
"chainIds": [8453], // Optional (Returns all chains when omitted)
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
Example App Balance Query
|
|
242
|
+
query AppBalances($addresses: [Address!]!, $first: Int = 10) {
|
|
243
|
+
portfolioV2(addresses: $addresses) {
|
|
244
|
+
appBalances {
|
|
245
|
+
# Total value of all app positions
|
|
246
|
+
totalBalanceUSD
|
|
247
|
+
|
|
248
|
+
# Group positions by application
|
|
249
|
+
byApp(first: $first) {
|
|
250
|
+
totalCount
|
|
251
|
+
edges {
|
|
252
|
+
node {
|
|
253
|
+
# App metadata
|
|
254
|
+
balanceUSD
|
|
255
|
+
app {
|
|
256
|
+
displayName
|
|
257
|
+
imgUrl
|
|
258
|
+
description
|
|
259
|
+
slug
|
|
260
|
+
url
|
|
261
|
+
category {
|
|
262
|
+
name
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
network {
|
|
266
|
+
name
|
|
267
|
+
slug
|
|
268
|
+
chainId
|
|
269
|
+
evmCompatible
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
# Position details with underlying assets
|
|
273
|
+
positionBalances(first: 10) {
|
|
274
|
+
edges {
|
|
275
|
+
node {
|
|
276
|
+
# App token positions (e.g. LP tokens, wstETH, wrapped tokens)
|
|
277
|
+
... on AppTokenPositionBalance {
|
|
278
|
+
type
|
|
279
|
+
address
|
|
280
|
+
network
|
|
281
|
+
symbol
|
|
282
|
+
decimals
|
|
283
|
+
balance
|
|
284
|
+
balanceUSD
|
|
285
|
+
price
|
|
286
|
+
appId
|
|
287
|
+
groupId
|
|
288
|
+
groupLabel
|
|
289
|
+
supply
|
|
290
|
+
pricePerShare
|
|
291
|
+
|
|
292
|
+
# LEVEL 1: Direct underlying tokens (e.g. wstETH -> stETH)
|
|
293
|
+
tokens {
|
|
294
|
+
# Base tokens at level 1 (e.g. USDC, DAI in a LP)
|
|
295
|
+
... on BaseTokenPositionBalance {
|
|
296
|
+
type
|
|
297
|
+
address
|
|
298
|
+
network
|
|
299
|
+
balance
|
|
300
|
+
balanceUSD
|
|
301
|
+
price
|
|
302
|
+
symbol
|
|
303
|
+
decimals
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
# App tokens at level 1 (e.g. stETH underlying wstETH)
|
|
307
|
+
... on AppTokenPositionBalance {
|
|
308
|
+
type
|
|
309
|
+
address
|
|
310
|
+
network
|
|
311
|
+
balance
|
|
312
|
+
balanceUSD
|
|
313
|
+
price
|
|
314
|
+
symbol
|
|
315
|
+
decimals
|
|
316
|
+
appId
|
|
317
|
+
supply
|
|
318
|
+
pricePerShare
|
|
319
|
+
|
|
320
|
+
# LEVEL 2: Underlying of the underlying (e.g. stETH -> ETH)
|
|
321
|
+
tokens {
|
|
322
|
+
# Base tokens at level 2
|
|
323
|
+
... on BaseTokenPositionBalance {
|
|
324
|
+
type
|
|
325
|
+
address
|
|
326
|
+
network
|
|
327
|
+
balance
|
|
328
|
+
balanceUSD
|
|
329
|
+
price
|
|
330
|
+
symbol
|
|
331
|
+
decimals
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
# App tokens at level 2 (for complex nested positions)
|
|
335
|
+
... on AppTokenPositionBalance {
|
|
336
|
+
type
|
|
337
|
+
address
|
|
338
|
+
network
|
|
339
|
+
balance
|
|
340
|
+
balanceUSD
|
|
341
|
+
price
|
|
342
|
+
symbol
|
|
343
|
+
decimals
|
|
344
|
+
appId
|
|
345
|
+
supply
|
|
346
|
+
pricePerShare
|
|
347
|
+
|
|
348
|
+
# LEVEL 3: Third level of underlying tokens
|
|
349
|
+
# This covers cases like: complexLP -> simpleLP -> baseTokens
|
|
350
|
+
tokens {
|
|
351
|
+
# Usually base tokens at this level
|
|
352
|
+
... on BaseTokenPositionBalance {
|
|
353
|
+
type
|
|
354
|
+
address
|
|
355
|
+
network
|
|
356
|
+
balance
|
|
357
|
+
balanceUSD
|
|
358
|
+
price
|
|
359
|
+
symbol
|
|
360
|
+
decimals
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
# Rare but possible: another app token
|
|
364
|
+
... on AppTokenPositionBalance {
|
|
365
|
+
type
|
|
366
|
+
address
|
|
367
|
+
network
|
|
368
|
+
balance
|
|
369
|
+
balanceUSD
|
|
370
|
+
price
|
|
371
|
+
symbol
|
|
372
|
+
decimals
|
|
373
|
+
appId
|
|
374
|
+
supply
|
|
375
|
+
pricePerShare
|
|
376
|
+
# Continue returning underlying tokens if needed
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
# Detailed display properties
|
|
385
|
+
displayProps {
|
|
386
|
+
label
|
|
387
|
+
images
|
|
388
|
+
balanceDisplayMode
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
# Contract positions (e.g. lending, farming, vaults)
|
|
393
|
+
... on ContractPositionBalance {
|
|
394
|
+
type
|
|
395
|
+
address
|
|
396
|
+
network
|
|
397
|
+
appId
|
|
398
|
+
groupId
|
|
399
|
+
groupLabel
|
|
400
|
+
balanceUSD
|
|
401
|
+
|
|
402
|
+
# Underlying tokens with meta-types (SUPPLIED, BORROWED, CLAIMABLE, etc.)
|
|
403
|
+
tokens {
|
|
404
|
+
metaType
|
|
405
|
+
token {
|
|
406
|
+
# LEVEL 1: Direct tokens in the contract position
|
|
407
|
+
# Base tokens (e.g. supplied USDC)
|
|
408
|
+
... on BaseTokenPositionBalance {
|
|
409
|
+
type
|
|
410
|
+
address
|
|
411
|
+
network
|
|
412
|
+
balance
|
|
413
|
+
balanceUSD
|
|
414
|
+
price
|
|
415
|
+
symbol
|
|
416
|
+
decimals
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
# App tokens in contract positions (e.g. supplied aUSDC)
|
|
420
|
+
... on AppTokenPositionBalance {
|
|
421
|
+
type
|
|
422
|
+
address
|
|
423
|
+
network
|
|
424
|
+
balance
|
|
425
|
+
balanceUSD
|
|
426
|
+
price
|
|
427
|
+
symbol
|
|
428
|
+
decimals
|
|
429
|
+
appId
|
|
430
|
+
supply
|
|
431
|
+
pricePerShare
|
|
432
|
+
|
|
433
|
+
# LEVEL 2: Underlying of app tokens in contract positions
|
|
434
|
+
tokens {
|
|
435
|
+
# Base tokens at level 2
|
|
436
|
+
... on BaseTokenPositionBalance {
|
|
437
|
+
type
|
|
438
|
+
address
|
|
439
|
+
network
|
|
440
|
+
balance
|
|
441
|
+
balanceUSD
|
|
442
|
+
price
|
|
443
|
+
symbol
|
|
444
|
+
decimals
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
# App tokens at level 2
|
|
448
|
+
... on AppTokenPositionBalance {
|
|
449
|
+
type
|
|
450
|
+
address
|
|
451
|
+
network
|
|
452
|
+
balance
|
|
453
|
+
balanceUSD
|
|
454
|
+
price
|
|
455
|
+
symbol
|
|
456
|
+
decimals
|
|
457
|
+
appId
|
|
458
|
+
supply
|
|
459
|
+
pricePerShare
|
|
460
|
+
|
|
461
|
+
# LEVEL 3: Third level for complex contract positions
|
|
462
|
+
tokens {
|
|
463
|
+
# Base tokens at level 3
|
|
464
|
+
... on BaseTokenPositionBalance {
|
|
465
|
+
type
|
|
466
|
+
address
|
|
467
|
+
network
|
|
468
|
+
balance
|
|
469
|
+
balanceUSD
|
|
470
|
+
price
|
|
471
|
+
symbol
|
|
472
|
+
decimals
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
# App tokens at level 3 (rare but possible)
|
|
476
|
+
... on AppTokenPositionBalance {
|
|
477
|
+
type
|
|
478
|
+
address
|
|
479
|
+
network
|
|
480
|
+
balance
|
|
481
|
+
balanceUSD
|
|
482
|
+
price
|
|
483
|
+
symbol
|
|
484
|
+
decimals
|
|
485
|
+
appId
|
|
486
|
+
supply
|
|
487
|
+
pricePerShare
|
|
488
|
+
# Not going deeper than 3 levels
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
# NFT positions (no further nesting needed)
|
|
496
|
+
... on NonFungiblePositionBalance {
|
|
497
|
+
type
|
|
498
|
+
address
|
|
499
|
+
network
|
|
500
|
+
balance
|
|
501
|
+
balanceUSD
|
|
502
|
+
price
|
|
503
|
+
symbol
|
|
504
|
+
decimals
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
# Detailed display properties
|
|
510
|
+
displayProps {
|
|
511
|
+
label
|
|
512
|
+
images
|
|
513
|
+
balanceDisplayMode
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
Example Response
|
|
527
|
+
{
|
|
528
|
+
"data": {
|
|
529
|
+
"portfolioV2": {
|
|
530
|
+
"appBalances": {
|
|
531
|
+
"totalBalanceUSD": 23939642.91719707,
|
|
532
|
+
"byApp": {
|
|
533
|
+
"totalCount": 1,
|
|
534
|
+
"edges": [
|
|
535
|
+
{
|
|
536
|
+
"node": {
|
|
537
|
+
"balanceUSD": 23939642.91719707,
|
|
538
|
+
"app": {
|
|
539
|
+
"displayName": "Lido",
|
|
540
|
+
"imgUrl": "https://storage.googleapis.com/zapper-fi-assets/apps%2Flido.png",
|
|
541
|
+
"description": "Simplified and secure participation in staking",
|
|
542
|
+
"slug": "lido",
|
|
543
|
+
"url": "https://lido.fi/",
|
|
544
|
+
"category": {
|
|
545
|
+
"name": "Staking"
|
|
546
|
+
}
|
|
547
|
+
},
|
|
548
|
+
"network": {
|
|
549
|
+
"name": "Ethereum",
|
|
550
|
+
"slug": "ethereum",
|
|
551
|
+
"chainId": 1,
|
|
552
|
+
"evmCompatible": true
|
|
553
|
+
},
|
|
554
|
+
"positionBalances": {
|
|
555
|
+
"edges": [
|
|
556
|
+
{
|
|
557
|
+
"node": {
|
|
558
|
+
"type": "app-token",
|
|
559
|
+
"address": "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",
|
|
560
|
+
"network": "ETHEREUM_MAINNET",
|
|
561
|
+
"symbol": "wstETH",
|
|
562
|
+
"decimals": 18,
|
|
563
|
+
"balance": "7880.037743210678",
|
|
564
|
+
"balanceUSD": 23939642.91719707,
|
|
565
|
+
"price": 3038.01119960664,
|
|
566
|
+
"appId": "lido",
|
|
567
|
+
"groupId": "wsteth",
|
|
568
|
+
"groupLabel": "wstETH",
|
|
569
|
+
"supply": 3461283.5529221934,
|
|
570
|
+
"pricePerShare": [
|
|
571
|
+
1.2056461174237205
|
|
572
|
+
],
|
|
573
|
+
"tokens": [
|
|
574
|
+
{
|
|
575
|
+
"type": "app-token",
|
|
576
|
+
"address": "0xae7ab96520de3a18e5e111b5eaab095312d7fe84",
|
|
577
|
+
"network": "ETHEREUM_MAINNET",
|
|
578
|
+
"balance": "9500.536910254332",
|
|
579
|
+
"balanceUSD": 23939642.91719707,
|
|
580
|
+
"price": 2519.82,
|
|
581
|
+
"symbol": "stETH",
|
|
582
|
+
"decimals": 18,
|
|
583
|
+
"appId": "lido",
|
|
584
|
+
"supply": 9122602.975724617,
|
|
585
|
+
"pricePerShare": [
|
|
586
|
+
1
|
|
587
|
+
],
|
|
588
|
+
"tokens": [
|
|
589
|
+
{
|
|
590
|
+
"type": "base-token",
|
|
591
|
+
"address": "0x0000000000000000000000000000000000000000",
|
|
592
|
+
"network": "ETHEREUM_MAINNET",
|
|
593
|
+
"balance": "9500.536910254332",
|
|
594
|
+
"balanceUSD": 23939642.91719707,
|
|
595
|
+
"price": 2519.82,
|
|
596
|
+
"symbol": "ETH",
|
|
597
|
+
"decimals": 18
|
|
598
|
+
}
|
|
599
|
+
]
|
|
600
|
+
}
|
|
601
|
+
],
|
|
602
|
+
"displayProps": {
|
|
603
|
+
"label": "wstETH",
|
|
604
|
+
"images": [
|
|
605
|
+
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0x0000000000000000000000000000000000000000.png"
|
|
606
|
+
],
|
|
607
|
+
"balanceDisplayMode": null
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
]
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
]
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
App Balances by Network
|
|
623
|
+
|
|
624
|
+
View all app positions grouped by network:
|
|
625
|
+
|
|
626
|
+
query AppBalancesByNetwork($addresses: [Address!]!) {
|
|
627
|
+
portfolioV2(addresses: $addresses) {
|
|
628
|
+
appBalances {
|
|
629
|
+
byNetwork(first: 10) {
|
|
630
|
+
totalCount
|
|
631
|
+
edges {
|
|
632
|
+
node {
|
|
633
|
+
network {
|
|
634
|
+
name
|
|
635
|
+
slug
|
|
636
|
+
chainId
|
|
637
|
+
}
|
|
638
|
+
balanceUSD
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
NOTE
|
|
647
|
+
|
|
648
|
+
Smart accounts like Maker's DSProxy are automatically included in balance responses as part of an "implicit" bundle. For a breakdown by account use the byAccount field.
|
|
649
|
+
|
|
650
|
+
Main Fields
|
|
651
|
+
Field Description Type
|
|
652
|
+
totalBalanceUSD Total value of all app positions in USD Float!
|
|
653
|
+
byApp Positions grouped by application Connection!
|
|
654
|
+
byAccount Positions grouped by wallet address Connection!
|
|
655
|
+
byMetaType Positions grouped by classification Connection!
|
|
656
|
+
byNetwork Positions grouped by blockchain network Connection!
|
|
657
|
+
byToken Positions grouped by underlying token Connection!
|
|
658
|
+
App Position Fields
|
|
659
|
+
Field Description Type
|
|
660
|
+
appId Application identifier ID!
|
|
661
|
+
balanceUSD Total value in this app Float!
|
|
662
|
+
app App metadata (name, description, etc.) App!
|
|
663
|
+
network Network information NetworkObject!
|
|
664
|
+
accountBalances Breakdown by wallet address Connection!
|
|
665
|
+
balances Detailed position information Connection!
|
|
666
|
+
Position Types
|
|
667
|
+
AppTokenPositionBalance (For LP tokens, yield tokens, etc.)
|
|
668
|
+
Field Description Type
|
|
669
|
+
type Position type ("app-token") String!
|
|
670
|
+
address Token contract address String!
|
|
671
|
+
balance Token balance String!
|
|
672
|
+
balanceUSD USD value of position Float!
|
|
673
|
+
price Token price Float!
|
|
674
|
+
symbol Token symbol String!
|
|
675
|
+
tokens Underlying tokens [AbstractToken!]!
|
|
676
|
+
displayProps UI display properties DisplayProps
|
|
677
|
+
ContractPositionBalance (For lending, staking positions, etc.)
|
|
678
|
+
Field Description Type
|
|
679
|
+
type Position type ("contract-position") String!
|
|
680
|
+
address Contract address String!
|
|
681
|
+
balanceUSD USD value of position Float!
|
|
682
|
+
tokens Underlying tokens with meta-types [TokenWithMetaType!]!
|
|
683
|
+
displayProps UI display properties DisplayProps
|
|
684
|
+
Meta-Type Values
|
|
685
|
+
|
|
686
|
+
The metaType field indicates the role of tokens within positions:
|
|
687
|
+
|
|
688
|
+
Value Description
|
|
689
|
+
SUPPLIED Tokens supplied to a protocol
|
|
690
|
+
BORROWED Tokens borrowed from a protocol
|
|
691
|
+
CLAIMABLE Tokens that can be claimed as rewards
|
|
692
|
+
VESTING Tokens that are currently vesting
|
|
693
|
+
LOCKED Tokens that are locked in a protocol
|
|
694
|
+
Best Practices
|
|
695
|
+
|
|
696
|
+
Use fragments for position types: Since app positions can be either AppTokenPositionBalance or ContractPositionBalance, always use fragments to properly access all fields.
|
|
697
|
+
|
|
698
|
+
Filter low-value positions: Use the minBalanceUSD filter to exclude dust or low-value positions from results:
|
|
699
|
+
|
|
700
|
+
byApp(first: 10, filters: { minBalanceUSD: 10 })
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
Include proxy accounts: Set includeProxyAccounts: true to see positions held in smart contract wallets:
|
|
704
|
+
|
|
705
|
+
portfolioV2(addresses: $addresses, includeProxyAccounts: true)
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
Handle token decimals: Remember to adjust token balances based on their decimals field.
|
|
709
|
+
|
|
710
|
+
nftBalances
|
|
711
|
+
|
|
712
|
+
Get all NFTs held by address(s), with complete metadata, estimated USD valuations, and flexible filters and ordering.
|
|
713
|
+
|
|
714
|
+
Try it now
|
|
715
|
+
Key Features
|
|
716
|
+
Flexible Querying: View NFT holdings by network, collection, or individual tokens
|
|
717
|
+
Detailed NFT metadata: Complete collection and token metadata
|
|
718
|
+
USD Valuations: Get estimated USD values for NFTs
|
|
719
|
+
Filters: Filter by name, network, min USD value, or hidden (spam)
|
|
720
|
+
Ordering: Order by USD value or recently received
|
|
721
|
+
Key Fields
|
|
722
|
+
totalBalanceUSD: Total estimated value of all NFT holdings
|
|
723
|
+
totalTokensOwned: Total number of NFTs owned, including multiple copies of ERC-1155s
|
|
724
|
+
byNetwork: View NFTs grouped by blockchain network
|
|
725
|
+
byCollection: View NFTs grouped by collection
|
|
726
|
+
byToken: View individual NFT tokens with details
|
|
727
|
+
Example Variables
|
|
728
|
+
{
|
|
729
|
+
"addresses": ["0x52c8ff44260056f896e20d8a43610dd88f05701b"],
|
|
730
|
+
"first": 10,
|
|
731
|
+
"chainIds": [8453], // Optional (Returns all chains when omitted)
|
|
732
|
+
"order": {
|
|
733
|
+
"by": "USD_WORTH" // Or LAST_RECEIVED
|
|
734
|
+
},
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
Example Query
|
|
738
|
+
query NFTBalances_USDSorted(
|
|
739
|
+
$addresses: [Address!]!
|
|
740
|
+
$first: Int
|
|
741
|
+
$order: PortfolioV2NftBalanceByTokenInputInput
|
|
742
|
+
$filters: PortfolioV2NftBalanceByTokenFiltersInput
|
|
743
|
+
) {
|
|
744
|
+
portfolioV2(addresses: $addresses) {
|
|
745
|
+
nftBalances {
|
|
746
|
+
totalBalanceUSD
|
|
747
|
+
totalTokensOwned
|
|
748
|
+
byToken(first: $first, order: $order, filters: $filters) {
|
|
749
|
+
edges {
|
|
750
|
+
node {
|
|
751
|
+
lastReceived
|
|
752
|
+
token {
|
|
753
|
+
tokenId
|
|
754
|
+
name
|
|
755
|
+
description
|
|
756
|
+
supply
|
|
757
|
+
circulatingSupply
|
|
758
|
+
estimatedValue {
|
|
759
|
+
valueUsd
|
|
760
|
+
valueWithDenomination
|
|
761
|
+
denomination {
|
|
762
|
+
address
|
|
763
|
+
symbol
|
|
764
|
+
network
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
collection {
|
|
768
|
+
network
|
|
769
|
+
address
|
|
770
|
+
name
|
|
771
|
+
type
|
|
772
|
+
deployer
|
|
773
|
+
deployedAt
|
|
774
|
+
owner
|
|
775
|
+
medias {
|
|
776
|
+
logo {
|
|
777
|
+
mimeType
|
|
778
|
+
fileSize
|
|
779
|
+
blurhash
|
|
780
|
+
height
|
|
781
|
+
width
|
|
782
|
+
originalUri
|
|
783
|
+
original
|
|
784
|
+
large
|
|
785
|
+
medium
|
|
786
|
+
thumbnail
|
|
787
|
+
predominantColor
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
mediasV3 {
|
|
792
|
+
images {
|
|
793
|
+
edges {
|
|
794
|
+
node {
|
|
795
|
+
mimeType
|
|
796
|
+
fileSize
|
|
797
|
+
blurhash
|
|
798
|
+
height
|
|
799
|
+
width
|
|
800
|
+
originalUri
|
|
801
|
+
original
|
|
802
|
+
thumbnail
|
|
803
|
+
medium
|
|
804
|
+
large
|
|
805
|
+
predominantColor
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
Example Response
|
|
819
|
+
{
|
|
820
|
+
"data": {
|
|
821
|
+
"portfolioV2": {
|
|
822
|
+
"nftBalances": {
|
|
823
|
+
"totalBalanceUSD": 7330.6878496656,
|
|
824
|
+
"totalTokensOwned": "31134",
|
|
825
|
+
"byToken": {
|
|
826
|
+
"edges": [
|
|
827
|
+
{
|
|
828
|
+
"node": {
|
|
829
|
+
"lastReceived": 1734041699000,
|
|
830
|
+
"token": {
|
|
831
|
+
"tokenId": "10407",
|
|
832
|
+
"name": "Lil Pudgy #10407",
|
|
833
|
+
"description": "Lil Pudgys are a collection of 22,222 randomly generated NFTs minted on Ethereum.",
|
|
834
|
+
"supply": "1",
|
|
835
|
+
"circulatingSupply": "1",
|
|
836
|
+
"estimatedValue": {
|
|
837
|
+
"valueUsd": 2671.701185940551,
|
|
838
|
+
"valueWithDenomination": 1.4814883824848697,
|
|
839
|
+
"denomination": {
|
|
840
|
+
"address": "0x0000000000000000000000000000000000000000",
|
|
841
|
+
"symbol": "ETH",
|
|
842
|
+
"network": "ethereum"
|
|
843
|
+
}
|
|
844
|
+
},
|
|
845
|
+
"collection": {
|
|
846
|
+
"network": "ETHEREUM_MAINNET",
|
|
847
|
+
"address": "0x524cab2ec69124574082676e6f654a18df49a048",
|
|
848
|
+
"name": "LilPudgys",
|
|
849
|
+
"type": "GENERAL",
|
|
850
|
+
"deployer": "0xe9da256a28630efdc637bfd4c65f0887be1aeda8",
|
|
851
|
+
"deployedAt": 1639933745000,
|
|
852
|
+
"owner": "0xe9da256a28630efdc637bfd4c65f0887be1aeda8",
|
|
853
|
+
"medias": {
|
|
854
|
+
"logo": {
|
|
855
|
+
"mimeType": "image/png",
|
|
856
|
+
"fileSize": 5962,
|
|
857
|
+
"blurhash": "URHyw=WZ0stTN2j?xuWD0ut8^aj[?vWYIUt6",
|
|
858
|
+
"height": 250,
|
|
859
|
+
"width": 250,
|
|
860
|
+
"originalUri": "https://storage.googleapis.com/zapper-fi-assets/nfts/collections/ethereum/0x524cab2ec69124574082676e6f654a18df49a048/logo.png",
|
|
861
|
+
"original": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/collections/ethereum/0x524cab2ec69124574082676e6f654a18df49a048/logo.png&checksum=VklwQoOgHYKsPj8GPZ1FDTXN8hPPSaVBjHCmiQ7vZy8",
|
|
862
|
+
"large": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/collections/ethereum/0x524cab2ec69124574082676e6f654a18df49a048/logo.png&width=500&checksum=NlRY3lUeBcOFw3CzxcAGAQKxOLw3JhreqJ38BZTC9D0",
|
|
863
|
+
"medium": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/collections/ethereum/0x524cab2ec69124574082676e6f654a18df49a048/logo.png&width=250&checksum=VPxH2Ejt_0dOcWCesNcsfQYZgcGYPIFERQexdytLyP0",
|
|
864
|
+
"thumbnail": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/collections/ethereum/0x524cab2ec69124574082676e6f654a18df49a048/logo.png&width=100&checksum=BFebU_PxxIAdlqld0-cJ_M0bjMTd3qTBRdFx02pBX5M",
|
|
865
|
+
"predominantColor": "#9ab3ed"
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
},
|
|
869
|
+
"mediasV3": {
|
|
870
|
+
"images": {
|
|
871
|
+
"edges": [
|
|
872
|
+
{
|
|
873
|
+
"node": {
|
|
874
|
+
"mimeType": "image/png",
|
|
875
|
+
"fileSize": 181886,
|
|
876
|
+
"blurhash": "UPQ4c{$j_$+^{0n%CRX8s;jtS0bFtlbHv#n%",
|
|
877
|
+
"height": 2700,
|
|
878
|
+
"width": 2700,
|
|
879
|
+
"originalUri": "https://api.pudgypenguins.io/lil/image/10407",
|
|
880
|
+
"original": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/medias/fa856d9f7907ea90f93067a80cfe2a84be04242e834306ddcbe25876438a8684.png&checksum=fRHieiOCQj_0piw8VZc-HDP-f5Uy8cl4p99Dx-66ycM",
|
|
881
|
+
"thumbnail": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/medias/fa856d9f7907ea90f93067a80cfe2a84be04242e834306ddcbe25876438a8684.png&width=100&checksum=oDAXzMIzWvlGOLbb1nN8IWKl4_B26B840wd6CXwhSWw",
|
|
882
|
+
"medium": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/medias/fa856d9f7907ea90f93067a80cfe2a84be04242e834306ddcbe25876438a8684.png&width=250&checksum=jiyBP_I0JxBPasrg273qHzkTPOfnzRyMCdHakPTV-vk",
|
|
883
|
+
"large": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/medias/fa856d9f7907ea90f93067a80cfe2a84be04242e834306ddcbe25876438a8684.png&width=500&checksum=Ndb7k_Uoscl4oQ8vjoCCLljQcDG7BvtTV-SQ6w6JDRM",
|
|
884
|
+
"predominantColor": "#e35063"
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
]
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
},
|
|
893
|
+
{
|
|
894
|
+
"node": {
|
|
895
|
+
"lastReceived": 1734390407000,
|
|
896
|
+
"token": {
|
|
897
|
+
"tokenId": "11410",
|
|
898
|
+
"name": "Opepen 11410",
|
|
899
|
+
"description": "This artwork may or may not be handmade.",
|
|
900
|
+
"supply": "1",
|
|
901
|
+
"circulatingSupply": "1",
|
|
902
|
+
"estimatedValue": {
|
|
903
|
+
"valueUsd": 458.7449105987138,
|
|
904
|
+
"valueWithDenomination": 0.2543792169395613,
|
|
905
|
+
"denomination": {
|
|
906
|
+
"address": "0x0000000000000000000000000000000000000000",
|
|
907
|
+
"symbol": "ETH",
|
|
908
|
+
"network": "ethereum"
|
|
909
|
+
}
|
|
910
|
+
},
|
|
911
|
+
"collection": {
|
|
912
|
+
"network": "ETHEREUM_MAINNET",
|
|
913
|
+
"address": "0x6339e5e072086621540d0362c4e3cea0d643e114",
|
|
914
|
+
"name": "Opepen Edition",
|
|
915
|
+
"type": "GENERAL",
|
|
916
|
+
"deployer": "0xf74b146ce44cc162b601dec3be331784db111dc1",
|
|
917
|
+
"deployedAt": 1673205671000,
|
|
918
|
+
"owner": "0xc8f8e2f59dd95ff67c3d39109eca2e2a017d4c8a",
|
|
919
|
+
"medias": {
|
|
920
|
+
"logo": {
|
|
921
|
+
"mimeType": "image/png",
|
|
922
|
+
"fileSize": 13075,
|
|
923
|
+
"blurhash": "USFsZ5?wWBj]%NWBWBofa#Riaef6ogazayj[",
|
|
924
|
+
"height": 250,
|
|
925
|
+
"width": 250,
|
|
926
|
+
"originalUri": "https://storage.googleapis.com/zapper-fi-assets/nfts/collections/ethereum/0x6339e5e072086621540d0362c4e3cea0d643e114/logo.png",
|
|
927
|
+
"original": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/collections/ethereum/0x6339e5e072086621540d0362c4e3cea0d643e114/logo.png&checksum=rc8N2fjdu3WxsdZAkJK2NuTJ_ZWfQyn3DpIngJ4oMX8",
|
|
928
|
+
"large": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/collections/ethereum/0x6339e5e072086621540d0362c4e3cea0d643e114/logo.png&width=500&checksum=pOMoxeVP5zir59MtGm692O8j2MGyJzh0g_dxzoaiBAM",
|
|
929
|
+
"medium": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/collections/ethereum/0x6339e5e072086621540d0362c4e3cea0d643e114/logo.png&width=250&checksum=0xvI1F84R9aW5NeNLJJGlJ8EdjRF2ZDWzT5hM9y-guY",
|
|
930
|
+
"thumbnail": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/collections/ethereum/0x6339e5e072086621540d0362c4e3cea0d643e114/logo.png&width=100&checksum=kepZS3NVGOfheaxy4Hq9bKwqjDeyqSLaC42dmxASbd0",
|
|
931
|
+
"predominantColor": "#8897a9"
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
},
|
|
935
|
+
"mediasV3": {
|
|
936
|
+
"images": {
|
|
937
|
+
"edges": [
|
|
938
|
+
{
|
|
939
|
+
"node": {
|
|
940
|
+
"mimeType": "image/png",
|
|
941
|
+
"fileSize": 28712,
|
|
942
|
+
"blurhash": "U03l5Ot700M{D%Rj-;WB00Rj~qay00Rj_3ay",
|
|
943
|
+
"height": 1400,
|
|
944
|
+
"width": 1400,
|
|
945
|
+
"originalUri": "ipfs://QmVXvZ5Sp6aSDBrWvtJ5gZ3bwNWRqqY3iPvyF8nveWj5HF/40.png",
|
|
946
|
+
"original": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/medias/19c1f0ba5396e3fd79b06122557eb81924f1b8a782d731e616d54576ed4e1317.png&checksum=aZqb1HchmOlEo-5jrdn7kKojpyllaESyBm2KFmXCUvc",
|
|
947
|
+
"thumbnail": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/medias/19c1f0ba5396e3fd79b06122557eb81924f1b8a782d731e616d54576ed4e1317.png&width=100&checksum=1LDcOITKGytwQuG6EnfFOZV9Z_kiiFjCL9Bn4klYW9I",
|
|
948
|
+
"medium": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/medias/19c1f0ba5396e3fd79b06122557eb81924f1b8a782d731e616d54576ed4e1317.png&width=250&checksum=dlYO9zWHV0YdHKPeuyapwm6ZouiwbVkUsSTUPiZiAfk",
|
|
949
|
+
"large": "https://images.zapper.xyz/z/?path=zapper-fi-assets/nfts/medias/19c1f0ba5396e3fd79b06122557eb81924f1b8a782d731e616d54576ed4e1317.png&width=500&checksum=4ICCFrmEAAeSAnAMFwnvb4RgIAXLwI3Bp8wCMIMGyl4",
|
|
950
|
+
"predominantColor": "#1f1f1f"
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
]
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
]
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
|
|
967
|
+
Flexible Ordering
|
|
968
|
+
{
|
|
969
|
+
"by": "USD_WORTH" // Orders NFTs by their USD value (default)
|
|
970
|
+
// OR
|
|
971
|
+
"by": "LAST_RECEIVED" // Orders NFTs by when they were last received
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
byNetwork
|
|
975
|
+
|
|
976
|
+
View NFT balances grouped by chain with optional ordering and filtering:
|
|
977
|
+
|
|
978
|
+
byNetwork(
|
|
979
|
+
first: Int = 25,
|
|
980
|
+
after: String,
|
|
981
|
+
filters: {
|
|
982
|
+
minBalanceUSD: Float, // Minimum USD value threshold
|
|
983
|
+
hidden: Boolean, // Include/exclude hidden NFTs
|
|
984
|
+
chainId: Int // Filter by specific chain
|
|
985
|
+
},
|
|
986
|
+
order: {
|
|
987
|
+
by: PortfolioV2NftOrderByOption // USD_WORTH or LAST_RECEIVED
|
|
988
|
+
}
|
|
989
|
+
)
|
|
990
|
+
|
|
991
|
+
byCollection
|
|
992
|
+
|
|
993
|
+
View NFT balances grouped by collection with additional filtering options:
|
|
994
|
+
|
|
995
|
+
byCollection(
|
|
996
|
+
first: Int = 25,
|
|
997
|
+
after: String,
|
|
998
|
+
filters: {
|
|
999
|
+
collectionName: String, // Filter by collection name
|
|
1000
|
+
hidden: Boolean, // Include/exclude hidden NFTs
|
|
1001
|
+
chainId: Int // Filter by specific chain
|
|
1002
|
+
},
|
|
1003
|
+
order: {
|
|
1004
|
+
by: PortfolioV2NftOrderByOption // USD_WORTH or LAST_RECEIVED
|
|
1005
|
+
}
|
|
1006
|
+
)
|
|
1007
|
+
|
|
1008
|
+
byToken
|
|
1009
|
+
|
|
1010
|
+
Access individual NFT tokens with detailed filtering options:
|
|
1011
|
+
|
|
1012
|
+
byToken(
|
|
1013
|
+
first: Int = 25,
|
|
1014
|
+
after: String,
|
|
1015
|
+
filters: {
|
|
1016
|
+
hidden: Boolean, // Include/exclude hidden NFTs
|
|
1017
|
+
chainId: Int // Filter by specific chain
|
|
1018
|
+
},
|
|
1019
|
+
order: {
|
|
1020
|
+
by: PortfolioV2NftOrderByOption // USD_WORTH or LAST_RECEIVED
|
|
1021
|
+
}
|
|
1022
|
+
)
|
|
1023
|
+
|
|
1024
|
+
Common Filter Options
|
|
1025
|
+
|
|
1026
|
+
All query methods support these common filtering parameters:
|
|
1027
|
+
|
|
1028
|
+
Parameter Type Description
|
|
1029
|
+
hidden Boolean When true, returns only NFTs marked as hidden by the user
|
|
1030
|
+
chainId Int Filter NFTs by a specific blockchain network
|
|
1031
|
+
collections - Input an address and chainId to NFTs from a specific collection
|
|
1032
|
+
Filter by specific collections
|
|
1033
|
+
{
|
|
1034
|
+
"addresses": ["0x3d280fde2ddb59323c891cf30995e1862510342f"],
|
|
1035
|
+
"first": 10,
|
|
1036
|
+
"filters": {
|
|
1037
|
+
"collections": [
|
|
1038
|
+
{
|
|
1039
|
+
"address": "0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb",
|
|
1040
|
+
"chainId": 1
|
|
1041
|
+
}
|
|
1042
|
+
]
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
Best Practices
|
|
1047
|
+
Use order by value for portfolio displays: Sort by USD_WORTH for financial portfolio views
|
|
1048
|
+
Use order by time for activity views: Sort by LAST_RECEIVED when showing recent acquisitions
|
|
1049
|
+
Handle low-value NFTs: Consider using minBalanceUSD to filter out low-value or unsellable NFTs
|
|
1050
|
+
4. Portfolio Totals
|
|
1051
|
+
|
|
1052
|
+
Get aggregated portfolio values and breakdowns with portfolioV2 by using the totalBalanceUSD fields from different sections:
|
|
1053
|
+
|
|
1054
|
+
Try it now
|
|
1055
|
+
Key Fields
|
|
1056
|
+
tokenBalances.totalBalanceUSD: Total value of token balances
|
|
1057
|
+
appBalances.totalBalanceUSD: Total value of app positions
|
|
1058
|
+
nftBalances.totalBalanceUSD: Total value of NFTs
|
|
1059
|
+
byNetwork: Network breakdowns available in tokenBalances, appBalances, and nftBalances
|
|
1060
|
+
byAccount: Account breakdowns
|
|
1061
|
+
byToken: Token-specific breakdowns (in appBalances)
|
|
1062
|
+
byMetaType: Type-specific breakdowns (in appBalances, includes CLAIMABLE tokens)
|
|
1063
|
+
Example Variables
|
|
1064
|
+
{
|
|
1065
|
+
"addresses": ["0x849151d7d0bf1f34b70d5cad5149d28cc2308bf1"],
|
|
1066
|
+
"first": 20
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
Example Query
|
|
1070
|
+
query PortfolioV2Totals($addresses: [Address!]!, $first: Int) {
|
|
1071
|
+
portfolioV2(addresses: $addresses) {
|
|
1072
|
+
# Token balances total
|
|
1073
|
+
tokenBalances {
|
|
1074
|
+
totalBalanceUSD
|
|
1075
|
+
# Network breakdown for tokens
|
|
1076
|
+
byNetwork(first: $first) {
|
|
1077
|
+
edges {
|
|
1078
|
+
node {
|
|
1079
|
+
network {
|
|
1080
|
+
name
|
|
1081
|
+
slug
|
|
1082
|
+
chainId
|
|
1083
|
+
}
|
|
1084
|
+
balanceUSD
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
}
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
# NFT balances total
|
|
1091
|
+
nftBalances {
|
|
1092
|
+
totalBalanceUSD
|
|
1093
|
+
# Network breakdown for NFTs
|
|
1094
|
+
byNetwork(first: $first) {
|
|
1095
|
+
edges {
|
|
1096
|
+
node {
|
|
1097
|
+
network {
|
|
1098
|
+
name
|
|
1099
|
+
slug
|
|
1100
|
+
chainId
|
|
1101
|
+
}
|
|
1102
|
+
balanceUSD
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
# App balances (e.g., DeFi postions) total
|
|
1109
|
+
appBalances {
|
|
1110
|
+
totalBalanceUSD
|
|
1111
|
+
# Network breakdown for app positions
|
|
1112
|
+
byNetwork(first: $first) {
|
|
1113
|
+
edges {
|
|
1114
|
+
node {
|
|
1115
|
+
network {
|
|
1116
|
+
name
|
|
1117
|
+
slug
|
|
1118
|
+
chainId
|
|
1119
|
+
}
|
|
1120
|
+
balanceUSD
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
Getting Overall Portfolio Value
|
|
1129
|
+
|
|
1130
|
+
To get an aggregate net worth of a portfolio sum the totalBalanceUSD from tokenBalances, appBalances, and nftBalances
|
|
1131
|
+
|
|
1132
|
+
Example Response
|
|
1133
|
+
{
|
|
1134
|
+
"data": {
|
|
1135
|
+
"portfolioV2": {
|
|
1136
|
+
"tokenBalances": {
|
|
1137
|
+
"totalBalanceUSD": 225590.09863164127,
|
|
1138
|
+
"byNetwork": {
|
|
1139
|
+
"edges": [
|
|
1140
|
+
{
|
|
1141
|
+
"node": {
|
|
1142
|
+
"network": {
|
|
1143
|
+
"name": "Base",
|
|
1144
|
+
"slug": "base",
|
|
1145
|
+
"chainId": 8453
|
|
1146
|
+
},
|
|
1147
|
+
"balanceUSD": 221754.1899751895
|
|
1148
|
+
}
|
|
1149
|
+
},
|
|
1150
|
+
{
|
|
1151
|
+
"node": {
|
|
1152
|
+
"network": {
|
|
1153
|
+
"name": "ZKsync",
|
|
1154
|
+
"slug": "zksync",
|
|
1155
|
+
"chainId": 324
|
|
1156
|
+
},
|
|
1157
|
+
"balanceUSD": 1229.80913712
|
|
1158
|
+
}
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
"node": {
|
|
1162
|
+
"network": {
|
|
1163
|
+
"name": "Optimism",
|
|
1164
|
+
"slug": "optimism",
|
|
1165
|
+
"chainId": 10
|
|
1166
|
+
},
|
|
1167
|
+
"balanceUSD": 975.3859591021923
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
]
|
|
1171
|
+
}
|
|
1172
|
+
},
|
|
1173
|
+
"nftBalances": {
|
|
1174
|
+
"totalBalanceUSD": 62906.44492750787,
|
|
1175
|
+
"byNetwork": {
|
|
1176
|
+
"edges": [
|
|
1177
|
+
{
|
|
1178
|
+
"node": {
|
|
1179
|
+
"network": {
|
|
1180
|
+
"name": "Base",
|
|
1181
|
+
"slug": "base",
|
|
1182
|
+
"chainId": 8453
|
|
1183
|
+
},
|
|
1184
|
+
"balanceUSD": 50749.39954198
|
|
1185
|
+
}
|
|
1186
|
+
},
|
|
1187
|
+
{
|
|
1188
|
+
"node": {
|
|
1189
|
+
"network": {
|
|
1190
|
+
"name": "Ethereum",
|
|
1191
|
+
"slug": "ethereum",
|
|
1192
|
+
"chainId": 1
|
|
1193
|
+
},
|
|
1194
|
+
"balanceUSD": 12117.4980912
|
|
1195
|
+
}
|
|
1196
|
+
},
|
|
1197
|
+
{
|
|
1198
|
+
"node": {
|
|
1199
|
+
"network": {
|
|
1200
|
+
"name": "Optimism",
|
|
1201
|
+
"slug": "optimism",
|
|
1202
|
+
"chainId": 10
|
|
1203
|
+
},
|
|
1204
|
+
"balanceUSD": 30.3182139
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
]
|
|
1208
|
+
}
|
|
1209
|
+
},
|
|
1210
|
+
"appBalances": {
|
|
1211
|
+
"totalBalanceUSD": 4410.540131308049,
|
|
1212
|
+
"byNetwork": {
|
|
1213
|
+
"edges": [
|
|
1214
|
+
{
|
|
1215
|
+
"node": {
|
|
1216
|
+
"network": {
|
|
1217
|
+
"name": "Base",
|
|
1218
|
+
"slug": "base",
|
|
1219
|
+
"chainId": 8453
|
|
1220
|
+
},
|
|
1221
|
+
"balanceUSD": 4393.335087708013
|
|
1222
|
+
}
|
|
1223
|
+
},
|
|
1224
|
+
{
|
|
1225
|
+
"node": {
|
|
1226
|
+
"network": {
|
|
1227
|
+
"name": "Ethereum",
|
|
1228
|
+
"slug": "ethereum",
|
|
1229
|
+
"chainId": 1
|
|
1230
|
+
},
|
|
1231
|
+
"balanceUSD": 16.714002810036998
|
|
1232
|
+
}
|
|
1233
|
+
},
|
|
1234
|
+
{
|
|
1235
|
+
"node": {
|
|
1236
|
+
"network": {
|
|
1237
|
+
"name": "Polygon",
|
|
1238
|
+
"slug": "polygon",
|
|
1239
|
+
"chainId": 137
|
|
1240
|
+
},
|
|
1241
|
+
"balanceUSD": 0.49104079000000006
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
]
|
|
1245
|
+
}
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
5. Claimables
|
|
1252
|
+
|
|
1253
|
+
In portfolioV2, claimable tokens are now part of app positions with a metaType of "CLAIMABLE". You can access them through the app balances with token filters.
|
|
1254
|
+
|
|
1255
|
+
Try it now
|
|
1256
|
+
Key Fields
|
|
1257
|
+
metaType: Used to identify "CLAIMABLE" tokens within positions
|
|
1258
|
+
tokens: Contains claimable tokens with their balance, value, and metadata
|
|
1259
|
+
balanceUSD: Value of each claimable token
|
|
1260
|
+
Example Variables
|
|
1261
|
+
{
|
|
1262
|
+
"addresses": ["0x849151d7d0bf1f34b70d5cad5149d28cc2308bf1"],
|
|
1263
|
+
"first": 5
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
Example Query
|
|
1267
|
+
query ClaimablesV2($addresses: [Address!]!) {
|
|
1268
|
+
portfolioV2(addresses: $addresses) {
|
|
1269
|
+
appBalances {
|
|
1270
|
+
# Get app balances and look for claimable tokens
|
|
1271
|
+
byApp(first: 10) {
|
|
1272
|
+
edges {
|
|
1273
|
+
node {
|
|
1274
|
+
app {
|
|
1275
|
+
displayName
|
|
1276
|
+
slug
|
|
1277
|
+
}
|
|
1278
|
+
network {
|
|
1279
|
+
name
|
|
1280
|
+
slug
|
|
1281
|
+
}
|
|
1282
|
+
balances(first: 10) {
|
|
1283
|
+
edges {
|
|
1284
|
+
node {
|
|
1285
|
+
... on ContractPositionBalance {
|
|
1286
|
+
address
|
|
1287
|
+
balanceUSD
|
|
1288
|
+
tokens {
|
|
1289
|
+
# Look for CLAIMABLE meta-type
|
|
1290
|
+
metaType
|
|
1291
|
+
token {
|
|
1292
|
+
... on BaseTokenPositionBalance {
|
|
1293
|
+
address
|
|
1294
|
+
network
|
|
1295
|
+
balance
|
|
1296
|
+
balanceUSD
|
|
1297
|
+
symbol
|
|
1298
|
+
price
|
|
1299
|
+
decimals
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
displayProps {
|
|
1304
|
+
label
|
|
1305
|
+
images
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
}
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
Example Response
|
|
1319
|
+
{
|
|
1320
|
+
"data": {
|
|
1321
|
+
"portfolioV2": {
|
|
1322
|
+
"appBalances": {
|
|
1323
|
+
"byApp": {
|
|
1324
|
+
"edges": [
|
|
1325
|
+
{
|
|
1326
|
+
"node": {
|
|
1327
|
+
"app": {
|
|
1328
|
+
"displayName": "Uniswap V3",
|
|
1329
|
+
"slug": "uniswap-v3"
|
|
1330
|
+
},
|
|
1331
|
+
"network": {
|
|
1332
|
+
"name": "Base",
|
|
1333
|
+
"slug": "base"
|
|
1334
|
+
},
|
|
1335
|
+
"balances": {
|
|
1336
|
+
"edges": [
|
|
1337
|
+
{
|
|
1338
|
+
"node": {
|
|
1339
|
+
"address": "0x03a520b32c04bf3beef7beb72e919cf822ed34f1",
|
|
1340
|
+
"balanceUSD": 290.2802431386432,
|
|
1341
|
+
"tokens": [
|
|
1342
|
+
{
|
|
1343
|
+
"metaType": "SUPPLIED",
|
|
1344
|
+
"token": {
|
|
1345
|
+
"address": "0x00000000000007c8612ba63df8ddefd9e6077c97",
|
|
1346
|
+
"network": "BASE_MAINNET",
|
|
1347
|
+
"balance": "29351.972884702704",
|
|
1348
|
+
"balanceUSD": 238.5238178121461,
|
|
1349
|
+
"symbol": "⌘",
|
|
1350
|
+
"price": 0.00812633,
|
|
1351
|
+
"decimals": 18
|
|
1352
|
+
}
|
|
1353
|
+
},
|
|
1354
|
+
{
|
|
1355
|
+
"metaType": "SUPPLIED",
|
|
1356
|
+
"token": {
|
|
1357
|
+
"address": "0x4200000000000000000000000000000000000006",
|
|
1358
|
+
"network": "BASE_MAINNET",
|
|
1359
|
+
"balance": "0",
|
|
1360
|
+
"balanceUSD": 0,
|
|
1361
|
+
"symbol": "WETH",
|
|
1362
|
+
"price": 1872.93,
|
|
1363
|
+
"decimals": 18
|
|
1364
|
+
}
|
|
1365
|
+
},
|
|
1366
|
+
{
|
|
1367
|
+
"metaType": "CLAIMABLE",
|
|
1368
|
+
"token": {
|
|
1369
|
+
"address": "0x00000000000007c8612ba63df8ddefd9e6077c97",
|
|
1370
|
+
"network": "BASE_MAINNET",
|
|
1371
|
+
"balance": "1069.849937435888",
|
|
1372
|
+
"balanceUSD": 8.693953642083379,
|
|
1373
|
+
"symbol": "⌘",
|
|
1374
|
+
"price": 0.00812633,
|
|
1375
|
+
"decimals": 18
|
|
1376
|
+
}
|
|
1377
|
+
},
|
|
1378
|
+
{
|
|
1379
|
+
"metaType": "CLAIMABLE",
|
|
1380
|
+
"token": {
|
|
1381
|
+
"address": "0x4200000000000000000000000000000000000006",
|
|
1382
|
+
"network": "BASE_MAINNET",
|
|
1383
|
+
"balance": "0.022992034771408265",
|
|
1384
|
+
"balanceUSD": 43.06247168441369,
|
|
1385
|
+
"symbol": "WETH",
|
|
1386
|
+
"price": 1872.93,
|
|
1387
|
+
"decimals": 18
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
],
|
|
1391
|
+
"displayProps": {
|
|
1392
|
+
"label": "⌘ / WETH (Token ID: 1568607)",
|
|
1393
|
+
"images": [
|
|
1394
|
+
"https://storage.googleapis.com/zapper-fi-assets/tokens/base/0x00000000000007c8612ba63df8ddefd9e6077c97.png",
|
|
1395
|
+
"https://storage.googleapis.com/zapper-fi-assets/tokens/base/0x4200000000000000000000000000000000000006.png",
|
|
1396
|
+
"https://storage.googleapis.com/zapper-fi-assets/tokens/base/0x00000000000007c8612ba63df8ddefd9e6077c97.png",
|
|
1397
|
+
"https://storage.googleapis.com/zapper-fi-assets/tokens/base/0x4200000000000000000000000000000000000006.png"
|
|
1398
|
+
]
|
|
1399
|
+
}
|
|
1400
|
+
}
|
|
1401
|
+
}
|
|
1402
|
+
]
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1405
|
+
},
|
|
1406
|
+
]
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
}
|
|
1412
|
+
|
|
1413
|
+
Use the byApp query to see claimable tokens in the context of their specific apps, filtering for tokens with metaType: "CLAIMABLE"
|
|
1414
|
+
|
|
1415
|
+
For applications building on top of this data, you'll typically want to:
|
|
1416
|
+
|
|
1417
|
+
Extract all tokens with metaType: "CLAIMABLE" from the app balances
|
|
1418
|
+
Present the user with a view of what they can claim, grouped by app or by token
|
|
1419
|
+
6. App Balances By Type
|
|
1420
|
+
|
|
1421
|
+
Get total balances by metaType (e.g, CLAIMABLE, SUPPLIED, BORROWED, etc.)
|
|
1422
|
+
|
|
1423
|
+
Try it now
|
|
1424
|
+
Balance Types
|
|
1425
|
+
metaType: Used to identify the type of position
|
|
1426
|
+
positionCount: The number of positions with a given type
|
|
1427
|
+
balanceUSD: The total value in USD of positions with a given type
|
|
1428
|
+
enum metaType {
|
|
1429
|
+
SUPPLIED # Assets supplied to lending protocols
|
|
1430
|
+
BORROWED # Assets borrowed from lending protocols
|
|
1431
|
+
CLAIMABLE # Assets available to claim (rewards, airdrops, etc.)
|
|
1432
|
+
VESTING # Assets locked in vesting schedule
|
|
1433
|
+
LOCKED # Assets locked or staked in protocols
|
|
1434
|
+
NFT # Non-fungible token positions
|
|
1435
|
+
WALLET # Deposits in a wallet application
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
Example Variables
|
|
1439
|
+
{
|
|
1440
|
+
"addresses": ["0x849151d7d0bf1f34b70d5cad5149d28cc2308bf1"],
|
|
1441
|
+
"first": 10
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1444
|
+
Example Query
|
|
1445
|
+
query BreakdownByType($addresses: [Address!]!, $first: Int) {
|
|
1446
|
+
portfolioV2(addresses: $addresses) {
|
|
1447
|
+
appBalances {
|
|
1448
|
+
# Get app total balances by MetaType
|
|
1449
|
+
byMetaType(first: $first) {
|
|
1450
|
+
totalCount
|
|
1451
|
+
edges {
|
|
1452
|
+
node {
|
|
1453
|
+
metaType
|
|
1454
|
+
positionCount
|
|
1455
|
+
balanceUSD
|
|
1456
|
+
}
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1461
|
+
}
|
|
1462
|
+
|
|
1463
|
+
Example Response
|
|
1464
|
+
{
|
|
1465
|
+
"data": {
|
|
1466
|
+
"portfolioV2": {
|
|
1467
|
+
"appBalances": {
|
|
1468
|
+
"byMetaType": {
|
|
1469
|
+
"totalCount": 4,
|
|
1470
|
+
"edges": [
|
|
1471
|
+
{
|
|
1472
|
+
"node": {
|
|
1473
|
+
"metaType": "SUPPLIED",
|
|
1474
|
+
"positionCount": 9,
|
|
1475
|
+
"balanceUSD": 2440.56541427308
|
|
1476
|
+
}
|
|
1477
|
+
},
|
|
1478
|
+
{
|
|
1479
|
+
"node": {
|
|
1480
|
+
"metaType": "LOCKED",
|
|
1481
|
+
"positionCount": 1,
|
|
1482
|
+
"balanceUSD": 1217.68061929713
|
|
1483
|
+
}
|
|
1484
|
+
},
|
|
1485
|
+
{
|
|
1486
|
+
"node": {
|
|
1487
|
+
"metaType": "CLAIMABLE",
|
|
1488
|
+
"positionCount": 3,
|
|
1489
|
+
"balanceUSD": 755.86366790903
|
|
1490
|
+
}
|
|
1491
|
+
},
|
|
1492
|
+
{
|
|
1493
|
+
"node": {
|
|
1494
|
+
"metaType": "BORROWED",
|
|
1495
|
+
"positionCount": 1,
|
|
1496
|
+
"balanceUSD": -5.371015208905
|
|
1497
|
+
}
|
|
1498
|
+
}
|
|
1499
|
+
]
|
|
1500
|
+
}
|
|
1501
|
+
}
|
|
1502
|
+
}
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1505
|
+
|
|
1506
|
+
Best Practices
|
|
1507
|
+
Always specify required fields to minimize response size
|
|
1508
|
+
Use network filters when you only need specific chains
|
|
1509
|
+
Consider caching responses based on the updatedAt timestamp
|
|
1510
|
+
Handle NFT valuations appropriately based on your use case
|
|
1511
|
+
|
|
1512
|
+
Remember that the portfolio query is highly flexible - you can request as much or as little data as needed for your specific use case.
|
|
1513
|
+
|
|
1514
|
+
Copy page for LLMs
|