---
title: "Approve Ai Suggestions"
method: POST
path: "/claims/{claim_id}/expenditures/ai-suggestions/approve"
tags: ["expenditures"]
---

# Approve Ai Suggestions

`POST /claims/{claim_id}/expenditures/ai-suggestions/approve`

## Request

- Base URL: `https://api.claimkit.co` (the document declares no server; this is the origin it was published from)
- URL: `https://api.claimkit.co/claims/{claim_id}/expenditures/ai-suggestions/approve`
- Auth: none declared

Admin-only: apply each selected pending proposal to its live item and mark
it approved. Per-item (one id), bulk (many ids), or approve-all (``all=True``).

Applies the same writes the old inline AI path did: sets category, sets
subgroup unless the item was hand-curated (NULL proposed_subgroup_key),
sets eligibility, clears the R&D split / rd_percentage / activity on a
non-eligible proposal, sets ``auto_categorised`` and clears
``manual_override_by_admin``. Never sets ``manual_override`` — provenance is
still the AI. A suggestion whose item no longer resolves is skipped.

## Path parameters

- `claim_id` integer, required

## Request body

- AiSuggestionDecisionRequest: Selector for approve/reject: an explicit list of item ids, or ``all`` for every pending suggestion on the claim. There is at most one pending suggestion per item, so item ids unambiguously identify the rows. An empty list with ``all=False`` is a 400.
  - `item_ids` integer[]
  - `all` boolean

## Response `200`

Successful Response

- AiSuggestionDecisionResponse
  - `approved_count` integer, nullable
  - `rejected_count` integer, nullable
  - `skipped_count` integer

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/claimkit/apis/claimkit-api.md) - [All operations](https://skmtc.dev/claimkit/apis/claimkit-api/llms.txt) - [OpenAPI document](https://skmtc.dev/claimkit/apis/claimkit-api/revisions/94dc85ba5326?raw)
