App Timelines
Presents the onchain activity for a specific application by monitoring transactions through its smart contracts. This endpoint enables you to track all interactions with a particular protocol or dapp across multiple networks.
timelineForApp
Takes an app slug
as input, with optional parameters for network
, and spamFilter
. Returns chronological on-chain activity including:
Example Use Case: Protocol Activity Feed
Let's say you want to build a real-time activity feed showing all transactions happening in a specific app like Uniswap or Aave. Start by passing the app's slug
. The query returns:
- Human-readable transaction descriptions (
processedDescription
) - Network information
- Complete transaction details
- Comprehensive data about tokens or NFTs involved
- Account information for transaction actors
This allows you to build rich activity feeds with:
- Formatted descriptions (e.g., "Swapped 400 USDC for 0.2 ETH")
- Complete token details including amounts and prices
- NFT transfers and metadata when relevant
- Links to relevant accounts and transactions
To find the correct slug
for the app you are trying to reference, find the app on Zapper. The slug is the last part of the URL. For example: https://zapper.xyz/apps/aave-v3 has the slug aave-v3
.
Example Variables
{
"slug": "aave-v3",
"first": 1,
"spamFilter": true
}
Example Query
query TimelineForAppQuery($slug: String!, $first: Int, $after: String, $spamFilter: Boolean) {
timelineForApp(
slug: $slug
first: $first
after: $after
spamFilter: $spamFilter
) {
edges {
node {
timestamp
network
transaction {
hash
fromUser {
address
displayName {
value
}
}
toUser {
displayName {
value
}
}
}
interpretation {
processedDescription
description
descriptionDisplayItems {
... on TokenDisplayItem {
type
network
tokenAddress
amountRaw
tokenV2 {
symbol
decimals
name
imageUrl
marketData {
price(currency: USD)
}
}
}
... on NFTDisplayItem {
type
network
collectionAddress
tokenId
quantity
nftToken {
collection {
name
}
}
}
}
inboundAttachments {
... on TokenDisplayItem {
type
network
tokenAddress
amountRaw
}
}
outboundAttachments {
... on TokenDisplayItem {
type
network
tokenAddress
amountRaw
}
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Example Response
{
"data": {
"timelineForApp": {
"edges": [
{
"node": {
"timestamp": 1736898059000,
"network": "BASE_MAINNET",
"transaction": {
"hash": "0x49309cb747b17b6c6c2cfffc977424a6d38593efe2f5d01db5d3445507191ab2",
"fromUser": {
"address": "0x318bb34e1387af6034950ef66c798d16e72be287",
"displayName": {
"value": "0x318b...e287"
}
},
"toUser": {
"displayName": {
"value": "0xa238...d1c5"
}
}
},
"interpretation": {
"processedDescription": "Repaid 144 USDC ",
"description": "Repaid $1 ",
"descriptionDisplayItems": [
{
"type": "token",
"network": "BASE_MAINNET",
"tokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"amountRaw": "144000000",
"tokenV2": {
"symbol": "USDC",
"decimals": 6,
"name": "USDC",
"imageUrl": "https://storage.googleapis.com/zapper-fi-assets/tokens/base/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.png",
"marketData": {
"price": 0.999999
}
}
}
],
"inboundAttachments": [],
"outboundAttachments": [
{
"type": "token",
"network": "BASE_MAINNET",
"tokenAddress": "0x59dca05b6c26dbd64b5381374aaac5cd05644c28",
"amountRaw": "137792975"
},
{
"type": "token",
"network": "BASE_MAINNET",
"tokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"amountRaw": "144000000"
}
]
}
}
}
],
"pageInfo": {
"hasNextPage": true,
"endCursor": "MjAyNC0xMi0wNlQyMTowNTo..."
}
}
}
}
To create interactive elements referencing tokens, NFTs, accounts, or other onchain items embedded within the transaction description, use description
and descriptionDisplayItems
instead of processedDescription
. This enables you to add links to tokens, NFTs, or accounts (e.g., cl0kwork.eth supplied 50 ETH as collateral).
Pagination is highly recommended using first
and after
to ensure fast query response times and optimal performance.
Arguments
Argument | Description | Type |
---|---|---|
slug | The unique identifier for the app (e.g., "uniswap", "aave-v2") | String! |
network | Filter by a specific network | Network |
networks | Filter by multiple networks, input as an array | [Network!] |
realtimeInterpretation | Enable human-readable transactions (default: true) | Boolean |
spamFilter | Filter out spam transactions (default: true) | Boolean |
first | Number of items to return (for pagination) | Int |
after | Cursor for pagination | String |
Fields
Main Fields
Field | Description | Type |
---|---|---|
key | A unique identifier | String! |
network | Network where the transaction occurred | Network! |
timestamp | Unix timestamp in milliseconds | Timestamp! |
transaction | Contains detailed transaction information | OnChainTransaction! |
interpretation | Contains human-readable descriptions and asset transfers | ActivityInterpretation! |
Transaction Fields
Field | Description | Type |
---|---|---|
hash | Transaction hash | String! |
fromUser | The initiating address with details | Account! |
toUser | The receiving address with details | Account! |
value | Transaction value in wei | String! |
Interpretation Fields
Field | Description | Type |
---|---|---|
description | Human-readable description with variables | String! |
processedDescription | Fully processed human-readable description | String! |
descriptionDisplayItems | References for variables in the description | [ActivityFeedDisplayItem!]! |
inboundAttachments | Assets received in the transaction | [ActivityFeedDisplayItem!]! |
outboundAttachments | Assets sent in the transaction | [ActivityFeedDisplayItem!]! |
Account Fields
Field | Description | Type |
---|---|---|
address | The wallet address | Address! |
displayName | The account's display name (ENS, Lens, etc.) | DisplayName! |
Delta Fields
Field | Description | Type |
---|---|---|
perspectiveDelta | Contains token and NFT changes from the actor's perspective | ActivityAccountDelta! |
tokenDeltasV2 | Token transfer details including amounts and token info | FungibleTokenDeltaConnection! |
nftDeltasV2 | NFT transfer details including collection and token info | NftDeltaConnection! |
When working with token amounts, remember to divide amountRaw
by 10^decimals
to get the human-readable amount. For example, an amountRaw
of "50000000000000000000" with 18 decimals represents 50 ETH.
All fields marked with !
are required fields in the response.