Comp a subscription
Comping is the “give this user a free month of TwistCue+” action. It creates a complimentary Subscription row with the standard shape: the mobile app treats it identically to a paid subscription. There’s no wallet coin movement.
When to comp
Section titled “When to comp”- VIP retention: a high-spend user is churning. 30-day comp buys goodwill.
- Apology: refund isn’t enough for a big outage; comp on top.
- Partner grants: press, streamers, external testers.
- Winback campaigns: bulk-comp lapsed subscribers via a promo, not the User 360.
The comp modal
Section titled “The comp modal”User 360 → Actions → Comp subscription opens the form:
| Field | Type | Notes |
|---|---|---|
| Days | int, 1–365 | Length of the comp. Common values: 7, 30, 90. |
| Product ID | string, optional | If blank, defaults to twistcue_plus_web_monthly marker (the “comp” SKU). |
| Reason | string, 3–500 | Required for audit. |
What happens
Section titled “What happens”- New
Subscriptionrow inserted:platform='comp'product_idas chosenstatus='active'auto_renew=false(comps never auto-renew)current_period_start=now(),current_period_end=now() + daysprice_cents=0,currency='USD',region=null
- Bonus coins per month: comp subs currently do not grant the 200 bonus coins that paid TwistCue+ gets. This is intentional: comp = free access, not free coins. If you want to also grant coins, use Adjust coins separately.
AuditLogentry:action='user.comp_subscription',afterincludes days and product_id.- Mobile app picks up the new subscription on next
/subscriptions/statusrefresh (or immediately on cold start).
Ending a comp
Section titled “Ending a comp”- Wait it out:
current_period_endis respected. On that date the subscription flips toexpired. - Manually cancel: no dedicated UI action in v2. Delete the subscription row via a superadmin
wallet:adjustscoped tool, or wait for expiry.
Gotchas
Section titled “Gotchas”- Overlapping comps: comps stack additively. Comping 30 days on top of a user with 12 days remaining does not add to 42; it starts a new Subscription. The mobile app renders the one with the latest
current_period_end. - Comp on top of a paid sub: same story. The comp Subscription row lives alongside the paid one. When the paid one auto-renews or expires, the comp is still there.
- Refunds don’t affect comps: comping is not a purchase, so nothing to refund.
API call
Section titled “API call”curl -X POST https://api.twistcue.local/v1/admin/users/{userId}/comp-subscription \ -H "Authorization: Bearer $ADMIN_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "days": 30, "reason": "Retention: high-value churning user (ticket #9021)" }'Full details in API: Users.