Inventory

Move stock

inventory_move · Changes data · Markdown

Changes stock, all moves or none: receive, ship, transfer between locations, or adjust.

$0.005 per move

From your agent’s balance. A call that fails costs nothing.

An example

Twelve beech bistro chairs came in from the maker at 140 euros each, and two left today for order 1001.

Your agent callsinventory_move$0.005 per move

The example business is Hansen & Voss, a restaurant-equipment wholesaler in Hamburg with 60 staff. The reply is the one the tool really gives.

With these arguments
{
  "moves": [
    {
      "kind": "receive",
      "sku": "CHAIR-BISTRO-BEECH",
      "quantity": 12,
      "unit_cost": "140.00",
      "reference": "Delivery 41"
    },
    {
      "kind": "ship",
      "sku": "CHAIR-BISTRO-BEECH",
      "quantity": 2,
      "reference": "Order 1001"
    }
  ]
}
What comes back
{
  "moves": [
    {
      "move_id": 4107,
      "date": "2026-10-14",
      "kind": "receive",
      "sku": "CHAIR-BISTRO-BEECH",
      "quantity": "12",
      "from": null,
      "to": "Main",
      "unit_cost": "140",
      "value": "1680.00",
      "quantity_after": "12",
      "reference": "Delivery 41",
      "note": null
    },
    {
      "move_id": 4108,
      "date": "2026-10-14",
      "kind": "ship",
      "sku": "CHAIR-BISTRO-BEECH",
      "quantity": "-2",
      "from": "Main",
      "to": null,
      "unit_cost": "140",
      "value": "-280.00",
      "quantity_after": "10",
      "reference": "Order 1001",
      "note": null
    }
  ],
  "items": [
    {
      "sku": "CHAIR-BISTRO-BEECH",
      "name": "Bistro chair, beech",
      "unit": "pcs",
      "barcode": null,
      "description": null,
      "quantity": "10",
      "unit_cost": "140",
      "value": "1400.00",
      "currency": "EUR",
      "price": "320",
      "reorder_point": "8",
      "low": false,
      "archived": false,
      "locations": {
        "Main": "10"
      }
    }
  ]
}

Use it when

Stock came in, went out, moved, broke or was found.

What it does

Change stock, all moves or none: receive (in, at unit_cost, which becomes part of the moving average), ship (out, at the moving average), transfer (from location to another, to), adjust (a signed quantity: found, damaged, used). Stock can't go below 0 at a location. reference ties a move to an order or invoice number.

What comes back

moves: each as booked (move_id, date, kind, SKU, quantity, from, to, unit cost, value, quantity after, reference, note); items: the stock of each item afterwards. Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
movesRequiredarray of objects1 to 100 items.
moves[].kindRequiredstringOne of: receive,ship,transfer,adjust.
moves[].skuRequiredstringThe item's SKU. 1 to 64 characters.
moves[].quantityRequirednumber or stringUp to 6 decimals; negative only for adjust. Up to 24 characters.
moves[].locationstringA location by name. Default: "Main" (made on first use). Up to 120 characters.
moves[].tostringtransfer: where the stock goes. Up to 120 characters.
moves[].unit_costnumber or stringreceive (and adjust in): what one cost. Default: the moving average, else the item's cost. Up to 24 characters.
moves[].referencestringUp to 120 characters.
moves[].notestringUp to 500 characters.
moves[].datestringDefault today. Matches ^\d{4}-\d{2}-\d{2}$.

The call

Over MCP, call inventory_move on https://api.conecto.chat/mcp/inventory. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/inventory_move \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"moves":[{"kind":"receive","sku":"CHAIR-BISTRO-BEECH","quantity":12,"unit_cost":"140.00","reference":"Delivery 41"},{"kind":"ship","sku":"CHAIR-BISTRO-BEECH","quantity":2,"reference":"Order 1001"}]}'

When it refuses

A refused call costs nothing and says what to do next.

CodeWhenWhat to do
invalid_input400A quantity, cost or date is not valid.Send numbers like 140.00 (a dot for decimals) and dates that have passed, like 2026-10-14.
not_enough_stock409Stock would go below 0 at a location.Ship or move less; the message says how much there is.
not_found404No location has that name.Call inventory_locations, or add it with inventory_save_location.
archived409The item or location is archived.Use another one, or name a location that is in use.
not_found404No item has that SKU.Add it with inventory_save_items first.
invalid_input400A move's kind is unknown, a quantity is 0, or a transfer has no to.Fix the move the message names, like "Move 2".

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md