Trophy points are not money. Official XenForo trophies are milestones: they add a number on the profile and they never spend. A shop is a second ledger — someone earns or buys a currency, then trades it for a group, a cosmetic, or a download. Those are different products. Mix them and you will have members asking why their “Veteran” title disappeared when they bought a name colour.
This is not the ranks article. That one owns medals and banners. This one is the till: official user upgrades (real money → a group), then a credits add-on only if you have a reason to print a second currency. Official source: XenForo user-upgrades manual and the premium-forum walkthrough. Community: [DBTech] DragonByte Credits 7.x (XF 2.3, PHP 8.0+, listed on XenForo resources) and the matching Shop product.
If nobody would pay €5 for the thing, do not invent points for it.
What stock XenForo will sell
Official user upgrades: a member pays, XenForo adds them to one or more user groups, and anything you can hang on permissions becomes the product. Profile banners, a private forum, higher attach limits, a banner that says Patron. Official line: any permission-gated feature can sit on an upgrade.
You need, in order:
- Setup → Payment profiles — how money arrives (the providers your XF version ships; do not invent a processor this article did not open).
- Groups & permissions → User groups → Add user group — a secondary group. Official example is titled
Subscribers. Leave permissions at default on the group itself except what you will set on the node. - A Private node (or a permission you actually want to sell). Official premium-forum walkthrough: Forums → Nodes → Add node, then Permissions → Private node, then View node = Yes only for
Subscribers. Other post/reply rights inherit from Registered. Grant View to Administrative and Moderating or staff cannot moderate the room they just sold. - Users → User customization → User upgrades → Add user upgrade. Official fields: title (
Premium forum accessin the example), description, cost and currency, Length (they change Permanent → 1 month and tick Recurring payments), payment profile, Additional user groups =Subscribers.
Members buy from Account upgrades. Payment received → group added. Term ends or payment fails → group removed → the private node disappears. That is the entire stock shop.
Official notes you will skip at your peril:
- Recurring means the processor charges again. If you cannot explain refunds and “I cancelled but I still have a week,” do not tick recurring yet. Sell Permanent or a one-month non-recurring first.
- Promotions and upgrades can both add
Subscribers. Official promotions will remove the group if criteria fail, unless the membership was applied by an upgrade/admin. Keep paid access off the promotion system. The ranks article already covered that trap. - Registered stays primary.
Subscribersis secondary. Always.
Three stock products that do not need points
| Product | Group does | Do not also |
|---|---|---|
| Premium forum | View on one Private node | Hide the same node with CSS |
| Patron badge | User banner + title override, display styling priority above Regular | Sell a trophy. Trophies do not expire |
| Bigger attachments | Yes on attach size / count | A second group for “even bigger” every month |
A profile-banner upgrade is an official worked example in the manual (Paying for access to user profile banners). Use it if cosmetics sell and a private forum does not.
When points are a different product
You want points when members should earn something they can later spend, without a card. Typical honest uses:
- A cosmetic the cash shop also sells, so grinders and payers meet
- A temporary sticky, a name colour, a download
- A game-section currency that is clearly play-money
You do not want points because “engagement.” The engagement article already used reactions and trophies for that. Points that only go up and never buy anything are a worse trophy ladder.
Stock XenForo will not do earn-and-spend. That is an add-on.
DragonByte Credits, as it actually ships
[DBTech] DragonByte Credits (resource 5871, 7.0.1 as of the current resource page, XF 2.0–2.3, PHP 8.0+ / 8.2 recommended) is the credits system XenForo Community threads still name first. It is not official. It is a paid add-on with events, currencies, and a transaction log.
What the resource page actually promises — use this as the spec, not a review score:
- Currencies: more than one, own table/column, rounding, negative handling, visibility by group, prefix/suffix
- Events: dozens of triggers (post, thread, reply, like, daily login, trophy awarded, registration, paycheck, tax, interest, redeem codes,
[CHARGE=X]on content, PayPal Purchase, donate, transfer…) - Payment profile integration (v5.5+): Credits can be a XenForo payment profile, so an official user upgrade can be paid in points
- Shop integration: DragonByte Shop purchases show in the credits ledger. Shop is a separate product (resource 5869; 2.3.9+ needed a fix). Community vendor note: point both at the same points field if you want one wallet
- Moderation: events can land in the approval queue
- Criteria: “more / fewer than X of this currency” for trophies and the usual criteria consumers
- Transaction log and admin adjust (“Adjustment by administrator”)
PHP 8.0+ is a hard extra. If you are still on 7.4, this add-on is not your next click — the 2.3 upgrade is.
Events you should not turn on
The feature list is a foot-gun catalogue. Community and the vendor themselves mark some as “limit this”:
| Event | Risk |
|---|---|
| View / Viewed / Profile / Visit | Farming. Limit hard or skip |
| Post / Thread with no cap | Spam for pennies |
| Interest + Paycheck + Daily activity | Inflation. Pick one time-based drip |
| Taxation | Drama unless the currency is openly play-money |
[CHARGE=X] |
Paywalls inside threads. Members will hide support answers |
| Warning / Give warning | You just put a price on moderation |
| Report / Reported | Same, with extra spite |
A first-week event set that will not destroy the board: Daily activity (once), Post with a daily cap, Post liked (not “liked someone”), Trophy (ties the rank system to the wallet), Purchase if you sell points for cash. Everything else off.
Then decide one sink: an official user upgrade paid with the Credits payment profile, or one Shop item (a banner group). A currency with five earn events and no sink is a scoreboard. You already have trophy points for that.
Architecture that does not fight itself
Real money ──► Payment profile ──► User upgrade ──► Subscribers group
▲
│ (optional)
Points ──► DB Credits payment profile ──┘
▲
└── Daily / post / like events (capped)
- Trophy points stay on the profile. They do not convert unless you create a Trophy event (Credits can award currency when a trophy lands). Do that at a low rate or you double-pay every milestone.
- The title ladder stays on messages or trophy points, not on Credits, unless you enjoy explaining two numbers.
- Paid
Subscribersis never a promotion criterion that can yank the group at 03:00.
Test with a dummy: earn 10, buy the upgrade, confirm View on the private node, expire or revoke, confirm lockout. Three sessions: buyer, guest, moderator.
Legal and ops, short
If points can be bought with money, you are in the same drawer as user upgrades: VAT, refunds, chargebacks, a payment profile that actually reconciles. If points are only earned, say so in the shop footer. Do not call them “credits” that “never expire” and then run Taxation.
The transaction log is the staff tool. Admin adjust is a logged event. Do not SQL-update a column to “fix” a balance.
Cron: Credits 7.0.1’s own changelog mentions a stuck credits cron. After install, Tools → Cron entries is part of the performance shift. If paycheck/tax events stop, look there before you rebuild the add-on.
Checklist
- You can name the product in one sentence (access / badge / play-money)
- Stock path tried first: payment profile →
Subscribers→ Private node → user upgrade - Staff have View on that node
- Registered still primary
- Promotions do not add or remove the paid group
- If Credits: PHP 8+, one currency, capped earn events, one sink, view/profile events off
- Shop (if any) shares that currency field
- Dummy purchase, dummy expire, guest cannot see
- Refund / expire copy written for members
- Cron not stuck a week later
A XenForo shop is a group you can take back when the receipt ends. Points are optional paint on that group. If you cannot ship the official upgrade, a 50-event credits tree will not save you. It will just give you a ledger to moderate.
Official upgrade, clicked in order
Use this as the rehearsal on staging before any Credits add-on.
- Groups & permissions → User groups → Add user group. Title
Subscribers. No extra Yes/Never on the group itself except a banner if the product is the badge. - Forums → Nodes → Add node. Forum
Premium content. Save. - Node Permissions → Private node → save. Subscribers → View node = Yes. Repeat View for Administrative and Moderating.
- Setup → Payment profiles. One processor you can refund on. Do not add three “just in case.”
- Users → User customization → User upgrades → Add user upgrade. Title
Premium forum access. Cost you can say out loud. Length 1 month. Recurring only if you have already written what happens on failure. Additional user groups:Subscribers. - Dummy member: Account upgrades → pay (sandbox) → confirm they see
Premium content→ confirm a guest 404s/no-permission → cancel or expire → confirm lockout. - Staff account without Subscribers: confirm you still see the node (you granted View). If not, you cannot moderate what you sell.
That is the official premium-forum walkthrough, compressed. Profile-banner upgrades follow the same group + permission idea without a node.
Inflation, written as numbers
Pick a sink that costs about two weeks of honest posting.
Example: Daily activity = 5, capped Post = 2 each, max 10 posts/day → about 25/day if they grind. A name-colour that lasts 30 days should cost ~200–350, not 20 (everyone has it by Tuesday) and not 20,000 (nobody bothers). Recalculate after a month of the transaction log. If 80% of the currency sits unspent, lower the sink or cut an earn event. If nobody can afford the sink, you built a museum.
Do not also pay for View or Profile. Those numbers go vertical without a post.
Purchase (cash → points) should be worse value than the official upgrade for the same group. Otherwise nobody uses Account upgrades and you have invented a second till to reconcile.
Shop items that are not a trap
If you add DragonByte Shop (separate resource; confirm a 2.3.9+ safe build):
- One wallet: vendor’s own note — Credits and Shop must share the same points field
- Items that expire (a 30-day banner group) beat items that permanently Yes a permission
- Do not sell hard-delete, ban immunity, or “your report is processed first”
- Do not sell View on a staff node
- Log every grant the way Credits logs an admin adjust
A shop that sells “more reactions” or “custom title” will fight the title ladder. Either the ladder owns the text, or the shop does.
When to refuse the add-on
- You do not have a working official upgrade
- PHP is below 8.0
- You wanted “engagement” and have not shipped five trophies
- You cannot name a sink
- You will not read the transaction log weekly
DragonByte’s event list is impressive. It is also how a quiet board becomes a farm. Official user upgrades are boring. Boring is how money should feel on a forum.
Payment profiles and the return URL
Official upgrades do not charge anyone until Setup → Payment profiles has a processor that can complete a round trip. The return URL is your Board URL plus XenForo’s payment callback. If Board URL is http:// on a live https:// board, the processor will succeed and XenForo will not see the group add. That looks like “I paid and got nothing.” Check the payment log in the ACP before you refund in a panic — and before you invent a Credits purchase event to “work around” a broken profile.
Sandbox first. One live €1 upgrade to a dummy, then refund, then sell to humans. Recurring: write the member-facing sentence before you tick the box: when they cancel, they keep access until the term they already paid. Official docs: failed payment or cancel → group removed when the term ends. If your processor removes them the same hour, that is a profile setting, not XenForo being cruel.
Do not attach three processors to one upgrade “for convenience.” The one you cannot refund is the one members will use.
Two ledgers, one staff rule
Trophy points, reaction score, and Credits are three numbers. Staff copy should only ever mention the one the member can spend. “You have 40 trophy points” is a rank conversation. “You have 40 credits” is a shop conversation. If the HTML widget on the portal prints both, delete one.
When a member is banned, decide whether Credits freeze. The transaction log should still exist; the spend permission should not. Official user upgrades already drop Subscribers when you ban or disable if you also strip the group — confirm on a dummy. Do not leave a banned account able to [CHARGE=X] a post.
A 14-day rollout
Days 1–3: official upgrade only. No Credits. Watch one real payment.
Days 4–7: if people ask “can I earn this instead of paying,” install Credits, one currency, Daily + capped Post + Trophy events, sink = the same upgrade via the Credits payment profile at a worse rate than cash.
Days 8–14: read the log. Cut any event that is 50%+ of issuance. Add Shop only if you have a cosmetic that must expire.
If day 14’s log is empty, you did not need an economy. Turn Credits off. Keep the official upgrade. That is a successful shop.
A last operational note: official user upgrades add secondary groups only. If a well-meaning add-on or a batch update changes someone’s primary group to Subscribers, you have recreated configuration mistake #1 from the mistakes article. Check a paying dummy with Analyze permissions after the first live sale, not after the first complaint. The till is a permission change. Treat it like one. If Analyze permissions shows a Never from Registered that blocks the sold forum, fix Registered or the node overlay — do not add a fourth group to paper over it.

