Alerts & triage
tinymon emails you the first time a new error appears in a project, when a resolved error regresses, and when an uptime or heartbeat monitor changes state. You can route the same alerts to Slack, Discord, or any HTTPS endpoint. Once an issue is in your dashboard, resolve it, ignore it permanently, or silence it for a while.
Alert channels
Every channel you configure receives every kind of alert. The fingerprint groups identical-looking errors so you don't get spammed by the same bug, and error alerts are suppressed when the issue's effective status is resolved, ignored, or silenced — you only hear about things you haven't dismissed.
What triggers an alert
| Reason | Fires when |
|---|---|
| new_issue | A new error fingerprint is seen for the first time in a project. |
| regression | A resolved error fires again — it auto-reopens, marked regressed in the release it returned on. See Release tracking. |
| count_milestone | An issue's total event count crosses a number you set (e.g. 100). Fires once, when the count lands on the threshold. |
| uptime_down | An uptime monitor failed its threshold of consecutive checks. See Uptime monitoring. |
| uptime_up | A down uptime monitor recovered. |
| heartbeat_missing | A cron/heartbeat didn't ping within its window. See Heartbeat / cron. |
| heartbeat_recovered | A missing heartbeat pinged again. |
| Channel | Setup |
|---|---|
| On by default, to the address you signed in with. Configurable — see Email & notification settings. | |
| Slack | Add an incoming webhook URL in project settings. |
| Discord | Add a channel webhook URL in project settings. |
| Generic | Any HTTPS endpoint that accepts a JSON POST. |
Open your project → settings → Channels. Give each channel a name (e.g. "Eng Slack") so you can tell them apart, and use the "send test" button to confirm a payload arrives before relying on it in prod.
Alert rules
By default tinymon emails you on every new issue and regression. Alert rules let you decide exactly what fires and where it goes — open your project → settings → Alert rules. Each rule reads:
notify <channels + email> WHEN <trigger> IF <conditions>
- Trigger —
new_issue,regression, orcount_milestone(an issue reaching N events). - Conditions (all optional, blank = any) — environment, level, and a release glob (e.g.
v2.*). A rule only fires when the event matches every condition set. - Destinations — email and/or any of your channels. Pick per rule, so you can email on everything but only Slack production spikes.
New projects start with two default rules ("New issues" and "Regressions", both → email) so you're covered out of the box. Resolved, ignored, and silenced issues never alert, regardless of rules. Rule changes take effect within ~30 seconds.
Cutting down noise
tinymon keeps alerts from becoming spam in three ways:
- Cooldown — each rule has a "don't repeat the same issue more than once" setting (default 1 hour). The same issue won't re-alert through that rule until the window passes. Regressions are exempt — a fix breaking again always alerts immediately.
- Spike protection — if a single project produces an unusual burst of alerts in a few minutes (e.g. a bad deploy spawning dozens of new issues), tinymon caps the flood; the issues still appear in your dashboard.
- Mute — pause all alerts for a project for 1 or 24 hours from settings → Notifications → Mute alerts. Handy during a planned deploy. Per-issue muting still uses silence.
Email & notification settings
Open your project → settings → Notifications to control how tinymon emails you:
- Email alerts — a master on/off switch. Turn it off and tinymon stops emailing you entirely (webhooks still fire). Covers new issues, regressions, monitors, and quota warnings.
- Send to — by default, alerts go to the email you signed in with. You can point them at a different address (e.g. a shared
alerts@yourteam.cominbox). - This project — a per-project delivery mode:
All errors,Only ones I act on, orNone. UseNoneto mute a noisy project without touching the others.
Verifying a new alert email
To prevent typos from silently sending your errors to the wrong inbox, every custom alert address must be verified before tinymon delivers anything to it:
- Enter the new address under Send to → Change and click Send code.
- tinymon emails a 6-digit code to that address (valid for 10 minutes).
- Enter the code to confirm. Until you do, alerts keep going to your previously verified address — there's no gap in delivery.
Slack
Create an incoming webhook for the channel you want:
- Go to api.slack.com/apps → Create New App → from scratch.
- Enable Incoming Webhooks → Add New Webhook to Workspace, pick a channel.
- Copy the URL (starts with
https://hooks.slack.com/services/…). - In tinymon, project settings → Channels → Add: type Slack, paste the URL.
The Slack body is a simple { "text": "…" } with project name, error title, culprit, environment, and a deep link back to the issue in tinymon.
Discord
- Open your Discord channel → Edit Channel → Integrations → Webhooks → New Webhook.
- Copy the URL.
- In tinymon, project settings → Channels → Add: type Discord, paste the URL.
Same message format; Discord just reads it from the content field.
Generic webhook
For PagerDuty, OpsGenie, your own bot, an n8n flow — anything that takes an HTTPS POST. Configure the URL in project settings; tinymon sends:
{
"event": "new_issue",
"project": "web-app",
"issue_id": "…",
"title": "TypeError: Cannot read .id",
"culprit": "getUserHandler (handlers/users.ts)",
"environment": "production",
"release": "1.0.0",
"level": "error",
"first_seen": "2026-06-08T17:24:00Z",
"url": "https://console.tinymon.dev/dashboard/<project>/issues/<id>"
}
Triage: resolve, ignore, silence
Open any issue in the dashboard. Four actions:
| Action | Effect | Alerts? |
|---|---|---|
| Resolve | You fixed it. Hides from the default list. | No |
| Ignore | Permanently muted (e.g. a noise from a 3rd-party script). | No |
| Silence | Muted until a timestamp (1h / 24h / 7d / 30d). | No, until window passes |
| Reopen / Unsilence | Returns to unresolved. | Yes |
Silence in detail
A silenced issue has a silenced_until timestamp. While the window is active:
- No alerts fire — Slack, Discord, webhook, and email are all suppressed.
- The issue is hidden from the default (unresolved) list and visible under the silenced filter with the expiry time.
After the window passes the issue is treated as unresolved again — it returns to the default list and the next sighting can alert. You don't need to do anything.