# Transaction History

Examples for working with transaction history.

### Get User Transactions

```typescript
import { YieldFiSDK } from "yieldfi-sdk";

async function getUserTransactions() {
  const sdk = await YieldFiSDK.create({
    gatewayUrl: "https://gw.yield.fi",
  });

  const accessToken = localStorage.getItem("accessToken");
  if (!accessToken) {
    console.log("Please login first");
    return;
  }

  // Get user's transactions (automatically filtered by authenticated address)
  const transactions = await sdk.vault.getTransactions(
    {
      chainId: 1,
      page: 1,
      pageSize: 20,
    },
    accessToken
  );

  console.log(`Found ${transactions.pagination.total} transactions\n`);

  transactions.data.forEach((tx) => {
    console.log(`Transaction ${tx.id}:`);
    console.log(`  Type: ${tx.type}`);
    console.log(`  Status: ${tx.status}`);
    console.log(`  Amount: ${tx.amount} ${tx.assetSymbol}`);
    console.log(`  Vault: ${tx.vaultAddress}`);
    console.log(`  Timestamp: ${new Date(tx.timestamp).toLocaleString()}`);
    console.log(`  Hash: ${tx.txnHash}`);
    console.log("");
  });
}

getUserTransactions();
```

### Filter Transactions

```typescript
async function filterTransactions() {
  const sdk = await YieldFiSDK.create({
    gatewayUrl: "https://gw.yield.fi",
  });

  const accessToken = localStorage.getItem("accessToken");

  // Get deposits only
  const deposits = await sdk.vault.getTransactions(
    {
      chainId: 1,
      type: "deposit",
      status: "PROCESSED",
      startDate: "2024-01-01T00:00:00.000Z",
      endDate: "2024-01-31T23:59:59.999Z",
    },
    accessToken
  );

  console.log(`Deposits in January: ${deposits.pagination.total}`);

  // Get redemptions only
  const redemptions = await sdk.vault.getTransactions(
    {
      chainId: 1,
      type: "redemption",
      status: "PROCESSED",
    },
    accessToken
  );

  console.log(`Total redemptions: ${redemptions.pagination.total}`);
}

filterTransactions();
```

### Get Transaction by Hash

```typescript
async function getTransactionByHash(txnHash: string, chainId: number) {
  const sdk = await YieldFiSDK.create({
    gatewayUrl: "https://gw.yield.fi",
  });

  const accessToken = localStorage.getItem("accessToken");

  try {
    const transaction = await sdk.vault.getTransactionByHash(
      txnHash,
      chainId,
      accessToken
    );

    console.log(`Transaction Found:`);
    console.log(`  ID: ${transaction.transaction.id}`);
    console.log(`  Type: ${transaction.transaction.type}`);
    console.log(`  Status: ${transaction.transaction.status}`);
    console.log(`  Amount: ${transaction.transaction.amount}`);
    console.log(`  User: ${transaction.transaction.userAddress}`);
  } catch (error) {
    console.error("Transaction not found or access denied");
  }
}

getTransactionByHash(
  "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
  1
);
```

### Get Filter Options

```typescript
async function showFilterOptions() {
  const sdk = await YieldFiSDK.create({
    gatewayUrl: "https://gw.yield.fi",
  });

  const accessToken = localStorage.getItem("accessToken");

  const filterOptions = await sdk.vault.getTransactionFilterOptions(accessToken);

  console.log("Available Filters:");
  console.log(`  Chain IDs: ${filterOptions.filters.chainIds.join(", ")}`);
  console.log(`  Statuses: ${filterOptions.filters.statuses.join(", ")}`);
  console.log(`  Types: ${filterOptions.filters.types.join(", ")}`);
}

showFilterOptions();
```

### Transaction Summary

```typescript
async function transactionSummary() {
  const sdk = await YieldFiSDK.create({
    gatewayUrl: "https://gw.yield.fi",
  });

  const accessToken = localStorage.getItem("accessToken");

  // Get all transactions
  const allTransactions = await sdk.vault.getTransactions(
    {
      chainId: 1,
      page: 1,
      pageSize: 100, // Get more for summary
    },
    accessToken
  );

  // Calculate summary
  const summary = {
    total: allTransactions.pagination.total,
    deposits: allTransactions.data.filter((tx) => tx.type === "deposit").length,
    redemptions: allTransactions.data.filter((tx) => tx.type === "redemption").length,
    processed: allTransactions.data.filter((tx) => tx.status === "PROCESSED").length,
    pending: allTransactions.data.filter((tx) => tx.status === "PENDING").length,
  };

  console.log("=== Transaction Summary ===");
  console.log(`Total: ${summary.total}`);
  console.log(`Deposits: ${summary.deposits}`);
  console.log(`Redemptions: ${summary.redemptions}`);
  console.log(`Processed: ${summary.processed}`);
  console.log(`Pending: ${summary.pending}`);
}

transactionSummary();
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.yield.fi/earn-with-yieldfi/integration-sdk/examples-and-guides/transaction-history.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
