Legacy API Schema
This is documentation for the legacy Zapper REST API. This API is being sunset - these docs are addressed to existing clients.
See below for details on each of Zapper's API endpoints. Swagger docs to test these endpoints can be found here.
Wallet-specific App and ERC20 Token Balances endpoints
v2/balances/apps
You input wallet addresses and get all the following:
- Detailed breakdown of all app investment positions represented as app tokens owned by the wallet, such as Aave lending positions or Uniswap pools, valued in USD
- Detailed breakdown of all app investment positions represented as contract positions that are not held on the wallet, such ve-locked or farming positions, valued in USD
On Zapper's frontend, all tokens that show up in the Wallet section of a portfoilo are returned in the v2/balances/tokens
endpoint. All values showing up in the Apps section of a portfolio are returned in the v2/balances/apps
endpoint.
For a list of all supported apps, see this link.
By doing a GET command on this endpoint, you will be returned the cached values Zapper has in its database for the wallets provided. Many wallets already had their balances recently computed by Zapper, and so are sitting in the cache. However, if there is no cached value, the GET response will not contain anything. Cached values for apps are never purged, so could be months or years old. Keep this in mind!
If there is no cached value, or you want Zapper to re-compute the balance so it as fresh as possible, you will need to do a POST command to this endpoint. Once the POST command is received, Zapper will return you a jobId
value and Zapper will then re-compute the wallet's app balances. You can monitor the status of the re-computation job via v2/balances/job-status
by passing in the jobId
value. Alternatively, you can just wait 10 seconds for the job to finish if you do not want to poll for the job status.
Once the re-calculation job is completed, you can retrieve the newly computed app balances by calling GET v2/balances/apps
.
Points Cost For v2/balances/apps
Related Queries:
- 0.25 points per GET
v2/balances/apps
call per wallet included in the call, as this is simply retrieving the value in Zapper's database - 4 points per POST
v2/balances/apps
call per wallet included in the call. This call triggers Zapper recomputing the wallet's balances, generating a large volume of downstream API calls. AjobId
will be included in the response - 0 points per call GET
v2/balances/job-status
, used to monitor the status of thejobId
. These calls are free, allowing you to poll the status of the computation job
Tips On Using This Endpoint Cost-Effectively:
- If you are querying a wallet for the first time, and it is a potentially popular wallet, there is a chance that a cached value already exists, and you can retry it for only 0.25 points cost. Upon getting the results, you can check how stale the balances are based on the value returned of
updatedAt
- If you are certain you will want the most up-to-date balances for the wallet, you should call the POST
v2/balances/apps
endpoint first, wait for the job to run after 10s, and then call GETv2/balances/apps
- If you are surfacing balances to users in real-time using this call, you can emulate what Zapper's frontend does by first calling GET
v2/balances/apps
to get any cached balances, use these to create a skeleton to display to the user, and then call POSTv2/balances/apps
to then refresh any stale values
Other things to know about this endpoint
- Maximum of 30 RPM (requests per minute)
- Maximum of 15 wallets can be passed into 1 call as parameters. Any more beyond 15 wallets, and the query will fail. And, though we support multiple wallets bundled into 1 call, it's recommended you query wallets one at a time for best performance
- Any balance less than $0.01 USD value is not included in the output
- TTL on the data in this endpoint, once computed via a POST request, is infinite. The cached value does not expire. It will only be recomputed when a user requests the accounts balance on Zapper's frontend OR when an API user requests a recomputation
Path
https://api.zapper.xyz/v2/balances/apps
Parameters
addresses[]
: Required | Addresses for which to retrieve balances, inputted as an array. Can handle up to 15 addresses- Note: to pass multiple addresses in, the right syntax is
https://api.zapper.xyz/v2/balances/apps?addresses%5B%5D=address_1&addresses%5B%5D=address_2
- Note: to pass multiple addresses in, the right syntax is
networks[]
: networks for which to retrieve balances, inputted an array. Available values : ethereum, polygon, optimism, gnosis, binance-smart-chain, fantom, avalanche, arbitrum, celo, moonriver, bitcoin, aurora
Response
key
: a unique identifier on the token object that is used to aggregate token balances across multiple addresses. More details found hereaddresses
: address the position queried is forappId
: ID of the appAppName
: Display name of appAppImage
: Icon of the appnetwork
: network the app is onupdatedAt
: timestamp at which time this wallet's balance for this app was calculatedbalanceUSD
: value of all positions associated with this app on this network for this wallet, in USDproducts
: object containing details on all products owned by this walletlabel
: human-readable label of asset group, such as "pools" or "farms"assets
: object containing all metadata about this group of assets and the positions within the grouptokens
: object containing details about the underlying tokens that comprise this investment positions, such as symbol, wallet, network, balance. A pool token of USDC / DAI would have its underlying tokens reported as USDC and DAIsymbol
: symbol for investment positiondecimals
: decimals for position; usually 18 for ERC-20 tokenssupply
: total amount of supply of this positionpricePerShare
: the ratio between the token price and the prices of the underlying tokens. This property is useful for using the balance of the token to determine the exposure to the underlying tokens. More details and examples found here.price
: The price of one unit of this token. In the case of aDAI, the tokens are minted 1:1, so the price is the same as the underlying DAI token.dataProps
: object containing data used for augmenting the token object with additional data properties. These properties can be used in other places in the application. This would include APY, liquidity in the positions, etc. More details found heredisplayProps
: object is used by Zapper Web and Zapper Mobile to render meaningful information to Zapper users about this token. This generally would include labels and decorators. More details can be found herebalance
: balance of investment positioned owned by this wallet. Normalized for decimalsbalanceRaw
: raw balance of investment in this postiion owned by this wallet. This has not been normalized with decimals yet; to get balanceRaw, you'd multiply this value by 10 ^ (decimals) valuebalanceUSD
: value ofbalance
position, converted to USD
meta
: Information about balances that is not specifically balances. This value is developer defined, but examples are health factors and collateralization ratios (c-ratios)
cURL for POST
cURL -X 'POST' \
'https://api.zapper.xyz/v2/balances/apps?addresses%5B%5D=0xe321bD63CDE8Ea046b382f82964575f2A5586474' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
cURL for GET
cURL -X 'GET' \
'https://api.zapper.xyz/v2/balances/apps?addresses%5B%5D=0xe321bD63CDE8Ea046b382f82964575f2A5586474' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response for POST
{
"jobId": "f7a84c5d-8605-4ad5-8c5e-ae65e07cfafd"
}
Response for GET
[
{
"key": "597563987",
"address": "0xe321bd63cde8ea046b382f82964575f2a5586474",
"appId": "sushiswap",
"appName": "SushiSwap",
"appImage": "https://storage.googleapis.com/zapper-fi-assets/apps/sushiswap.png",
"network": "ethereum",
"updatedAt": "2023-01-26T22:51:36.215Z",
"balanceUSD": 84.1847791577147,
"products": [
{
"label": "Pools",
"assets": [
{
"key": "2041256716",
"type": "app-token",
"appId": "sushiswap",
"groupId": "pool",
"network": "ethereum",
"address": "0xceff51756c56ceffca006cd410b03ffc46dd3a58",
"tokens": [
{
"type": "base-token",
"network": "ethereum",
"address": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
"symbol": "WBTC",
"decimals": 8,
"price": 23042,
"balance": 0.00035964,
"balanceRaw": "35964",
"balanceUSD": 8.28682488
},
{
"type": "base-token",
"network": "ethereum",
"address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"symbol": "WETH",
"decimals": 18,
"price": 1604.44,
"balance": 0.005167346483200388,
"balanceRaw": "5167346483200388",
"balanceUSD": 8.290697391506031
}
],
"symbol": "SLP",
"decimals": 18,
"supply": 0.000624160526773982,
"pricePerShare": [
661196.580794739,
9500203.420152755
],
"price": 30477797990.102264,
"dataProps": {
"liquidity": 19023038.448413238,
"reserves": [
412.69280617,
5929.651971182529
],
"apy": 0.9984024219112746,
"fee": 0.3,
"volume": 173448.83706855774
},
"displayProps": {
"label": "WBTC / WETH",
"secondaryLabel": "50% / 50%",
"tertiaryLabel": "0.998% APY",
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0x2260fac5e5542a773aa44fbcfedf7c193bc2c599.png",
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.png"
],
"statsItems": [
{
"label": "Fee",
"value": {
"type": "pct",
"value": 0.3
}
},
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 19023038.448413238
}
},
{
"label": "Reserves",
"value": "412.69 / 5929.65"
},
{
"label": "Ratio",
"value": "50% / 50%"
},
{
"label": "Volume",
"value": {
"type": "dollar",
"value": 173448.83706855774
}
},
{
"label": "APY",
"value": {
"type": "pct",
"value": 0.9984024219112746
}
},
{
"label": "Share",
"value": {
"type": "pct",
"value": 0.00008714417824710687
}
}
]
},
"balance": 5.43919562e-10,
"balanceRaw": "543919562",
"balanceUSD": 16.577470533500904
},
{
"key": "1102926257",
"type": "app-token",
"appId": "sushiswap",
"groupId": "pool",
"network": "ethereum",
"address": "0x5ba61c0a8c4dcccc200cd0ccc40a5725a426d002",
"tokens": [
{
"type": "base-token",
"network": "ethereum",
"address": "0x41d5d79431a913c4ae7d69a668ecdfe5ff9dfb68",
"symbol": "INV",
"decimals": 18,
"price": 73.5,
"balance": 0.34627294833442135,
"balanceRaw": "346272948334421344",
"balanceUSD": 25.45106170257997
},
{
"type": "base-token",
"network": "ethereum",
"address": "0x865377367054516e17014ccded1e7d814edc9ce4",
"symbol": "DOLA",
"decimals": 18,
"price": 1.002,
"balance": 24.826974193289097,
"balanceRaw": "24826974193289097207",
"balanceUSD": 24.876628141675674
}
],
"symbol": "SLP",
"decimals": 18,
"supply": 2430.5465150535374,
"pricePerShare": [
0.13345830915638018,
9.568653899309185
],
"price": 19.396976930101747,
"dataProps": {
"liquidity": 47145.25468003267,
"reserves": [
324.3766282249775,
23257.058388719382
],
"apy": 0,
"fee": 0.3,
"volume": 0
},
"displayProps": {
"label": "INV / DOLA",
"secondaryLabel": "51% / 49%",
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0x41d5d79431a913c4ae7d69a668ecdfe5ff9dfb68.png",
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0x865377367054516e17014ccded1e7d814edc9ce4.png"
],
"statsItems": [
{
"label": "Fee",
"value": {
"type": "pct",
"value": 0.3
}
},
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 47145.25468003267
}
},
{
"label": "Reserves",
"value": "324.38 / 23257.06"
},
{
"label": "Ratio",
"value": "51% / 49%"
},
{
"label": "Volume",
"value": {
"type": "dollar",
"value": 0
}
},
{
"label": "APY",
"value": {
"type": "pct",
"value": 0
}
},
{
"label": "Share",
"value": {
"type": "pct",
"value": 0.10675027674751501
}
}
]
},
"balance": 2.594615131296733,
"balanceRaw": "2594615131296732998",
"balanceUSD": 50.32768984425565
},
{
"key": "2487522344",
"type": "app-token",
"appId": "sushiswap",
"groupId": "pool",
"network": "ethereum",
"address": "0x96f5b7c2be10dc7de02fa8858a8f1bd19c2fa72a",
"tokens": [
{
"type": "base-token",
"network": "ethereum",
"address": "0x0f51bb10119727a7e5ea3538074fb341f56b09ad",
"symbol": "DAO",
"decimals": 18,
"price": 0.914175,
"balance": 7.949186191616225,
"balanceRaw": "7949186191616224922",
"balanceUSD": 7.266947286720763
},
{
"type": "base-token",
"network": "ethereum",
"address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"symbol": "WETH",
"decimals": 18,
"price": 1604.44,
"balance": 0.004506479893091937,
"balanceRaw": "4506479893091937",
"balanceUSD": 7.230376599672428
}
],
"symbol": "SLP",
"decimals": 18,
"supply": 391.4512789823146,
"pricePerShare": [
54.40594087149234,
0.03084331813245392
],
"price": 99.22280434063089,
"dataProps": {
"liquidity": 38840.89366335192,
"reserves": [
21297.27513838186,
12.073656331007502
],
"apy": 6.190128263439032,
"fee": 0.3,
"volume": 2195.7088003903627
},
"displayProps": {
"label": "DAO / WETH",
"secondaryLabel": "50% / 50%",
"tertiaryLabel": "6.190% APY",
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0x0f51bb10119727a7e5ea3538074fb341f56b09ad.png",
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.png"
],
"statsItems": [
{
"label": "Fee",
"value": {
"type": "pct",
"value": 0.3
}
},
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 38840.89366335192
}
},
{
"label": "Reserves",
"value": "21297.28 / 12.07"
},
{
"label": "Ratio",
"value": "50% / 50%"
},
{
"label": "Volume",
"value": {
"type": "dollar",
"value": 2195.7088003903627
}
},
{
"label": "APY",
"value": {
"type": "pct",
"value": 6.190128263439032
}
},
{
"label": "Share",
"value": {
"type": "pct",
"value": 0.03732489785648792
}
}
]
},
"balance": 0.14610879003806448,
"balanceRaw": "146108790038064476",
"balanceUSD": 14.497323886393191
},
{
"key": "572360583",
"type": "app-token",
"appId": "sushiswap",
"groupId": "pool",
"network": "ethereum",
"address": "0x5399a36f54ca91a5db5c148eeb2b909bba81b82c",
"tokens": [
{
"type": "base-token",
"network": "ethereum",
"address": "0x630d98424efe0ea27fb1b3ab7741907dffeaad78",
"symbol": "PEAK",
"decimals": 8,
"price": 0.00333081,
"balance": 420.53795766,
"balanceRaw": "42053795766",
"balanceUSD": 1.4007320347535046
},
{
"type": "base-token",
"network": "ethereum",
"address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"symbol": "WETH",
"decimals": 18,
"price": 1604.44,
"balance": 0.000861087269578818,
"balanceRaw": "861087269578818",
"balanceUSD": 1.3815628588030389
}
],
"symbol": "SLP",
"decimals": 18,
"supply": 0.03435689610847085,
"pricePerShare": [
77481769.44202168,
158.6505191155818
],
"price": 512622.29136498435,
"dataProps": {
"liquidity": 17612.11080731304,
"reserves": [
2662033.10302003,
5.450739402809012
],
"apy": 1.202818269501406,
"fee": 0.3,
"volume": 193.46272733807564
},
"displayProps": {
"label": "PEAK / WETH",
"secondaryLabel": "50% / 50%",
"tertiaryLabel": "1.203% APY",
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0x630d98424efe0ea27fb1b3ab7741907dffeaad78.png",
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.png"
],
"statsItems": [
{
"label": "Fee",
"value": {
"type": "pct",
"value": 0.3
}
},
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 17612.11080731304
}
},
{
"label": "Reserves",
"value": "2662033.10 / 5.45"
},
{
"label": "Ratio",
"value": "50% / 50%"
},
{
"label": "Volume",
"value": {
"type": "dollar",
"value": 193.46272733807564
}
},
{
"label": "APY",
"value": {
"type": "pct",
"value": 1.202818269501406
}
},
{
"label": "Share",
"value": {
"type": "pct",
"value": 0.01579762314696352
}
}
]
},
"balance": 0.00000542757297221,
"balanceRaw": "5427572972210",
"balanceUSD": 2.7822948935649485
}
],
"meta": []
}
]
},
...
v2/balances/tokens
You input wallet addresses and get all "base tokens" in the wallet. "Base tokens" are ERC20 tokens that are not invested by the user in an app, but instead sit in the wallet natively. Base tokens are often liquid and tradable, whereas app tokens are those invested in apps are illiquid and cannot be natively traded, like a Uniswap pool token.
On Zapper's frontend, all tokens that show up in the Wallet section of a portfoilo are returned in the v2/balances/tokens
endpoint. All values showing up in the Apps section of a portfolio are returned in the v2/balances/apps
endpoint.
Zapper supports over 15,000 base tokens (and counting).
By doing a GET command on this endpoint, you will be returned the cached token balances Zapper has in its database for the wallets provided. Many wallets already had their token balances recently computed by Zapper, and so are sitting in the cache. However, if there is no cached value, the GET response will not contain anything. Cached values are purged after 30 days, as Zapper then considers those balances stale.
If there is no cached value, or you want Zapper to re-compute the token balance so it as fresh as possible, you will need to do a POST command to this endpoint. Once the POST command is received, Zapper will return you a jobId
value and Zapper will then re-compute the wallet's app balances. You can monitor the status of the re-computation job via v2/balances/job-status
by passing in the jobId
value. Alternatively, you can just wait 10 seconds for the job to finish if you do not want to poll for the job status.
Once the re-calculation job is completed, you can retrieve the newly computed app balances by calling GET v2/balances/tokens
.
Points Cost For v2/balances/tokens
Related Queries:
- 0.25 points per GET
v2/balances/tokens
call per wallet included in the call, as this is simply retrieving the value in Zapper's database - 1 points per POST
v2/balances/tokens
call per wallet included in the call. This call triggers Zapper recomputing the wallet's balances, generating a large volume of downstream API calls. AjobId
will be included in the response - 0 points per call GET
v2/balances/job-status?jobId=:jobId
, used to monitor the status of thejobId
. These calls are free, allowing you to poll the status of the computation job
Tips On Using This Endpoint Cost-Effectively:
- If you are querying a wallet for the first time, and it is a potentially popular wallet, there is a chance that a cached value already exists, and you can retrie it for only 0.25 points cost. Upon getting the results, you can check how stale the balances are based on the value retuend of
updatedAt
- If you are certain you will want the most up-to-date balances for the wallet, you should call the POST
v2/balances/apps
endpoint first, wait for the job to run after 10s, and then call GETv2/balances/apps
- If you are surfacing balances to users in real-time using this call, you can emulate what Zapper's frontend does by first calling GET
v2/balances/apps
to get any cached balances, use these to create a skeleton to display to the user, and then call POSTv2/balances/apps
to then refresh any stale values
Other things to know about this endpoint:
- Maximum of 30 RPM (requests per minute)
- Maximum of 15 wallets can be passed into 1 call as parameters. Any more beyond 15 wallets, and the query will fail. And, though we support multiple wallets bundled into 1 call, it's recommended you query wallets one at a time for best performance
- Any balance less than $0.01 USD value is not included in the output
Path
https://api.zapper.xyz/v2/balances/tokens
Parameters
addresses[]
: Required | addresses for which to retrieve balances, inputted as an array. Can handle up to 15 addresses- Note: to pass multiple addresses in, the right syntax is
https://api.zapper.xyz/v2/balances/tokens?addresses%5B%5D=address_1&addresses%5B%5D=address_2
- Note: to pass multiple addresses in, the right syntax is
networks[]
: networks for which to retrieve balances, inputted an array. Available values : ethereum, polygon, optimism, gnosis, binance-smart-chain, fantom, avalanche, arbitrum, celo, moonriver, bitcoin, aurora
Response
key
: a unique identifier on the token object that is used to aggregate token balances across multiple addresses. More details found hereaddress
: address the position queried is fornetwork
: network the app is onupdatedAt
: time at which this token balance was calculated. This value should be used to determine if this cached balance is considered too "stale" for your purposes, and thus should be re-calculated via aPOST
command on this endpointtoken
: object containing details about the token, such as metadata, price and balanceid
: internal token idnetworkId
: internal network idaddress
: token's address on the networkname
: label for tokensymbol
: symbol for tokendecimals
: decimals for tokencoingeckoId
: coingecko API id for tokenstatus
: internal designation if token has been initially reviewed when ingestedhide
: internal designation if token is approved for displayingcanExchange
: flag if this token is exchangeable on Zapper's front endverified
: if token is on a verified token list or manually verified, and has a blue-checkmark on Zapper's frontend when swapping or bridgingexternallyVerified
: flag indicating if the token is verified because it was on an external tokenlistpriceUpdatedAt
: last time the price for this token was updated from CoinGeckoupdatedAt
: last date token was updated from CoinGeckocreatedAt
: date token was first ingested into Zapperprice
: current price of token in USDdailyVolume
: trading volume of token from coingeckototalSupply
: total supply of token availableholdersEnabled
: internal designation as to whether Zapper index's the holders of this tokenmarketCap
: estimated value of all the tradeable tokensbalance
: balance of investment positioned owned by this wallet. Normalized for decimalsbalanceRaw
: raw balance of investment in this postiion owned by this wallet. This has not been normalized with decimals yet; to get balanceRaw, you'd multiply this value by 10 ^ (decimals) valuebalanceUSD
: value ofbalance
position, converted to USD
cURL for POST
cURL -X 'POST' \
'https://api.zapper.xyz/v2/balances/tokens?addresses%5B%5D=0xe321bD63CDE8Ea046b382f82964575f2A5586474' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
cURL for GET
cURL -X 'GET' \
'https://api.zapper.xyz/v2/balances/tokens?addresses%5B%5D=0xe321bD63CDE8Ea046b382f82964575f2A5586474' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response for POST
{
"jobId": "f7a84c5d-8605-4ad5-8c5e-ae65e07cfafd"
}
Response for GET
{
"0xe321bd63cde8ea046b382f82964575f2a5586474": [
{
"key": "766222898",
"address": "0xe321bd63cde8ea046b382f82964575f2a5586474",
"network": "ethereum",
"token": {
"id": "1697",
"networkId": 1,
"address": "0xc944e90c64b2c07662a292be6244bdf05cda44a7",
"name": "Graph Token",
"symbol": "GRT",
"decimals": 18,
"coingeckoId": "the-graph",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": false,
"externallyVerified": true,
"priceUpdatedAt": "2023-01-27T01:07:33.608Z",
"updatedAt": "2023-01-27T01:07:33.608Z",
"createdAt": "2022-05-18T12:54:47.695Z",
"price": 0.091389,
"dailyVolume": 62326378.164690085,
"totalSupply": "10570595387.699024621145719417",
"holdersEnabled": true,
"marketCap": 806898760.8415607,
"balance": 188.92803409735453,
"balanceUSD": 17.265944108123133,
"balanceRaw": "188928034097354517811"
}
},
...
v2/balances/job-status
Use this endpoint to poll for the status of a job that is calculating app-related balances or base token balances, via v2/balances/apps
and v2/balances/tokens
respectively.
When you call POST v2/balances/apps
or v2/balances/tokens
, a re-calculation of the balances in that wallet is triggered, and the response to those calls will be a value jobId
. You can then monitor the status of the re-computation job by passing jobId
as a parameter into this endpoint, v2/balances/job-status
.
You are not required to poll for the status of the job via v2/balances/job-status
; it is just a nice-to-have. Most POST v2/balances/apps
finish computing wihtin 10 seconds and POST v2/balances/tokens
finish within 2 seconds, so you could just insert a delay between your POST and GET commands of that time interval.
Other things to know about this endpoint
- There is no points cost associated with this endpoint, so you may poll as much and as often as you wish, up to a global maximum of 1000 requests per minute
Path
https://api.zapper.xyz/v2/balances/job-status
Parameters
jobId
: (required) | thejobId
associated with the computation job. ThejobId
is provided as the response of the POSTv2/balances/apps
call or POSTv2/balances/tokens
call
Response
jobId
: thejobId
that was passed into the callstatus
: current status of the computation jobactive
= Zapper is currently computing the balance. The results are not readycompleted
= This computation job is complete. You can now call GETv2/balances/*
to get the resultunknown
=jobId
that was passed is not in Zapper's system. Could be stale
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/balances/job-status?jobId=f7a84c5d-8605-4ad5-8c5e-ae65e07cfafd' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
"jobId": "f7a84c5d-8605-4ad5-8c5e-ae65e07cfafd",
"status": "active"
}
v2/apps/{appSlug}/balances
You input wallet addresses and get all the following:
- Detailed breakdown of all app investment positions represented as app tokens owned by the wallet, such as Aave lending positions or Uniswap pools, valued in USD
- Detailed breakdown of all app investment positions represented as contract positions that are not held on the wallet, such ve-locked or farming positions, valued in USD
If you query for appSlug
= tokens
, you will get all tokens held in the wallet
that are not associated with an App.
Notes on use of the API and limits
- Maximum of 15 wallets can be passed into 1 call, though it's recommended you query wallets one at a time for best performance
- Any balance less than $0.01 USD value is not included in the output
Path
https://api.zapper.xyz/v2/apps/{appSlug}/balances
Parameters
appSlug
: (required) | appSlug of the desired app. This is interchangeable withappId
, a value used in other queriesaddresses[]
: (required) | addresses for which to retrieve balances, inputted as an array. Can handle up to 15 addressesnetworks[]
: Networks for which to retrieve balances, inputted an array
Returns
appId
: ID of the app. Same asappSlug
network
: network the app is ongroupId
: group this particular investment belongs to within in the app, such aspool
orfarms
balance
: details on the balance structure, and what kind of balance it istype
: type of position the investment is.contract-position
is if the investment is held on a 3rd party contract.app-token
is if the wallet holds tokens in the wallet representing the investmentaddress
: address of tokensymbol
: symbol of tokendecimals
: decimals of tokensupply
: supply of tokenpricePerShare
: ratio of price to supply of assetstokens
: details on underlying tokens in the investment, such as their address, price, symbol, daily volume, balance, etcdisplayProps
: details on how to display the asset on Zapper's frontendstatsItems
: ancillary stats associated with the investment, such as APY, APR, liquidity, volume, fee, ratio of underlying assets, etcmeta
: total value of all positions in the app (example below has 3 different uniswap v2 positions)
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/apps/uniswap-v2/balances?addresses%5B%5D=0xd8da6bf26964af9d7eed9e03e53415d37aa96045' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
"balances": {
"0xd8da6bf26964af9d7eed9e03e53415d37aa96045": {
"products": [
{
"label": "Pools",
"assets": [
{
"type": "app-token",
"address": "0x3d1cb7638d73657f7e554eda1d97703bc29d3c15",
"symbol": "UNI-V2",
"decimals": 18,
"supply": 0.000415355547741061,
"network": "ethereum",
"appSlug": "uniswap-v2",
"groupId": "pool",
"pricePerShare": [
5470934.419387214,
1888.4681561297648
],
"price": 4856007.016672078,
"tokens": [
{
"type": "base-token",
"address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
"network": "ethereum",
"symbol": "TKS",
"decimals": 8,
"price": 0.44380051417395594,
"balance": 399.23888346,
"balanceRaw": "39923888346",
"balanceUSD": 177.18242175778408
},
{
"id": "3067",
"networkId": 1,
"address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"name": "Wrapped Ether",
"symbol": "WETH",
"decimals": 18,
"coingeckoId": "weth",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": true,
"updatedAt": "2022-10-20T22:07:31.682Z",
"createdAt": "2022-05-18T12:54:47.695Z",
"price": 1285.7,
"dailyVolume": 271291690.7628123,
"totalSupply": "4124756.609295726227361804",
"networkEnumValue": "ethereum",
"type": "base-token",
"network": "ethereum",
"balance": 0.1378100814798281,
"balanceRaw": "137810081479828091",
"balanceUSD": 177.182421758615
}
],
"dataProps": {
"liquidity": 2016.9694542442662,
"fee": 0.003,
"volume": 0,
"volumeChangePercentage": 0,
"isBlocked": false
},
"displayProps": {
"label": "TKS / WETH",
"secondaryLabel": "50% / 50%",
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0xd8da6bf26964af9d7eed9e03e53415d37aa96045.png",
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.png"
],
"statsItems": [
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 2016.9694542442662
}
},
{
"label": "Volume",
"value": {
"type": "dollar",
"value": 0
}
},
{
"label": "Fee",
"value": {
"type": "pct",
"value": 0.003
}
},
{
"label": "Ratio",
"value": "50% / 50%"
},
{
"label": "Share",
"value": {
"type": "pct",
"value": 17.569172541088687
}
}
]
},
"balance": 0.000072974532841611,
"balanceRaw": "72974532841611",
"balanceUSD": 354.36484351723
},
{
"type": "app-token",
"address": "0x87ffcda0c507117683f0bc0defb683eebe9c223b",
"symbol": "UNI-V2",
"decimals": 18,
"supply": 110,
"network": "ethereum",
"appSlug": "uniswap-v2",
"groupId": "pool",
"pricePerShare": [
1.6242098737743684,
0.6210360351628103
],
"price": 1.2420720703256205,
"tokens": [
{
"type": "base-token",
"address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
"network": "ethereum",
"symbol": "LTI",
"decimals": 18,
"price": 0.3823619380663137,
"balance": 16.242098737743685,
"balanceRaw": "16242098737743684000",
"balanceUSD": 6.210360351628102
},
{
"id": "1250",
"networkId": 1,
"address": "0x6b175474e89094c44da98b954eedeac495271d0f",
"name": "Dai Stablecoin",
"symbol": "DAI",
"decimals": 18,
"coingeckoId": "dai",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": true,
"updatedAt": "2022-10-20T22:07:31.682Z",
"createdAt": "2022-05-18T12:54:47.695Z",
"price": 1,
"dailyVolume": 197395236.34528837,
"totalSupply": "5795048615.254160821608322693",
"networkEnumValue": "ethereum",
"type": "base-token",
"network": "ethereum",
"balance": 6.210360351628102,
"balanceRaw": "6210360351628103000",
"balanceUSD": 6.210360351628102
}
],
"dataProps": {
"liquidity": 136.62792773581825,
"fee": 0.003,
"volume": 0,
"volumeChangePercentage": 0,
"isBlocked": false
},
"displayProps": {
"label": "LTI / DAI",
"secondaryLabel": "50% / 50%",
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0xd8da6bf26964af9d7eed9e03e53415d37aa96045.png",
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0x6b175474e89094c44da98b954eedeac495271d0f.png"
],
"statsItems": [
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 136.62792773581825
}
},
{
"label": "Volume",
"value": {
"type": "dollar",
"value": 0
}
},
{
"label": "Fee",
"value": {
"type": "pct",
"value": 0.003
}
},
{
"label": "Ratio",
"value": "50% / 50%"
},
{
"label": "Share",
"value": {
"type": "pct",
"value": 9.090909090909092
}
}
]
},
"balance": 10,
"balanceRaw": "10000000000000000000",
"balanceUSD": 12.420720703256205
},
{
"type": "app-token",
"address": "0xa7f8de1f0e6964201d412fd172e5740663b35567",
"symbol": "UNI-V2",
"decimals": 18,
"supply": 546200,
"network": "ethereum",
"appId": "uniswap-v2",
"groupId": "pool",
"pricePerShare": [
1711821.642103836,
5.899402170822708e-7
],
"price": 0.0015169722742053512,
"tokens": [
{
"type": "base-token",
"address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
"network": "ethereum",
"symbol": "FLOKIS",
"decimals": 18,
"price": 4.43087129200267e-10,
"balance": 507041570391.1562,
"balanceRaw": "507041570391156223200000000000",
"balanceUSD": 224.6635938098125
},
{
"id": "3067",
"networkId": 1,
"address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"name": "Wrapped Ether",
"symbol": "WETH",
"decimals": 18,
"coingeckoId": "weth",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": true,
"updatedAt": "2022-10-20T22:07:31.682Z",
"createdAt": "2022-05-18T12:54:47.695Z",
"price": 1285.7,
"dailyVolume": 271291690.7628123,
"totalSupply": "4124756.609295726227361804",
"networkEnumValue": "ethereum",
"type": "base-token",
"network": "ethereum",
"balance": 0.17474029229976862,
"balanceRaw": "174740292299768611",
"balanceUSD": 224.6635938098125
}
],
"dataProps": {
"liquidity": 828.5702561709628,
"fee": 0.003,
"volume": 0,
"volumeChangePercentage": 0,
"isBlocked": false
},
"displayProps": {
"label": "FLOKIS / WETH",
"secondaryLabel": "50% / 50%",
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0xd8da6bf26964af9d7eed9e03e53415d37aa96045.png",
"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.png"
],
"statsItems": [
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 828.5702561709628
}
},
{
"label": "Volume",
"value": {
"type": "dollar",
"value": 0
}
},
{
"label": "Fee",
"value": {
"type": "pct",
"value": 0.003
}
},
{
"label": "Ratio",
"value": "50% / 50%"
},
{
"label": "Share",
"value": {
"type": "pct",
"value": 54.22922006590992
}
}
]
},
"balance": 296200,
"balanceRaw": "296200000000000000000000",
"balanceUSD": 449.327187619625
}
],
"meta": []
}
],
"meta": [
{
"label": "Total",
"value": 816.1127518401113,
"type": "dollar"
},
{
"label": "Assets",
"value": 816.1127518401113,
"type": "dollar"
},
{
"label": "Debt",
"value": 0,
"type": "dollar"
}
]
}
}
}
v2/apps/balances/supported
Endpoint provides insight into what apps the wallet has investments in, and metadata about those apps
Notes on use of the API and limits:
- Maximum of 15 wallets can be passed into 1 call, though it's recommended you query wallets one at a time for best performance
- Any balance less than $0.01 USD value is not included in the output
Path
https://api.zapper.xyz/v2/apps/{appId}/supported
Parameters
addresses[]
: (required) | addresses for which to retrieve balances, inputted as an array. Can handle up to 15 addresses
Returns
appId
: ID of the applabel
: App display nameimg
: image used for the app's icontags
: tags associated with this app
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/apps/balances/supported?addresses%5B%5D=0xd8da6bf26964af9d7eed9e03e53415d37aa96045' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
[
{
"network": "ethereum",
"apps": [
{
"appId": "loopring",
"meta": {
"label": "Loopring",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/loopring.png",
"supportedActions": [
"view"
],
"tags": [
"decentralized-exchange"
]
}
},
{
"appId": "reflexer",
"meta": {
"label": "Reflexer",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/reflexer.png",
"supportedActions": [
"view"
],
"tags": [
"lending"
]
}
},
{
"appId": "sablier",
"meta": {
"label": "Sablier",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/sablier.png",
"supportedActions": [
"view"
],
"tags": [
"payments"
]
}
},
{
"appId": "uniswap-v2",
"meta": {
"label": "Uniswap V2",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/uniswap-v2.png",
"supportedActions": [
"view"
],
"tags": [
"liquidity-pool"
]
}
},
{
"appId": "aave-v2",
"meta": {
"label": "Aave V2",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/aave-v2.png",
"supportedActions": [
"view"
],
"tags": [
"lending"
]
}
},
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [
"view"
],
"tags": []
}
}
]
},
{
"network": "polygon",
"apps": [
{
"appId": "superfluid",
"meta": {
"label": "Superfluid",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/superfluid.png",
"supportedActions": [
"view"
],
"tags": [
"payments"
]
}
},
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [
"view"
],
"tags": []
}
}
]
},
{
"network": "optimism",
"apps": [
{
"appId": "velodrome",
"meta": {
"label": "Velodrome",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/velodrome.png",
"supportedActions": [
"view"
],
"tags": [
"decentralized-exchange",
"liquidity-pool"
]
}
},
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [
"view"
],
"tags": []
}
}
]
},
{
"network": "arbitrum",
"apps": [
{
"appId": "umami-finance",
"meta": {
"label": "Umami Finance",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/umami-finance.png",
"supportedActions": [
"view"
],
"tags": [
"fund-manager",
"asset-management"
]
}
},
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [
"view"
],
"tags": []
}
}
]
},
{
"network": "celo",
"apps": [
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [
"view"
],
"tags": []
}
}
]
},
{
"network": "moonriver",
"apps": [
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [],
"tags": []
}
}
]
},
{
"network": "aurora",
"apps": [
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [],
"tags": []
}
}
]
},
{
"network": "gnosis",
"apps": [
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [],
"tags": []
}
}
]
},
{
"network": "binance-smart-chain",
"apps": [
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [
"view"
],
"tags": []
}
}
]
},
{
"network": "fantom",
"apps": [
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [
"view"
],
"tags": []
}
}
]
},
{
"network": "avalanche",
"apps": [
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [
"view"
],
"tags": []
}
}
]
},
{
"network": "bitcoin",
"apps": [
{
"appId": "tokens",
"meta": {
"label": "Tokens",
"img": "https://storage.googleapis.com/zapper-fi-assets/apps/tokens.png",
"supportedActions": [
"view"
],
"tags": []
}
}
]
}
]
Apps queries
v2/apps/{appSlug}
Provides metadata about a particular app, such as the networks it is available
on and what investment groupings (groupIds
) are included within it
Path
https://api.zapper.xyz/v2/apps/{appSlug}
Parameters
appSlug
: (required) | app to get data for
Returns
Id
: ID of the appname
: display name for appdescription
: description of the appgroups
: groupings of different asset types, represented by groupIds, within the apppresentationConfig
: details on how to display the app's assets on the App's details page for Zapper's frontendsupportedNetworks
: Networks the app is available ontoken
: Token associated with the app, if anytags
: tags associated with this applinks
: relevant social links for the app and website
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/apps/aave-v3' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
"id": "aave-v3",
"tags": ["lending"],
"name": "Aave V3",
"url": "https://aave.com/",
"description": "Aave is a decentralized non-custodial liquidity protocol where users can participate as depositors or borrowers.",
"groups": [
{
"id": "supply",
"type": "token",
"label": "Lending"
},
{
"id": "stable-debt",
"type": "token",
"label": "Lending"
},
{
"id": "variable-debt",
"type": "token",
"label": "Lending"
},
{
"id": "claimable",
"type": "token",
"label": "Rewards",
"isHiddenFromExplore": true
}
],
"presentationConfig": {
"tabs": [
{
"label": "Lending",
"viewType": "split",
"views": [
{
"viewType": "list",
"label": "Supply",
"groupIds": ["supply"]
},
{
"viewType": "split",
"label": "Borrow",
"views": [
{
"viewType": "list",
"label": "Variable",
"groupIds": ["variable-debt"]
},
{
"viewType": "list",
"label": "Stable",
"groupIds": ["stable-debt"]
}
]
}
]
}
]
},
"supportedNetworks": [
{
"network": "arbitrum",
"actions": ["view"]
},
{
"network": "avalanche",
"actions": ["view"]
},
{
"network": "fantom",
"actions": ["view"]
},
{
"network": "harmony",
"actions": ["view"]
},
{
"network": "optimism",
"actions": ["view"]
},
{
"network": "polygon",
"actions": ["view"]
}
],
"primaryColor": "#1c1d26",
"token": {
"address": "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9",
"network": "ethereum"
},
"compatibleAddressFormats": {
"arbitrum": "evm",
"avalanche": "evm",
"fantom": "evm",
"harmony": "evm",
"optimism": "evm",
"polygon": "evm"
}
}
v2/apps
Provides details on ALL apps listed on Zapper, including metadata. This will return 100s of apps
Path
https://api.zapper.xyz/v2/apps
Parameters
None
Returns
Id
: ID of the appname
: display name for appdescription
: description of the appgroups
: groupings of different asset types, represented by groupIds, within the apppresentationConfig
: details on how to display the app's assets on the App's details page for Zapper's frontendsupportedNetworks
: Networks the app is available ontoken
: Token associated with the app, if anytags
: tags associated with this applinks
: relevant social links for the app and website
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/apps' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
[
{
"id": "aave-amm",
"tags": [
"lending"
],
"keywords": [],
"name": "Aave AMM",
"url": "https://aave.com/",
"links": {
"github": "https://github.com/aave",
"twitter": "https://twitter.com/AaveAave",
"discord": "https://discord.gg/CvKUrqM",
"telegram": "https://t.me/Aavesome",
"medium": "https://medium.com/aave"
},
"description": "Aave is a decentralized non-custodial liquidity protocol where users can participate as depositors or borrowers. The Aave AMM market enables liquidity providers (“LPs”) of Uniswap and Balancer to use their LP tokens as collateral in the Aave Protocol.",
"groups": [
{
"type": "token",
"id": "stable-debt",
"label": "Lending",
"isHiddenFromExplore": false
},
{
"type": "token",
"id": "supply",
"label": "Lending",
"isHiddenFromExplore": false
},
{
"type": "token",
"id": "variable-debt",
"label": "Lending",
"isHiddenFromExplore": false
}
],
"supportedNetworks": [
{
"network": "ethereum",
"actions": [
"view"
]
}
],
"primaryColor": "#1c1d26",
"token": {
"address": "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9",
"network": "ethereum"
},
"compatibleAddressFormats": {
"ethereum": "evm"
}
},
{
"id": "aave-safety-module",
"tags": [
"liquidity-pool"
],
"keywords": [],
"name": "Aave Safety Module",
"url": "https://aave.com/",
"links": {
"github": "https://github.com/aave",
"twitter": "https://twitter.com/AaveAave",
"discord": "https://discord.gg/CvKUrqM",
"telegram": "https://t.me/Aavesome",
"medium": "https://medium.com/aave"
},
"description": "The Aave Safety Module incentivizes Aave governance token holders to lock away their liquidity. This liquidity is used as a mitigation tool in the case of a shortfall event within the money markets belonging to the Aave ecosystem.",
"groups": [
{
"type": "token",
"id": "abpt",
"label": "ABPT",
"isHiddenFromExplore": false
},
{
"type": "token",
"id": "stk-aave",
"label": "stkAAVE",
"isHiddenFromExplore": false
},
{
"type": "token",
"id": "stk-abpt",
"label": "stkABPT",
"isHiddenFromExplore": false
},
{
"type": "contract-position",
"id": "stk-aave-claimable",
"label": "stkAAVE Rewards",
"isHiddenFromExplore": false
},
{
"type": "contract-position",
"id": "stk-abpt-claimable",
"label": "stkABPT Rewards",
"isHiddenFromExplore": false
}
],
"supportedNetworks": [
{
"network": "ethereum",
"actions": [
"view"
]
}
],
"primaryColor": "#1c1d26",
"token": {
"address": "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9",
"network": "ethereum"
},
"compatibleAddressFormats": {
"ethereum": "evm"
}
},
//.... you get the idea
v2/apps/{appId}/tokens
Provides details on app tokens held within a given app for a given groupId
,
and the relevant data on them, such as supply, underlying tokens, APYs. This is
more detailed than the breakdown provided in v2/apps
and v2/apps/{appId}
, as
it includes data about the investments held within the app
Note that this query will only return data if the groupId
is represented by app tokens. If you are not getting results, try the following query on v2/apps/{appId}/positions
Path
https://api.zapper.xyz/v2/apps/{appId}/tokens
The shape of this response is a little different from v2/apps/{appId}/positions
Parameters
appId
: (required) | id of the appnetwork
: (required) | network to query the app ongroupId
: (required) | investment within the app data that is desired for
Returns
appId
: ID of the appnetwork
: network the app is ongroupId
: group this particular investment belongs to within in the app, such aspool
orfarms
balance
: details on the balance structure, and what kind of balance it istype
: type of position the investment is.contract-position
is if the investment is held on a 3rd party contract.app-token
is if the wallet holds tokens in the wallet representing the investmentaddress
: address of tokensymbol
: symbol of tokendecimals
: decimals of tokensupply
: supply of tokenprice
: price of tokenpricePerShare
: ratio of price to supply of assetstokens
: details on underlying tokens in the investment, such as their address, price, symbol, daily volume, balance, etcdisplayProps
: details on how to display the asset on Zapper's frontendstatsItems
: ancillary stats associated with the investment, such as APY, APR, liquidity, volume, fee, ratio of underlying assets, etc
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/apps/aave-v3/tokens?network=avalanche&groupId=variable-debt' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
[
{
"type": "app-token",
"address": "0x8619d80fb0141ba7f184cbf22fd724116d9f7ffc",
"network": "avalanche",
"appId": "aave-v3",
"groupId": "variable-debt",
"symbol": "variableDebtAvaDAI",
"decimals": 18,
"supply": 28728807.02194861,
"price": 1.001,
"pricePerShare": 1,
"tokens": [
{
"id": "72",
"networkId": 3,
"address": "0xd586e7f844cea2f87f50152665bcbc2c279d8d70",
"name": "Dai Stablecoin",
"symbol": "DAI.e",
"decimals": 18,
"coingeckoId": "dai",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": true,
"updatedAt": "2022-10-20T22:45:07.060Z",
"createdAt": "2022-05-18T12:54:47.542Z",
"price": 1.001,
"dailyVolume": 198618113.26640192,
"totalSupply": "97355482.086388692077440169",
"networkEnumValue": "avalanche",
"type": "base-token",
"network": "avalanche"
}
],
"dataProps": {
"apy": 0.022211509592724495,
"liquidationThreshold": 0.8,
"enabledAsCollateral": true,
"liquidity": -28757535.828970555
},
"displayProps": {
"label": "DAI.e",
"secondaryLabel": {
"type": "dollar",
"value": 1.001
},
"tertiaryLabel": "2.221% APR (variable)",
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/avalanche/0xd586e7f844cea2f87f50152665bcbc2c279d8d70.png"
],
"statsItems": [
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 28757535.828970555
}
},
{
"label": "APY",
"value": {
"type": "pct",
"value": 2.2211509592724497
}
}
]
}
},
{
"type": "app-token",
"address": "0x953a573793604af8d41f306feb8274190db4ae0e",
"network": "avalanche",
"appId": "aave-v3",
"groupId": "variable-debt",
"symbol": "variableDebtAvaLINK",
"decimals": 18,
"supply": 57145.68104628069,
"price": 6.64,
"pricePerShare": 1,
"tokens": [
{
"id": "130",
"networkId": 3,
"address": "0x5947bb275c521040051d82396192181b413227a3",
"name": "Chainlink Token",
"symbol": "LINK.e",
"decimals": 18,
"coingeckoId": "chainlink",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": true,
"updatedAt": "2022-10-20T22:45:07.060Z",
"createdAt": "2022-05-18T12:54:47.542Z",
"price": 6.64,
"dailyVolume": 347318504.90975744,
"totalSupply": "2575890.443630308010302757",
"networkEnumValue": "avalanche",
"type": "base-token",
"network": "avalanche"
}
],
"dataProps": {
"apy": 0.016443939840901187,
"liquidationThreshold": 0.65,
"enabledAsCollateral": true,
"liquidity": -379447.3221473038
},
"displayProps": {
"label": "LINK.e",
"secondaryLabel": {
"type": "dollar",
"value": 6.64
},
"tertiaryLabel": "1.644% APR (variable)",
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/avalanche/0x5947bb275c521040051d82396192181b413227a3.png"
],
"statsItems": [
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 379447.3221473038
}
},
{
"label": "APY",
"value": {
"type": "pct",
"value": 1.6443939840901187
}
}
]
}
},
{
"type": "app-token",
"address": "0xfccf3cabbe80101232d343252614b6a3ee81c989",
"network": "avalanche",
"appId": "aave-v3",
"groupId": "variable-debt",
"symbol": "variableDebtAvaUSDC",
"decimals": 6,
"supply": 246352370.988443,
"price": 0.999904,
"pricePerShare": 1,
"tokens": [
{
"id": "202",
"networkId": 3,
"address": "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
"name": "USD Coin",
"symbol": "USDC",
"decimals": 6,
"coingeckoId": "usd-coin",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": true,
"updatedAt": "2022-10-20T22:45:07.060Z",
"createdAt": "2022-05-18T12:54:47.542Z",
"price": 0.999904,
"dailyVolume": 2529928266.4070354,
"totalSupply": "854696118.34",
"networkEnumValue": "avalanche",
"type": "base-token",
"network": "avalanche"
}
],
"dataProps": {
"apy": 0.02028094269484669,
"liquidationThreshold": 0.85,
"enabledAsCollateral": true,
"liquidity": -246328721.1608281
},
"displayProps": {
"label": "USDC",
"secondaryLabel": {
"type": "dollar",
"value": 0.999904
},
"tertiaryLabel": "2.028% APR (variable)",
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/avalanche/0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e.png"
],
"statsItems": [
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 246328721.1608281
}
},
{
"label": "APY",
"value": {
"type": "pct",
"value": 2.028094269484669
}
}
]
}
},
//...continued
v2/apps/{appId}/positions
Provides details on contract positions held within a given app for a given
groupId
, and the relevant data on them, such as supply, underlying tokens,
APYs. This is more detailed than the breakdown provided in v2/apps
and
v2/apps/{appId}
, as it includes data about the investments held within the app
in a given groupId
Note that this query will only return data if the groupId
is represented by contract positions. If you are not getting results, try the following query on v2/apps/{appId}/tokens
Path
https://api.zapper.xyz/v2/apps/{appId}/positions
The shape of this response is a little different from v2/apps/{appId}/tokens
Parameters
appId
: (required) | id of the appnetwork
: (required) | network to query the app ongroupId
: (required) | investment within the app data that is desired for
Returns
appId
: ID of the appnetwork
: network the app is ongroupId
: group this particular investment belongs to within in the app, such aspool
orfarms
balance
: details on the balance structure, and what kind of balance it istype
: type of position the investment is.contract-position
is if the investment is held on a 3rd party contract.app-token
is if the wallet holds tokens in the wallet representing the investmentaddress
: address of tokensymbol
: symbol of tokendecimals
: decimals of tokensupply
: supply of tokenprice
: price of tokenpricePerShare
: ratio of price to supply of assetstokens
: details on underlying tokens in the investment, such as their address, price, symbol, daily volume, balance, etcdisplayProps
: details on how to display the asset on Zapper's frontendstatsItems
: ancillary stats associated with the investment, such as APY, APR, liquidity, volume, fee, ratio of underlying assets, etc
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/apps/gmx/positions?network=arbitrum&groupId=farm' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
[
{
"type": "contract-position",
"address": "0x908c4d94d34924765f1edc22a1dd098397c59dd4",
"network": "arbitrum",
"appId": "gmx",
"groupId": "farm",
"tokens": [
{
"metaType": "supplied",
"id": "242",
"networkId": 2,
"address": "0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a",
"name": "GMX",
"symbol": "GMX",
"decimals": 18,
"coingeckoId": "gmx",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": false,
"updatedAt": "2022-10-20T22:54:03.055Z",
"createdAt": "2022-05-18T12:54:47.549Z",
"price": 33.18,
"dailyVolume": 5366572.032678855,
"totalSupply": "8658199.737761476990000001",
"networkEnumValue": "arbitrum",
"type": "base-token",
"network": "arbitrum"
},
{
"metaType": "claimable",
"id": "291",
"networkId": 2,
"address": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1",
"name": "Wrapped Ether",
"symbol": "WETH",
"decimals": 18,
"coingeckoId": "weth",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": true,
"updatedAt": "2022-10-20T22:54:03.055Z",
"createdAt": "2022-05-18T12:54:47.549Z",
"price": 1281.56,
"dailyVolume": 553310851.945852,
"totalSupply": "195637.587011069603978434",
"networkEnumValue": "arbitrum",
"type": "base-token",
"network": "arbitrum"
},
{
"metaType": "claimable",
"type": "app-token",
"address": "0xf42ae1d54fd613c9bb14810b0588faaa09a426ca",
"appId": "gmx",
"groupId": "es-gmx",
"network": "arbitrum",
"symbol": "esGMX",
"decimals": 18,
"supply": 2616647.922028693,
"price": 33.18,
"pricePerShare": 1,
"tokens": [
{
"id": "242",
"networkId": 2,
"address": "0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a",
"name": "GMX",
"symbol": "GMX",
"decimals": 18,
"coingeckoId": "gmx",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": false,
"updatedAt": "2022-10-20T22:52:31.297Z",
"createdAt": "2022-05-18T12:54:47.549Z",
"price": 33.18,
"dailyVolume": 5366064.9493921995,
"totalSupply": "8658199.737761476990000001",
"networkEnumValue": "arbitrum",
"type": "base-token",
"network": "arbitrum"
}
],
"dataProps": {
"liquidity": 86820378.05291203
},
"displayProps": {
"label": "esGMX",
"secondaryLabel": {
"type": "dollar",
"value": 33.18
},
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/arbitrum/0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a.png"
]
}
}
],
"dataProps": {
"liquidity": 215551042.06164038,
"isActive": true,
"dailyROI": 0,
"weeklyROI": 0,
"yearlyROI": 0
},
"displayProps": {
"label": "GMX",
"secondaryLabel": {
"type": "dollar",
"value": 33.18
},
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/arbitrum/0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a.png"
],
"statsItems": [
{
"label": "APR",
"value": {
"type": "pct",
"value": 0
}
},
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 215551042.06164038
}
}
]
}
},
{
"type": "contract-position",
"address": "0x908c4d94d34924765f1edc22a1dd098397c59dd4",
"network": "arbitrum",
"appId": "gmx",
"groupId": "farm",
"tokens": [
{
"metaType": "supplied",
"type": "app-token",
"address": "0xf42ae1d54fd613c9bb14810b0588faaa09a426ca",
"appId": "gmx",
"groupId": "es-gmx",
"network": "arbitrum",
"symbol": "esGMX",
"decimals": 18,
"supply": 2616647.922028693,
"price": 33.18,
"pricePerShare": 1,
"tokens": [
{
"id": "242",
"networkId": 2,
"address": "0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a",
"name": "GMX",
"symbol": "GMX",
"decimals": 18,
"coingeckoId": "gmx",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": false,
"updatedAt": "2022-10-20T22:52:31.297Z",
"createdAt": "2022-05-18T12:54:47.549Z",
"price": 33.18,
"dailyVolume": 5366064.9493921995,
"totalSupply": "8658199.737761476990000001",
"networkEnumValue": "arbitrum",
"type": "base-token",
"network": "arbitrum"
}
],
"dataProps": {
"liquidity": 86820378.05291203
},
"displayProps": {
"label": "esGMX",
"secondaryLabel": {
"type": "dollar",
"value": 33.18
},
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/arbitrum/0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a.png"
]
}
},
{
"metaType": "claimable",
"id": "291",
"networkId": 2,
"address": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1",
"name": "Wrapped Ether",
"symbol": "WETH",
"decimals": 18,
"coingeckoId": "weth",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": true,
"updatedAt": "2022-10-20T22:54:03.055Z",
"createdAt": "2022-05-18T12:54:47.549Z",
"price": 1281.56,
"dailyVolume": 553310851.945852,
"totalSupply": "195637.587011069603978434",
"networkEnumValue": "arbitrum",
"type": "base-token",
"network": "arbitrum"
},
{
"metaType": "claimable",
"type": "app-token",
"address": "0xf42ae1d54fd613c9bb14810b0588faaa09a426ca",
"appId": "gmx",
"groupId": "es-gmx",
"network": "arbitrum",
"symbol": "esGMX",
"decimals": 18,
"supply": 2616647.922028693,
"price": 33.18,
"pricePerShare": 1,
"tokens": [
{
"id": "242",
"networkId": 2,
"address": "0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a",
"name": "GMX",
"symbol": "GMX",
"decimals": 18,
"coingeckoId": "gmx",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": false,
"updatedAt": "2022-10-20T22:52:31.297Z",
"createdAt": "2022-05-18T12:54:47.549Z",
"price": 33.18,
"dailyVolume": 5366064.9493921995,
"totalSupply": "8658199.737761476990000001",
"networkEnumValue": "arbitrum",
"type": "base-token",
"network": "arbitrum"
}
],
"dataProps": {
"liquidity": 86820378.05291203
},
"displayProps": {
"label": "esGMX",
"secondaryLabel": {
"type": "dollar",
"value": 33.18
},
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/arbitrum/0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a.png"
]
}
}
],
"dataProps": {
"liquidity": 54802415.124685735,
"isActive": true,
"dailyROI": 0,
"weeklyROI": 0,
"yearlyROI": 0
},
"displayProps": {
"label": "esGMX",
"secondaryLabel": {
"type": "dollar",
"value": 33.18
},
"images": [
"https://storage.googleapis.com/zapper-fi-assets/tokens/arbitrum/0xf42ae1d54fd613c9bb14810b0588faaa09a426ca.png"
],
"statsItems": [
{
"label": "APR",
"value": {
"type": "pct",
"value": 0
}
},
{
"label": "Liquidity",
"value": {
"type": "dollar",
"value": 54802415.124685735
}
}
]
}
},
//... continued
NFT queries
v2/nft/balances/net-worth
Provides the value of all NFTs in a wallet (or bundle of wallets) on the chains that Zapper supports NFTs for (currently Ethereum, Optimism, and Arbitrum)
Path
https://api.zapper.xyz/v2/nft/balances/net-worth
Parameters
addresses
: (required) | input addresses to get net worth for (maximum of 15)
Returns
Estimated net worth in USD of all the wallet's NFTs
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/nft/balances/net-worth?addresses%5B%5D=0xd8da6bf26964af9d7eed9e03e53415d37aa96045' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
"0xd8da6bf26964af9d7eed9e03e53415d37aa96045": "65415.9656178"
}
v2/nft/user/tokens
Provides detailed breakdown of all individual NFTs owned in a given wallet, including NFT metadata, collection metadata, estimated value for the NFT, last sale price, rarity, etc.
This endpoint is the right one to query if you want to get ALL NFTs in a given wallet. Each page returns 100 NFTs as its maximum number, which is generally enough to capture all NFTs in ~90% of all wallets. If you need to get all NFTs in a wallet that has greater than 100 NFTs, you will need to use the cursor
to paginate through the list.
This endpoint differs from v2/nft/balances/tokens
in that it does not return an ordered list of NFTs by USD value, and it allows 100 per page versus 25 per page in v2/nft/balances/tokens
, and this NFT endpoint is much more performant.
Note that Zapper supports NFTs on Ethereum, Arbitrum and Optimism, with plans to support NFTs on additional EVM chains in the future.
Path
https://api.zapper.xyz/v2/nft/user/tokens
Parameters
userAddress
: (required) | Input a single address. This endpoint does not allow an input of an array, unlike other endpoints form Zapper, due to how we index our data for this query.network
: Returns only NFTs from network provided. If not provided, NFTs across all supported chains for NFTs will be returnedlimit
: Maximum items to return. Limited to 100 maximum. Note that the default value is limit=50cursor
: Cursor used to paginate the results, if more than 100 NFTs are returned in the response
Returns
balance
: number of NFTs owned of a given type. If it's ERC_721, it will always be 1. If NFT is is ERC_1155, will be a count of how many NFTs are owned by this wallettoken
: contains details relating to this NFT, such as price and metadataid
: internal Zapper ID number for tokenname
: name of NFTtokenId
: ID of token within collectionlastSaleEth
: price of last sale of this NFTrarityRank
: rank of this NFTs rarity, based on traits, within its collectionestimatedValueEth
: estimated value of this NFT, based on various signals using Zapper's internal modelmedias
: link to image for NFT
collection
: object containing details about the collection the NFT is inaddress
: collection addressnetwork
: network collection is onname
: name of collectionnftStandard
: standard of the NFT (ERC-1155 or ERC-721)type
: categorization of the collectionGENERAL
: general NFT collectionBRIDGED
: bridged NFTs from a different chainBADGE
: badge, POAPs and similar collectionsTICKET
: for event ticket or similar collectionsACCOUNT_BOUND
: also known as "soul bound NFTs"; these NFTs are not tradableWRITING
: writing collections (Mirror, Medium...)GAMING
: gaming related NFTsART_BLOCKS
: Art blocks projects. Multiple collections in one contract
floorPriceEth
: floor price of collection in ethlogoImageURL
: URL for logo of collectionopenseaId
: ID of collection on OpenSea
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/nft/user/tokens?userAddress=0xd387a6e4e84a6c86bd90c158c6028a58cc8ac459&limit=100' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
{
"items": [
{
"balance": "1",
"token": {
"id": "49788045",
"name": "Sedan",
"tokenId": "33",
"lastSaleEth": "0.25",
"rarityRank": 119,
"estimatedValueEth": "0.4364643958709034",
"medias": [
{
"type": "image",
"originalUrl": "https://cryptomotors.io/images/full_vehicle_body/sedan_00_7_1_1.png"
}
],
"collection": {
"address": "0x30a2fa3c93fb9f93d1efeffd350c6a6bb62ba000",
"network": "ethereum",
"name": "CryptoMotors",
"nftStandard": "erc721",
"type": "general",
"floorPriceEth": "0.48",
"logoImageUrl": "https://storage.googleapis.com/zapper-fi-assets/nft/0x30a2fa3c93fb9f93d1efeffd350c6a6bb62ba000/unnamed25.png",
"openseaId": "cryptomotors"
}
}
},
...
"cursor": "MC4xNzUtMS02Njg2NzAzMA=="
}
v2/nft/balances/tokens
Provides detailed breakdown of all individual NFTs owned in a given wallet, including NFT metadata, collection metadata, estimated value for the NFT, last sale price, rarity, etc. The values returned in this endpoint are ORDERED by descending estimatedUSD value. So, the 25 NFTs returned on the first page will be the 25 highest value NFTs in the wallet's portfolio.
Note that Zapper supports NFTs on Ethereum, Arbitrum and Optimism, with plans to support NFTs on additional EVM chains in the future.
The response is paginated, with a maximum number of 25 per response. You will need to parse through different pages, using cursor
to get values beyond the initial 25 NFT response.
Path
https://api.zapper.xyz/v2/nft/balances/tokens
Parameters
addresses
: (required) | input addresses to get net worth for (maximum of 15)minCollectionValueUsd
: Returns only collections with an estimated value above the amount inputtedsearch
: Returns only collections with name starting with inputted stringcollectionAddresses[]
: Returns only collections providednetwork
: Returns only NFTs from network providedlimit
: Maximum items to return. Limited to 25 maximumcursor
: Cursor used to paginate the results
Returns
token
: object containing details about the individual NFTbalance
: number of NFTs owned of a given type. If it's ERC_721, it will always be 1. If NFT is is ERC_1155, will be a count of how many NFTs are owned by this walletname
: name of NFTtokenId
: ID of token within collectionlastSaleEth
: price of last sale of this NFTrarityRank
: rank of this NFTs rarity, based on traits, within its collectionestimatedValueEth
: estimated value of this NFT, based on various signals using Zapper's internal modelmedias
: link to image for NFT
collection
: object containing details about the collection the NFT is a part ofaddress
: collection addressnetwork
: network collection is onname
: name of collectionnftStandard
: standard of the NFT (1155 or 721)floorPriceEth
: floor price of collection in ethlogoImageURL
: URL for logo of collectionopenseaId
: ID of collection on OpenSea
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/nft/balances/tokens?addresses%5B%5D=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&collectionAddresses%5B%5D=0x47b648edd37aeae4f16d153451fd1784c1dd19a5&limit=25' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
"items": [
{
"balance": "1000",
"token": {
"name": "McHooty's Backdoor",
"tokenId": "1",
"lastSaleEth": "0.03",
"rarityRank": null,
"estimatedValueEth": "0.02",
"medias": [
{
"type": "image",
"originalUrl": "https://arweave.net/lRqoxOz0P1fBTyxpkjYaL78q6AHoz5X7iGiA14oO6wQ"
}
],
"collection": {
"address": "0x47b648edd37aeae4f16d153451fd1784c1dd19a5",
"network": "ethereum",
"name": "Mchooty's",
"nftStandard": "erc1155",
"floorPriceEth": "0.04",
"logoImageUrl": "https://openseauserdata.com/files/fc1b139d066893c6a9390fb8c9612668.png",
"openseaId": "mchootys-dao"
}
}
},
{
"balance": "1",
"token": {
"name": "Primordial",
"tokenId": "189",
"lastSaleEth": "5.3",
"rarityRank": null,
"estimatedValueEth": "5.3",
"medias": [
{
"type": "image",
"originalUrl": "https://edda-cdn.fra1.cdn.digitaloceanspaces.com/collection1/189.mp4"
}
],
"collection": {
"address": "0x97c548ac36d5a218bef504b5d5389b724355c5af",
"network": "ethereum",
"name": "EDDA NFT",
"nftStandard": "erc1155",
"floorPriceEth": "0.098",
"logoImageUrl": null,
"openseaId": "eddaswap"
}
}
}
...
"cursor": "MC4xNzUtMS02Njg2NzAzMA=="
}
v2/nft/balances/collections
Provides detailed breakdown of all collections owned in a given wallet, including collection metadata, estimated price for all NFTs owned in that collection, and trading volume for that collection in a given time period.
Note that Zapper supports NFTs on Ethereum, Arbitrum and Optimism, with plans to support NFTs on additional EVM chains in the future.
The response is paginated, with a maximum number of 25 per response. You will need to parse through different pages, using cursor
to get values beyond the initial 25
Path
https://api.zapper.xyz/v2/nft/balances/collections
Parameters
addresses
: (required) | input addresses to get net worth for (maximum of 15)minCollectionValueUsd
: Returns only collections with an estimated value above the amount inputtedsearch
: Returns only collections with name starting with inputted stringcollectionAddresses[]
: Returns only collections providednetwork
: Returns only NFTs from network providedlimit
: Maximum items to return. Limited to 25 maximumcursor
: Cursor used to paginate the results
Returns
balance
: number of NFTs owned in the collectionbalanceUSD
: estimated value of all the NFTs owned in the collectionname
: name of collectionnetwork
: network of the collectiondescription
: description of the collectionlogoImageUrl
: URL for logo imagecardImageUrl
: URL for card imagebannerImageUrl
: URL for banner imagenftStandard
: standard of the NFT (1155 or 721)floorPriceEth
: floor price of collection in eth. Floor price is pulled from multiple platforms via Reservoir and the displayed floor price is the lowest aggregated value. https://docs.reservoir.tools/docs/aggregated-orderbookmarketCap
: market cap of the collection in ethopenseaId
: ID of collection on OpenSeasocialLinks
: links to various socialsstats
: stats on hourly/daily/weekly/total volume in eth for the collection
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/nft/balances/collections?addresses%5B%5D=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&limit=25' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
"items": [
{
"balance": "1001",
"balanceUSD": "25632.8",
"collection": {
"name": "Mchooty's",
"network": "ethereum",
"description": "McHooty’s Community DAO is dedicated to providing long term strategic value and growth for the dirtbird and greater web3 communities.\n\nVoting rights in the DAO are a function of owning McHooty’s dynamic tokens.\n\nThe core team is comprised of talented specialists who believe in bringing value back to creatives.\n\nfollow @McHootys_wtf to learn more.",
"logoImageUrl": "https://openseauserdata.com/files/fc1b139d066893c6a9390fb8c9612668.png",
"cardImageUrl": "https://openseauserdata.com/files/dbe9e0cca1a47ec5c5cbb2c6aed634b2.gif",
"bannerImageUrl": "https://openseauserdata.com/files/edf89b63791c34bbd71962ed21eaf5ee.png",
"nftStandard": "erc1155",
"floorPriceEth": "0.04",
"marketCap": "65.4",
"openseaId": "mchootys-dao",
"socialLinks": [
{
"name": "opensea",
"label": "Opensea",
"url": "https://opensea.io/collection/mchootys-dao",
"logoUrl": "https://storage.googleapis.com/zapper-fi-assets/logos/opensea.png"
},
{
"name": "website",
"label": "Website",
"url": "http://mchootys.wtf",
"logoUrl": "https://storage.googleapis.com/zapper-fi-assets/logos/website.png"
},
{
"name": "twitter",
"label": "Twitter",
"url": "https://twitter.com/Mchootys_wtf",
"logoUrl": "https://storage.googleapis.com/zapper-fi-assets/logos/twitter.png"
}
],
"stats": {
"hourlyVolumeEth": "0",
"hourlyVolumeEthPercentChange": null,
"dailyVolumeEth": "0",
"dailyVolumeEthPercentChange": null,
"weeklyVolumeEth": "0.03",
"weeklyVolumeEthPercentChange": null,
"monthlyVolumeEth": "0.03",
"monthlyVolumeEthPercentChange": null,
"totalVolumeEth": "1.7700000000000005"
}
}
},
{
"balance": "1",
"balanceUSD": "6792.692",
"collection": {
"name": "EDDA NFT",
"network": "ethereum",
"description": "EDDASwap is an ecosystem of NFT and DeFi Applications. Hold $EDDA and farm EDDASwap’s exclusive NFTs or become a liquidity provider and stake your LP Tokens for even more exclusive NFTs. Farm from a specially curated collection created by leading motion graphic, 3D and digital artists. Welcome to the world of crypto collectibles. Let's Tokenize the world",
"logoImageUrl": null,
"cardImageUrl": null,
"bannerImageUrl": null,
"nftStandard": "erc1155",
"floorPriceEth": "0.098",
"marketCap": "164.444",
"openseaId": "eddaswap",
"socialLinks": [
{
"name": "website",
"label": "Website",
"url": "https://app.eddaswap.com/nft",
"logoUrl": "https://storage.googleapis.com/zapper-fi-assets/logos/website.png"
}
],
"stats": {
"hourlyVolumeEth": "0",
"hourlyVolumeEthPercentChange": null,
"dailyVolumeEth": "0",
"dailyVolumeEthPercentChange": null,
"weeklyVolumeEth": "0",
"weeklyVolumeEthPercentChange": null,
"monthlyVolumeEth": "0",
"monthlyVolumeEthPercentChange": null,
"totalVolumeEth": "151.934"
}
}
}
....
"cursor": "MC4xNzUtMTgwMTA="
}
v2/nft/balances/collections-totals
Provides a simple value returned for the total count of collections in the wallet, the estimated value of them.
Differs from v2/nft/balances/net-worth
as you can scope down the NFTs you want the value for in the wallet.
Note that Zapper supports NFTs on Ethereum, Arbitrum and Optimism, with plans to support NFTs on additional EVM chains in the future.
Path
https://api.zapper.xyz/v2/nft/balances/collections-totals
Parameters
addresses
: (required) | input addresses to get net worth for (maximum of 15)minCollectionValueUsd
: Returns only collections with an estimated value above the amount inputtedsearch
: Returns only collections with name starting with inputted stringcollectionAddresses[]
: Returns only collections providednetwork
: Returns only NFTs from network provided
Returns
count
: number of collections owned by the walletbalanceUSD
: estimated value of all the NFTs owned in the wallet
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/nft/balances/collections-totals?addresses%5B%5D=0xd8da6bf26964af9d7eed9e03e53415d37aa96045' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
"count": "153",
"balanceUSD": "65360.3215647"
}
v2/nft/balances/tokens-totals
Provides a simple value returned for the total count of NFTs in the wallet, the estimated value of them.
Differs from v2/nft/balances/collections-total
as it is at the NFT level for
the counts.
Path
https://api.zapper.xyz/v2/nft/balances/tokens-totals
Parameters
addresses
: (required) | input addresses to get net worth for (maximum of 15)minCollectionValueUsd
: Returns only collections with an estimated value above the amount inputtedsearch
: Returns only collections with name starting with inputted stringcollectionAddresses[]
: Returns only collections providednetwork
: Returns only NFTs from network provided
Returns
count
: number of NFTs owned, where ERC_1155 NFTs count as 1 per collectiontotalCount
: number of NFTs owned, where ERC_1155 NFTs count as 1 per NFT heldbalanceUSD
: estimated value of all the NFTs owned in the wallet
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/nft/balances/tokens-totals?addresses%5B%5D=0xd8da6bf26964af9d7eed9e03e53415d37aa96045' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
"count": "917",
"totalCount": "1956",
"balanceUSD": "65368.999995"
}
Exchange queries
v2/exchange/price
Returns data about the amount received if a trade would be made. Should be called whenever a price needs to be calculated.
Path
https://api.zapper.xyz/v2/exchange/price
Parameters
gasPrice
: Gas price (wei)maxFeePerGas
: Max gas fee (wei)maxPriorityFeePerGas
: Max priority gas fee (wei)sellTokenAddress
: Address of the token that is being soldbuyTokenAddress
: Address of the token that is being boughtsellAmount
: Amount to sellbuyAmount
: Amount to buyownerAddress
: Address of the ownerslippagePercentage
: Slippage percentage as a decimal valuenetwork
: Network where the swap would be made
Returns
price
: Price of the sell tokenvalue
: Token value assouciated with pricegas
: Gas limit of the transactionestimatedGas
: Gas required for the transactiongasPrice
: Gas price at the time of transactionmaxPriorityFeePerGas
: Maximum priority fee for gas in this speed tiermaxFeePerGas
: Max fee for gas in this gas speed tierbuyTokenAddress
: Token address for the token wanting to buysellTokenAddress
: Token address for the token wanting to sellbuyAmount
: Total quantity of buy tokensellAmount
: Total quantity of sell tokenallowanceTarget
: Token address of token that is approved to sellsources
: liquidity sourcesname
: Source of swap routeproportion
: Proportion of tokens swapped by this sourcedisplayName
: Display name of sourcesymbol
: Symbol of sourcehops
: Number of hops needed for swap
zapperFee
: Percentage of fees from swap
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/exchange/price?sellTokenAddress=0x0000000000000000000000000000000000000000&buyTokenAddress=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&sellAmount=1000000000000000000&ownerAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&slippagePercentage=0.03&network=ethereum' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
"price": "1626.154659",
"value": "1000000000000000000",
"gas": "265203",
"estimatedGas": "265203",
"gasPrice": "35000000000",
"maxPriorityFeePerGas": "1000000000",
"maxFeePerGas": "29000000000",
"buyTokenAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"sellTokenAddress": "0x0000000000000000000000000000000000000000",
"buyAmount": "1626194089",
"sellAmount": "1000000000000000000",
"allowanceTarget": "0x0000000000000000000000000000000000000000",
"sources": [
{
"name": "Uniswap_V3",
"proportion": 1,
"displayName": "Uniswap V3",
"symbol": "uniswap-v3",
"hops": []
}
],
"zapperFee": 0.005
}
v2/exchange/quote
Returns both the relative price for a trade as well as the call data used to submit a transaction for a trade. Should only be called when a trade is ready to be submitted.
Path
https://api.zapper.xyz/v2/exchange/quote
Parameters
gasPrice
: Gas price (wei)maxFeePerGas
: Max gas fee (wei)maxPriorityFeePerGas
: Max priority gas fee (wei)sellTokenAddress
: Address of the token that is being soldbuyTokenAddress
: Address of the token that is being boughtsellAmount
: Amount to sellbuyAmount
: Amount to buyownerAddress
: Address of the ownerslippagePercentage
: Slippage percentage as a decimal valuenetwork
: Network where the swap would be made
Returns
price
: Sell token price divided by buy token pricedata
: Transactional data for swapto
: Address that tokens are transferred tovalue
: Quantity of native network token being transferredestimatedGas
: Address of the token that is being boughtmaxPriorityFeePerGas
: Maximum priority fee for gas in this speed tiermaxFeePerGas
: Max fee for gas in this gas speed tierbuyTokenAddress
: Token address for the token wanting to buysellTokenAddress
: Token address for the token wanting to sellbuyAmount
: Total quantity of buy tokensellAmount
: Total quantity of sell tokenallowanceTarget
: Token address of token that is approved to sellsources
: sources of liqudiityname
: source of swap routeproportion
: proportion of tokens swapped by this sourcedisplayName
: display name of sourcesymbol
: symbol of sourcehops
: number of hops needed for swap
zapperFee
: percentage of fees from swap
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/exchange/quote?gasPrice=35000000000&maxFeePerGas=40000000000&maxPriorityFeePerGas=1000000000&sellTokenAddress=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&buyTokenAddress=0x0000000000000000000000000000000000000000&sellAmount=1000000&ownerAddress=0xe321bd63cde8ea046b382f82964575f2a5586474&slippagePercentage=0.03&network=ethereum' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
"price": "0.000824318884007021",
"data": "0x415565b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000002d7217cd6e6d700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000005c0000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000025375736869537761700000000000000000000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000002dac437104bd5000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000003a2ba3964fe00000000000000000000000043a2a720cd0911690c248075f4a29a5e7716f758000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000000000000869584cd0000000000000000000000003ce37278de6388532c3949ce4e886f365b14fb5600000000000000000000000000000000000000000000005c32bfbad3637698a8",
"to": "0xdef1c0ded9bec7f1a1670819833240f027b25eff",
"value": "0",
"estimatedGas": "339874",
"gasPrice": "35000000000",
"maxPriorityFeePerGas": "1000000000",
"maxFeePerGas": "40000000000",
"buyTokenAddress": "0x0000000000000000000000000000000000000000",
"sellTokenAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"buyAmount": "824338871226566",
"sellAmount": "1000000",
"allowanceTarget": "0xdef1c0ded9bec7f1a1670819833240f027b25eff",
"sources": [
{
"name": "SushiSwap",
"proportion": 1,
"displayName": "SushiSwap",
"symbol": "sushiswap",
"hops": []
}
],
"gas": "339874",
"zapperFee": 0.005
}
v2/exchange/supported
Returns the exchanges supported by Zapper API.
Path
https://api.zapper.xyz/v2/exchange/supported
Parameters
None
Returns
network
: network name available for swapslabel
: label of networknumTokens
: number of tokens available to be swapped on that network
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/exchange/supported' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
[
{
"network": "arbitrum",
"label": "Arbitrum",
"numTokens": 62
},
{
"network": "avalanche",
"label": "Avalanche",
"numTokens": 112
},
{
"network": "binance-smart-chain",
"label": "BSC",
"numTokens": 488
},
{
"network": "ethereum",
"label": "Ethereum",
"numTokens": 1215
},
{
"network": "fantom",
"label": "Fantom",
"numTokens": 119
},
{
"network": "optimism",
"label": "Optimism",
"numTokens": 36
},
{
"network": "polygon",
"label": "Polygon",
"numTokens": 244
}
]
Miscellaneous Data Endpoints
v2/prices
Retrieve supported tokens and their prices. Generally populated by data from CoinGecko
Path
https://api.zapper.xyz/v2/prices
Parameters
network
: retrieve tokens for this specified network
Returns
id
: internal token idnetworkId
: internal network idaddress
: token's addressname
: label for tokensymbol
: symbol for tokendecimals
: decimals for tokencoingeckoId
: coingecko API id for tokenstatus
: internal designation if token has been initially reviewed when ingestedhide
: internal designation if token is approved for displayingcanExchange
: flag if this token is exchangeable on Zapper's front endverified
: if token is on a verified token list, and has a blue-checkmark on Zapper's frontendupdatedAt
: last date token was updated from CoinGeckocreatedAt
: date token was first ingestedprice
: current price of token in USDdailyVolume
: trading volume of token from coingeckototalSupply
: total supply of token availablenetworkEnumValue
: network token is ontype
: designation if the token is a base-token or app-token (meaning the token is associated with an app's investment)network
: label of network token is on
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/prices?network=optimism' \
-H 'accept: */*' \1
-H 'Authorization: Basic asdadsadada12341=='
Response
[
{
"id": "94",
"networkId": 11,
"address": "0x296f55f8fb28e498b858d0bcda06d955b2cb3f97",
"name": "StargateToken",
"symbol": "STG",
"decimals": 18,
"coingeckoId": "stargate-finance",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": false,
"updatedAt": "2022-10-20T23:54:02.228Z",
"createdAt": "2022-05-18T12:54:47.542Z",
"price": 0.438465,
"dailyVolume": 6546463.232311093,
"totalSupply": "7698057.755052034171408426",
"networkEnumValue": "optimism",
"type": "base-token",
"network": "optimism"
},
{
"id": "13541517",
"networkId": 11,
"address": "0x3e7ef8f50246f725885102e8238cbba33f276747",
"name": "BarnBridge Governance Token (Optimism)",
"symbol": "BOND",
"decimals": 18,
"coingeckoId": "barnbridge",
"status": "approved",
"hide": false,
"canExchange": true,
"verified": true,
"updatedAt": "2022-10-20T23:54:02.228Z",
"createdAt": "2022-09-08T16:00:07.542Z",
"price": 4.84,
"dailyVolume": 10497007.061096925,
"totalSupply": "58976.543282950370221951",
"networkEnumValue": "optimism",
"type": "base-token",
"network": "optimism"
}
//...
]
v2/gas-prices
Retrieve supported tokens and their prices across many currencies
Path
https://api.zapper.xyz/v2/gas-prices
Parameters
network
: Retrieve gas prices for this network. If left blank, defaults to Ethereum gas priceeip1559
: (required) | boolean flag for Retrieve post London gas price details
Returns
eip1559
: coingecko API id for tokenbaseFeePerGas
: base fee for gas in this gas speed tiermaxPriorityFeePerGas
: maximum priority fee for gas in this speed tiermaxFeePerGas
: max fee for gas in this gas speed tier
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v2/gas-prices?network=ethereum&eip1559=true' \
-H 'accept: application/json' \
-H 'Authorization: Basic asdadsadada12341=='
Response
{
"eip1559": true,
"standard": {
"baseFeePerGas": 23,
"maxPriorityFeePerGas": 1,
"maxFeePerGas": 35
},
"fast": {
"baseFeePerGas": 23,
"maxPriorityFeePerGas": 1,
"maxFeePerGas": 35
},
"instant": {
"baseFeePerGas": 24,
"maxPriorityFeePerGas": 1,
"maxFeePerGas": 36
}
}
v1/api-clients/points
Endpoint returns how many API points are remaining in your API account. Your balance of API points is funded at the beginning of each month with 10,000 free points or by additional API point purchases.
Notes on how points work
- Your
pointsRemaining
is a simple calculation of: (total points purchased or gifted via free quota that have not expired) - (total points consumed) = points remaining - If you have multiple API keys issued to you, they all pull points from the same pot; API points are not on a per-key basis, but at a business-entity level. So, all your API keys will return the same
pointsRemaining
value, as they share the same pot of points. pointsRemaining
is calculated and evaluated every ~1 hour. This endpoint is not real-time. Refer topointsUpdatedAt
value in response for the timestamp that your points balance was snapshot'd at. It is never more than ~1.5 hour old
Path
https://api.zapper.xyz/v1/api-clients/points
Parameters
No parameters; your API key is authorized via your header, so points can only be returned for your API key
Returns
pointsRemaining
: how many points your API account has remaining before being turned off due to a negative points balance. Calculation for this ispointsConsumedYesterday
: how many points your API account consumed yesterday in the full 24 hour periodpointsUpdatedAt
: timestamp of when we last snapshot how many points the API account has remaining
cURL
cURL -X 'GET' \
'https://api.zapper.xyz/v1/api-clients/points' \
-H 'accept: */*' \
-H 'Authorization: Basic sadkfljsdafksal24uh2jk34=='
Response
{
"pointsRemaining": "29778",
"pointsConsumedYesterday": "11",
"pointsUpdatedAt": "2023-02-28T01:08:01.152Z"
}