---
title: "Set Disposition"
method: POST
path: "/negative-news/dispositions"
tags: ["negative-news"]
---

# Set Disposition

`POST /negative-news/dispositions`

Record the tenant's triage decision for one hit — in practice ``dismissed``
from the feed; issues are created via ``/negative-news/issue``, which records
``issue_created`` itself.

A single upsert: atomic against concurrent writes, and the ``WHERE`` skips
hits already converted to an issue so a stale dismiss can't unlink one.

## Request body

- SetDispositionRequest
  - `vendor_id` string, uuid, required
  - `hit_key` string, required
  - `status` 'issue_created' | 'dismissed', required
  - `issue_id` string, uuid, nullable
  - `dismissal_reason` 'mistaken_identity' | 'not_material' | 'inaccurate' | 'other' — Why a tenant dismissed an adverse-media hit. A note is welcome on any reason; only OTHER, which says nothing on its own, depends on one. Enforced here rather than in Postgres (the column is a plain VARCHAR) so the set can move without a migration and an unrecognized stored value reads as an odd label rather than a 500. Labels live in frontend/copilot/src/constants/negativeNewsDismissReasons.ts.
  - `dismissal_note` string, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/kobaltlabs/apis/fastapi.md) · [All operations](https://skmtc.dev/kobaltlabs/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/kobaltlabs/fastapi/revisions/425d5b8a3c17/schema)
