Skip to main content
Returns the native and token transfers in and out of one wallet across the requested chains, newest first. An EVM wallet gets its native and ERC-20 transfers; a Solana wallet gets its native SOL and SPL token transfers. Each row carries the token’s metadata, the counterparty, and the USD value at transfer time. Use it to send “You received 50 USDC” notifications, match inbound transfers against the deposits you expect, or export a wallet’s history for tax tools.

Parameters

This endpoint accepts the shared parameters, plus the following.
string
native, erc20, or both, comma-separated. Defaults to both. NFT transfer types (erc721, erc1155) are not supported yet and return 400. For a Solana wallet, use native and spl.
string
in for transfers the wallet received, out for transfers it sent. Defaults to both.
string
Only return transfers at or after this time, as an RFC 3339 timestamp such as 2026-09-01T00:00:00Z.
string
Only return transfers at or before this time, as an RFC 3339 timestamp. Must not be earlier than from.
integer
Only return transfers at or after this block. Needs exactly one chain in chains, because block numbers mean different things on different chains. Without it, the request returns 422 CONFLICTING_FILTERS. For a Solana wallet, this is a slot, and chains can be left out.
integer
Only return transfers at or before this block. Needs exactly one chain in chains, and must not be lower than from_block. For a Solana wallet, this is a slot, and chains can be left out.
boolean
default:"false"
EVM wallets only. Set to true to add each transfer’s position in its block: log_index on erc20 rows and trace_address on native rows. Use it to order transfers within a block or to match them to logs and traces.
string
Solana wallets only. Comma-separated instruction names, such as TransferChecked,Transfer, matched case-insensitively against solana.instruction. Up to 32 names. For an EVM wallet, it matches nothing, so the response is empty.
By default, transfers of tokens Goldsky has no price source for are left out. If you match deposits in less common tokens, set include_unknown_price=true so none are missed.

Response

object[]
One entry per transfer, newest first by block_timestamp.
object

Solana object

string
The instruction that moved the tokens, such as TransferChecked, SplTransfer, Transfer, MintTo, Burn, or CreateAccount. Filter on it with instruction.
string | null
The wallet’s own token account on this row. The wallet itself on a native row. null on an spl row without one.
string | null
The other side’s token account. null on native rows, mints, and burns.
string | null
Who authorized the movement when it wasn’t the sender, such as a delegate or the mint authority. null when the sender signed.
string | null
The Token-2022 transfer fee withheld, in the token’s smallest unit. The recipient is credited amount_raw minus this. null means unknown, not zero.
integer
The transaction’s index in its slot.
integer
The index of the top-level instruction in the transaction.
integer
The index of the inner instruction within its top-level instruction.
integer
The transfer’s index inside an SPL Token Batch instruction, which makes several transfers at once. With transaction_hash, direction, and the other indexes, it tells the rows of one transaction apart.

How the data behaves

  • Transfers have no ID. One transaction can contain several identical transfers, so deduplicating on (chain, transaction_hash, from_address, to_address, token_address, amount_raw) can drop real ones.
  • Reorgs remove rows without notice. There is no removed flag. A transfer reversed by a chain reorganization stops appearing in responses. If its transaction lands again, it can have a different block_number and block_timestamp, so don’t build keys from block fields.
  • USD values can change. The API prices each transfer when you request it, so price_usd and amount_usd for an old transfer can change as Goldsky’s price history fills in.
  • Chains are merged by time. Rows from different chains are interleaved by block_timestamp. Two transfers on different chains with the same timestamp can have happened in either order.

Example

This request gets the most recent transfer into a wallet on Base: