Watch And Earn docs
v4.0.0
Live demoConsole demo Get help
● Cash wallet · Operator console

Payouts, Wallets and Business
review, pay, measure.

Three console pages run the cash side: the Payouts queue, the Wallets page for one user, and the Business page with measured revenue, payouts, margin and what you owe. The console never moves money itself; every action is applied once by the backend.

Four-eyesAuditedMeasured only

01Who can do what (four-eyes)

From admin/src/routes40.ts and admin/src/manifest40.ts:

ActionViewerManagerOwner
See Payouts, Wallets, Businessyesyesyes
Approve, bulk approve, reject, mark paidnoyesyes
Show full destination (audited)noyesyes
Grant cash, freeze and unfreeze payoutsnoyesyes
Send via PayPal (single, bulk, retry)nonoyes
PayPal Payouts settingsnonoyes
Wallet & payouts and Payout methods settingsnoyesyes

Approving never sends money. A manager approves; the owner sends through PayPal Payouts. The only exception is a request auto-approved under Auto-approve small requests: a PayPal request approved that way is sent at request time when PayPal credentials exist.

Owner-only money settings

Only the owner can switch the wallet on or off, turn on auto-approve, and change the review amount, the user shares, the referral commission, the payout limits and the offerwall reward mode. Managers see these settings read-only, so no single manager can make money leave without the owner.

Every action is recorded in the console's append-only audit log. A payout reference and a revealed destination never go into the audit log.

02How an action reaches the backend

The console never changes a wallet or a request itself. Each action writes one document walletOps/{id} with the kind, the request or user, your reason or reference and your e-mail. The Functions trigger onWalletOp applies it once, in one transaction (request, wallet, ledger entry), and writes back status: "done" or "error" with the error and per-item results. The pages show that status next to the request, usually within seconds. Bulk actions take up to 200 requests; the result is "done" when at least one succeeded.

If an action stays without a status, the 4.0 Functions are not deployed or the trigger failed: check Firebase console → Functions → logs for onWalletOp.

03Request states

FromToHow
(new)pending, or approved if auto-approvedThe user requests; the amount moves available → locked
pendingapproved / rejected / cancelled / paidApprove / Reject / the user cancels / Mark paid
approvedprocessing / paid / rejectedSend via PayPal (owner) / Mark paid / Reject
processingpaid / failed / back to approvedPayPal webhook or poll / PayPal failure / PayPal send error (with "Last PayPal error")
paidfailedOnly a PayPal return or reversal after success

Rejected, cancelled and failed requests return the amount to the user's available balance. A paid request writes the paid date and a cost event (payoutEvents). The user gets an inbox message when a request is paid, rejected or failed. Only a pending request can be cancelled by the user.

04Payouts page

Console → Payouts (Revenue and growth group). A queue of payout requests, newest first (up to 500 matching), with filters for status, method, created date (UTC) and amount.

  • Columns (admin/pages/wallet.js): created, user, method (with the crypto asset), amount, fee, net, masked destination, flags, status (with "auto" for auto-approved requests) and the status of the last console action ("Op").
  • Detail drawer: the user's wallet and last entries, device and fraud signals (shared devices, emulator, root, VPN, open fraud flags and review items), other users of the same destination, the user's other requests, and the request's action history.
  • Actions: Approve, Reject (reason, shown to the user), Mark paid (reference, optional "your cost"), Send via PayPal (owner; also the retry), Show full destination (audited), and with a selection: Approve selected, Send selected via PayPal (owner).

When the wallet is off the page says "The cash wallet is off (Settings → Wallet & payouts). No new requests can arrive." Without PayPal credentials, Send via PayPal answers "Set up PayPal Payouts first (Settings → PayPal Payouts)."

A daily routine

  1. Filter PendingStart with the oldest.
  2. Read the flags and the drawerA first payout, a young account or a shared destination deserve a closer look (what each flag means).
  3. Approve or rejectWrite a clear reason when you reject; the user sees it.
  4. PayThe owner sends approved PayPal requests; for the other methods, pay by hand and mark paid (Manual payouts).
  5. Check ProcessingRequests stuck in processing or back in approved with a PayPal error need the owner's attention.

05Wallets page

Console → Wallets. Search a user, then see:

  • Pending, available and locked cash (a negative available balance is highlighted), lifetime earned and lifetime paid.
  • The last 50 wallet entries and the user's payout requests with their actions.
  • Grant cash: an amount (a positive number like 5.00) and a reason, for example "contest prize October". It is available to the user at once, recorded in the audit log and in the user's history, and paid from your margin (Grants).
  • Freeze payouts with a reason: the user cannot request payouts ("Cash-outs are paused for this account" in the app, reason frozen); earning continues. Unfreeze lifts it. The backend stores it on users/{uid}.walletFrozen with who, when and why.

"No wallet yet: this user has never received cash." means the user has no wallet document.

06Business page

Console → Business (Revenue and growth group), over 7, 30 or 90 days. Measured money only: "Nothing on this page is an estimate; what is not measured says so."

FigureWhere it comes from
Revenue by sourceMeasured revenue events (revenueEvents) in the wallet currency: offerwalls, surveys, store purchases, sponsor bookings, ad networks through a connected reporting API. Net of reversals. Revenue in other currencies is listed but never converted and not in the margin.
Payouts paid, by methodpayoutEvents: what each paid request cost you. "Your cost" from Mark paid when you entered one, otherwise the amount taken from the user's wallet (fee included). A returned payout counts back.
MarginRevenue − payouts. When a source is not connected, the margin is "measured so far", not your whole business.
Owed to users nowEvery wallet's pending + available + locked cash (stats/wallet, refreshed every 15 minutes by walletTotals).
Owed to users (end of day)The same total per day, from the daily rollup (analyticsDaily.walletLiabilityCents, 00:30 UTC).

"Owed to users" is money you may have to pay. Keep enough in your payout accounts to cover the available and locked part, and expect the pending part to follow after the hold, minus reversals.

On the read-only demo console the Business page measures nothing: revenue, payouts, margin and liability all say "not measured" (admin/README.md).

07Example calculator: not a forecast

At the bottom of the Business page, titled Example calculator — not a forecast. It runs only in your browser (admin/pages/calc.js), saves nothing and is not pre-filled: you type every number, and every field is your own assumption.

InputMeaning
Active users per dayYour assumption
Completed offers per user per dayYour assumption
Average provider payout per offerIn the wallet currency, e.g. 0.80
User share (%)0 to 100, as in Wallet & payouts
Payout costs (% of cash paid)PayPal, network or bank fees you pay

It shows per day and per 30 days: provider revenue, cash to users (share), payout costs and the resulting margin. It does not include the referral commission, VIP shares, reversals, ad revenue or your other costs, so the real result will differ. It is arithmetic on your inputs, nothing more.

No income promise

The calculator is not a forecast and these docs make no claim about what you will earn. Results depend on your users, countries, providers, reversals and policy compliance.