Track Inventory Costs and Vendors

Learn how to record unit costs and vendors on stock-receiving inventory adjustments and update past adjustments with the Inventory API.

Applies to: Inventory API | Catalog API | Vendors API

Link to section

Overview

Sellers that track what they pay for their stock can answer questions like "What is my inventory worth?" and "What did I pay this vendor last quarter?" The Inventory API lets your application record that information the same way first-party Square products do:

  • Record the amount paid (cost_money) and the vendor (vendor_id) when receiving stock.
  • Update the quantity, cost, vendor, or reason of a past adjustment with UpdateInventoryAdjustment.

Default costs and vendors for an item variation come from the variation's vendor_information in the catalog. See Manage Vendor Information.

Note

Reading cost fields works for any seller; writing cost and vendor data requires the seller to have an active Square for Retail Plus, Square for Restaurants Plus, or Square for Restaurants Premium subscription.

Link to section

Record cost and vendor when receiving stock

cost_money and vendor_id can be written only on stock-receiving adjustments - adjustments whose from_state is NONE or UNLINKED_RETURN. cost_money is the total amount paid to the vendor for the units in the adjustment, and vendor_id references a vendor managed with the Vendors API.

The following BatchChangeInventory request receives 100 units purchased for $250.00 from a known vendor:

Cost and vendor values then appear on the adjustment in change-history responses. Reading these fields doesn't require a subscription; adjustments written without cost information simply omit the fields.

Link to section

Update a past adjustment

Sellers sometimes need to correct a received quantity, a cost, or a vendor after the fact. UpdateInventoryAdjustment (PUT /v2/inventory/adjustments/update, INVENTORY_WRITE) supports sparse updates of a past adjustment, with the same restrictions that apply in the Square Dashboard:

  • quantity must always be provided, but it can be identical to the current quantity if only cost, vendor, or reason changes are desired.
  • cost_money and vendor_id can be changed only on adjustments that add stock (from_state of NONE or UNLINKED_RETURN) and on untracked sale adjustments.
  • reason_id can be changed to any reason that's valid for the adjustment's state transition. The reason of a system-generated adjustment (such as SALE or RECOUNT) can't be changed. See Inventory Adjustment Reasons.
  • Adjustments that Square generates from other records can't be updated: inferred adjustments from physical counts, transfer-like cross-location adjustments, and component adjustments.
  • Adjustments linked to purchase orders can't be updated. Adjustments linked to sales can only have cost and vendor updated, and only for untracked sales.
  • Restock adjustments linked to an itemized return can have their quantity updated, up to the quantity remaining on the return.
  • Adjustments older than 1 year cannot be updated.
curl https://connect.squareup.com/v2/inventory/adjustments/update \ -X PUT \ -H 'Square-Version: 2026-07-15' \ -H 'Authorization: Bearer {ACCESS_TOKEN}' \ -H 'Content-Type: application/json' \ -d '{ "idempotency_key": "d6f1cf4e-6d90-4a2b-9df7-2f0ab9a78ee1", "adjustment": { "id": "HA4STFR47RAEORFWXHOYPRG5", "quantity": "100", "cost_money": { "amount": 27500, "currency": "USD" }, "vendor_id": "5ZW5RVANNKV3B3RB" } }'

The endpoint is available only to sellers with an active Square for Retail Plus, Square for Restaurants Plus, or Square for Restaurants Premium subscription.