Paid Bounties

Bounties are an optional extra: every widget collects roasts perfectly well without one. When you want to raise the volume or quality of critical feedback, a bounty lets you put a cash reward on it. You pre-fund an escrow pool, attach a bounty to a widget, approve the roasts that earn it, and Roast pays the reviewer via Stripe. Bounties only ever apply to roasts, never to praise.

What bounties are (and why roasts only)

First things first: you do not need a bounty to use Roast. Widgets collect roasts and praise without any money involved, and most feedback arrives that way. A bounty is an optional incentive you can add to a specific widget when you want more, or more thorough, critical feedback.

A bounty is an owner-funded cash reward offered for a quality roast on a specific widget. Visitors who leave critical feedback that meets your bar can be approved for a payout, which Roast releases to them through Stripe.

By design, Roast never pays for praise: bounties are restricted to critical feedback only, and the server enforces this (a praise submission can never be approved for a payout). Paying users for positive reviews or testimonials risks falling foul of consumer-protection rules, including the UK's Digital Markets, Competition and Consumers Act, which prohibits incentivised fake or biased reviews.

Bounties are managed from Dashboard → Bounties (/dashboard/bounties), which shows your pool balance (Available, Held and Total), your bounties, and payout history.

Bounties are a money-movement feature and are enabled per account. If your account isn't enabled yet, creating a bounty returns 'Paid bounties are not enabled for this account yet.' (BOUNTIES_DISABLED).

Creating and managing bounties requires the bounties:write permission (Owner and Admin). Funding the pool is billing-gated, so it is Owner-only.

Payout history masks reviewer emails (e.g. j***@example.com).

Funding your bounty pool (escrow)

Bounties are paid from a pre-funded escrow pool, not from your card at approval time. You top up the pool from the Bounties page; the top-up runs through a Stripe Checkout session, and the pool is credited once the payment is captured.

Balances are tracked in an append-only ledger. 'Available' is what you can still commit to new payouts; 'Held' is the amount reserved by approved payouts that haven't been claimed or paid yet; 'Total' is the two combined. When you approve a payout the reward is moved from Available to Held, and if the payout is later declined or expires the hold is refunded back to Available.

  1. 1Go to Dashboard → Bounties.
  2. 2Choose a top-up amount (minimum $10, maximum $10,000 per top-up) and confirm.
  3. 3Complete payment on Stripe's checkout page. Your pool balance updates once the payment is captured.
  4. 4Approve payouts against the pool as quality roasts arrive.

Approving a payout when the pool can't cover the reward fails with an insufficient-escrow error; top up first.

v1 pools are held in USD.

Creating a bounty

A bounty is attached to a single widget, and each widget can have one live bounty at a time (creating a second returns 'This widget already has an active bounty.'). You set the reward per submission (between $1 and $1,000) and optionally a quality bar the roast must meet.

Quality options include a minimum word count (default 40), video-only eligibility (the bounty pays for video roasts only), free-text quality criteria used by an advisory AI pre-screen, a cap on total payouts, a per-email payout limit (default 1), and an approval window (default 7 days). The AI pre-screen scores each bounty roast and surfaces those that clear your threshold as 'eligible' in your queue, but the score is advisory, and you can still approve or decline any roast manually.

  1. 1On the Bounties page, click to create a bounty and choose the widget it applies to.
  2. 2Set the reward amount per approved roast ($1–$1,000).
  3. 3Optionally set the quality bar: minimum word count, video-only, quality criteria, payout caps and the approval window.
  4. 4Create and activate. The reward is now offered in that widget's Roast mode.

Bounties apply to Roast mode only; Praise mode never shows a reward.

One active bounty per widget; close or complete the current one before creating another.

What submitters see

When a widget has an active bounty, Roast mode shows a reward banner, for example 'Earn $25 for a quality roast' plus the bar to meet (40+ words, email for the claim link), or 'Record a video roast to earn $25' on video-only bounties.

The email field is shown open on bounty forms because a payout needs a claim email: if the reviewer doesn't leave an email, there is nowhere to send the claim link and the payout cannot be approved. Reviewers do not need a Roast account, just the email and, later, Stripe's hosted payout onboarding.

Bounty roasts are still ordinary roasts: private by default, moderated in your inbox like any other submission.

The reward banner states the quality bar so visitors know what qualifies before they write.

Approving and declining payouts

You decide which roasts earn the reward. From the submission's detail view, approving a payout holds the reward amount in escrow, creates a claim, and emails the reviewer their claim link. Approving is idempotent: re-approving a submission that already has a claim simply returns the existing claim.

Declining a payout refunds the held amount straight back to your pool. Anti-collusion checks are enforced on approval: you cannot pay a bounty to your own email or to a team member's, and each email is limited to the bounty's per-email payout cap.

Approving a payout is separate from approving the submission's moderation status: a payout approval moves money; a status change does not.

Payout approval requires submissions:write, but praise submissions and (on video-only bounties) text-only roasts are always refused server-side.

If the claim email fails to send, the claim still exists and the link can be re-sent.

Getting paid (for reviewers)

The reviewer's claim link opens /claim/[token], which shows the reward and a button to set up payout details. Payouts are handled by Stripe Connect Express: Stripe hosts the onboarding, including any identity verification (KYC), and Roast never sees bank details.

Once Stripe confirms the account can receive payouts, Roast releases the held funds as a Stripe transfer to the reviewer's account. A returning reviewer who has claimed before reuses their existing payout account, so subsequent claims are quicker.

Claim links are personal and time-limited: each one expires at the end of the bounty's approval window (default 7 days from approval). A scheduled job then refunds the held amount back to the owner's pool and marks the claim expired if the reviewer never completed onboarding. Expiry only ever releases abandoned claims; it never auto-approves or auto-rejects a payout on the owner's behalf.

The claim token is stored hashed; only the emailed link contains the usable token.

An expired, rejected or refunded claim shows 'This reward can no longer be claimed.' on the claim page.

Frequently asked questions

Do I need a bounty to collect roasts?
No. Bounties are entirely optional. Your widget collects roasts (and praise) without one, at no cost to you or your visitors, and everything else in Roast, from the inbox to AI analysis to the wall, works exactly the same. Add a bounty only if you want to encourage more, or more detailed, critical feedback on a particular widget.
Will visitors still leave feedback if there's no reward?
Yes. A widget without a bounty simply shows the normal Roast and Praise modes with no reward banner. People who want to tell you what's broken will still tell you. A bounty raises the incentive for longer, higher-effort roasts; it is not a requirement for feedback to flow.
Why can't I offer a bounty on praise?
Roast never pays for praise, by design and by server-side enforcement. Paying for positive reviews or testimonials risks breaching consumer-protection rules, including the UK's Digital Markets, Competition and Consumers Act, which prohibits incentivised fake or biased reviews. Bounties reward honest criticism only.
What happens to unused escrow?
It stays in your pool as Available balance for future payouts. Holds from declined payouts and expired claims are automatically refunded back to the pool; nothing is lost when a payout doesn't complete. Top-ups are credits to your bounty pool and cannot currently be withdrawn back to your card, so fund only what you plan to award. Since bounties are optional, you never need to top up at all to keep collecting roasts.
When do payouts expire?
A claim expires at the end of the bounty's approval window: 7 days after approval by default (configurable per bounty). If the reviewer hasn't completed Stripe onboarding by then, a scheduled job marks the claim expired and refunds the held amount to your pool. Expiry never auto-approves or auto-rejects a pending payout; decisions on owner inaction are deliberately left to you.
Do reviewers need a Roast account to get paid?
No. They only need to have left an email with their roast. The claim link takes them through Stripe's hosted payout onboarding (which may include identity verification), and the transfer is sent once Stripe enables payouts on their account.
Can I pay a bounty to myself or a teammate?
No. Approval blocks payouts to the workspace owner's email and to any team member's email, and each reviewer email is capped by the bounty's per-email limit. These anti-collusion checks are enforced server-side.