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

# Types of events

> This page documents all the types of webhook events that are sent by Rye.

## Checkout intents

Webhooks are sent when a checkout intent transitions between states. See the [Checkout Intent Lifecycle](/api-v2/checkout-intent-lifecycle) for the full state machine.

| Event                             | Description                                                                       | State Transition                             |
| --------------------------------- | --------------------------------------------------------------------------------- | -------------------------------------------- |
| `checkout_intent.offer_retrieved` | An offer is ready with pricing and availability details.                          | `retrieving_offer` → `awaiting_confirmation` |
| `checkout_intent.offer_failed`    | Offer retrieval failed (e.g., unsupported merchant, product unavailable).         | `retrieving_offer` → `failed`                |
| `checkout_intent.completed`       | The order was successfully placed and confirmed.                                  | `placing_order` → `completed`                |
| `checkout_intent.order_failed`    | Order placement failed after confirmation (e.g., out of stock, payment declined). | `placing_order` → `failed`                   |

## Shipments

Shipment events are sent for completed orders (i.e. checkout intents in the `completed` state), and are fired whenever the corresponding shipment's state changes.

| Event              | Description                          | Occurs                                                                                                                      |
| ------------------ | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
| `shipment.created` | A shipment was created for an order. | When the merchant adds shipping info to a completed order for the first time.                                               |
| `shipment.updated` | A shipment was updated for an order. | Whenever a shipment is updated, e.g. when a tracking number becomes available or the parcel is on board a delivery vehicle. |

## Products

Product events are sent when a merchant with a Rye connector app installed publishes a change to their product catalog.

| Event             | Description                             | Occurs                                                                                       |
| ----------------- | --------------------------------------- | -------------------------------------------------------------------------------------------- |
| `product.updated` | A product was created or modified.      | When a product's attributes, variants, pricing, or availability was changed by the merchant. |
| `product.removed` | A product was removed from the catalog. | When a product is deleted or unpublished by the merchant.                                    |

Unlike checkout intent and shipment events, product events are **snapshot** events which include a `data` field:

* For `product.updated`, `data` contains the full [`Product`](/api-v2/api-reference/products/lookup-product) object as of the time the event was emitted.
* For `product.removed`, `data` is omitted — the product no longer exists to include.

**Example `product.updated` payload:**

```json theme={null}
{
  "id": "evt_rye-dev-store.myshopify.com:10501236982062_updated_developer_2070443601311540",
  "object": "event",
  "type": "product.updated",
  "createdAt": "2026-04-23T02:42:24.042Z",
  "source": {
    "type": "product",
    "id": "rye-dev-store.myshopify.com:10501236982062"
  },
  "data": {
    "id": "rye-dev-store.myshopify.com:10501236982062",
    "url": "https://rye-dev-store.myshopify.com/products/widget-pro",
    "name": "Widget Pro",
    "brand": "Acme",
    "sku": "SKU-12345"
  }
}
```

**Example `product.removed` payload:**

```json theme={null}
{
  "id": "evt_rye-dev-store.myshopify.com:10501236982062_removed_developer_2070443601311540",
  "object": "event",
  "type": "product.removed",
  "createdAt": "2026-04-23T02:42:24.042Z",
  "source": {
    "type": "product",
    "id": "rye-dev-store.myshopify.com:10501236982062"
  }
}
```

## Webhook endpoints

| Event                                     | Description                                                                                                                                                                                                                                                                                        |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `webhook_endpoint.verification_challenge` | A verification challenge is sent to the webhook endpoint to verify that the endpoint is reachable and can receive webhooks. To pass verification, your endpoint must respond with a JSON response containing a `challenge` field with the value of the `source.id` field from the webhook payload. |
