# What Triggers a Webhook

## Overview

Use this page to map webhook events to the actions that fire them. This is useful when building integrations, automations, and support workflows.

{% hint style="info" %}
Need the full event list and payload schemas? Use the [API reference](https://apidocs.openloyalty.io/#tag/Webhook-event) as the source of truth.
{% endhint %}

***

### Transaction and units events

#### TransactionRegistered

Sent when a transaction is created:

* In the Admin panel
* Via API: [Create a transaction](https://apidocs.openloyalty.io/#tag/Transactions/operation/_transactionPost)
* Via transaction import

#### AvailablePointsAmountChanged

Sent when a member’s available units change. Common reasons include:

* Units are spent (reward purchase or [spend endpoint](https://apidocs.openloyalty.io/#tag/Points/operation/pointsPostTransferSpend))
* Units are added or deducted manually by an admin
* A campaign adds or deducts units
* Unit transfers are imported
* A unit transfer is cancelled: [Cancel a points transfer](https://apidocs.openloyalty.io/#tag/Points/operation/pointsPostTransferCancel)
* Pending units are activated (automatically or manually)
* Units expire (automatically or manually)
* Units are blocked (see [block endpoint](https://apidocs.openloyalty.io/#tag/Points/operation/pointsPostTransferBlock)) or unblocked
* Units are transferred between members (two events are sent: sender + receiver)

#### TransactionAssignedToCustomer

Sent when a transaction is matched to a member:

* Manually in the Admin panel
* Via API: [Assign a transaction to a member](https://apidocs.openloyalty.io/#tag/Transactions/operation/transactionPostMemberAssign)
* Via import

#### CampaignEffectWasApplied

Sent when a campaign effect is applied to a member. This includes awarding or deducting units, granting rewards, and changing member custom attributes.

See also: [Reward Flow](/main-features/rewards/reward-list/reward-flow.md).

#### PointsWillExpire

Sent **X days before units expire**. The value of `X` comes from [Expiring Notifications](/main-features/webhooks/expiring-notifications.md).

#### WalletBalanceUpdated

Sent on every wallet balance change for a member. This includes:

* Units are spent (reward purchase or [spend endpoint](https://apidocs.openloyalty.io/#tag/Points/operation/pointsPostTransferSpend))
* Units are added or deducted manually by an admin
* A campaign adds or deducts units
* Unit transfers are imported
* A unit transfer is cancelled: [Cancel a points transfer](https://apidocs.openloyalty.io/#tag/Points/operation/pointsPostTransferCancel)
* Pending units are activated (automatically or manually)
* Units expire (automatically or manually)
* Units are blocked (see [block endpoint](https://apidocs.openloyalty.io/#tag/Points/operation/pointsPostTransferBlock)) or unblocked
* Units are transferred between members (two events are sent: sender + receiver)

***

### Reward and coupon events

#### RewardRedemptionStatusChanged

Sent when a redeemed reward changes status:

* In the Admin panel
* Via API: [Change redemption status](https://apidocs.openloyalty.io/#tag/Reward/operation/redemptionPostStatus)

#### CustomerBoughtReward

Sent when a member receives a reward:

* Reward is assigned manually
* Reward is granted by a campaign
* Reward is purchased from the reward catalog

See also: [Reward Flow](/main-features/rewards/reward-list/reward-flow.md).

#### CouponWillExpire

Sent **X days before a reward coupon expires**. The value of `X` comes from [Expiring Notifications](/main-features/webhooks/expiring-notifications.md).

***

### Member and tier events

#### CustomerRegistered

Sent when a member is created:

* In the Admin panel
* Via API: [POST /api/{storeCode}/member](https://apidocs.openloyalty.io/#tag/Member/operation/memberPost)

#### CustomerWasRegisteredWithoutActivation

Sent when a member is registered without activation:

* Via API: [POST /api/{storeCode}/member/register](https://apidocs.openloyalty.io/#tag/Member/operation/memberPostRegister)

#### CustomerUpdated

Sent when a member profile is updated in the Admin panel or via API. This includes:

* Basic profile fields (name, phone, email, card number, gender, dates, tier)
* Custom attributes: [PUT /api/{storeCode}/member/{member}](https://apidocs.openloyalty.io/#tag/Member/operation/memberPut)
* Address and company details
* Agreements

#### CustomerRequestedSendActivationCode

Sent when a member requests an activation code:

* Send code: [POST /api/{storeCode}/member/{member}/send-code](https://apidocs.openloyalty.io/#tag/Member/operation/memberPostSendCode)
* Resend code: [POST /api/{storeCode}/member/resend-code](https://apidocs.openloyalty.io/#tag/Member/operation/memberPostResendCode)

#### CustomerRequestedPasswordReset

Sent when an active member requests a password reset:

* Request reset: [POST /api/{storeCode}/member/password/reset/request](https://apidocs.openloyalty.io/#tag/Member/operation/memberPostPasswordResetRequest)

#### CustomerPhoneNumberWasChanged

Sent when a logged-in member updates their phone number in their profile.

#### CustomerLevelChanged

Sent when a member’s tier changes:

* Manual tier change (upgrade or downgrade)
* Tier threshold is reached
* A new member is created and the default tier is assigned

#### LevelWillExpire

Sent **X days before tier recalculation**. The value of `X` comes from [Expiring Notifications](/main-features/webhooks/expiring-notifications.md).

#### CustomerEmailWasChanged

Sent when a logged-in member updates their email in their profile.

#### CustomerDeactivated

Sent when a member is deactivated:

* In the Admin panel
* Via API: [POST /api/{storeCode}/member/{member}/deactivate](https://apidocs.openloyalty.io/#tag/Member/operation/memberPostDeactivate)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.openloyalty.io/main-features/webhooks/what-triggers-a-webhook.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
