---
title: "Sentry"
description: "Send Sentry issue alerts to Uptimeify Incident Management via an internal integration webhook, mapped from the event's level, message, and environment."
---

Uptimeify's Sentry preset maps Sentry's issue-alert webhook payload directly: the event message/culprit, level, action, and server/environment are pre-mapped.

## 1. Create the alert source in Uptimeify

Go to **Incident Management → Alert Sources → New**, pick the **Sentry** preset, name it, and create it. On the success screen, copy the ingest URL (`https://<your-domain>/api/im/ingest/<token>`). It is shown once and never displayed again in cleartext. If you lose it, rotate the token from the source's **Settings** tab.

## 2. Create an internal integration in Sentry

Sentry sends issue-alert webhooks through an **internal integration**, not a plain webhook URL field:

1. In Sentry, go to **Settings → Developer Settings → New Internal Integration**.
2. Give it a name (for example `Uptimeify`).
3. Enable the **Alert Rule Action** toggle, and under **Webhooks** set the **Webhook URL** to the ingest URL you copied in step 1.
4. Save. This creates an alert-rule action you can attach to any alert rule in the organization.

## 3. Attach it to an alert rule

1. Go to **Alerts → Rules**, and create a new rule (or edit an existing one) for the project(s) you want to forward.
2. Under **Then perform these actions**, add **Send a notification via an integration** and select the internal integration you created in step 2.
3. Save the rule. Sentry now calls the webhook whenever the rule's conditions match, for both newly triggered issues and, if the rule includes a resolve condition, resolutions.

## Default field mapping

| Sentry field | Normalized field |
|---|---|
| `data.event.message` (falls back to `data.event.culprit`) | Title |
| `data.event.level` | Severity (via the map below) |
| `action` (top-level) | Status: `resolved` resolves the alert, anything else (`triggered`, `created`, `ignored`, `assigned`, …) keeps it open |
| `data.event.server_name` (falls back to `data.event.environment`) | Host |
| `data.event.issue_id` | Dedup key: groups all notifications for the same Sentry issue |

### Severity map

| Sentry `level` | Uptimeify severity |
|---|---|
| `fatal` | `sev1` |
| `error` | `sev2` |
| `warning` | `sev3` |
| `info` | `sev4` |
| `debug` | `sev4` |

## Sample payload

This is the shape of payload Uptimeify's Sentry preset expects:

```json
{
  "action": "triggered",
  "data": {
    "event": {
      "event_id": "fe208ee2e2e74ae08b3d4b7cdb9b4e3d",
      "issue_id": "123456789",
      "level": "error",
      "culprit": "raven.scripts.runner in main",
      "message": "This is an example python exception",
      "platform": "python",
      "environment": "production",
      "server_name": "web-01.prod.example.com",
      "web_url": "https://sentry.io/organizations/example/issues/123456789/",
      "issue_url": "https://sentry.io/api/0/issues/123456789/"
    }
  },
  "actor": { "type": "application", "id": "sentry", "name": "Sentry" }
}
```

You can send this exact payload against your source's mapping from the **Payload Mapping** tab in the dashboard to verify the setup before wiring up a real alert rule.
