InfiPlex Knowledge Base

Oct 09 2026
 OMSOMSAPIMCPAIInventoryWarehouse

Receive a Container from a Spreadsheet with the InfiPlex MCP Server: SKU, Incoming Quantity, Warehouse Name

Last Updated: Oct 9, 2026

A container arrives, the receiver counts it into a spreadsheet with three columns, SKU, incoming quantity, and warehouse name, and that sheet goes straight into InfiPlex as additions to stock, after you read one preview and say go. No column mapping, no warehouse IDs to look up, no script. The assistant on the InfiPlex MCP server maps each warehouse name to its ID, builds one quantity_to_add row per line, and calls inventory_set_bulk, which returns a preview of every change and a token before anything is written. This guide covers the chat version for a person receiving a container, the same rows as a plain API call for anyone who would rather script it, and where the unattended version lives. The general receiving rules are in Managing Inventory.

Jump to What You Need

If You Want To… Go To
Format the receiving sheet The Sheet
Create the key the assistant uses The Receiving Key
Run it in chat The Chat Session
Script it instead The Same Rows on the API
Run it unattended Unattended Receiving

The Sheet

Three columns, one row per SKU per warehouse, the warehouse named the way it is named in InfiPlex. Nothing else is required; extra columns such as PO number or pallet are ignored by the assistant unless you ask it to note them.

sku,warehouse,quantity_received
HB-2201,Reno,200
HB-2202,Reno,48
GL-410,Reno,60
GL-410,Columbus,24
LT-500,Columbus,36
MK-88,Reno,12
GL-41O,Reno,30

Row 7 is deliberate: a zero typed as the letter O. The preview below shows what happens to it.

The Receiving Key

In your InfiPlex admin go to Tools > Admin API > Create New API Key. Name it for the job, for example receiving-assistant, so the API log attributes every receipt to it.

  • Scopes: Read Inventory, Write Inventory, Read Warehouse. Nothing else. No orders, no pricing, no products, no settings.
  • MCP Enabled: Yes.
  • MCP Allow Setting Writes: No. MCP Allow Arming: No.

With those scopes the server publishes the inventory reads, the two warehouse reads, and the two inventory writes, inventory_set and inventory_set_bulk, both behind the preview. Connect the key in Claude, ChatGPT, Claude Code, or the Codex CLI per the set-up guide; the write safety guide shows exactly what the server refuses when a key lacks a scope.

The Chat Session

Attach the sheet and send this, or something like it:

Receive the attached container sheet into InfiPlex. Look up each warehouse_id by the warehouse name, send every row as quantity_to_add on inventory_set_bulk, show me the preview, and wait for my go-ahead before executing. List any row you cannot resolve.

The assistant calls warehouse_search once, maps Reno and Columbus to their IDs, assembles the rows, and makes the first inventory_set_bulk call. The server answers with a preview and a confirmation token; the assistant shows you the preview:

inventory_set_bulk preview (7 rows requested, 6 ready, 1 unresolved)

Reno (warehouse_id 7)
  HB-2201  +200   (122 on hand now, 322 after)
  HB-2202  +48    (0 now, 48 after)
  GL-410   +60    (60 now, 120 after)
  MK-88    +12    (3 now, 15 after)
Columbus (warehouse_id 17)
  GL-410   +24    (24 now, 48 after)
  LT-500   +36    (0 now, 36 after)

Unresolved
  row 7: SKU GL-41O not found (letter O instead of zero?)

Reply "go" to execute these 6 rows. Token expires in 10 minutes.

Say go and the assistant calls the tool again with the same rows plus the token. The six rows are added at the moment the server processes them, so a sale that landed while you were reading the preview is not lost. Reply with the corrected SKU for row 7 and it goes in as a second one-row batch with its own preview. The whole receipt is two tool calls plus one warehouse lookup, and every executed row shows in the SKU's inventory history as a quantity_added entry under the receiving key.

If the key could not write, the server would refuse the call with a named missing scope rather than the assistant improvising; if the assistant tried to change the rows after you approved, the token would not match and the server would return a fresh preview. The gate is the server, not the assistant's good behavior.

The Same Rows on the API

The assistant is building this body. If you would rather have a script or your ERP send it, save it as receiving.json after looking up the IDs once with Warehouse Search:

[
  { "sku": "HB-2201", "warehouse_id": 7,  "quantity_to_add": 200 },
  { "sku": "HB-2202", "warehouse_id": 7,  "quantity_to_add": 48 },
  { "sku": "GL-410",  "warehouse_id": 7,  "quantity_to_add": 60 },
  { "sku": "GL-410",  "warehouse_id": 17, "quantity_to_add": 24 },
  { "sku": "LT-500",  "warehouse_id": 17, "quantity_to_add": 36 },
  { "sku": "MK-88",   "warehouse_id": 7,  "quantity_to_add": 12 }
]
curl --location --request POST 'https://yourcompany.infiplex.com/api/shop/inventory/bulk_update' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data @receiving.json

The endpoint is Inventory Set Bulk. There is no fixed row limit. A row comes back null when the SKU is not found; the other rows still apply and the call returns 200, so check every result. The sheet-to-JSON step is a few lines in any language, and on accounts with one warehouse warehouse_id can be left off.

Unattended Receiving

When the warehouse drops the sheet into a folder after the last truck, the autonomous fulfillment agent picks it up at 5:30 AM, applies it in one batch through inventory_set_bulk, completes the preview and token itself under a dedicated fulfillment key, records the day's tracking, and leaves a morning report listing every row applied and every row it could not resolve. Same sheet, same tool, no person in the loop; the key is what changes.

Receiving From a Spreadsheet Checklist

  1. Create the receiving key at Tools > Admin API: Read Inventory, Write Inventory, Read Warehouse, MCP Enabled Yes, both flags No, and connect it in your assistant.
  2. Save the receiving sheet as sku, warehouse, quantity_received, one row per SKU per warehouse, warehouse names as InfiPlex spells them.
  3. Attach it and ask the assistant to receive it with quantity_to_add and show the preview.
  4. Read the preview: counts, warehouses, and the unresolved list.
  5. Say go. Fix any unresolved rows and send them as a second batch.

Receiving From a Spreadsheet Questions

Why not just upload the sheet on Tools > Price & Inventory Tools?
That upload has no warehouse column and sets each SKU to the number in the file instead of adding to it, so a sheet of received quantities would overwrite on-hand counts. The MCP and API routes send each row as quantity_to_add, which adds at the moment the row is processed and keeps any sale that landed in between.

Does anything change before I say go?
No. The first inventory_set_bulk call returns a preview and a token bound to those exact rows; nothing is written. The assistant executes only when you say so, and if the rows differ at all the server rejects the token and returns a fresh preview.

What if the sheet uses a warehouse name InfiPlex does not know?
The assistant lists the row as unresolved and leaves it out of the batch; the other rows still go in. Fix the name in the sheet or tell the assistant which warehouse it meant.

Can the same SKU go into two warehouses on one sheet?
Yes. Each row is one SKU in one warehouse, so GL-410 can have a Reno row and a Columbus row in the same batch.

Can I include new SKUs that are not in InfiPlex yet?
Create them first on Tools > Product Upload or through products_create, then receive. A row for an unknown SKU comes back unresolved rather than creating the SKU.

Can this run unattended when the warehouse drops the file?
Yes. The autonomous fulfillment agent reads receiving.csv from a folder every night, sends it through inventory_set_bulk, and completes the preview and token itself under a dedicated key. That is the scheduled version of this guide.

Where do I see what was received afterward?
Every executed row is in the SKU's inventory history as a quantity_added entry under the key that sent it, on the SKU in the OMS and through Inventory Change History on the API, so each container has an audit trail.

What does InfiPlex charge for this?
Nothing beyond API access, which is part of the Growth and Enterprise packages. MCP calls are not metered. Model usage for the assistant is billed by your AI vendor.

CONNECT YOUR AI AGENTS TO INFIPLEX

Receiving is a spreadsheet and the word go.

The MCP server previews every stock change and executes only on your word. The same server runs the unattended version from a folder every night. Included with API access on every Growth plan.

Related inventory guides

Related MCP and API guides