Messaging
Direct messages let any two traders talk — about a listing, a trade, or a card. Because a message reaches into someone else's attention, the platform makes several decisions on both parties' behalf. This page names all of them.
Where this lives in code. Guards, rate limits, and thread rules:apps/storefront/src/lib/messages/db.ts. Email batching:apps/storefront/src/lib/email/handlers/dm-unread.ts. Schema: migrations0072_direct_messages.sqland0110_dm_audibility.sql.
Who can message you
- Blocks are bidirectional.If either of you has blocked the other, neither can open a thread or send a message. The refusal happens before anything is written — including at the "Message" button, so you learn before composing.
- You can opt out entirely. The accepts messages toggle on your profile refuses all new unsolicited messages. It defaults to on.
- Empty threads stay private to their opener.Opening a thread without sending anything does not appear in the other person's inbox; they see the conversation only when the first message lands.
Rate limits
- 10 messages per minute. High enough for a quick shipping-address exchange, low enough to blunt paste-bombing.
- 50 messages per day. Caps broadcast abuse.
- 10 new conversations per hour. Opening threads with many strangers in quick succession is a spam shape. Re-opening an existing thread is never limited.
Hitting a limit returns an explicit error naming the cap — the platform refuses loudly, not silently.
Reference chips
A message can carry a chip pointing at a trade, offer, lot, auction, or order. The chip is only stored after the platform verifies the sender's relationship to the referenced thing (e.g. you must be a party to a trade to cite it). This prevents a stranger from borrowing the platform's provenance to dress up a phishing message.
How you find out — and what "fresh" means here
- In-app. A bell notification (at most one per conversation per day), an unread badge on the envelope in the navigation (refreshed every 60 seconds), and the inbox itself (open thread refreshed every 15 seconds, list every 45). Messaging here is polled, not push — a reply can take up to one refresh interval to appear.
- Email.When a message arrives and you haven't read it, you get one email pointing at the conversation — then at most one email per conversation every 12 hours, and none at all once you've read the thread, unless something new arrives after that. Turn this off under Email preferences("Direct messages") or via the unsubscribe link in any such email. Sabbath-mode and memorial accounts receive neither notifications nor emails.
What the platform does not do
- Messages are not end-to-end encrypted; platform administrators can read them when investigating abuse reports.
- The platform does not moderate messages automatically. If someone abuses the channel, block them and report the trade context — review is manual.
- Anything you arrange over messages (meet-ups, off-platform payment) is settled off-platform and carries none of the escrow or dispute protections trades have.
Changelog
- 2026-07-05 — per-minute limit raised 5 → 10 (address exchanges tripped it); thread-open guard + hourly cap added; unread-email batching (12h window) introduced.
- 2026-05 (migration 0072) — direct messaging shipped: blocks, opt-out, 5/min + 50/day limits, reference validation.