Handling referral tickets

3 min read · 574 words · 2 revisions · Updated Sep 5, 2026

**Referrals are ungated and pay nothing.** Before working a referral ticket, hold both halves of that in mind: there is no entitlement to check, and there is no balance, credit or payment to adjust. The only thing a referral produces is a badge.

## The four questions that arrive

### "I invited five people and it says one"

**By far the commonest, and almost never a bug.** A referral counts only once the invitee has confirmed their email address AND finished onboarding. Somebody who signed up and stopped partway shows on the member's screen as *still setting up* and does not count.

Check it without touching anybody's health data:

SELECT status, rejection_reason, created_at, qualified_at
  FROM referrals
 WHERE referrer_user_id = 
 ORDER BY created_at DESC;

`pending` rows are people mid-setup. That is the answer, and it is not something support can complete for them.

### "My code was refused"

The refusal always carries a reason. The five the member can actually hit:

* **That is your own invite code.** Self-referral. * **An invite code has already been applied to this account.** One per account, forever. * **That code was created after your account.** The code did not exist when they signed up. * **Invite codes can be added within the first week of a new account.** Outside the seven-day window. * **We could not apply that code to this account.** The fraud check. Deliberately vague, and explained below.

### "It just says it couldn't be applied"

That is the `same_origin` rule: two accounts arriving from the same connection in a short window, or a burst of sign-ups against one code. **The wording is vague on purpose** and must stay that way, because a message naming the rule tells somebody exactly what to change.

Two things worth knowing before escalating one of these:

* **A household is a false positive we accept.** Two people in one home genuinely share an address. If the member's account is otherwise ordinary, escalate rather than arguing. * **Testing on one device trips it.** Anybody trying both sides of a referral from one laptop or one phone will hit this, and it is not a defect.

### "What do I actually get?"

**A badge, at nine milestones**: 1, 5, 10, 20, 40, 50, 100, 250 and 500 friends. Nothing else. Never offer, hint at, or promise Premium time, a credit, a discount, a refund or a prize in a referral ticket, and never suggest a review or a follow in exchange for anything.

## What support must not do

* **Do not tell a member who used their code.** The system deliberately does not surface it, and neither should we. Confirming that a particular person used a particular code is a disclosure about that person. * **Do not tell a referee who owns a code.** Same rule from the other side. * **Do not hand-insert a `referrals` row to "fix" a count.** It bypasses every check, and the unique index on `referee_user_id` means a mistake is not simply undoable.

## Escalate when

* A member reports a count that moved **down**. * A badge appeared and then vanished. * `GET /api/v1/referrals/me` returns anything other than 200 for a signed-in member. * An ordinary-looking member hits `same_origin` and has no plausible shared connection.

Attach the tenant access log line for the request. It gives the method, path, status and the app build from the User-Agent, which separates a decode bug from a gate.

## See also

* [Handling health permission tickets](/know/handling-health-permission-tickets)

Contributors:
Last edited by mobieus · Family meal sharing tickets: the conditions behind the share button and the Share with family? switch, reading a "logged but not shared" report back to a member, sharing a saved meal without logging it, and what to escalate
Created Aug 27, 2026
Was this article helpful?