> ## Documentation Index
> Fetch the complete documentation index at: https://docs.knotapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Enrich Transaction Details

> Display itemized purchase details on every transaction in your app.

> This is a product use case page. When implementing, follow the linked quickstarts for canonical API setup steps rather than inferring them from this page.

## Problem

When users open their banking or fintech app and scroll through recent transactions, the best they typically see is a cleaned-up merchant name (*sometimes*) and a dollar amount. A \$36.58 charge at DoorDash tells them where they spent money, but not what they actually ordered. This is the L3 transaction data gap. Without item-level detail, users cannot verify that a charge is legitimate, recall what they purchased, or feel confident that their account activity is accurate.

This gap is especially problematic for fraud detection. A user who sees an unfamiliar charge amount at a merchant they do use has no way to confirm whether the purchase was theirs without leaving your app and digging through email receipts or merchant order histories.

## Solution

Use SKU-level transaction data from Knot's [Sync Transactions](https://docs.knotapi.com/api-reference/products/transaction-link/sync) endpoint to enrich transactions in your app with the individual items purchased, including product names, descriptions, images, quantities, and prices. Further data such as the order status and delivery information is also available. Surface this data on the dedicated transaction detail screen your app already has for each transactions, so users can see exactly what was in each order.

<Frame>
  <img src="https://mintcdn.com/knot/OrfWfEot9G_iQSVL/images/enrich-transaction-details.png?fit=max&auto=format&n=OrfWfEot9G_iQSVL&q=85&s=4fb97badbf613604bcb7691e7b10f118" alt="Transaction detail screen showing a $104.78 Target order with itemized products including milk, chicken, paper towels, and a coffee maker" width="3840" height="1600" data-path="images/enrich-transaction-details.png" />
</Frame>

This turns every transaction from a generic line item into a rich, verifiable record, giving users confidence in their purchase history and making your app the first place they check when something looks off.

## Flow

```mermaid placement="top-right" actions={false} theme={"system"}
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#f5f5f5', 'primaryTextColor': '#000', 'primaryBorderColor': '#000', 'lineColor': '#000', 'secondaryColor': '#f5f5f5', 'tertiaryColor': '#f5f5f5', 'edgeLabelBackground': '#fff', 'fontSize': '16px'}}}%%
flowchart LR
    A[User switches their card at a merchant through Knot or simply links their merchant account to begin syncing SKU-level purchase data] --> B[Sync each user's purchase data daily from Knot's API]
    B --> C[Store SKU-level transaction data]
    C --> D[Match SKU-level transactions to existing transactions from processor]
    D --> E[Display enriched products and other info on transaction detail screen]
```

## Implementation

<Steps>
  <Step title="Sync transaction data" titleSize="h3">
    When a user switches their card at a merchant or links their merchant account, Knot begins collecting transaction data for that account. Listen for the `NEW_TRANSACTIONS_AVAILABLE` webhook event, then call [Sync Transactions](/api-reference/products/transaction-link/sync) to pull the user's transactions.
  </Step>

  <Step title="Match & store transactions" titleSize="h3">
    Persist the SKU-level transaction data so it can be retrieved when a user views a transaction in your app. Match each SKU-level transaction from Knot to the corresponding card transaction in your system using [this guide](/transaction-link/quickstart#transaction-matching) to determine exact fields to match on.
  </Step>

  <Step title="Display enriched data on the transaction detail screen" titleSize="h3">
    When a user taps on a transaction in your app and the user is navigated to the transaction detail screen, display the fully-enriched set of transaction information, including the products, order status, and delivery information.

    Only display transactions with `order_status` of `COMPLETED`, `DELIVERED`, `PICKED_UP`, `SHIPPED`, `BILLED`, or `ORDERED`. Filter out `CANCELLED`, `REFUNDED`, and `FAILED`.

    **Additional fields to display:**

    | Field                       | Purpose                                                                                      |
    | --------------------------- | -------------------------------------------------------------------------------------------- |
    | `products[].name`           | Product name for display.                                                                    |
    | `products[].description`    | Product description for display.                                                             |
    | `products[].image_url`      | Product image URL to display the image of each product.                                      |
    | `products[].url`            | Product URL to link out to the product.                                                      |
    | `products[].price.total`    | Price paid for each product for display.                                                     |
    | `products[].external_id`    | Unique product identifier.                                                                   |
    | `order_status`              | Current status of the order (e.g. `DELIVERED`, `SHIPPED`).                                   |
    | `shipping.location.address` | Delivery address including `line1`, `line2`, `city`, `region`, `postal_code`, and `country`. |

    **If Knot SKU-level txn information is <u>NOT</u> available:**

    There are a few scenarios where your system may not have enriched, SKU-level transaction data from Knot for a corresponding card transaction in your system. Below are each scenario outlined with their solution if applicable:

    | Scenario                                                                                      | Solution                                                                                                                                                                                                                                                                                                                                     |
    | --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | The corresponding merchant account was never linked to your app or is currently disconnected. | If your system is aware of the merchant for the transaction, display a button on the transaction detail screen requesting the user link (or relink) the appropriate merchant account. If your system is not aware of the merchant, display an identical button that instead navigates to a list of merchants for the user to choose to link. |
    | The transaction is recent (e.g. occurred within the last 24 hours).                           | Call Knot's `Refresh Transactions` endpoint to refresh the synced SKU-level transactions or simply do not display the enriched information.                                                                                                                                                                                                  |

    This makes the enriched experience feel like a natural upgrade rather than an inconsistent feature.
  </Step>
</Steps>

## Expansion Path

* **Handle updated transactions** - Transactions can change after they are first synced, for example when an order ships, a refund is issued, or items are modified. Listen for the [`UPDATED_TRANSACTIONS_AVAILABLE`](/transaction-link/webhook-events/updated-transactions-available) webhook and re-sync the affected transactions to keep your stored data current.
* **Fraud verification flow** - When a user disputes or flags a transaction, show the itemized breakdown as a first step before escalating. If the user recognizes the items, they can dismiss the dispute immediately, reducing false dispute rates and support volume.
