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

# Expiration changed

> Event data sent for a Loyalty v2 EXPIRATION_CHANGED transaction handled by Workflows

The `EXPIRATION_CHANGED` event indicates that a member's Loyalty v2 tier expiration date changed while the member stayed in the same tier.

<Note>
  This page documents only the event data nested under `data`. See [Introduction to webhooks](/api-reference/introduction-to-webhooks) for the shared webhook structure, and [Workflows webhooks](/api-reference/workflows-webhooks) for the full Workflows webhook payload.
</Note>

This event can trigger a workflow when **Loyalty transaction** is configured with the **Tier transactions** group and the `EXPIRATION_CHANGED` transaction type. If the workflow reaches a **Webhook callout** action, Voucherify sends a webhook to the action's target URL.

Workflows send this transaction in the `data.trigger` object. The example uses the `APPROVED` status. A workflow can filter the trigger by transaction status: `PENDING`, `APPROVED`, or `REJECTED`. The matched status is available in `data.trigger.transaction.status`; it does not create a separate event type.

Voucherify creates this transaction when the tier calculation keeps the member in the current tier and the calendar day of the member's `expires_at` changes:

* The member no longer qualifies for the current tier, but the tier structure retains the tier for a period. Instead of a downgrade, Voucherify sets `details.expires_at` to the end of the retention period.
* The member qualifies for the current tier again, and the stored expiration date no longer applies. Voucherify clears `details.expires_at` or replaces it with the recalculated date.
* A new period starts, the member's tier has expired, and the member still qualifies for the same tier. Voucherify sets a new `details.expires_at` or clears it, for example when the recalculated period has no end date.

`details.tier_from`, `details.tier_to`, and `details.start_at` are `null`. `transaction.tier_id` is `null`. The current tier stays on the member's tier record and is not copied onto this transaction. `details.expires_at` is the new expiration timestamp, or `null` when expiration is cleared.


## OpenAPI

````yaml openapi-events/events-loyalty-transaction.json webhook EXPIRATION_CHANGED
openapi: 3.1.0
info:
  title: Events - Events loyalty transaction
  version: '2024-01-01'
  description: ''
servers: []
security: []
paths: {}

````

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