---
title: "Update Client Error Status"
method: PATCH
path: "/admin/client-errors/{error_id}"
tags: ["admin-client-errors"]
---

# Update Client Error Status

`PATCH /admin/client-errors/{error_id}`

## Request

- Base URL: `https://app.zeno-works.ch` (the document declares no server; this is the origin it was published from)
- URL: `https://app.zeno-works.ch/admin/client-errors/{error_id}`
- Auth: none declared

Flip one row's triage status (+ optional note).

## Path parameters

- `error_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Request body

- ClientErrorStatusUpdate: Body of ``PATCH /admin/client-errors/{id}``.
  - `status` 'new' | 'acknowledged' | 'resolved' | 'ignored', required: Triage lifecycle of a ``client_error_log`` row. ``new`` on ingest; a fixing session claims via a conditional bulk update to ``acknowledged``, then flips ``resolved`` (fix merged) or ``ignored`` (noise). Recurrence after ``resolved`` shows up as fresh ``new`` rows for the same fingerprint — regression detection for free.
  - `triage_note` string, nullable

## Response `200`

Successful Response

- ClientErrorOut: One ``client_error_log`` row (admin reads).
  - `id` string, required
  - `status` 'new' | 'acknowledged' | 'resolved' | 'ignored', required: Triage lifecycle of a ``client_error_log`` row. ``new`` on ingest; a fixing session claims via a conditional bulk update to ``acknowledged``, then flips ``resolved`` (fix merged) or ``ignored`` (noise). Recurrence after ``resolved`` shows up as fresh ``new`` rows for the same fingerprint — regression detection for free.
  - `fingerprint` string, required
  - `kind` 'window_error' | 'unhandled_rejection' | 'react_boundary' | 'route_error' | 'api_error' | 'query_error' | 'server_signal', required: Where a ``client_error_log`` report originated in the SPA (doc/architecture.md §"Client error telemetry"). ``window_error`` — uncaught exception (``window`` error event); ``unhandled_rejection`` — unhandled promise rejection; ``react_boundary`` — caught by the app-level React ErrorBoundary; ``route_error`` — caught by a React Router ``errorElement``; ``api_error`` — API call failed (5xx or network); ``query_error`` — non-API exception surfaced through the TanStack Query cache; ``server_signal`` — **not** from the SPA: an operational signal the api itself raises, where the alternative is a log line on the deploy host with whatever retention docker's json-file driver happens to have. Signup throttle trips and allowlist refusals are the first: they are how an operator learns a public mail-sending endpoint is being abused, and that must not be a `grep`.
  - `message` string, required
  - `name` string, nullable
  - `stack` string, nullable
  - `component_stack` string, nullable
  - `source` string, nullable
  - `lineno` integer, nullable
  - `colno` integer, nullable
  - `route` string, nullable
  - `href` string, nullable
  - `app_version` string, nullable
  - `user_agent` string, nullable
  - `session_id` string, nullable
  - `user_id` string, nullable
  - `company_id` string, nullable
  - `context` object, nullable
  - `triage_note` string, nullable
  - `occurred_at` string, date-time, nullable
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/zeno-works/apis/zeno-api.md) · [All operations](https://skmtc.dev/zeno-works/apis/zeno-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zeno-works/apis/zeno-api/revisions/1eb93dde146c?raw)
