Privacy

Updated

The short version

  • There is no email address anywhere in this system. No column, no form field, no Discord scope.
  • We store nothing about a winner beyond their Discord ID and the avatar already on their account. No name, no address, no phone number, no tax details, no payment details.
  • We never read message content, member lists or presence on any Discord server.
  • There is no analytics, no advertising and no third-party tracker on this site.
  • Discord is the only third party this application talks to.

Your account

Signing in uses Discord OAuth with the scopes identify guilds and nothing else. The email scope is never requested. From that we store:

  • Discord ID - the numeric snowflake. This is your identity here.
  • Username and global name (display name), so you appear as yourself.
  • Avatar hash - the identifier Discord uses to build the image URL. We do not copy the image itself.
  • Locale - the language setting Discord reports.
  • Account creation date, which is not collected at all: it is arithmetic on your Discord ID, which encodes its own timestamp.
  • Encrypted OAuth access and refresh tokens, their expiry and their scope. See encryption at rest.
  • Flags we set ourselves: admin, banned with a reason, erased, whether you are in our hub Discord, your direct-message preferences, and a session version used to invalidate sign-ins.
  • Last sign-in time and the row timestamps.

Your server list is read and not stored when you enter. We keep the yes or no answer per participating server, described below, not the list of servers you are in.

Entries

An entry row holds:

  • The giveaway, your account, and a public reference used to identify the entry in the public ledger without naming you.
  • Its ticket count: one ticket for each store server in that giveaway you were in.
  • Status, and if the entry was flagged, the reason in words.
  • How many joins were required and how many were verified.
  • Your account age in days, and a coarse ten-minute bucket of your account creation time.
  • A salted hash of your IP prefix - the first three blocks of an IPv4 address, the first three groups of an IPv6 address. The full address is never stored, and the hash is salted with a secret that is not in the database.
  • A salted hash of your user agent, on the same basis.
  • Your two-letter country, where the host provides one.

The last four items are deleted after 90 days by a scheduled job. They exist to spot many entries from one place. An entry they flag is held back from the draw and shown as flagged on your entry page, with the reason; you can appeal through the report form.

For each participating server we also record whether you were already a member before you started, whether you were a member when you entered, whether you were a member at the draw, and whether you hold staff permissions there. It contains nothing about what happens inside those servers.

Stores

If you register a store we additionally store its public profile, the Discord server it is bound to, member and presence counts sampled at specific moments, whether you are the owner of that server, the admin decision on your store, and the Discord webhook URL you paste when you join a giveaway. That webhook is encrypted at rest, is never rendered back to you, and is never written to a log.

We store no prize code and no voucher: a store hands its own prize to the winner itself, so there is nothing of that kind for us to hold.

Reports and the audit log

A report you send through the report form stores what you typed, what you reported, your account ID if you were signed in, and a salted hash of your IP prefix for rate limiting. Reports can be sent signed out, in which case no account is attached.

Administrative and system actions are appended to a hash-chained audit log: what was done, to what, by whom, and when.

Winners

What we keep about a win is: which entry won, which prize, when the winner was pinged, and when they confirmed they got it. All of it keys off a Discord ID.

A store learns who won a prize it put up, and only that. The ping goes through that store's own webhook and mentions your Discord ID; its panel shows that ID, your Discord name and avatar, which prize it owes you, and whether you have confirmed you got it. It can type any ID into that panel, but the answer only ever comes from its own winners: an ID that never won from it returns nothing on record - never whether that account entered anything, won elsewhere, or exists.

What you tell that store yourself in its ticket is between you and them, under their own rules and Discord's.

What we never collect

  • Email addresses. No column exists, and the Discord scope is never requested.
  • Real names, postal addresses, phone numbers.
  • Tax identifiers, bank details, card details. We never take a payment from anyone.
  • Government ID or documents of any kind.
  • Message content, member lists or presence data from any Discord server. The application requests no privileged Discord intents and has no gateway connection at all.
  • Precise location. A country code, where available, is as fine-grained as it gets.
  • Biometric, health or any other special-category data.

Cookies and tracking

This site sets a session cookie when you sign in and, during the Discord handshake, short-lived cookies that protect that handshake against cross-site request forgery. That is the entire list.

There is no analytics, no heatmap tool, no advertising pixel and no third-party script. The content security policy only permits network connections back to the site itself.

Encryption at rest

Discord access and refresh tokens, store webhooks and the server seed for each draw are stored encrypted with AES-256-GCM, under keys derived from the application secret. Each class of secret has its own derivation domain, so a webhook cannot be decrypted by the code path that reads draw seeds.

Hashes of IP prefixes and user agents are salted with a pepper that lives in the environment and not in the database, so a stolen database alone cannot be used to test whether a given IP address entered a giveaway.

Retention schedule

DataKept forWhy
Account record (Discord ID, username, global name, avatar hash, locale)While the account existsNeeded to show you as yourself and to stop a second entry from the same person.
Encrypted Discord tokensUntil they expire, you sign out, or you delete the accountUsed to read your server list when you enter. Destroyed on erasure.
Entry signals (hashed IP prefix, hashed user agent, country, account-age bucket)90 daysPurged by a daily job; the ledger row is untouched.
Entry ledger, draw ledger, proof recordsIndefinitely, pseudonymousThese are the published proof of past draws. See the deletion section.
Per-server membership checks for an entryWith the entryRecords why an entry counted or was skipped, how many joins were new, and how many tickets it holds.
Reports you send usWhile open, then as long as needed to act on repeat patternsLets us act on repeat patterns across reports.
Audit logIndefinitelyHash-chained record of admin and system actions.
Rate-limit countersHoursCleared by the same daily job.

Who else sees it

  • Discord, unavoidably, because that is where you sign in and where the servers and the announcements are. Discord is a United States company and its handling of your data is governed by its own policy, not by this one.
  • Our hosting and database provider, as a processor, because the data has to live on a machine.
  • A store, about its own giveaways: clicks, qualified clicks, entries attributed, joins attributed against joins of unknown origin, and the change in its member count, none of which names anybody - plus the people who won a prize it put up. Somebody who did not win from that store reaches it in no form at all.
  • The public sees the pseudonymous ledger: a position, a public reference, a ticket count - which is how many of that giveaway's store servers the entry was in - and for a winner a Discord ID and avatar.
  • We do not sell data, we do not share it for advertising, and there is no third-party analytics processor to disclose.

Legal basis

  • Performance of a contract - running the giveaway you chose to enter, verifying your entry, and telling you which store owes you a prize if you win.
  • Legitimate interests - preventing multiple entries and abuse, rate limiting, and publishing a draw proof that others can verify. The signals used for this are hashed and expire after 90 days.
  • Consent - optional direct messages about new giveaways, off by default and only ever turned on by you.

Your rights

You can ask for access to your data, correction of it, erasure, restriction of or objection to processing, and a copy in a portable form. You can also complain to your local data protection authority. Most of your data is already visible to you on your own account pages.

Deleting your account

You can request deletion from your account settings, or through the report form if you are not signed in. When an account is deleted we anonymise it: username, global name, avatar hash and locale are cleared, the encrypted Discord tokens are destroyed, every session is invalidated, and the row is marked erased.

Deletion does not remove a pseudonymous entry row from a draw ledger that has already been frozen and published:

Signals attached to that entry - the hashed IP prefix, the hashed user agent, the country - are deleted on erasure. If you have an unclaimed prize, deleting the account forfeits it.

Contact

We have no support email, because we hold no email addresses. Reach us in our hub Discord server, or through the report form, which works signed out. Exercising a data right? Say so in the detail field.

DevHub (devhub.gg), which operates 5giveaways, is the controller for the data described here.