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

# Price Tracking Webhooks

> [!WARNING]
>
> Price-tracking subscriptions and their `price.changed` event are deprecated
> for new integrations — use [product
> subscriptions](/docs/product-subscription-webhooks.md), which send
> `offer.price.changed` plus availability and offer lifecycle events. Price
> tracking still works and is still billed at 1 credit/product/day (see
> [pricing](/docs/pricing.md)). [Price
> history](/docs/api-reference/price-tracking/get-price-history.md) is not deprecated —
> it remains the supported way to fetch historical prices.

When you track a product with the [Price Tracking API](/docs/guides/price-tracking.md), Channel3 sends a `price.changed` webhook event whenever the price of one of its offers changes. Use webhooks to alert your users about deals, update your UI, or trigger other actions in real-time.

Configure your webhook endpoint in the [Channel3 dashboard](https://trychannel3.com/dashboard). Events are signed — see [Verifying signatures](/docs/product-subscription-webhooks.md#verifying-signatures) for how to verify them, and that page for retry, deduplication, and User-Agent details that apply to all Channel3 webhooks.

## `price.changed`

Triggered when the price changes for a product you're tracking.

| Field | Type | Description |
| - | - | - |
| `type` | string | Always `price.changed`. |
| `canonical_product_id` | string | The product whose offer changed price. |
| `domain` | string | Domain of the offer whose price changed, e.g. `nordstrom.com`. Matches `domain` on the product's offers. |
| `old_price` | number | The offer's price before the change. |
| `new_price` | number | The offer's price after the change. |
| `currency` | string | Currency code of the prices, e.g. `USD`. |
| `buy_url` | string | Buy URL for the offer whose price changed. A Channel3 buy URL that redirects to the merchant's offer page. |
| `timestamp` | string | ISO 8601 time of the change. |

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "type": "price.changed",
  "canonical_product_id": "2yh8WH5",
  "domain": "nordstrom.com",
  "old_price": 189.99,
  "new_price": 149.99,
  "currency": "USD",
  "buy_url": "https://buy.trychannel3.com/2yh8WH5-mm2j9k-vq8x1z?o=01JZK3V1M0T4QF3Y3Z0E5T6V7W",
  "timestamp": "2026-10-25T14:03:11.592000+00:00"
}
```

The payload is flat: fields like `new_price` are at the top level of the JSON body, not nested under a `data` key.

For the interactive schema, see our [webhook event catalog](https://webhooks.trychannel3.com/).

## Want availability and offer lifecycle events?

`price.changed` is the only event the Price Tracking API sends. For availability changes, offers appearing, and offers going away (delisted or discontinued) — scoped by merchant domain or variant — use product subscriptions:

> **[Product Subscription Webhooks](/docs/product-subscription-webhooks.md)**
>
> Four offer event types, scoped subscriptions, and full payload references.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.