Privacy Policy
Hearth — Privacy Policy
Last updated: 2026-05-13 (v1.5 update). This document is a plain-language baseline, not legal advice.
Hearth is a Discord bot. Using it means Discord sends us a small set of identifiers and interaction payloads. This page describes what we store, how long, and how you can ask us to delete it.
What we store
When you use Hearth we keep, per Discord user id:
- Game state: your level, XP, coins, tokens, vote streak, plot tiles, inventory items, owned cosmetics, owned pets, achievement progress, season-pass XP and tier (v1.5).
- Server-side context: the Discord guild id of the village you last interacted in (so vote-tied merchant spawns land in the right place).
- Vote history: a 7-day idempotency token for each Top.gg vote, plus your running
lastVoteAttimestamp. - Trade history (v1.5): pending trade rows (offer/ask items, expiry); a separate
TradeLogaudit row per completed/cancelled/expired trade (see “Trade audit log” below). - Optional opt-in: if you have not disabled
VOTE_DM_ENABLED, we send you a direct message after each confirmed vote. We do not store the message body — Discord delivers it.
We do not store:
- Message content, voice data, or attachments.
- Email addresses, IP addresses, payment information.
- Friend lists, role assignments, or any data outside of what Discord exposes through slash command interactions.
Where we store it
- PostgreSQL (our database) holds the durable rows above.
- Redis holds short-lived caches: rendered PNGs (1-60 minute TTL), rate-limit cooldowns, vote idempotency tokens (7 days), onboarding step state (7 days), deletion request state (24 hours).
- Top.gg sees each vote you cast and stores the vote independently. Their privacy policy applies to that part of the loop.
How long we keep it
- Game state: indefinitely while your account exists.
- Caches: their stated TTL (max 7 days).
- Vote idempotency tokens: 7 days.
- After
/forget-me confirm: every row is purged within seconds, the deletion request key is dropped, and your Discord user id is no longer recognized by Hearth.
How to delete your data
Run /forget-me request in Discord. You will see an ephemeral confirmation with a 24-hour grace window. During the grace:
- All other Hearth commands are blocked for your account (with a pointer back to
/forget-me). /forget-me cancelclears the request and your account resumes./forget-me statusshows the remaining hours.
After the 24 hours have passed, /forget-me confirm triggers a cascade delete across Player, Plot, Tile, InventoryItem, PlayerCosmetic, Contribution, BiomeVote, plus the v1.5 tables Pet, Trade, and PlayerSeason. Your Subscription row, if any, has its playerId set to null (we retain the row solely so we can honor refund disputes; it contains no other personal data).
Trade audit log
When trades complete, cancel, or expire, a row is written to TradeLog containing the trade id, item lists, tax, and the Discord user ids of both parties. On /forget-me confirm, your user id is anonymized (set to null) on every TradeLog row where you appear — but the row itself is preserved so the counterparty can dispute or audit the trade history on their side. No content beyond the structured item lists is retained.
Sharing
We do not sell or share your data with third parties for advertising. The only third-party interaction is Top.gg’s vote webhook, which Top.gg already mediates on your behalf.
Children
Hearth is intended for users who meet Discord’s minimum age. We do not knowingly collect data from anyone under that age.
Contact
Open an issue on the repository, or post in #privacy in the support server (invite shown in /help).
Updates
When this policy changes meaningfully, we post a notice in #announcements in the support server and bump the “Last updated” date above.