---
title: "Inventory - Bulk Reconciliation"
method: POST
path: "/inventory/bulk_reconciliation"
tags: ["inventory"]
---

# Inventory - Bulk Reconciliation

`POST /inventory/bulk_reconciliation`

Reconcile inventory quantities in bulk, adjusting on-hand counts to match physical counts.

## Request body

- object
  - `type` 'increase' | 'decrease' | 'set' | 'update', required — Reconciliation type. "increase" adds to on-hand, "decrease" subtracts, "set" sets an exact value, "update" sets an exact value with per-row reason/notes.
  - `reason` string — Reason for reconciliation (used for increase, decrease, set types)
  - `notes` string — Additional notes (used for increase, decrease, set types)
  - `rows` object[], required — Array of reconciliation row objects
    - `location_id` string, required — Location ID
    - `item_id` string, required — Item ID
    - `quantity` number, required — Quantity to reconcile
    - `reason` string — Per-row reason (used only when type is "update")
    - `notes` string — Per-row notes (used only when type is "update")

## Response `200`

Reconciliation completed

- object
  - `success` boolean, required — Whether the operation succeeded

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden. Insufficient permissions.
- `429` — Too many requests. Rate limit exceeded.
- `500` — Internal server error.

## Changes

- **2026-07-13** `4b5ec0ed78a6` — 1 breaking, 6 info
  - request property `type` was restricted to a list of enum values
  - added the new optional request property `rows/items/notes`
  - added the new optional request property `rows/items/reason`
  - added the new `decrease` enum value to the request property `type`
  - …3 more
- **2026-03-02** `fa53dd949b8e` — 5 breaking, 7 info
  - added the new required request property `rows/items/item_id`
  - added the new required request property `rows/items/location_id`
  - added the new required request property `rows/items/quantity`
  - the request property `rows` became required
  - …8 more
- **2024-04-23** `e4bdf6984278` — 1 breaking
  - the `rows` request property type/format changed from `number`/`integer` to `array`/``
- **2024-04-22** `08cd9cfa14dd` — 1 breaking, 4 warning, 2 info
  - added required request body
  - deleted the `query` request parameter `notes`
  - deleted the `query` request parameter `reason`
  - deleted the `query` request parameter `rows`
  - …3 more
- **2024-04-19** `46ceda528000` — 2 breaking, 10 info
  - removed the request body
  - removed the media type `application/json` for the response with the status `200`
  - api operation id `post_inventory_bulk_reconciliation` removed and replaced with ``
  - added the new optional `query` request parameter `notes`
  - …8 more

[Change history](https://skmtc.dev/skulabs/apis/skulabs-api/changes/inventory/bulk_reconciliation/post.md)

---

[API](https://skmtc.dev/skulabs/apis/skulabs-api.md) · [All operations](https://skmtc.dev/skulabs/apis/skulabs-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/skulabs/skulabs-api/revisions/4b5ec0ed78a6/schema)
