What is the Webhook Event?
A webhook event is part of our webhook system that keeps you updated on important customer, membership, and subscription events.
When one of these events occurs, our app sends a notification to the URLs you configure, containing event details in JSON format.
This allows your system to react automatically without manually checking for updates.
๐ Subscribfy Token
Each store has a unique Subscribfy Token used to verify incoming webhook requests. This token is generated once and cannot be viewed again.
โ ๏ธ If you lose it, please regenerate a new token via the Webhooks section in the app settings.
๐ Keep your token secure. Itโs used to sign requests for added security.
โ๏ธ Where to Configure Webhooks
Go to the Settings section of the app.
Click on the Webhooks panel.
Select the category of events you want to receive (e.g., Wallet Pass Events, VIP Events).
Enter one or more URLs (comma-separated) that should receive notifications.
Use the Test Call button to simulate an event.
Click Save to enable the event for the entered URLs.
๐ Available Webhook Events
๐ชช Wallet Pass Events
Created - Sent when a new wallet is created for a customer.
Updated - Sent when wallet content is updated (e.g., new rewards or points).
Installed - Sent when the wallet is installed on a customer's mobile device.
Removed - Sent when the wallet is removed/uninstalled.
๐ Membership Events
Created - Sent when a new membership contract is created.
Updated - Sent when the membership contract is updated.
Payment Frequency Changed
Next Order Date Changed
Paused - Sent when a membership is paused.
Reactivated - Sent when a membership is resumed after being paused or cancelled.
Cancelled - Sent when a membership is cancelled.
Billing Success - Sent when a payment is successfully processed.
Billing Failure - Sent when a payment fails.
Store Credits Changed - Sent when customerโs store credits are changed.
๐ฆ Product Subscription Events
Created - Sent when a new product subscription starts.
Updated - Sent when a subscription is changed.
Payment Frequency Changed
Next Order Date Changed
Shipping price/name updated
Product updated: price/qty/replaced (swapped)
Product added
Product removed
Paused - Sent when a subscription is paused.
Reactivated - Sent when a paused or cancelled subscription is reactivated.
Cancelled - Sent when a subscription is cancelled.
Billing Success - Sent when a subscription payment succeeds.
Billing Failure - Sent when a subscription payment fails.
๐ Loyalty Events
Rule Created - Sent when a new loyalty rule is created in admin
Rule Updated - Sent when a loyalty rule is updated with new settings
Tier Created - Sent when a new tier is created
Tier Updated - Sent when a tier is updated
Coupon Created - Sent when a new coupon is created
Coupon Updated - Sent when a coupon is updated
Coupon Redeemed โ Sent when a customer redeems a loyalty coupon.
Rule Completed โ Sent when a customer completes a loyalty rule and receives a reward.
Points Changed โ Sent when a customer earns, spends, or has points adjusted.
Tier Changed โ Sent when a customer reaches a new loyalty tier.
Tier Lost โ Sent when a customer moves down from a loyalty tier.
๐ฆ Example Payloads
Wallet Created
{
"topic": "wallet_pass/created",
"data": {
"pass_instance": {
"status": "Removed",
"serial_number": "955773794",
"created_at": "1975-07-26T00:00:00.000000Z",
"deleted_at": null
},
"customer": {
"id": "gid://shopify/Customer/424525265",
"email": "vance.rowe@romaguera.com",
"name": "Missouri Blanda DVM",
"loyalty_points": 90.19,
"birth_date": null,
"store_credits": 57.33,
"tier": null
}
}
}
VIP Billing Success
{
"topic": "membership/store_credits_changed",
"data": {
"customer": {
"id": "gid://shopify/Customer/699617320",
"email": "kavon.durgan@hand.com",
"name": "Esperanza Carter",
"loyalty_points": 85.43,
"birth_date": null,
"store_credits": 48.48,
"tier": null
},
"credits_history": {
"message": "Corrupti.",
"value": 10.99,
"type": "Redeem"
}
}
}
๐ Endpoint Details
Method:
POST
Content Type:
application/json
Delivery Format: All events are sent to the URLs provided by you as JSON payloads in the request body.
๐ Security
Each webhook request is signed to ensure it's coming from our system.
Signature Header
Header:
Signature
Algorithm: HMAC SHA-256
Secret: Your Subscribfy Token
How to Verify
On your server, you can verify the webhook like this:
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $payload, $yourSecretToken);
if (!hash_equals($expected, $signature)) {
http_response_code(403);
exit('Invalid signature');
}
Additionally, each request has in headers:
x-subscribfy-triggered-at
โ the timestamp at which the event occurredx-subscribfy-shop-domain
โ your Shopify store domain
๐งช Testing Events
Each event type in the dashboard includes a Test Call button.
Use this to simulate a real webhook with โdummyโ payload and test your integration.
๐ Best Practices & Final Notes
By setting up webhook events in the app, you can ensure your systems receive instant notifications for important customer, membership, subscription, and loyalty activities.
Always keep your Subscribfy Token secure, configure only the events you need, and use the Test Call feature to validate your setup before going live.
โ FAQs
Q: Can I see my Subscribfy Token after itโs created?
โA: No. For security reasons, the token can only be viewed when first generated. If itโs lost, you must regenerate it in the Webhooks section of app settings.
Q: How can I test my webhook integration?
โA: Use the Test Call button in the dashboard for any event type to send a simulated event payload to your configured URL.
Q: How do I know the webhook came from Subscribfy?
โA: Each request is signed with HMAC SHA-256 using your Subscribfy Token. You can verify it with the example code provided in the Security section.
Q: What happens if my server is down when an event is sent?
โA: Your server will not receive the event until itโs back online. Make sure your endpoint is always accessible to avoid missing data.
Q: Can I send webhooks to multiple URLs?
โA: Yes. Enter multiple URLs separated by commas in the Webhooks configuration.