---
title: "Bulk Update Items"
method: POST
path: "/claims/{claim_id}/expenditures/items/bulk"
tags: ["expenditures"]
---

# Bulk Update Items

`POST /claims/{claim_id}/expenditures/items/bulk`

## 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/items/bulk`
- Auth: none declared

Apply ``eligibility``, ``category``, and/or ``activity_id`` to every item
in a subgroup. ``activity_id: null`` moves the group to the Ungrouped
bucket. Each updated item gets ``manual_override=True``.

## Path parameters

- `claim_id` integer, required

## Request body

- BulkUpdateRequest
  - `scope` GroupScope, required: Identifies a subgroup under a claim. ``category`` is always required so cross-category subgroup-name collisions don't bleed into each other.
    - `category` string, required
    - `subgroup_key` string, required
  - `update` BulkItemUpdate, required: Update fields applicable to a bulk operation across a group. Mirrors the bulk-applicable subset of :class:`ItemUpdate`. ``rd_percentage`` and ``description`` are intentionally excluded — they're meaningful per-item, not per-group. ``activity_id`` uses "explicit null = Ungrouped" semantics like its :class:`ItemUpdate` twin — keyed on ``model_fields_set`` in the handler. ``subgroup_key`` moves every targeted item into a (possibly new) subgroup within its existing category. It's only sent by the by-ids path (the categorised multi-select "Move to / New subgroup" action); unlike ``activity_id`` there's no "explicit null = clear" semantic — a move always names a non-empty target, validated in the handler.
    - `eligibility` 'r_and_d' | 'non_eligible', nullable
    - `category` string, nullable
    - `activity_id` integer, nullable
    - `subgroup_key` string, nullable

## Response `200`

Successful Response

- BulkUpdateResponse
  - `updated_count` integer, required

## 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)
