REST API
Sentry
The errors Sentry sends and the connections to it.
GET /sentry/errors(tracker:read): errors Sentry sent (?project=MOBfor one project, with the integration and the last notice;?waiting=trueonly the ones awaiting a decision, as on the aqua screen). The same error shows up once, withevents,users, releases andstate:pending(gathering notices before triage),suggested(aqua did the triage),linked,regressed(came back after the issue was completed; tracker already commented on the issue),merged,dismissedormuted.triage.issueis the issue aqua wrote andcandidate, the open issue that looks like the same one.POST /sentry/errors/{id}(tracker:write): decides as on the aqua screen,{"action": "create_issue", "title": "..."}(creates the issue filled in, with link, reach, release, environment and a short stack),{"action": "link", "issue": "MOB-0012"}(withoutissue, aqua's candidate; comments on the issue),{"action": "reopen"}(an error that came back) or{"action": "dismiss", "snooze": "7"}("1","7","30"or"forever"). Requires editing issues in the project.GET /sentry/connections(tracker:read, admins and owners): the company's Sentry connections, each withproject(the project that receives whatever is left over),webhook_url,secret_saved,sentry_project_targets(the table:{"sentry_project": "my-backend", "target": "MOB"}, withtargetthe project prefix,rulesorignore),new_sentry_projects(rulesorignore),rules(in order,"/v1/orders/* → API"or"project=APP → APP"),environments,min_level,start_after,ai_triage,seen(Sentry projects and environments the notices have already shown), the last notice andwaiting.GET /sentry/connections/{id}returns one.POST /sentry/connections(tracker:write, admins and owners): connects a Sentry,{"project": "MOB"}; the response haswebhook_urlto create the Internal Integration in Sentry (Settings → Custom Integrations), and theclient_secretSentry shows goes in later.PATCH /sentry/connections/{id}: only what's sent changes,{"client_secret": "...", "sentry_project_targets": [...], "new_sentry_projects": "ignore", "rules": ["/v1/orders/* → API", "project=APP → APP"], "environments": ["prod"], "min_level": "error", "ai_triage": true, "active": true, "start_now": true}(the table and the rules come whole;projectchanges who receives the leftovers). In a route, a trailing*is a prefix; without*it matches the route and what's below it.DELETE /sentry/connections/{id}disconnects (received errors go away, created issues stay).POST /sentry/connections/{id}/test(tracker:read, admins and owners): where the connection's latest errors would go (up to 20), with the saved settings or withsentry_project_targets,new_sentry_projects,rules,environmentsandmin_levelfrom the body, without saving. Each item hasresult(project,ignoredoroutside_environment),project(prefix),by(table,rulewithrule, the rule number, orleftover),below_min_level,now_in,routeandtags. In the MCP:list_sentry_connections,save_sentry_connectionandtest_sentry_connection.