Staff payroll: paying per ticket and per reply

Staff & Payroll

OnyxBot computes staff pay from real ticket activity, by rules you define. It never moves money: you get exact totals and pay your team through whatever you already use.

Setting your rules

On Staff, then Payroll. Every rule saves the moment you change it, and a check beside the field confirms it:

  • Rates. Per closed ticket and per reply. Use either or both; set a rate to zero to ignore that signal.
  • Category rates. Give any category its own per-close rate when its tickets are more (or less) work than the rest: a billing dispute can pay more than a role request. Categories without their own rate use the per-closed-ticket rate above. A category rate of zero is allowed and means closes there pay nothing while replies in them still do; use Exclude categories from pay instead when neither should count.
  • Replies are counted per turn. Consecutive messages from a staff member count as one reply, however they’re split up; a new reply is counted only after the ticket opener responds. Splitting an answer across many messages never inflates pay.
  • Close attribution. Claimer first (default) or whoever closes. The same rule drives performance tracking.
  • Unclaimed closes. Whether they credit the closer.
  • Currency. Shown on the report and in exports.

The monthly report

Pick a month and every staff member appears with their closes, replies, the pay each line earns, and the total. When category rates are in play, the info marker beside a member's closes shows how many closes fell in each category and what each was worth. Export CSV downloads the whole table for your records or your payment tool, with a closes_by_category column carrying that same split.

When several staff worked one ticket

By default a close pays one person, the claimer, else the closer, however many staff replied. Split closes by contribution on the Pay rules card changes that for tickets closed from the moment you turn it on: a close becomes one unit of pay split between the staff who replied in the ticket by their share of its staff replies, counted per turn exactly like the reply rate. If Ari took three turns and Sam took one, Ari is paid for 0.75 of that close and Sam for 0.25, each at the rate of the ticket's category. Ari trying and handing off to Sam is no longer worth nothing to Ari.

It is opt-in because it is a payroll change, and it never rewrites the past. Tickets closed before you turned it on keep their whole-close credit. Each split is fixed the moment its ticket closes and never changes afterwards, so a month you have already paid stays as you paid it, and turning the setting off later only stops new splits. Tickets where nobody from staff replied, and tickets on servers with transcripts off, pay the whole close to the claimer, else the closer, as before. On the report, the info marker beside a member's closes shows how many tickets their figure came from and the split by category; the CSV carries the same in close_shares and tickets_contributed.

This applies to pay only. Performance tracking still credits the whole close to the claimer, else the closer, and so do reviews.

What counts

Only tickets closed by staff pay out. AI-resolved tickets, member self-closes, inactivity closes, and admin force-closes never appear in payroll. History is kept from the day you enabled tickets, so rules you tune today recompute past months correctly.

Still stuck?

Ask in our Discord. OnyxBot answers there first, so you can watch it work before you install it.

Join the support server

Not running OnyxBot yet?

The free plan includes the full ticket system and AI answering, with $1 of AI usage every month. No credit card.

Add to Discord free