The trust score is a single number, 0–100, that summarises your track record on Cambridge TCG. It influences your trade limits (per-trade and daily), your escrow tier (Direct, Verified, Full), whether escrow inspection is required, and your payout hold days.
The score is computed by code, not by humans, against data the platform has already collected about your behavior. You can see your own score and its components on /account/standing. This page documents the formula.
Where this lives in code. The canonical implementation is atapps/storefront/src/lib/escrow/trust-engine.ts(functioncalculateTrustScore). When the formula changes, this page is updated in the same PR.
2026-06-10 — the verification component was removed when identity verification stopped gating trade; weights moved to behaviour: completion +5, reviews +5. Scores recompute nightly.
The fraction of your trades that ended with escrow_status = completed, scaled to 35. A user with 4 of 5 trades completed gets 28 points; 5 of 5 gets the full 35. Cancelled and disputed trades count against completion (in the denominator but not the numerator). New users with zero trades get 0 here — the score grows as you trade.
Average rating across reviews you've received as a counterparty, scaled to 30 (so a 5-star average yields the full 30, a 3-star average yields 18).
Reviewer-trust weighting. Each review's contribution is multiplied by a weight depending on the reviewer's own trust score:
| Reviewer's trust | Weight |
|---|---|
| ≥ 80 (Veteran/Elite) | 1.0 |
| ≥ 50 (Trusted) | 0.8 |
| ≥ 20 (Starter) | 0.6 |
| < 20 (New) | 0.4 |
This is anti-farming. A 5-star from a Veteran counts more than a 5-star from a brand-new account. The effective weight is persisted on each review row so you can see — on /account/reviews — exactly how much each review counted.
Logarithmic. Total cumulative volume (in £) is taken as log10(total) × 5, capped at 15. £100 → 10 points; £1,000 → 15; £10,000 → also 15 (capped). The log scale is deliberate — going from £0 to £100 matters more than going from £10,000 to £20,000. Trust accrues with experience, not deal size.
Months since your first trade, capped at 5 months for the maximum 10 points (2 points per month). Tracks experience-on-the-platform, not calendar age. A user who registered a year ago but only started trading last week is still "new."
5 points per verified cross-platform reputation entry, capped at 10. Linking and verifying your eBay or CardMarket account contributes here.
| Trigger | Penalty |
|---|---|
| Active dispute (open) | −10 per open dispute |
| Dispute lost (resolved against you) | −15 per lost dispute |
| Dispute resolved as split | −8 per split (half-credit) |
| Unresolved fraud signal of medium severity or higher | −20 per signal |
Penalties stack. Win/loss attribution depends on role. If you were the seller and the dispute resolved as release_seller, you won. If it resolved as refund_buyer or return_card, you lost. The split outcome credits half a loss to both sides.
raw_score = completion + review + volume + age + external_rep
final_score = max(0, min(100, raw_score - penalties))The final score is mapped to a tier, which determines limits and routing:
| Tier | Min score | Trade limit | Daily limit | Inspection? | Payout hold |
|---|---|---|---|---|---|
| New | 0 | £50 | £100 | yes | 7 days |
| Starter | 20 | £150 | £500 | yes | 5 days |
| Trusted | 50 | £500 | £2,000 | no | 3 days |
| Veteran | 80 | £2,000 | £10,000 | no | 1 day |
| Elite | 95 | £10,000 | £50,000 | no | 0 days |
Tier table source: apps/storefront/src/lib/escrow/types.ts (TRUST_TIERS).
Your trust score is recomputed automatically when:
The maintenance cron lives at apps/storefront/src/app/api/cron/maintenance and dispatches the recompute via apps/storefront/src/lib/escrow/trust-recompute.ts. The trust_profiles.last_calculated_at column tracks the most recent recompute.
There is no "appeal the score itself" — the score is a function of inputs, so the appeal lives at the inputs: