Skip to main content
Retrieve the transaction history for a wallet address. This endpoint returns a paginated list of transactions including transfers, swaps, and other on-chain activity.
Using the JavaScript SDK? See getTransactionHistory for a simpler approach.
Transaction history is currently only supported for embedded wallets on Solana mainnet (network ID 101). Responses are cached for 5 seconds.

Parameters

ParameterTypeRequiredDescription
chainNamestringYesThe blockchain type (SOL for Solana)
addressstringYesThe wallet address to fetch transactions for
networkIdnumberYesThe network ID (101 for Solana mainnet)
limitnumberNoNumber of transactions to return (1-100)
offsetstringNoPagination offset from previous response

Response

The response includes an array of transactions and a nextOffset for pagination:
PropertyTypeDescription
transactionsarrayList of transaction objects
nextOffsetstringOffset to fetch the next page of transactions
Each transaction object contains:
PropertyTypeDescription
transactionHashstringThe transaction hash
blockNumbernumberBlock number of the transaction
transactionTimestampstringISO 8601 timestamp of the transaction
blockHashstringHash of the block containing the transaction
blockExplorerUrlsstring[]URLs to view the transaction on block explorers
fromAddressstringSender address
toAddressstringRecipient address
labelsstring[]Transaction type labels: sent, receive, or swap
assetTransfersarrayDetails of assets transferred in the transaction
chainNamestringThe blockchain type
networkIdnumberThe network ID
Each asset transfer contains:
PropertyTypeDescription
tokenAddressstringContract address of the token (empty for native tokens)
fromAddressstringSender address for this transfer
toAddressstringRecipient address for this transfer
amountnumberAmount transferred
metadataobjectToken metadata (name, symbol, decimals, imageUri)
    import { dynamicClient } from "./dynamic";

    interface Transaction {
      transactionHash: string;
      blockNumber: number;
      transactionTimestamp: string;
      fromAddress: string;
      toAddress: string;
      labels: string[];
      blockExplorerUrls: string[];
      assetTransfers: {
        tokenAddress?: string;
        fromAddress: string;
        toAddress: string;
        amount: number;
        metadata?: {
          name?: string;
          symbol?: string;
          decimals?: number;
          imageUri?: string;
        };
      }[];
    }

    interface TransactionsResponse {
      transactions: Transaction[];
      nextOffset?: string;
    }

    export async function getWalletTransactions(
      address: string,
      networkId: number,
      limit?: number,
      offset?: string
    ): Promise<TransactionsResponse> {
      const token = dynamicClient.auth.token;
      if (!token) {
        throw new Error("User not authenticated");
      }

      const params = new URLSearchParams({
        networkId: networkId.toString(),
      });

      if (limit) params.append("limit", limit.toString());
      if (offset) params.append("offset", offset);

      const response = await fetch(
        `https://app.dynamic.xyz/api/v0/sdk/${process.env.DYNAMIC_ENVIRONMENT_ID}/chains/SOL/transactions/${address}?${params}`,
        {
          headers: {
            Authorization: `Bearer ${token}`,
          },
        }
      );

      if (!response.ok) {
        throw new Error(`Failed to fetch transactions: ${response.statusText}`);
      }

      return response.json();
    }

    // Usage example
    async function fetchMyTransactions() {
      const wallet = dynamicClient.wallets.primary;
      if (!wallet) return;

      const { transactions, nextOffset } = await getWalletTransactions(
        wallet.address,
        101, // Solana mainnet
        10
      );

      console.log("Transactions:", transactions);

      // Fetch next page if available
      if (nextOffset) {
        const nextPage = await getWalletTransactions(
          wallet.address,
          101,
          10,
          nextOffset
        );
        console.log("Next page:", nextPage.transactions);
      }
    }