JeriCommerce tracks every meaningful customer interaction on your loyalty program. When you connect the Custom API integration, all events are sent as HTTP POST webhooks to your configured endpoint — giving you full flexibility to build custom automations, sync data, or trigger workflows in any system.
Set up¶
Add your webhook endpoint in Settings → Integrations → API, toggle the Events feature on, and save. From that moment, every customer event fires a POST request to your URL.
Authentication¶
Every request includes an x-jericommerce-hmac-sha256 header containing a signature encrypted with HMAC-SHA256 using the secret displayed on the integration page. Validate this signature on your server to confirm the request comes from JeriCommerce and prevent spoofing.
The event type is sent in the x-jericommerce-event-type header — use it to route the payload to the right handler.
Retries¶
If your endpoint returns a non-2xx response, JeriCommerce retries the delivery up to 10 times with exponential backoff. Make sure your endpoint is idempotent so retries don't create duplicate actions.
Base payload¶
All webhooks share this base structure:
{
"email": "customer@example.com",
"id": "event-uuid",
"customerId": "customer-uuid",
"campaignId": "campaign-uuid",
"url": "https://...",
"browser": "Chrome 120",
"createdAt": "2026-03-08T12:00:00Z",
"properties": { ... }
}
Fields marked as optional below may not be present in every event:
- campaignId — only when the event is linked to a specific campaign
- url and browser — only for web-originated events
All events¶
Below is the complete list of 18 events sent to your webhook. The Event name column matches the value in the x-jericommerce-event-type header. The Key properties column shows the fields available in the properties object for each event.
| Event name | When it fires | Key properties | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Customer | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Customer created | A new customer is registered (not during initial sync) | email, origin, referral, utmCampaign, utmMedium, utmSource, firstName, lastName, phoneNumber |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Customer birthday | Scheduled daily job checks customer birthdates (runs around 9:00 AM UTC) | age (calculated from birthdate) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Customer scanned | Customer scans an NFC code at a physical location via Shopify POS | Location and device context | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Customer tapped | Customer taps a VTAP/NFC device | Device context | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Wallet pass | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Wallet pass requested | Customer requests a wallet pass download link | email, referral, downloadLink, utmCampaign, utmSource, utmMedium |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Wallet pass installed | Customer adds the pass to Apple Wallet or Google Wallet | referral, utmCampaign, utmSource, utmMedium |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Wallet pass uninstalled | Customer removes the pass from their wallet | referral, utmCampaign, utmSource, utmMedium |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Loyalty | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Balance changed | Loyalty points are added or removed (purchases, refunds, manual adjustments) | amount, reference, previous balance info, pointsToNextReward, nextRewardName |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Tier changed | Customer's loyalty tier changes (recalculated daily at 5:00 AM or on balance change) | previous (tier name), current (tier name) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Coupons | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Coupon assigned | A coupon code is assigned to a customer | code, header, body, slug, assignedFrom, installUrl |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Coupon pass installed | Customer adds a coupon pass to Apple/Google Wallet | referral, utmCampaign, utmSource, utmMedium |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Coupon pass uninstalled | Customer removes a coupon pass from their wallet | referral, utmCampaign, utmSource, utmMedium |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Gift cards | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Gift card sent | Admin sends a gift card to a customer | code, header, body, slug, assignedFrom, installUrl, mailSent |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Rewards | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Reward redeemable | A reward becomes available for the customer to redeem | rewardId, rewardLink, rewardTitle, rewardValue, rewardCost, customerRemainingBalance |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Reward redeemed | Customer redeems a reward | rewardId, rewardLink, rewardTitle, code |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Reward refunded | Admin refunds a previously redeemed reward | claimId |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Engagement | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Wallet click | Customer clicks a link inside their wallet pass | url, browser, utmCampaign, utmSource ("wallet"), utmMedium ("wallet_pass") |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Wallet visit | Customer visits/opens their wallet pass web app | name, url, browser, referral, utmCampaign, utmSource, utmMedium |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
You're all set! Your endpoint will now receive real-time data for every customer interaction on JeriCommerce.