API Reference
Loyalty
Run a business's loyalty program: stamp cards or points, wallet push campaigns, manual point adjustments, and reward redemptions. Loyalty programs are a PRO feature.
Scope and plan
Reads require
loyalty:read, mutations require loyalty:write. Every loyalty route requires the PRO plan. The destructive deletes (campaigns and templates) and any refund-style reversals are intentionally blocked for API-key auth.Get loyalty stats
GET
/loyalty/business/{businessId}/statsloyalty:readPRO plan
Members count, wallet installs, points and stamps issued, campaign and retention metrics, plus a 30-day timeseries.
curl "https://api.salonify.eu/api/v1/loyalty/business/b_8f3a/stats" \
-H "X-API-Key: sk_live_..."Response
{
"members": 412,
"walletInstalls": 188,
"pointsIssued": 84200,
"stampsIssued": 0,
"rewardsRedeemed": 73,
"activeCampaigns": 2,
"timeseries": [
{ "date": "2026-06-01", "newMembers": 4, "pointsIssued": 1200 }
]
}List loyalty cards
GET
/loyalty/business/{businessId}/cardsloyalty:readPRO plan
curl "https://api.salonify.eu/api/v1/loyalty/business/b_8f3a/cards" \
-H "X-API-Key: sk_live_..."Response
[
{
"id": "lc_551",
"customerId": "cu_9a21",
"currentStamps": 6,
"totalStamps": 26,
"points": 1240,
"rewardsRedeemed": 1,
"isActive": true
}
]Get the activity feed
GET
/loyalty/business/{businessId}/activityloyalty:readPRO plan
Query parameters
curl "https://api.salonify.eu/api/v1/loyalty/business/b_8f3a/activity?limit=20" \
-H "X-API-Key: sk_live_..."Response
{
"items": [
{ "id": "ev_9", "type": "STAMP_ADDED", "cardId": "lc_551", "amount": 1, "at": "2026-06-21T14:02:00.000Z" }
],
"nextCursor": "ev_8"
}Add stamps
POST
/loyalty/stampsloyalty:writePRO plan
Body parameters
curl -X POST "https://api.salonify.eu/api/v1/loyalty/stamps" \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "cardId": "lc_551", "count": 1 }'Response
{ "cardId": "lc_551", "currentStamps": 7, "rewardEarned": false }Adjust points
POST
/loyalty/points/adjustloyalty:writePRO plan
Manually award (positive) or deduct (negative) points. The balance is floored at zero.
Body parameters
curl -X POST "https://api.salonify.eu/api/v1/loyalty/points/adjust" \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "cardId": "lc_551", "amount": 100, "note": "Goodwill" }'Response
{ "cardId": "lc_551", "points": 1340 }Create a wallet campaign
POST
/loyalty/campaignsloyalty:writePRO plan
Body parameters
curl -X POST "https://api.salonify.eu/api/v1/loyalty/campaigns" \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"businessId": "b_8f3a",
"title": "20% off this week",
"message": "Show this in store",
"segment": "INACTIVE_30D"
}'Response
{ "id": "cp_44", "title": "20% off this week", "status": "DRAFT", "segment": "INACTIVE_30D" }Send a campaign
POST
/loyalty/campaigns/{id}/sendloyalty:writePRO plan
curl -X POST "https://api.salonify.eu/api/v1/loyalty/campaigns/cp_44/send" \
-H "X-API-Key: sk_live_..."Response
{ "id": "cp_44", "status": "SENT", "recipients": 96 }Not available via API key
These routes can only be called with a logged-in dashboard session, never an API key:
DELETE /loyalty/campaigns/{id}(delete a campaign)DELETE /loyalty/campaign-templates/{id}(delete a template)- Any reward or point reversal of a financial nature.
403 FORBIDDEN_FOR_API_KEY.Programs, campaigns list, and templates
Create or update a program with
POST/PATCH /loyalty/programs (loyalty:write). List campaigns at /loyalty/campaigns/business/{businessId} and templates at /loyalty/campaign-templates/business/{businessId} (both loyalty:read). Create a template with POST /loyalty/campaign-templates (loyalty:write). Remove stamps with POST /loyalty/stamps/remove and redeem a reward with POST /loyalty/redeem.