Raffle, Auction & Giveaway Transparency
Last updated: March 2026
Our Commitment to Fairness
Every raffle and giveaway run during Charity Stream-A-Thon uses automated, deterministic systems to calculate entries and select winners. No administrator manually picks or adjusts results. This page documents exactly how each system works so that donors, streamers, and viewers can verify the process independently.
Participation in any raffle or giveaway is a voluntary benefit of donating to St. Jude Children's Research Hospital through Tiltify. No purchase is necessary to participate where prohibited by law. Raffle prizes have no cash value and cannot be exchanged or transferred.
Donation Data — Where It Comes From
All donation data is sourced exclusively from the Tiltify public API using OAuth2 authenticated requests tied to the official Charity Stream-A-Thon team campaign. No donation data is entered, modified, or fabricated by event staff.
The following fields are read from each donation record:
| Field | Description |
|---|---|
| Donor name | As entered by the donor on Tiltify |
| Donation amount | In USD, as processed by Tiltify |
| Timestamp | The exact UTC time the donation cleared |
| Campaign | Which streamer's campaign the donation was made through |
| Donor comment | Optional message left by the donor |
Note: Anonymous donations are excluded from all raffles and auctions. Donors who submit their name as "Anonymous" or leave it blank are not entered into any pool. If you wish to be eligible, ensure your Tiltify display name is set before donating.
Regular Raffle Wheel
The regular raffle wheel is used throughout the event for ongoing prize drawings. It is operated by individual streamers during their broadcasts.
Each donation earns raffle entries based on its amount. The base rate is $10 USD = 1 entry:
entries = floor(donation_amount / 10)
Examples: $10 = 1 entry · $25 = 2 entries · $100 = 10 entries. Amounts below $10 receive no entries.
A configurable maximum entries-per-donor cap may be applied at the streamer's discretion. When a cap is in effect, no single donor can hold more than the capped number of entries in a single drawing, regardless of donation size. The cap in effect is displayed on-stream when active.
Streamers may optionally enable a Double Spots setting. When active, donors who reach the maximum entry cap receive double that capped amount instead of being hard-capped. This setting is disclosed on-stream when in use.
The pool is a flat array where each donor appears once per entry ticket. A winner is drawn by:
winner = pool[ floor(Math.random() × pool.length) ]
Math.random() uses the browser's built-in cryptographically seeded
pseudo-random number generator (CSPRNG). Every ticket has an equal and independent
probability of selection:
P(win) = donor_entries / total_pool_entries
No administrator can influence or replay the random draw. The result is final the moment the wheel animation completes.
Finale Raffle Wheel
The Finale Wheel is a separate, tiered drawing held at the end of the event for grand prizes. It draws from the full event donation pool — all donations made to any participating streamer's campaign across the entire event window.
Unlike the regular wheel, the Finale Wheel aggregates all donations from the same donor before calculating entries. Multiple smaller donations from the same person are combined:
total_effective = sum( amount_i × multiplier_i ) for all donations by this donor entries = floor( total_effective / 10 )
This allows donors who give in smaller increments throughout the event to accumulate entries, provided their combined total reaches $10 or more. Donors whose aggregate total remains below $10 receive no entries.
Donor identity is matched by display name as reported by Tiltify. Two different people who happen to share the same display name would have their donations combined. We recommend donors use a unique Tiltify display name to ensure accurate attribution.
During designated bonus periods — announced live on stream — all donations made within that time window earn triple entries instead of the standard rate. The multiplier is applied per individual donation based on its timestamp:
multiplier = 3 if window_start <= completed_at <= window_end multiplier = 1 otherwise
A donor may have some donations inside a 3× window and others outside. Each donation earns its own multiplier independently before being added to that donor's aggregate total. Bonus windows are set in advance and applied automatically — no manual adjustment is made after the fact.
| Donation | Amount | In 3× Window? | Effective Amount |
|---|---|---|---|
| Donation 1 | $20 | No | $20 |
| Donation 2 | $10 | Yes ×3 | $30 |
| Donation 3 | $5 | No | $5 |
| Total Effective Amount | $55 → 5 entries | ||
No purchase is necessary to enter the Finale Raffle. Any person may request one (1) free entry into the Finale Wheel pool without making a donation. Free entry requests must be submitted in accordance with the method described at charitystreamathon.com/terms. Only one free entry is permitted per person per event, regardless of how many requests are submitted.
In addition, administrators may add names directly to the pool in limited circumstances such as offline donations, sponsor contributions, or other staff-approved exceptions. All manual and free entries count as exactly 1 ticket, are not subject to 3× window multipliers, and are not affected by donation aggregation rules. When manual or free entries are present in a draw they are disclosed on-stream prior to the spin.
The Finale Wheel is divided into milestone prize goals. Each milestone is drawn independently from the same full donor pool. Winning one milestone does not remove a donor from other milestone draws — a donor can theoretically win multiple milestones.
If a result is disputed or a winner is unreachable, the milestone may be redrawn at administrator discretion. Any redraw is announced publicly on stream.
Identical to the regular wheel — a flat array where each donor appears once per entry ticket, drawn by:
winner = pool[ floor(Math.random() × pool.length) ]
The draw is executed live on stream with the animation visible to all viewers.
Charity Auctions
Charity auctions run on a dedicated platform at auction.charitystreamathon.com. All bids are placed via Twitch chat commands, and winning bids are fulfilled through a verified donation to the streamer's Tiltify campaign. No money changes hands through the auction platform itself — it is purely a bidding and tracking tool.
Auctions are created and configured by streamers or administrators before going live. All settings below are fixed before the auction opens and cannot be changed once active:
| Setting | Description |
|---|---|
| Starting bid | The minimum opening bid amount ($1.00 minimum) |
| Duration | How long the auction runs (30 seconds to 20 minutes) |
| Quiet period | A 30–60 second anti-snipe window at the end of the auction (see below) |
| Max extensions | The maximum number of times the quiet period can extend the auction (optional cap) |
| Bid command | The Twitch chat command used to place bids (e.g. !bid) |
| Item value | Optional declared retail value of the item |
| Minimum bid threshold | Optional minimum percentage of item value required to open bidding |
Bids are placed by typing the bid command followed by a dollar amount in the
streamer's Twitch chat (e.g. !bid 25). The auction bot reads all
chat messages in real time and processes valid bids automatically.
Rules enforced on every bid:
- The auction must be active or in an extended quiet period
- The opening bid must meet or exceed the configured starting bid
- Each subsequent bid must exceed the current highest bid by at least $1.00
- Only one bid holds the winning position at any time — the database update is atomic
- All bids are timestamped and permanently stored for audit purposes
Bidders who have been banned globally or by the specific streamer are rejected immediately and notified in chat. Bans may be temporary or permanent and are applied before any bid is accepted.
To prevent last-second bids from winning without giving other participants a chance to respond, every auction has a quiet period. If a bid is placed within the quiet period of the auction's scheduled end time, the clock is automatically extended by the quiet period duration:
if bid placed within quietPeriodSecs of expiresAt:
expiresAt = expiresAt + quietPeriodSecs
extendCount += 1
Extensions continue until no bid is placed during the quiet period, or until the configured maximum number of extensions is reached. The current extension count and deadline are announced in chat after each extension.
When an auction ends, the winner is the bidder whose bid holds the isWinning flag — always the highest valid bid at the moment the auction closes. This flag is maintained atomically: every time a new valid bid is accepted, the previous winner's flag is cleared and the new bid is marked winning in the same database transaction. There is never more than one winning bid.
The system announces the winner in chat along with the final amount and instructions to donate via the streamer's Tiltify campaign page.
Winning the auction does not complete the transaction — the winner must follow through with a real donation on Tiltify for the win to be confirmed. The platform uses a three-stage process to match and verify donations:
| Stage | Method | Result |
|---|---|---|
| 1 — Webhook | Tiltify sends a real-time notification when a donation is processed. The system verifies the authenticity of the notification using a cryptographic signature (HMAC-SHA256), then attempts to match it to a pending auction win. | PENDING → MATCHED |
| 2 — Cron fallback | Every 30–60 seconds, the system fetches all recent campaign donations from the Tiltify API and re-attempts matching against any still-pending wins. This catches cases where a webhook was delayed or missed. | PENDING → CONFIRMED |
| 3 — Manual review | If automated matching fails, streamers and administrators can manually match a Tiltify donation record to a pending win by entering the donation details. All manual actions are logged with the reviewer's identity and timestamp. | Any → CONFIRMED |
For a donation to be automatically matched to a win, all of the following must be true:
- The donor's name on Tiltify matches the winning bidder's Twitch display name or login (compared after stripping punctuation and spaces)
- The donated amount is equal to or greater than the winning bid amount
- The donation timestamp is after the auction ended
- The Tiltify donation has not already been matched to a different auction win
| Status | Meaning |
|---|---|
| PENDING | Auction ended, winner determined, awaiting donation from winner on Tiltify |
| MATCHED | A Tiltify donation has been automatically linked — awaiting streamer or admin confirmation |
| CONFIRMED | Donation verified by streamer or administrator; item fulfillment can proceed |
| FAILED | No qualifying donation was received within the review window, or the win was voided by an administrator |
Every action in the auction system is logged. This includes all bids (including non-winning bids), every status change on a donation record, all moderation actions (bans, manual matches, overrides), and the identity and timestamp of any administrator or streamer who takes a manual action. These logs are retained for the duration of the event and are available to administrators for dispute resolution.
Winners of physical items are asked to submit a shipping address through the auction platform. All addresses are stored encrypted using AES-256-GCM encryption and are accessible only to the fulfilling streamer and administrators. Address data is deleted after fulfillment. Winners may request deletion of their data at any time via the platform's data deletion request system.
General Disclaimers
- No purchase necessary. Donations are made to St. Jude Children's Research Hospital, a registered 501(c)(3) charity. Raffle participation is a voluntary benefit, not a condition of any purchase or transaction.
- No cash value. All prizes are awarded as-is with no cash equivalent, exchange, or transfer option.
- Void where prohibited. Participants are responsible for compliance with their local laws regarding charity raffles and giveaways.
- Technical limitations. Entry calculations depend on data accuracy as reported by Tiltify. In the event of a data discrepancy, platform outage, or API error, administrators will make reasonable efforts to reconstruct accurate entry counts. Final entry counts are at administrator discretion in such cases.
- Administrator discretion. Event staff reserve the right to disqualify entries, void draws, or modify rules in cases of fraud, abuse, system error, or circumstances outside our control. Any such action will be communicated transparently on stream.
- Data privacy. Donor names displayed on-stream are sourced from the public Tiltify donation feed. If you prefer not to have your name displayed, set your Tiltify account to anonymous — noting that this will also make you ineligible for raffle entry.
Questions or Concerns
If you have a question about how entries were calculated for your donation, or wish to dispute a draw result, please reach out via our contact page within 7 days of the event. Include your Tiltify donor name and the relevant donation details.