Overview
getTransactionsForAddress is a Helius-exclusive RPC method that returns an address’s transaction history with advanced filtering, flexible sorting, and efficient pagination. It is not part of standard Solana RPC.
Unlike getSignaturesForAddress, which only returns signatures and skips associated token accounts, getTransactionsForAddress can return complete transaction data, including a wallet’s associated token account (ATA) activity, in a single call. That makes it the fastest path to a full address history for backfilling, indexing, and analytics.
This method requires a Developer plan or higher and returns up to 1,000 full transactions per call.
Flexible sorting
Sort chronologically (oldest first) or reverse (newest first).
Advanced filtering
Filter by time ranges, slots, signatures, status, and token transfers.
Full transaction data
Get complete transaction details in one call, no follow-up getTransaction needed.
Token accounts
Include transactions for an address’s associated token accounts.
When to use this
UsegetTransactionsForAddress when you need:
- Complete wallet token history, including associated token accounts
- A fast single-call backfill for an indexer or data pipeline
- Time-based or slot-based transaction analysis and reporting
- Status filtering to keep only succeeded or only failed transactions
- Chronological historical replay (oldest-first ordering)
- Token launch analysis: first mint transactions and early holders
- Wallet funding history and counterparty discovery
- Compliance and audit reports for a specific time period
getTransfersByAddress instead.
Network support
| Network | Supported | Retention Period |
|---|---|---|
| Mainnet | Yes | Unlimited |
| Devnet | Yes | 2 weeks |
| Testnet | No | N/A |
Quickstart
Get your API key
Obtain your API key from the Helius Dashboard.
Query with advanced features
Get all successful transactions for a wallet between two dates, sorted chronologically:
Understand the parameters
This example shows the key features:
- transactionDetails: set to
'full'to get complete transaction data in one call - sortOrder: use
'asc'for chronological order (oldest first) or'desc'for newest first - filters.blockTime: set time ranges with
gte(greater than or equal) andlte(less than or equal) - filters.status: filter to only
'succeeded'or'failed'transactions - filters.tokenAccounts: include transfers, mints, and burns for associated token accounts
Request parameters
Base-58 encoded public key of the account to query transaction history for
Level of transaction detail to return:
signatures: Basic signature info (faster)full: Complete transaction data (eliminates need for getTransaction calls, supports limit up to 1,000)
Sort order for results:
desc: Newest first (default)asc: Oldest first (chronological, great for historical analysis)
Maximum transactions to return:
- Up to 1000 when
transactionDetails: "signatures" - Up to 1000 when
transactionDetails: "full"
Pagination token from previous response (format:
"slot:position")Commitment level:
finalized or confirmed. The processed commitment is not supported.Advanced filtering options for narrowing down results.
Filter by slot number using comparison operators:
gte, gt, lte, ltExample: { "slot": { "gte": 1000, "lte": 2000 } }Filter by Unix timestamp using comparison operators:
gte, gt, lte, lt, eqExample: { "blockTime": { "gte": 1640995200, "lte": 1641081600 } }Filter by transaction signature using comparison operators:
gte, gt, lte, ltExample: { "signature": { "lt": "SIGNATURE_STRING" } }Filter by transaction success/failure status:
succeeded: Only successful transactionsfailed: Only failed transactionsany: Both successful and failed (default)
{ "status": "succeeded" }Filter transactions for related token accounts:
none: Only return transactions that reference the provided address (default)balanceChanged: Return transactions that reference either the provided address or modify the balance of a token account owned by the provided address (recommended)all: Return transactions that reference either the provided address or any token account owned by the provided address
{ "tokenAccounts": "balanceChanged" }Filter to transactions where the queried address participated in a token transfer matching a counterparty, direction, mint, or raw amount range. All fields are optional and combined with AND semantics.Example:
{ "tokenTransfer": { "direction": "in", "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" } }Counterparty address. Matches transfers whose other side is this address.
Filter by transfer direction relative to the queried address:
in: Transfers received by the queried addressout: Transfers sent by the queried addressany: Incoming and outgoing transfers
Token mint to filter on.
Amount comparison using the raw on-chain amount, not the UI or decimal-adjusted amount. Supports
gt, gte, lt, and lte.Encoding format for transaction data (only applies when
transactionDetails: "full"). Same as getTransaction API. Options: json, jsonParsed, base64, base58Set the max transaction version to return. If omitted, only legacy transactions will be returned. Set to
0 to include all versioned transactions.The minimum slot that the request can be evaluated at
Metering
Successful responses are metered by what is returned:| Response type | Credits |
|---|---|
| Full transactions | 10 credits per 100 returned transactions, rounded up; 10-credit minimum |
| Signatures only | 10 credits flat, regardless of count |
| Failed API responses | Free |
Response
The response shape depends ontransactionDetails. Signatures mode returns lightweight signature records; full mode returns complete transaction and metadata objects.
- Signatures Response
- Full Transaction Response
Response fields
| Field | Type | Description |
|---|---|---|
signature | string | Transaction signature (base-58 encoded). Only in signatures mode. |
slot | number | The slot containing the block with this transaction. |
transactionIndex | number | The zero-based index of the transaction within its block. Useful for transaction ordering and block reconstruction. |
blockTime | number | null | Estimated production time as Unix timestamp (seconds since epoch). |
err | object | null | Error if the transaction failed, null if successful. Only in signatures mode. |
memo | string | null | Memo associated with the transaction. Only in signatures mode. |
confirmationStatus | string | Transaction’s cluster confirmation status. Only in signatures mode. |
transaction | object | Full transaction data. Only in full mode. |
meta | object | Transaction status metadata. Only in full mode. |
paginationToken | string | null | Token for fetching the next page, or null if no more results. |
transactionIndex field is exclusive to getTransactionsForAddress. Other similar endpoints like getSignaturesForAddress, getTransaction, and getTransactions do not include this field.
Filters
You can use comparison operators forslot, blockTime, and signature, plus the special status, tokenAccounts, and tokenTransfer filters. Combining multiple filters narrows the result to their intersection.
Comparison operators
These operators work like database queries to give you precise control over your data range.| Operator | Full Name | Description | Example |
|---|---|---|---|
gte | Greater Than or Equal | Include values ≥ specified value | slot: { gte: 100 } |
gt | Greater Than | Include values > specified value | blockTime: { gt: 1641081600 } |
lte | Less Than or Equal | Include values ≤ specified value | slot: { lte: 2000 } |
lt | Less Than | Include values < specified value | blockTime: { lt: 1641168000 } |
eq | Equal | Include values exactly equal (only blockTime) | blockTime: { eq: 1641081600 } |
Enum filters
| Filter | Description | Values |
|---|---|---|
status | Filter transactions by success/failure | succeeded, failed, or any |
tokenAccounts | Filter transactions for related token accounts | none, balanceChanged, or all |
Associated token accounts
On Solana, a wallet doesn’t hold tokens directly. Instead, the wallet owns token accounts, and those token accounts hold the tokens. When someone sends you USDC, it goes to your USDC token account, not your main wallet address. This method is unique because it can query complete token history, including a wallet’s associated token accounts (ATAs). Native RPC methods such asgetSignaturesForAddress do not include ATAs.
The tokenAccounts filter controls this behavior:
none(default): Only returns transactions that directly reference the wallet address. Use this when you only care about direct wallet interactions.balanceChanged(recommended): Returns transactions that reference the wallet address or modify the balance of a token account owned by the wallet. This filters out spam and unrelated operations like fee collections or delegations, giving you a clean view of meaningful wallet activity.all: Returns all transactions that reference the wallet address or any token account owned by the wallet.
tokenAccounts filter does not support transactions prior to December 2022. It depends on token transfer metadata introduced to Solana on slot 111,491,819. To cover earlier activity, see the historical token account workaround.
Token transfer filter
ThetokenTransfer filter narrows results to transactions where the queried address participated in a token transfer matching specific criteria: a particular counterparty, mint, direction, or amount range.
Use it to answer questions like:
- When did this wallet receive USDC from a specific counterparty?
- Show every outgoing transfer above 1,000 tokens.
- When did this wallet ever touch this specific mint?
filters object of the request config:
tokenTransfer are optional. Combining multiple fields is treated as AND.
| Field | Type | Default | Description |
|---|---|---|---|
with | string (pubkey) | - | Counterparty address. Matches transfers whose other side is this address. |
direction | "in" | "out" | "any" | "any" | Whether the queried address received, sent, or either. |
mint | string (pubkey) | - | Token mint to filter on. |
amount | object | - | Amount comparison. Uses the raw on-chain amount, not the UI or decimal-adjusted amount. |
| Operator | Meaning |
|---|---|
gt | Strictly greater than |
gte | Greater than or equal |
lt | Strictly less than |
lte | Less than or equal |
{ "gte": 1000000, "lte": 5000000 } for a closed range. tokenTransfer composes with the other top-level filters (slot, blockTime, status, and tokenAccounts); the final result is the intersection.
Examples
Time-based analytics
Generate monthly transaction reports:Token mint creation
Find the mint creation transaction for a specific token:Funding transactions
Find who funded a specific address:Token transfers
Filter bytokenTransfer to isolate specific token movements.
USDC inflows to an address:
Pagination
When you have more transactions than your limit, use thepaginationToken from the response to fetch the next page. The token is a simple string in the format "slot:position" that tells the API where to continue from.
Use the pagination token from each response to fetch the next page:
Multiple addresses
You cannot query multiple addresses in a single request. Each address query counts as a separate API request and is metered accordingly. To fetch transactions for multiple addresses, query each address within the same time or slot window, then merge and sort:Best practices
Performance. UsetransactionDetails: "signatures" when you don’t need full transaction data. Use reasonable page sizes for better response times, and filter by time ranges or specific slots for more targeted queries.
Filtering. Start with broad filters and narrow down progressively. Use time-based filters for analytics and reporting workflows, and combine multiple filters for precise queries that target specific transaction types or time periods.
Pagination. Store pagination tokens when you need to resume large queries later. Monitor pagination depth for performance planning, and use ascending order when you need to replay historical events in chronological order.
Error handling. Handle rate limits gracefully with exponential backoff. Validate addresses before making requests, and cache results when appropriate to reduce API usage.
Limitations and edge cases
A small set of addresses route to legacy archival, are limited to slot-scan fallback, or return empty. Token-account discovery before slot 111,491,819 also requires a workaround. Expand the sections below for the full details.Unsupported and specially-routed addresses
Unsupported and specially-routed addresses
Routed to old archival. Requests for these addresses are routed to our old archival system.
Slot-scan fallback. Requests for these addresses are forwarded to our new archival system, and are queryable through a slot-by-slot scan approach (max 100 slots). However, this data is not indexed.
Returns empty (
| Address | Name |
|---|---|
Stake11111111111111111111111111111111111111 | Stake Program |
StakeConfig11111111111111111111111111111111 | Stake Config |
Sysvar1111111111111111111111111111111111111 | Sysvar Owner |
AddressLookupTab1e1111111111111111111111111 | Address Lookup Table |
BPFLoaderUpgradeab1e11111111111111111111111 | BPF Loader Upgradeable |
| Address | Name |
|---|---|
11111111111111111111111111111111 | System Program |
ComputeBudget111111111111111111111111111111 | Compute Budget |
MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr | Memo Program |
Vote111111111111111111111111111111111111111 | Vote Program |
is_reserved_address). Requests are forwarded to our new archival system, however the data is not indexed, and queries return empty.| Address | Name |
|---|---|
BPFLoader1111111111111111111111111111111111 | BPF Loader (deprecated) |
BPFLoader2111111111111111111111111111111111 | BPF Loader |
Config1111111111111111111111111111111111111 | Config Program |
Ed25519SigVerify111111111111111111111111111 | Ed25519 Program |
Feature111111111111111111111111111111111111 | Feature Program |
KeccakSecp256k11111111111111111111111111111 | Secp256k1 Program |
LoaderV411111111111111111111111111111111111 | Loader V4 |
NativeLoader1111111111111111111111111111111 | Native Loader |
SysvarC1ock11111111111111111111111111111111 | Clock Sysvar |
SysvarEpochSchedu1e111111111111111111111111 | Epoch Schedule Sysvar |
SysvarFees111111111111111111111111111111111 | Fees Sysvar |
Sysvar1nstructions1111111111111111111111111 | Instructions Sysvar |
SysvarRecentB1ockHashes11111111111111111111 | Recent Blockhashes Sysvar |
SysvarRent111111111111111111111111111111111 | Rent Sysvar |
SysvarRewards111111111111111111111111111111 | Rewards Sysvar |
SysvarS1otHashes111111111111111111111111111 | Slot Hashes Sysvar |
SysvarS1otHistory11111111111111111111111111 | Slot History Sysvar |
SysvarStakeHistory1111111111111111111111111 | Stake History Sysvar |
SysvarEpochRewards11111111111111111111111111 | Epoch Rewards Sysvar |
SysvarLastRestartS1ot1111111111111111111111 | Last Restart Slot Sysvar |
Workaround: historical token account discovery (before slot 111,491,819)
Workaround: historical token account discovery (before slot 111,491,819)
For addresses with token account activity before slot 111,491,819, the
tokenAccounts filter cannot determine ownership because the owner field in token balance metadata didn’t exist yet. To get complete results, you can discover those token accounts manually by parsing early transaction instructions, then query getTransactionsForAddress in parallel for each one.How is this different from getSignaturesForAddress?
If you’re familiar with the standardgetSignaturesForAddress method, getTransactionsForAddress collapses multi-step workflows into a single call and adds filtering, sorting, and token-account support.
Get full transactions in one call
WithgetSignaturesForAddress, you need two steps:
getTransactionsForAddress, it’s one call:
Get token history in one call
WithgetSignaturesForAddress, you need to first call getTokenAccountsByOwner and then query for every token account:
getTransactionsForAddress you only need to set filters.tokenAccounts:
Additional capabilities
Chronological sorting
Sort transactions from oldest to newest with
sortOrder: 'asc'.Time-based filtering
Filter by time ranges using
blockTime filters.Status filtering
Get only successful or failed transactions with the
status filter.Simpler pagination
Use
paginationToken instead of confusing before/until signatures.Next steps
Indexing guide
Use getTransactionsForAddress to backfill and sync a Solana index.
getTransfersByAddress
Parsed, transfer-only history for payments and reconciliation.
API reference
Full request and response schema for getTransactionsForAddress.
Historical data overview
Compare all Solana historical data methods.