---
title: "Keep or reject a find"
method: POST
path: "/v1/finds/{find_id}/decision"
tags: ["long form", "packaging"]
---

# Keep or reject a find

`POST /v1/finds/{find_id}/decision`

## Request

- Base URL: `https://api.hookdetector.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.hookdetector.com/v1/finds/{find_id}/decision`
- Auth: none declared

Record keep or reject on one find; the last verdict wins. The verdict is the video's
on that tab: every find of the same video you have there (an earlier run's, a later
one's) carries it. Kept videos come back from GET /v1/finds/keeps. Free. MCP: keep_find.

## Path parameters

- `find_id` string, uuid, required

## Headers

- `authorization` string, nullable: Bearer hd_... from POST /v1/accounts or POST /v1/keys

## Request body

- DecisionIn
  - `verdict` string, required
  - `reason` 'off_subject' | 'weak_opening' | 'wrong_language' | 'low_quality' | 'already_have' | 'other', nullable: with verdict "reject" only, optional: why it was passed
  - `note` string, nullable: with a reason, optional: the reason in your own words

## Response `200`

Successful Response

- FindDecisionOut
  - `find_id` string, required
  - `verdict` string, nullable, required: keep, reject, or null once cleared

## Other responses

- `401`: missing, invalid, revoked or expired API key (code key_expired)
- `403`: the key lacks the scope this call needs (insufficient_scope), or its credit_limit is spent (key_credit_limit_reached)
- `404`: not found on this account
- `413`: request body over the size cap
- `422`: invalid input
- `500`: our fault; names the request id

---

[API](https://skmtc.dev/hookdetector/apis/hook-detector.md) · [All operations](https://skmtc.dev/hookdetector/apis/hook-detector/llms.txt) · [OpenAPI document](https://skmtc.dev/hookdetector/apis/hook-detector/revisions/b136a2804d2b?raw)
