Skip to main content

Pump.fun Holder Rewards and Cashback API

A Pump.fun holder rewards coin sends its creator fee to the people holding the coin instead of to a creator wallet. Pump.fun pays those holders itself, with the distribute_fee_to_holders instruction, and holders do not claim anything. Cashback coins worked the other way round: the fee went back to traders, who claimed it. New cashback coins can no longer be created, but existing ones still trade and their cashback can still be claimed. The Bitquery API reads both from the Solana chain: which coins pay holder rewards, every payout and its recipients, what a wallet received, and every cashback claim.

The flag is set at launch: create_v2 takes is_holder_reward (and, earlier, is_cashback_enabled). A holder rewards coin cannot go back to a regular coin, but a regular coin can be converted through a community takeover. Trade events then report holder_rewards_bps and holder_rewards, which are zero on regular coins.

All queries run in the Bitquery IDE on the real-time dataset, which keeps about 8 hours of Solana instructions. To stream one, change query to subscription and remove limit and orderBy. For creator fees, claims and fee sharing on regular coins, see the Pump.fun Creator Rewards API.

A three-minute walkthrough, Pump.fun Creator Rewards and Holder Rewards API, runs these queries live and shows where to get the history beyond 8 hours.

What you wantInstruction or eventProgram
New holder rewards coinscreate_v2 with is_holder_reward truePump.fun
Is a coin a holder rewards coinTradeEvent holder_rewards_bps above zeroPump.fun
Payout per coinDistributeFeeToHoldersEvent: mint, quote_mint, recipients, totalPump.fun
Payout per holder walletbalance updates of distribute_fee_to_holdersPump.fun
Cashback claimsClaimCashbackEvent: user, amount, total_claimed, total_cashback_earnedPump.fun, PumpSwap

New Pump.fun holder rewards coins​

Lists coins launched with is_holder_reward set to true. The first account of the instruction is the new mint; the arguments carry the name, symbol and the other launch flags such as is_mayhem_mode.

Run it in the IDE ➤

query PumpfunNewHolderRewardsCoins {
Solana {
Instructions(
limit: {count: 20}
orderBy: {descending: Block_Time}
where: {Instruction: {Program: {Address: {is: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"}, Method: {is: "create_v2"}, Arguments: {includes: {Name: {is: "is_holder_reward"}, Value: {Boolean: true}}}}}, Transaction: {Result: {Success: true}}}
) {
Block {
Time
}
Transaction {
Signature
Signer
}
Instruction {
Accounts {
Address
}
Program {
Arguments {
Name
Value {
... on Solana_ABI_Address_Value_Arg {
address
}
... on Solana_ABI_BigInt_Value_Arg {
bigInteger
}
... on Solana_ABI_Boolean_Value_Arg {
bool
}
... on Solana_ABI_String_Value_Arg {
string
}
}
}
}
}
}
}
}

Latest Pump.fun holder reward payouts​

Each DistributeFeeToHoldersEvent is one payout round for one coin: the mint, the quote_mint the reward is paid in, the number of recipients and the total paid, in the quote mint's smallest unit.

Run it in the IDE ➤

query PumpfunHolderRewardPayouts {
Solana {
Instructions(
limit: {count: 20}
orderBy: {descending: Block_Time}
where: {Instruction: {Program: {Address: {is: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"}, Method: {is: "DistributeFeeToHoldersEvent"}}}, Transaction: {Result: {Success: true}}}
) {
Block {
Time
}
Transaction {
Signature
}
Instruction {
Program {
Arguments {
Name
Value {
... on Solana_ABI_Address_Value_Arg {
address
}
... on Solana_ABI_BigInt_Value_Arg {
bigInteger
}
}
}
}
}
}
}
}

To follow one coin, add Arguments: {includes: {Name: {is: "mint"}, Value: {Address: {is: "<mint>"}}}} to the Program filter.

Top Pump.fun holder rewards recipients​

Ranks the accounts that received the most holder rewards in the real-time window, per reward currency. For SOL rewards Account.Address is the wallet; for SPL rewards such as WBTC it is a token account and Token.Owner is the wallet.

Run it in the IDE ➤

query PumpfunTopHolderRewardsRecipients {
Solana {
InstructionBalanceUpdates(
limit: {count: 20}
orderBy: {descendingByField: "received_usd"}
where: {Instruction: {Program: {Address: {is: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"}, Method: {is: "distribute_fee_to_holders"}}}, BalanceUpdate: {Amount: {gt: "0"}}, Transaction: {Result: {Success: true}}}
) {
BalanceUpdate {
Account {
Address
Token {
Owner
}
}
Currency {
Symbol
MintAddress
}
}
payouts: count
received: sum(of: BalanceUpdate_Amount)
received_usd: sum(of: BalanceUpdate_AmountInUSD)
}
}
}

Holder rewards received by one wallet​

Totals per reward currency for one wallet. The any filter matches SOL paid to the wallet itself and SPL tokens paid to token accounts it owns. Replace the address with the wallet you want.

Run it in the IDE ➤

query PumpfunHolderRewardsReceivedByWallet {
Solana {
InstructionBalanceUpdates(
where: {Instruction: {Program: {Address: {is: "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"}, Method: {is: "distribute_fee_to_holders"}}}, BalanceUpdate: {Amount: {gt: "0"}}, any: [{BalanceUpdate: {Account: {Address: {is: "GG5ATPW7bxGm5y4aGa2uWWZV1JvjETiM2Rabc2fT8Y7f"}}}}, {BalanceUpdate: {Account: {Token: {Owner: {is: "GG5ATPW7bxGm5y4aGa2uWWZV1JvjETiM2Rabc2fT8Y7f"}}}}}], Transaction: {Result: {Success: true}}}
) {
BalanceUpdate {
Currency {
Symbol
MintAddress
}
}
payouts: count
received: sum(of: BalanceUpdate_Amount)
received_usd: sum(of: BalanceUpdate_AmountInUSD)
}
}
}

Pump.fun cashback claims​

Cashback coins launched before cashback was retired still pay out when traders claim. Claims run on the Pump.fun program (claim_cashback, claim_cashback_v2) and on PumpSwap (claim_cashback). Each ClaimCashbackEvent carries the user, the amount claimed, and the user's running total_claimed and total_cashback_earned.

Run it in the IDE ➤

query PumpfunCashbackClaims {
Solana {
Instructions(
limit: {count: 20}
orderBy: {descending: Block_Time}
where: {Instruction: {Program: {Address: {in: ["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P", "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA"]}, Method: {is: "ClaimCashbackEvent"}}}, Transaction: {Result: {Success: true}}}
) {
Block {
Time
}
Transaction {
Signature
}
Instruction {
Program {
Address
Arguments {
Name
Value {
... on Solana_ABI_Address_Value_Arg {
address
}
... on Solana_ABI_BigInt_Value_Arg {
bigInteger
}
}
}
}
}
}
}
}

total_cashback_earned minus total_claimed is what that user can still claim.

Pitfalls​

  • About 8 hours of history. Instructions and InstructionBalanceUpdates on Solana are real-time only. For lifetime payouts, store a subscription or read the Solana Kafka streams.
  • Pump.fun's own accounts show up. Payouts are signed by HckQ93Xqjjo8mwt5pNPWvyCTZXQZ858rvzmm7ZRrZg9t, and that address also appears as a token-account owner in the recipient list. Drop it when you rank real holders.
  • Rewards are not always SOL. The reward is paid in the coin's quote mint: SOL, another pump coin, WBTC and other SPL tokens all occur. Raw event amounts use that mint's decimals.
  • The creator field points at pump.fun. On a holder rewards coin, creator is a pump.fun-controlled address, not the deployer. Use the signer of create_v2 for the deployer.
  • Trade events still report a creator fee. On holder rewards coins creator_fee equals holder_rewards; the fee is computed as before and only the recipient changes.

Frequently Asked Questions

What is a Pump.fun holder rewards coin?

A coin launched with is_holder_reward set to true on create_v2. Its creator fee goes to holders instead of a creator wallet, and pump.fun pays them with distribute_fee_to_holders; holders do not claim.

How do I check if a Pump.fun coin pays holder rewards?

Look at the coin's create_v2 arguments for is_holder_reward, or at any recent TradeEvent for the mint: holder_rewards_bps above zero means it is a holder rewards coin.

How much has a wallet earned from Pump.fun holder rewards?

Sum the positive balance updates of distribute_fee_to_holders where the account is the wallet or a token account it owns, as in the wallet query. The real-time dataset covers about 8 hours.

Is Pump.fun cashback still available?

New cashback coins can no longer be created, but existing cashback coins keep trading and accrued cashback can still be claimed with claim_cashback or claim_cashback_v2.

Build with Bitquery

Ready to run this in production?

Get an API key and run these queries in minutes, or talk to us about plans and enterprise delivery.