Skip to content

An exception event is one captured error. It's the only type that gets grouped: every exception gets a fingerprint, and exceptions with the same fingerprint roll up into one issue — the thing you triage, assign, resolve, and hand to Autofix.

Where it comes from ​

  • captureException(error) — reporting a caught error yourself.
  • Automatic capture: GlobalErrorIntegration (Browser) and UncaughtExceptionIntegration (Node) for uncaught errors and unhandled rejections.
  • Opt-in integrations that turn other failures into exceptions: BrowserApiErrors, HttpErrors, ResourceErrors, SlowHandler.

See Capturing Errors for usage.

Payload ​

json
{
    "type": "exception",
    "timestamp": "2026-09-24T10:15:02.481Z",
    "tags": {},
    "contexts": { "environment": "production", "release": "web@1.4.2", "replay.id": "…" },
    "payload": {
        "name": "TypeError",
        "message": "Cannot read properties of undefined (reading 'total')",
        "stack": "TypeError: Cannot read properties of undefined…\n    at checkout (app.js:1:4821)",
        "breadcrumbs": [
            {
                "type": "ui.click",
                "level": "info",
                "message": "Clicked \"Pay\" button",
                "data": { "selector": "button#pay" },
                "timestamp": "2026-09-24T10:15:01.902Z"
            }
        ]
    }
}
FieldTypeDescription
namestringThe error's class name — error.name (TypeError, ApiError, …).
messagestringerror.message.
stackstring, optionalThe raw error.stack. Minified frames are resolved against uploaded source maps when viewed.
breadcrumbsarrayThe trail of events leading up to the error — the last 50 breadcrumbs recorded on the client.

Each breadcrumb has a message, a type (e.g. ui.click, navigation, http, default debug), a level (log, debug, info, success, warn, error), an optional free-form data object, and a timestamp. See Breadcrumbs.

Grouping into issues ​

On ingestion the exception's fingerprint is computed from the project's fingerprint template (Settings → Fingerprint). The default is:

text
{{event.name}}::{{event.message}}

so every TypeError with the same message lands in one issue. The template can reference any field of the event, including tags and contexts ({{event.tags.checkout.step}}, {{event.contexts.browser.name}}), and stack is also made available parsed: {{event.frames.0.function}}, {{event.frames.0.file}}, and the ready-made {{event.frames_signature}} (top 5 frames as function@file, no line/column) — see Issues for the full list and recipes.

A second setting on the same tab decides whether an exception creates/updates an issue at all (default: every exception does). Either way, the exception itself is stored, and if it carries a release context it's counted toward that release.

Filters ​

On top of the filters every type goes through, exceptions can be dropped by Settings → Filters:

  • Error names — exact match on name.
  • Error messages — case-insensitive substring match on name + message.
  • Hydration errors — framework SSR hydration mismatches.
  • Chunk load errors — ChunkLoadError, "Failed to fetch dynamically imported module", …

The server-side exception sample rate is rolled independently for each event.

Quota ​

Counts as one toward the monthly errors limit. Other types have their own limits, so a flood of logs or metrics never stops errors from being accepted.