Pendle has no endpoint for per-wallet epoch rewards. We reconstruct them from three independent data sources and on-chain transfer history.
Primary source for epoch boundaries, fee revenue, buyback amounts, airdrop breakdowns, and global stake totals. Polled via /core/v1/sPendle/global-data. Can lag several days after a distribution — fees appear immediately but buyback amounts populate later.
On-chain ground truth for distribution timing and amounts. Reads ERC-20 transfer events from the distributor contract to the sPENDLE token. Provides the actual distribution timestamp (typically 3 days after the API epoch-close date) and real sPENDLE amounts. Overrides API timestamps and fills missing buyback values.
Distribution proofs from the pendle-finance/merkle-distributions repo. Contains campaign files with exact per-epoch sPENDLE totals and co-distributed airdrop tokens (sENA, FF, RE, RESOLV). Supplements the API for epochs where buyback data hasn't populated yet.
The three sources above give us global distribution data. To compute what a specific wallet earned, we reconstruct their share from on-chain history:
Pendle's API provides global totals per epoch but has no endpoint for wallet-level rewards. There's no way to ask “how much did 0x... earn in epoch 5.” So we pull the user's full Transfer event history from Alchemy, compute their time-weighted balance across each epoch window, and divide by the global stake to attribute their share of each distribution.