Events

Session API for issue occurrences, timelines, releases seen, and crash-dialog feedback.

Requires a dashboard session. Org-scoped via RLS. Ingest remains DSN-only.

List events for an issue

GET /api/v1/issues/{issue_id}/events with a login cookie. Limit defaults to 50, clamped 1–200.

Cookie from login (see Issues):

curl -sS -b cookies.txt \
  "http://localhost:8080/api/v1/issues/${ISSUE_ID}/events?limit=50&offset=0"
GET /api/v1/issues/{issue_id}/events?limit=50&offset=0&release={optional}
QueryDefaultNotes
limit50clamped 1–200
offset0
releasenonefilter occurrences

Response 200

{
  "events": [
    {
      "id": "660e8400-e29b-41d4-a716-446655440001",
      "issue_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "occurred_at": "2026-09-17T12:00:00Z",
      "environment": "local",
      "release": "my-app@0.0.0",
      "platform": "javascript",
      "runtime_name": null,
      "runtime_version": null,
      "browser_name": "Chrome",
      "os_name": "macOS",
      "user_id": null,
      "user_email": null,
      "payload_json": {},
      "stack_frames": [],
      "breadcrumbs": []
    }
  ],
  "total": 42,
  "has_more": false
}

Missing issue → 404. UI counterpart: Product · Events.

Releases seen on an issue

GET /api/v1/issues/{issue_id}/releases
{ "releases": ["my-app@0.0.0", "my-app@1.0.0"] }

How do I read a timeline?

GET /api/v1/issues/{issue_id}/timeline?window=7d
windowBucketing
7d (default)hourly
14d, 28d/30d, alldaily

How do I read crash-dialog feedback?

Posted on ingest via user-feedback. Read-back:

GET /api/v1/events/{event_id}/feedback

Returns stored crash-dialog feedback for the event (org-scoped), or empty when none.

curl -sS -b cookies.txt \
  "http://localhost:8080/api/v1/events/${EVENT_ID}/feedback"
Why is payload_json empty?

Spike-valve counter-only accepts increment the issue but discard bodies. Later events for that fingerprint keep frames. Operators then see elevated event_count without matching stored rows. The hourly cap is the 403 path: Errors.

Can I GET events with the DSN?

No. The DSN is ingest only. Use the session cookie on GET /api/v1/issues/{id}/events. DSN headers return 401, and a cookie on envelope or store is ignored. Org scope comes from RLS on the session: Authentication.