To remind users to use offers before they expire, a default notification is triggered 48 hours
before an offer expires. To trigger a notification, an offer must meet the following criteria:

1. It must not have previously triggered an expiration notification on the user's device.
2. It must have a valid expiration `datetime` that's in the future, set in `validTimeInterval.end.date`.
3. It must not have the writeable field `disableExpirationNotification` set to `True`. By default, this field is set to `false`.

> [!NOTE]
> **Note:** This offer expiration notification feature and its details are subject to change.

The following screenshot shows an example of the default, unmodifiable notification:
![offer expiration notification](https://developers.google.com/static/wallet/retail/offers/images/offer-expiration-notification.png)
1. Offer expires (today, tomorrow, in \[x\] days)
2. `class.title`
3. `class.titleImage`

The header in the offer expiration notification cannot be customized.

### Blackout hours

If the offer expiration notification is set to appear between 10PM and 6AM at the user's local
time, the offer appears either before or after this time period.

### Custom offer expiration notification time

You can customize when the `Offer` expiration notification appears using the
`message.displayInterval.start.date` field on `OfferObjects` or
`OfferClasses`. If a custom notification time is set, the expiration notification triggers
according to the `message.displayInterval.start.date`, instead of the default logic
calculated from `validTimeInterval.end.date`. The following is a sample of a customized
time for an expiration notification:

```
{
  "message": {
   "messageType": "EXPIRATION_NOTIFICATION",
   "displayInterval": {
     "start": {
      "date": datetime
     }
   }
  }
}
```

The `displayInterval.start.date` sets the time the notification appears. It can be
set up to 30 days prior to the expiration date. If a time span greater than this is specified, the
notification triggers at the 30 day mark. This message doesn't require a header and body field -
if they're included they aren't used.

> [!NOTE]
> **Note:** Only one expiration notification is sent to the user. Setting a custom offer expiration time means the default one isn't triggered.