> Documentation index: [Saleor](/llms.txt) · [This section](/upgrade-guides/llms.txt)
> Source: https://docs.saleor.io/upgrade-guides/core/3-16-to-3-17

# Upgrading From 3.16 To 3.17

info

To follow the zero-downtime strategy when upgrading to 3.17, **It is recommended to first migrate to at least 3.16.2** and turn on the Celery worker to process all data migrations asynchronously. Otherwise, you will need to downtime your solution to ensure correct data migration.

<a id="migrating-from-notify_user"></a>

## Migrating from NOTIFY\_USER

Starting from Saleor 3.16, the `NOTIFY_USER` webhook event will be deprecated. If your app uses this webhook, you should migrate to dedicated webhook events. The following is a list of webhook events that replace specific notifications. All webhook events that replace `NOTIFY_USER` support [subscription queries](/developer/extending/webhooks/subscription-webhook-payloads.md#custom-payloads), which allow you to define the payload you want to receive for your notifications.

The table below shows sub-types of `NOTIFY_USER` events (represented as the `notify_event` field in the legacy payloads), their GraphQL subscription replacements, and the Saleor version in which they were or will be introduced.

| NOTIFY\_USER event | Subscription | Saleor version |
| --- | --- | --- |
| `ACCOUNT_CHANGE_EMAIL_CONFIRM` | [AccountEmailChanged](/api-reference/users/objects/account-email-changed.md) | 3.15 |
| `ACCOUNT_CHANGE_EMAIL_REQUEST` | [AccountChangeEmailRequested](/api-reference/users/objects/account-change-email-requested.md) | 3.15 |
| `ACCOUNT_CONFIRMATION` | [AccountConfirmationRequested](/api-reference/users/objects/account-confirmation-requested.md) | 3.15 |
| `ACCOUNT_DELETE` | [AccountDeleteRequested](/api-reference/users/objects/account-delete-requested.md) | 3.15 |
| `ACCOUNT_PASSWORD_RESET` | [AccountSetPasswordRequested](/api-reference/users/objects/account-set-password-requested.md) | 3.15 |
| `ACCOUNT_SET_CUSTOMER_PASSWORD` | [AccountSetPasswordRequested](/api-reference/users/objects/account-set-password-requested.md) | 3.15 |
| `ACCOUNT_SET_STAFF_PASSWORD` | [StaffSetPasswordRequested](/api-reference/users/objects/staff-set-password-requested.md) | 3.15 |
| `ACCOUNT_STAFF_RESET_PASSWORD` | [StaffSetPasswordRequested](/api-reference/users/objects/staff-set-password-requested.md) | 3.15 |
| `CSV_EXPORT_FAILED` | [ProductExportCompleted](/api-reference/products/objects/product-export-completed.md), [GiftCardExportCompleted](/api-reference/gift-cards/objects/gift-card-export-completed.md) | 3.16 |
| `CSV_EXPORT_SUCCESS` | [ProductExportCompleted](/api-reference/products/objects/product-export-completed.md), [GiftCardExportCompleted](/api-reference/gift-cards/objects/gift-card-export-completed.md) | 3.16 |
| `INVOICE_READY` | [InvoiceSent](/api-reference/orders/objects/invoice-sent.md) | 3.2 |
| `ORDER_CANCELED` | [OrderCancelled](/api-reference/orders/objects/order-cancelled.md) | 3.2 |
| `ORDER_CONFIRMATION` | [OrderCreated](/api-reference/orders/objects/order-created.md) | 3.2 |
| `ORDER_CONFIRMED` | [OrderConfirmed](/api-reference/orders/objects/order-confirmed.md) | 3.2 |
| `ORDER_FULFILLMENT_CONFIRMATION` | [FulfillmentCreated](/api-reference/orders/objects/fulfillment-created.md) | 3.4 |
| `ORDER_FULFILLMENT_UPDATE` | [FulfillmentTrackingNumberUpdated](/api-reference/orders/objects/fulfillment-tracking-number-updated.md) | 3.16 |
| `ORDER_PAYMENT_CONFIRMATION` | [OrderFullyPaid](/api-reference/orders/objects/order-fully-paid.md) | 3.2 |
| `ORDER_REFUND_CONFIRMATION` | [OrderRefunded](/api-reference/orders/objects/order-refunded.md) | 3.14 |
| `SEND_GIFT_CARD` | [GiftCardSent](/api-reference/gift-cards/objects/gift-card-sent.md) | 3.13 |
| `STAFF_ORDER_CONFIRMATION` | [OrderCreated](/api-reference/orders/objects/order-created.md) | 3.2 |

To migrate to new events, you need to create new webhooks in Saleor and provide subscription queries for the events you want to receive.

<a id="payload-changes"></a>

### Payload changes

Some fields that were available in the `NOTIFY_USER` payload are not available in subscription payloads of the new events:

-   `domain` - the domain of the Saleor instance, can be fetched from the API using the [shop](/api-reference/miscellaneous/queries/shop.md) query.
-   `site_name` - same as above.
-   `logo_url` - if needed, apps should handle providing the logo URL themselves.

<a id="deprecation-of-the-externalnotificationtrigger-mutation"></a>

## Deprecation of the `externalNotificationTrigger` mutation

Starting from Saleor 3.16, the [externalNotificationTrigger](/api-reference/miscellaneous/objects/external-notification-trigger.md) mutation will be deprecated. Apps that send custom notifications should implement their own logic for this purpose.
