Subscription types live under Settings → Subscriptions and require the project
admin role. Per-user state changes can come from hosted preference links, PATCH /users/{userId}/subscriptions, or the server-side bulk toggle endpoint.What a subscription type is
Each subscription type carries three attributes:- Name. What users see in unsubscribe links and preference centres (for example,
Marketing email,Promotional SMS,Product updates). - Channel. One of
email,text(SMS),push,webhook, orin_app. A subscription is bound to exactly one channel. - Public visibility. When on, the subscription appears in the customer-facing preference centre. When off, the subscription is internal-only (you control state from the server).
- One per channel:
Marketing email,Marketing SMS,Marketing push. - Topic-level:
Newsletter,Product updates,Onboarding tips,Account alerts. - Tier-aware:
Free-tier email,Premium-tier email(when content differs by plan).
The three states
Per-user, each subscription has one of three states:
If a user has no recorded opt-out for a subscription type, Spotzee treats that user as
subscribed. Public visibility controls whether the type appears in the preference centre; it does not change the default send state.
Create a subscription type
1
Open Settings → Subscriptions
Inside the project, open Settings and pick the Subscriptions tab.
2
Create a new subscription
Choose Create subscription, then complete:
- Name (for example,
Marketing email). - Channel (
email,text,push,webhook, orin_app). - Public. Toggle on if users should see this subscription in their preference centre. Off for internal-only types.
3
Save
Save. The new type appears in the table with the channel badge and visibility flag. Existing users have no state for the new type until you set one or they interact with it.
Let users manage their own preferences
Spotzee’s hosted preference link shows public subscription types and lets a user update their own choices. Include{{preferencesUrl}} in an email template to give the recipient a route to that page.
To build your own preference centre, keep a secret project key on your server. Use GET /users/{userId}/subscriptions to read the user’s states and PATCH /users/{userId}/subscriptions to update them. Do not expose the secret key in the browser.
Bulk-toggle from your server
When you need to flip subscription state across many users, usePOST /subscriptions/batch with a secret key. Each item identifies its target by external_id or anonymous_id. Per-item errors are returned so a single failed lookup doesn’t hold up the rest of the batch.
Unsubscribe links and SMS opt-out
Some opt-out flows happen automatically:- Email unsubscribe links. Spotzee adds a
List-Unsubscribeheader to outbound email. Templates can render an unsubscribe link with{{unsubscribeEmailUrl}}. Following the link recordsunsubscribedfor the campaign subscription. - SMS keywords. Inbound replies containing
STOPunsubscribe the user from every SMS subscription in the project. Replies containingSTARTresubscribe them. These handlers require an SMS provider with an inbound callback configured. - Help keywords. Replies containing
HELPsend the configured SMS help message when one is set. Help responses do not change subscription state.
Next steps
Set up a project
Configure SMS opt-out and help messages for keyword replies.
Sync users
Push user data into a project.
Manage API keys
Issue a secret project key for server-side preference-centre calls.
Authentication
The conceptual model for
pk_ plus user session token combinations.