Observability
Update an error
Resolve, ignore or reopen an error group (state), or link it to the issue made for it (issue_number; null unlinks it).
PATCH
/workspaces/{workspace}/projects/{project}/observability/errors/{fingerprint}A resolved group that happens again opens again. Needs the Triage role or higher.
A resolved group that happens again opens again. issue_number links the issue made for it, so an agent can take it; null unlinks it. Needs the Triage role or higher.
- Authentication: Required. Send an access token as
Authorization: Bearer. - MCP tool:
observabilitywithactionupdate_error, and the same inputs - Scope: An access token needs
observability:write.
Path parameters
Section titled “Path parameters”| Name | Type | Required | Description |
|---|---|---|---|
workspace |
string | Yes | The workspace’s slug, e.g. “flagon-io”. |
project |
string | Yes | The project’s slug, as in g1t.sh/{workspace}/{project}. |
fingerprint |
string | Yes | The error group’s fingerprint, as list_errors gives it. |
Body parameters
Section titled “Body parameters”Send a JSON object. Names are snake_case, as in responses; the camelCase spelling is accepted too.
| Name | Type | Required | Description |
|---|---|---|---|
state |
string | No | Its state now: resolved, ignored, or open again. One of open, resolved, ignored. |
issue_number |
integer or null | No | The issue made for it; null unlinks it. |
Example request
Section titled “Example request”curl -X PATCH https://api.g1t.sh/workspaces/flagon-io/projects/g1t/observability/errors/9f2c41d07ab3e815 \ -H "Authorization: Bearer $G1T_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "state": "resolved", "issue_number": 418 }'Example response
Section titled “Example response”A successful request answers 200 with:
{ "fingerprint": "9f2c41d07ab3e815", "name": "TypeError", "message": "Cannot read properties of undefined (reading 'head')", "stack": "TypeError: Cannot read properties of undefined (reading 'head')\n at loadPull (app/routes/pulls.ts:88:31)", "service": "g1t-web", "environment": "production", "first_us": 1791813062000000, "last_us": 1791813808000000, "count": 37, "first_deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x", "last_request_id": "req_01kq9b7d9f1h3k5m7p9r1t3v5x", "last_trace_id": "4bf92f3577b34da6a3ce929d0e0e4736", "state": "resolved", "issue_number": 418}Errors
Section titled “Errors”A failed request answers with one of these statuses and a body like {"error": {"code": "not_found", "message": "Repository not found."}}. See errors.
| Status | Code | When |
|---|---|---|
| 401 | unauthenticated |
A token is required, or the one sent is not valid. |
| 403 | forbidden |
The token is valid but not allowed to do this, such as a member-only change, or a token without the scope it needs. |
| 404 | not_found |
It does not exist, or you cannot see it. |
| 409 | conflict |
The request conflicts with the current state. |
| 422 | invalid |
The input is not valid. message says which field and why. |