---
title: "Update a mismatch observation"
method: PATCH
path: "/mismatch-observations/{observation_id}"
tags: ["Mismatch alerts"]
---

# Update a mismatch observation

`PATCH /mismatch-observations/{observation_id}`

Partial update of USDOT (`usdot`), MC (`mc`), `logos`, display name (`alert_name`), and/or `is_disabled`. Send at least one field. Requires permission `external-api-mismatch-observations` or admin. Only alerts belonging to the JWT `customer_id` can be updated; otherwise 403. `logos` values are normalized to lowercase before persistence and response. Logo matching remains case-insensitive. Returns the full updated observation (same shape as list items).

## Path parameters

- `observation_id` string, uuid, required

## Request body

- MismatchObservationPatchRequest — At least one property must be present (after applying ignore rules). Omitted fields are left unchanged. Empty string or whitespace-only `usdot` / `mc` values are ignored (they do not clear the field). JSON `null` for `usdot` / `mc` still clears that side of the criteria when present. USDOT/MC validation matches create rules (numeric after normalization).
  - `usdot` string, nullable — New USDOT value; null clears when paired with MC update rules.
  - `mc` string, nullable — New MC value; null clears when paired with USDOT update rules.
  - `logos` string[], nullable — Trailer logos list. Values are trimmed, deduplicated, and stored/returned in lowercase format. Matching against the logos catalog.
  - `alert_name` string, nullable — Display name; blank or whitespace-only is stored as null.
  - `is_disabled` boolean — Whether the observation is disabled.

## Response `200`

Full updated mismatch observation.

- MismatchObservationItem
  - `id` string, uuid, required — Alert row identifier.
  - `alert_name` string, nullable — Optional display name; may be null if not set.
  - `usdot` string, nullable, required — USDOT value from stored criteria.
  - `mc` string, nullable, required — MC value from stored criteria.
  - `logos` string[] — Trailer logos from `logos`, returned in normalized lowercase format. Empty when not configured.
  - `is_disabled` boolean, required — Whether this mismatch observation alert is disabled.
  - `created_at` string, date-time, nullable — Creation timestamp when available.
  - `last_run_at` string, date-time, nullable — Last run timestamp in ISO-8601 format; null when not run yet.

## Other responses

- `400` — Bad request – empty body, no updatable fields, invalid USDOT/MC, or validation error.
- `401` — Unauthorized – Invalid or missing Access-Token.
- `403` — Forbidden – missing permission, or observation belongs to another customer.
- `404` — Mismatch observation not found or deleted.

---

[API](https://skmtc.dev/genlogs/apis/auth-api-create-token.md) · [All operations](https://skmtc.dev/genlogs/apis/auth-api-create-token/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/genlogs/auth-api-create-token/revisions/bf34c2431a21/schema)
