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) and Solana devnet (network ID 103). Responses are cached for 5 seconds.For devnet, we only retain 2 weeks of transaction history.

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 { useDynamicContext } from "@dynamic-labs/sdk-react-core";
import { useEffect, useState } from "react";

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;
    };
  }[];
}

const WalletTransactions = () => {
  const { primaryWallet, authToken } = useDynamicContext();
  const [transactions, setTransactions] = useState<Transaction[]>([]);
  const [loading, setLoading] = useState(false);

  useEffect(() => {
    const fetchTransactions = async () => {
      if (!primaryWallet || !authToken) return;

      setLoading(true);
      try {
        const response = await fetch(
          `https://app.dynamic.xyz/api/v0/sdk/${process.env.NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID}/chains/SOL/transactions/${primaryWallet.address}?networkId=101&limit=10`,
          {
            headers: {
              Authorization: `Bearer ${authToken}`,
            },
          }
        );

        const data = await response.json();
        setTransactions(data.transactions);
      } catch (error) {
        console.error("Failed to fetch transactions:", error);
      } finally {
        setLoading(false);
      }
    };

    fetchTransactions();
  }, [primaryWallet, authToken]);

  if (loading) return <div>Loading transactions...</div>;

  return (
    <div>
      <h2>Transaction History</h2>
      {transactions.map((tx) => (
        <div key={tx.transactionHash}>
          <p>Hash: {tx.transactionHash}</p>
          <p>Type: {tx.labels.join(", ")}</p>
          <p>Date: {new Date(tx.transactionTimestamp).toLocaleString()}</p>
          {tx.assetTransfers.map((transfer, i) => (
            <p key={i}>
              {transfer.metadata?.symbol}: {transfer.amount}
            </p>
          ))}
          <a href={tx.blockExplorerUrls[0]} target="_blank" rel="noopener noreferrer">
            View on Explorer
          </a>
        </div>
      ))}
    </div>
  );
};
Using the JavaScript SDK? See getTransactionHistory for a simpler approach.