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

# Set Disposition

`POST /negative-news/dispositions`

## Request

- Base URL: `https://api.kobaltlabs.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.kobaltlabs.com/negative-news/dispositions`
- Auth: none declared

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/kobaltlabs-api.md) - [All operations](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/revisions/8587332d5e43?raw)
