> ## 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.

# Post-Purchase Price Adjustment

> Alert users when a product they bought drops in price within the retailer's adjustment window to claim a refund.

> 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

Many retailers offer price adjustment policies that let customers claim a refund if an item's price drops within a set window after purchase. Almost no one takes advantage of these policies because they don't know the price dropped, or the process feels like too much effort. Money is left on the table.

## Solution

Use SKU-level transaction data from Knot's [Sync Transactions](/api-reference/products/transaction-link/sync) endpoint to detect when the same product is purchased at a lower price by another user at the same retailer. When a price drop is detected within the retailer's adjustment window, proactively alert the original buyer so they can claim the difference.

<Frame>
  <img src="https://mintcdn.com/knot/UI5vmaLrIbjzR32k/images/post-purchase-price-adjustment.png?fit=max&auto=format&n=UI5vmaLrIbjzR32k&q=85&s=3881179c1fafe5fa3a2acf40901fce1b" alt="Push notification alerting a user that a product they purchased recently has dropped in price, with the savings amount and a prompt to claim the refund" width="3840" height="1600" data-path="images/post-purchase-price-adjustment.png" />
</Frame>

This surfaces real savings opportunities that users would otherwise miss, driving engagement and reinforcing the value of your app.

## 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[Compare product prices across users at the same merchant]
    C --> D{Same product at a lower price within the policy window?}
    D -->|Yes| E[Alert the original buyer with savings amount]
    D -->|No| F[No action needed]
```

## Implementation

<Steps>
  <Step title="Sync transaction data" titleSize="h3">
    When a user switches their card at a merchant or they simply link their merchant account w/o switching their card, Knot begins collecting transaction data for that account. Listen for the [`NEW_TRANSACTIONS_AVAILABLE`](/transaction-link/webhook-events/new-transactions-available) webhook event, then call [Sync Transactions](/api-reference/products/transaction-link/sync) to sync SKU-level transactions on a daily basis. Each transaction includes an array of products with prices and unique identifiers.

    **Key fields**

    | Field                         | Purpose                                                   |
    | ----------------------------- | --------------------------------------------------------- |
    | `products[].external_id`      | Unique product identifier for cross-user price matching.  |
    | `products[].name`             | Product display name for the alert.                       |
    | `products[].price.unit_price` | Per-unit price paid.                                      |
    | `datetime`                    | Purchase timestamp for policy window calculation.         |
    | `merchant.id`                 | Identifies the retailer for scoping comparisons.          |
    | `merchant.name`               | Retailer display name for the alert.                      |
    | `external_user_id`            | Identifies the user who made the purchase in your system. |
    | `external_id`                 | Order number, useful for pre-filling claim forms.         |
    | `order_status`                | Filter to completed orders only.                          |

    Only include transactions with `order_status` of `COMPLETED`, `DELIVERED`, `PICKED_UP`, `SHIPPED`, `BILLED`, or `ORDERED`. Filter out `CANCELLED`, `REFUNDED`, and `FAILED`.
  </Step>

  <Step title="Detect price drops" titleSize="h3">
    On each incoming transaction, check whether any previously purchased product (by any user, at the same merchant) was bought at a higher price within the retailer's adjustment window.

    ```text theme={"system"}
    FOR each product in new_transaction.products:

        matches = find all prior purchases WHERE
            prior.products[].external_id == product.external_id
            AND prior.merchant.id == new_transaction.merchant.id
            AND prior.datetime > (today - POLICY_WINDOW_DAYS)
            AND prior.products[].price.unit_price > product.price.unit_price

        FOR each match:
            savings = match.unit_price - product.unit_price
            IF savings >= MINIMUM_SAVINGS:
                trigger price drop alert for match.external_user_id
    ```

    This works because Knot aggregates transaction data across all your users. If user B buys the same product at a lower price than user A did last week, user A can claim the difference.  The crowd-sourced transaction data provides the price signal.

    **Configuration decisions for your team:**

    | Parameter            | Suggested Default    | Considerations                                                                                                      |
    | -------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------- |
    | `POLICY_WINDOW_DAYS` | Varies by retailer   | Apply the correct window per merchant. Common examples: 14 days for general retailers, 30 days for warehouse clubs. |
    | `MINIMUM_SAVINGS`    | \$5.00               | Keeps alerts meaningful and avoids notification fatigue for small amounts.                                          |
    | Alert frequency      | Once per opportunity | Don't re-alert if the price drops further, or optionally send a follow-up with updated savings.                     |

    **Trigger timing options:**

    * **Real-time:** Run the check on each incoming transaction. Alerts surface within minutes of a price drop being detected.
    * **Batch:** Nightly scan of all purchases in the trailing policy window. Simpler to implement but delays alerts by up to 24 hours.
    * **Hybrid:** Real-time for high-value drops (>\$10), batch for smaller amounts.
  </Step>

  <Step title="Alert the user" titleSize="h3">
    When a price drop opportunity is detected, notify the user with the product name, original price, current price, savings amount, and days remaining in the adjustment window.

    <Frame>
      <img src="https://mintcdn.com/knot/UI5vmaLrIbjzR32k/images/post-purchase-price-adjustment.png?fit=max&auto=format&n=UI5vmaLrIbjzR32k&q=85&s=3881179c1fafe5fa3a2acf40901fce1b" alt="Push notification alerting a user that a product they purchased recently has dropped in price, with the savings amount and a prompt to claim the refund" width="3840" height="1600" data-path="images/post-purchase-price-adjustment.png" />
    </Frame>

    Deeplink the user to a screen displaying the full details of the price drop, including the order number (`external_id`) and a link to the retailer's price adjustment form to claim the refund. Better yet, use Knot's API to submit the refund request through the merchant prior to notifying the user.
  </Step>
</Steps>

## Expansion Path

* **Automated claim submission:** Instead of alerting the user, submit the price adjustment claim on their behalf automatically through Knot's API. Once the refund is processed, notify the user that money is already on its way, no action required. This eliminates friction entirely and maximizes claim rates.
* **Price tracking alerts:** Even for retailers without formal price adjustment policies, alert users when a product they bought drops in price. This is useful as a general spending awareness feature that reinforces the value of your app.
