Let a browser report the two conditions only it can see

FeatureEmailService
Shipped
September 7, 2026 at 12:52 AM UTC
Author
Kamo
Commit
aa70061

Every notification so far is raised by the service that watched something happen. These two cannot be: whether a member looked at a conversation within five seconds of a message landing in it is a fact about a browser tab, and no server has it. So POST /api/notifications/self takes the CONDITION from the browser and the service still makes the decision — entitlement, mutes, quiet hours, do-not-disturb and the once-until-dismissed rule are applied exactly as they are for a calendar reminder, and a decoder is a 204 rather than an error, because "you have muted this" is an ordinary answer. Restricted to NEW_EMAIL and CHAT_MESSAGE. A member spamming their own centre is not worth defending against, but a browser that could raise any kind could raise a LEAD_CALLBACK — and a card claiming to come from the leads system when it does not is a lie the member has no way to see through. sourceType and sourceId are refused for the same reason: they drive the "already told" guard and the withdraw-by-source endpoint, so a client-chosen pair would let one tab suppress or withdraw another tab's notification. The once-until-dismissed rule is a property of the KIND, not a flag on the request. Every producer of one of these wants it, and a rule each caller has to remember is one a caller eventually forgets — the browser already raises both from two separate listeners.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing