Documentation Index
Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
Use this file to discover all available pages before exploring further.
Data Retention - Only the most recent 1 year of transfer history is currently available.
Overview
getTransfersByAddress returns parsed, human-readable token and native SOL transfer objects for a wallet address. It is focused on transfer activity, so it returns concise transfer records instead of full transaction payloads.
Use getTransfersByAddress when you need wallet transfer history for payments, portfolio activity, token movement analytics, balance reconciliation, or counterparty-specific transfer monitoring. You can filter transfer history by mint, block time, amount, slot, direction, and counterparty. Use getTransactionsForAddress when you need full transaction data, signatures-only history, or non-transfer activity.
Key Features
Parsed transfer objects
Return human-readable transfer records with parsed accounts, amounts, decimals, and transfer types.
Reconciliation ready
Model SOL, WSOL, Token-2022 fees, mints, burns, and account owner changes so balances can be reconciled accurately.
Mint, time, and amount filters
Narrow transfer history by mint address, block time range, or raw amount range.
Counterparty filters
Filter transfers by sender or recipient with
with and direction.Accuracy and Reconciliation
getTransfersByAddress is built for applications that need transfer history they can trust for ledgers, payment tracking, portfolio activity, and balance reconciliation. Instead of returning raw transaction payloads and leaving every edge case to your parser, the API returns normalized transfer objects with parsed owner accounts, token accounts, mints, raw amounts, decimals, UI amounts, instruction positions, and confirmation status.
The response explicitly models the transfer cases that commonly make Solana history difficult to reconcile:
- Standard SPL token and native SOL transfers.
- Token-2022 transfers with withheld fees, represented as ordinary
transferrows with separate fee fields. - Mints and burns, represented as transfers with a
nullsender or recipient. - SOL wrapping and unwrapping behavior, with a default mode designed to avoid noisy lifecycle rows.
- Token account owner changes via SetAuthority.
- Token-2022 withheld fee withdrawals.
- Intermediary account flows, returned as the underlying transfer records instead of being collapsed into a guessed net movement.
Quick Start
Request Parameters
The
address parameter is the wallet owner address, not an associated token account (ATA). The API finds transfer activity for token accounts owned by that wallet.Base58-encoded owner wallet address to query transfers for. Pass the wallet owner address, not an associated token account (ATA).
Optional configuration object for filtering, pagination, commitment, ordering, and SOL/WSOL behavior.
Filter by counterparty address. Returns only transfers to or from this address.
Filter by transfer direction relative to
address.in: transfers received byaddressout: transfers sent byaddressany: incoming and outgoing transfers
Filter by token mint address. Use
So11111111111111111111111111111111111111111 for native SOL and So11111111111111111111111111111111111111112 for WSOL.Controls how native SOL and WSOL are represented.
merged: WSOL is treated as native SOL. Wrap and unwrap lifecycle rows are excluded, and WSOL mint values are rewritten to the native SOL mint.separate: WSOL is preserved as a distinct mint, and wrap and unwrap lifecycle rows are included.
Additional filters for amount, block time, and slot.
Maximum number of transfers to return. Range: 1 to 100.
Cursor from the previous response for pagination.
Data commitment level.
finalizedconfirmed
Result ordering.
desc: newest firstasc: oldest first
Filters
Use comparison filters for numeric range queries. All comparison fields are optional and can be combined.| Filter | Type | Description |
|---|---|---|
amount | ComparisonFilter | Raw transfer amount, not UI amount. |
blockTime | ComparisonFilter | Block timestamp in Unix seconds. |
slot | ComparisonFilter | Slot number. |
Transfer Types
Thetype field identifies the transfer behavior represented by each row.
| Type | Description | fromUserAccount | toUserAccount |
|---|---|---|---|
transfer | Standard token or SOL transfer between two wallets. | Sender | Recipient |
mint | New tokens minted to a wallet. | null | Recipient |
burn | Tokens permanently destroyed. | Sender | null |
wrap | SOL wrapped into WSOL. Excluded by default in solMode: "merged". | null | Owner |
unwrap | WSOL unwrapped back to native SOL, or rent recovered from closing a token account. Excluded by default in solMode: "merged". | Owner | null or lamport destination |
changeOwner | Token account ownership changed with SetAuthority. | Old owner | New owner |
withdrawWithheldFee | Token-2022 withheld fees collected from a mint or accounts. | null | Fee recipient |
Transfer Types and Instructions
| Transfer type | Covered instructions | Default visibility |
|---|---|---|
transfer | SystemProgram::Transfer, SystemProgram::TransferWithSeed, SystemProgram::WithdrawNonceAccount, SystemProgram::CreateAccount, SystemProgram::CreateAccountWithSeed, SystemProgram::CreateAccountAllowPrefund | Always |
transfer | Token::Transfer, Token::TransferChecked, Token-2022::Transfer, Token-2022::TransferChecked | Always |
transfer | Token-2022::TransferCheckedWithFee, with feeAmount and feeUiAmount fields | Always |
mint | Token::MintTo, Token::MintToChecked | Always |
burn | Token::Burn, Token::BurnChecked | Always |
wrap | Token::SyncNative, Token::InitializeAccount, Token::InitializeAccount2, Token::InitializeAccount3 when used for WSOL lifecycle handling | solMode: "separate" only |
unwrap | Token::CloseAccount on WSOL with balance greater than zero | solMode: "separate" only |
unwrap | Token::CloseAccount rent recovery for non-WSOL token accounts, or WSOL accounts with zero token balance | solMode: "separate" only |
changeOwner | Token::SetAuthority(AccountOwner) | Always |
withdrawWithheldFee | Token-2022::WithdrawWithheldTokensFromMint, Token-2022::WithdrawWithheldTokensFromAccounts | Always |
Response Field Details
fromUserAccountandtoUserAccountare always present. When a side does not exist, the value isnull.fromTokenAccountandtoTokenAccountare only included when token-account endpoints are meaningful for the row. They are omitted completely for native SOL transfers.- Mint transfers are one-sided:
fromUserAccountisnull, and they can only be returned as inbound transfers for the recipient. - Burn transfers are one-sided:
toUserAccountisnull, and they can only be returned as outbound transfers for the burning owner.
SOL and wSOL Behavior
SOL exists on Solana in two forms that often appear together in real user activity:- Native SOL is the chain’s native asset. It lives directly in a wallet or account as lamports. One SOL is 1,000,000,000 lamports.
- Wrapped SOL (WSOL, often written wSOL) is an SPL token representation of SOL. It uses the WSOL mint
So11111111111111111111111111111111111111112and lives in a token account, like USDC or any other SPL token.
getTransfersByAddress uses solMode: "merged". In this mode:
- Native SOL and WSOL are treated as one SOL asset when querying by
So11111111111111111111111111111111111111111. - WSOL transfer rows are normalized to the native SOL mint so SOL-denominated history is easier to reconcile.
- Wrap and unwrap lifecycle rows are excluded because they usually represent movement between accounts controlled by the same owner, not a payment to another user.
- SOL and WSOL transfers between different owners are still represented as transfers.
- Rent recovered from
CloseAccountis represented as a native SOLunwraprow when close-account lifecycle rows are returned.
solMode: "separate" when you need WSOL as a distinct SPL token mint or want to inspect wrap and unwrap lifecycle records. In this mode, WSOL keeps the mint So11111111111111111111111111111111111111112, and wrap/unwrap records are returned with type: "wrap" or type: "unwrap".
For WSOL account closures in solMode: "separate", unwrap records for the WSOL mint represent the remaining WSOL token balance returned as SOL. Rent refunded from the closed token account is returned as a separate native SOL unwrap row.
Token-2022 Transfer Fees
Token-2022TransferCheckedWithFee instructions are represented as one transfer record with type: "transfer". The destination amount is returned in amount; withheld fee details are returned in feeAmount and feeUiAmount.
For transfers with fees, the source is debited amount + feeAmount, while the destination is credited amount.
Limitations
- Failed transactions are not included in V1.
- Hidden SOL movements inferred only from balance changes are not supported in V1.
harvestWithheldTokensToMintis not supported in V1 because it does not indicate the collected amount.- Intermediary account flows are not reduced. If a transaction moves funds through intermediary accounts, the underlying transfer records are returned.
Examples
Filter by USDC
Incoming Transfers From a Sender
Amount and Time Range
Paginated Request
Fetch Full Transactions for Transfer Rows
getTransfersByAddress returns parsed transfer rows, not full transaction payloads. If you need the full transaction for every transfer, page through transfers first, dedupe by signature, then fetch the full transactions with batched getTransaction calls.
getTransfersByAddress is not batchable across multiple owner addresses. Query one owner address at a time, then batch the resulting getTransaction requests by signature. A single transaction can emit multiple transfer rows, so always dedupe signatures before fetching transactions.