Webhooks let Loyaltify tell your other systems straight away when something happens, such as a new customer joining or a customer earning points. Loyaltify sends a short message to an address you choose, and your system can act on it.
They're useful for keeping a CRM up to date, triggering emails in your own tools or building reports. This guide covers how to set one up, what each message contains and how to check that messages are arriving.
💡 Good to know: This is part of the Advanced plan. It stops working if you move to a lower plan.
Set up a webhook
Step 1: Open the webhook setup
Go to Integrations and click Connect on the Webhook card.
Step 2: Fill in the details
In the Webhook Setup window:
Endpoint URL: the https address in your system that should receive the messages.
Authorization: choose Bearer and type a token of your own, or choose None.
Events: tick the ones you want. You need at least one.
Then save, and your webhook is live.
💡 Tip: Choose Bearer and a long, random token. Every message then includes the header Authorization: Bearer followed by your token, so your system can check that the message really came from Loyaltify. This token is separate from your API key.
Change it later
You can change the endpoint, authorisation and events at any time on the Webhook Configuration page. Click Save when you're done.
Events you can choose
Customer created (
customer.created): a new customer joins.Customer updated (
customer.updated): a customer's details are edited.Transaction is created (
transaction.created): a customer gets their starting balance, earns, redeems, gets a referral reward or has points expire.Existing customer signup attempt (
customer.signup_attempt): someone who already has the card fills in your form again. Their saved details aren't changed by the new submission.
What each message contains
Loyaltify sends each message as JSON, with the headers Content-Type: application/json and User-Agent: Loyaltify-Webhook/1.0. Every message has three parts:
event: which event it is, such ascustomer.created.timestamp: when it happened, in UTC (for example2026-10-16T16:38:46Z).data: the details, which depend on the event.
Numbers such as point and balance_after are sent as text, for example "1.0", and empty values are null.
Customer created and Customer updated
name,email,phoneandbirthdayuuid: the customer's ID (the same one that's in their card's QR code)point: their balance (on Customer created, the starting balance)custom_fields: answers to your custom questions, including hidden values from the form link, such asclick_idis_marketing_opted_in: whether they agreed to marketingcreated_at,updated_atandstore_uuid
Customer updated carries the same fields, with the new values. Here's an example of Customer created:
{
"data": {
"name": "Alex",
"uuid": "7f3e9a21",
"email": "[email protected]",
"phone": null,
"point": "1.0",
"birthday": null,
"created_at": "2026-10-16T16:38:41.704Z",
"store_uuid": "a1b2c3d4",
"updated_at": "2026-10-16T16:38:46.790Z",
"custom_fields": {},
"is_marketing_opted_in": true
},
"event": "customer.created",
"timestamp": "2026-10-16T16:38:46Z"
}
Transaction is created
kind: the type of transaction, for exampleinitial(the starting balance at sign-up),manual,redeem,expired,refereeorreferrerpointandamount: the values of the transaction. On expiries,pointis negative.balance_after: the customer's balance after the transactioncampaign: on redemptions, the campaign that was redeemeduser: the team member who scanned (name, ID and email), ornullfor automatic events such as expiriescustomer_uuid,customer_emailandcustomer_phonereferred_by_uuid: on referral rewards, who referred the customeruuid: the transaction's own IDcreated_atandstore_uuid
Here's an example of a team member adding a point:
{
"data": {
"kind": "manual",
"user": {
"name": "Sam Taylor",
"uuid": "0b8e7d4c-1f2a-4c3b-9d5e-6a7b8c9d0e1f",
"email": "[email protected]"
},
"uuid": "5c9d2e7a-3b4f-4a1c-8e6d-2f7a9b0c1d3e",
"point": "1.0",
"amount": null,
"campaign": null,
"created_at": "2026-10-16T16:45:10.375Z",
"store_uuid": "a1b2c3d4",
"balance_after": "2.0",
"customer_uuid": "7f3e9a21",
"customer_email": "[email protected]",
"customer_phone": null,
"referred_by_uuid": null
},
"event": "transaction.created",
"timestamp": "2026-10-16T16:45:10Z"
}
A referral reward sends two transactions at the same moment: referee for the new customer, with referred_by_uuid set to the referrer's ID, and referrer for the customer who referred them.
Existing customer signup attempt
customer: who the existing customer is, with theiruuidandcustom_fieldsmatched_on: how they were recognised, for example by emailsubmission: what they just entered in the formform: which form they used
To see a complete message, open any delivery in Recent Events (see below).
Check your deliveries
The Webhook Configuration page lists your Recent Events with their status, response code, number of attempts and date. Click the eye icon to see exactly what was sent, the headers and your system's reply.
Messages aren't arriving?
Check that your Endpoint URL is a valid https address. Browsers sometimes autofill an email address into it.
Check that the event is ticked on the Webhook Configuration page.
Check that you're on the Advanced plan.
Look at the event in Recent Events. If the response code shows an error, your system received the message but rejected it, and the eye icon shows its reply.
Still stuck? Contact support through live chat.
Good to know
Messages may not arrive in order, so use the timestamp if order matters.
Build your system to handle the same event twice, just in case. For transactions, the
uuidindatais unique to each one.Working with the API? Webhooks send the customer's short ID. Some API requests need the customer's internal number instead, and the API documentation shows how to look one up from the other.
Using Omnisend? Omnisend's own guide uses a webhook to connect to Loyaltify. See the Integrations overview for the link.
Need a hand?
We're here to help!
If you have any questions about webhooks, reach out to us via live chat inside Loyaltify, or use the chat button at the bottom right of this page. Our team will be happy to help.



