POST /inventory/price/bulk lists or reprices multiple item types in one request. It is the bulk counterpart of POST /inventory/price, which handles one type per call.
Base URL: https://api.mannco.store. Prices are always integer cents ($1.50 → 150).
Endpoint
CSRF is not required on this route, because it carries the
api filter.
A missing or invalid 2FA code returns HTTP 403 with an envelope that differs from the usual { err, success, content } shape:
Request body
items may also be a JSON string for form-encoded posts, but a JSON body is preferred.
array
required
1–50 groups. More than 50 fails the whole request.
string | string[]
required
Steam
assetIds, digits only. Accepts a comma-separated string or an array.integer
required
Price in cents,
1 to 5000000.backpack.state = 0) and reprices existing listings (state = 1). See Item states.
Hard limits
Apply these client-side, before sending:- 50 item types per request (
INVENTORY_SELL_MAX_TYPES) - 1000
assetIds across all groups (INVENTORY_SELL_MAX_ASSETS) - An
assetIdmay appear in only one group, otherwiseDuplicate assetId - Every
assetIdin a group must share the sameitem_id
Mapping from POST /inventory/price
Single type (old):
item_id, and per price when variants are priced differently:
toBulkPayload.js
Example call (website session)
sellInventoryBulk.js
Response
The endpoint returns HTTP 200 even when some groups fail. Readcontent, not err, to know what happened.
A group can have
status: "error" and listed / sold greater than 0. Processing stops at the first failing assetId, but earlier items in that group stay written.errors === 0. Otherwise list results[i].message per group and refresh the inventory and on-sale views.
Errors
Whole request
err: true, HTTP 300. Nothing is processed.
Per group
status: "error" in results[]. Other groups still run.
Always send one group per
item_id.
Suggested UI flow
1
Select stacks
The user picks stacks from
onInventory / onSale and a price per stack.2
Prefill prices
Optionally call
GET /item/pricing/bulk with the item_ids to prefill lowest sale, buy order, and suggested price. Block a price below the highest buy order to avoid the buy-order error.3
Prompt 2FA once
Ask for the TOTP code once for the whole batch.
4
Send the request
POST /inventory/price/bulk with the mapped payload.5
Report the result
Show
listed, sold, and sold_buyorder, for example “12 listed, 3 sold to a buy order, 2 other listings matched”.6
Refresh
Reload
onInventory, onSale, and the balance.ceil, minimum platform fee 1¢ except on a 1¢ item). An item matched by a buy order leaves the seller’s inventory and is transferred to the buyer.
Pitfalls
- Do not send dollars (
1.50) — integer cents only. - Do not treat
err: falseas “everything succeeded”. Checkcontent.errorsandresults. sold_buyordercan sell listings outside the current selection (sameitem_id, alreadystate = 1). Warn the user when that matters: other listings of this type may fill a buy order.- A second click on the same
assetIds: the first call lists or sells them, the second may returnItem not found or not owned(already sold) or reprice them (still owned). Disable the button while the request is in flight. - Variants (spell, sheen, paint, gifted) of the same
item_idmay share a group if they share a price. Split groups when prices differ. - Over 50 types or 1000 assets, chunk into sequential requests. Do not rely on partial success for the 50-type cap — that one fails the whole call.