Top up your house credit

Put money on your account with a card, and see it land as a balanced ledger posting.

Owned by Member · 7 steps · about 10 minutes

Why this exists

A top-up is the one moment a member deliberately turns money into house credit, and the platform treats it as exactly what it is: the venue taking your cash and recording a liability to you. Two entries, balanced, append-only, and a separate transaction for the processor's fee so the cost of taking the money is never hidden inside the revenue.

The part worth teaching is idempotency. The top-up endpoint accepts an idempotency key, and the key check, the card charge and the ledger postings all happen inside one write transaction. A duplicate request blocks until the first commits and then returns "not applied" without ever reaching the processor. That is why a double-tap on a bad connection cannot charge a card twice — the guarantee is structural, not a disabled button.

Know what prepaid credit is and is not. It is spendable on anything the platform sells and it is spent first, before earned credit and before a VIP tab. It is not cashable out: only earned balance from resale can be paid to a bank account. Money that comes in through this door does not go back out through that one.

Before you start

  • A member session.
  • An amount inside the configured limits: at least $5 and at most $1000 per top-up.

Practise with

PersonaEmailPasswordNote
membermember@club.test member123starts with nothing, so the first top-up is easy to see
adminadmin@club.test admin123reads the resulting transaction and the trial balance

Steps 1–5 — Member

their manual →
  1. 1
    Open your credit page and find the Top up card. Use a quick amount button or type an amount in cents.
    /my/credit ledger
    Expected result An amount field, a card token field, and an Add credit button.
    Watch out for Amounts are in cents everywhere in this platform. Typing 50 gets you fifty cents, not fifty dollars — and the minimum will reject it.
  2. 2
    Submit the top-up. In the demo the token tok_success succeeds and tok_decline is refused.
    /api/credit/topup POST ledger
    Expected result 201 with the transaction, the companion fee transaction, and your refreshed balances.
    Watch out for A declined card still records the attempt in the outbound call log. Failure is evidence here, not silence.
  3. 3
    Send the same request again with the same idempotency key to see the guard.
    /api/credit/topup POST ledger
    Expected result 200 with applied false, and no second charge.
    Watch out for Without a key, a second request is a second genuine top-up. The key is what makes a retry safe.
  4. 4
    Read your balances and identify which pot grew.
    Expected result Prepaid up by the amount; earned and tab untouched.
    Watch out for Purchasing power went up by the same amount, but they are not the same number. Purchasing power includes a VIP tab's headroom, which is not money.
  5. 5
    Find the top-up on your statement and read the running balance around it.
    Expected result A line for the top-up with the balance after it.
    Watch out for Nothing on this statement is editable by anyone, including admins. If it is wrong, the fix is a new compensating entry that also appears here.

Steps 6–7 — Admin

their manual →

Verifies the posting balances and can make corrective adjustments if it does not.

  1. 6
    As an admin, open the transaction and read both sides plus the separate fee posting.
    /admin/ledger/transactions/{txn_id} ledger
    Expected result Cash clearing debited, the member's house-credit liability credited, and a second transaction for the processing fee.
    Watch out for The fee is a real expense posted separately on purpose. Netting it into the top-up would make the member's liability wrong by the fee.
  2. 7
    Check the trial balance still nets to zero after the movement.
    /admin/ledger ledger
    Expected result A balanced trial balance.
    Watch out for If it ever does not, stop and investigate rather than adjusting to taste. An unbalanced ledger on this platform means a bug, not a rounding difference — the posting rules make imbalance impossible to store.