Importing prices and stock

Prices and stock are uploaded in batches, as an array of up to 1,000 items per request. Processing is asynchronous: the request is accepted immediately, the response returns a task_id, and the upload itself runs in the background.

Products and warehouses are matched by external identifiers (product_external_id, store_external_id), the ones set on your accounting system's side. There is no need to pass the shop's internal ids.

Importing prices

POST /api/merchant-service/import/prices

The body is an array of items:

BASH
curl -X POST https://admin.mobiusapp.io/api/merchant-service/import/prices \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '[ { "product_external_id": "SKU-100", "store_external_id": "MSK-1", "price": 1990, "currency": "RUB" }, { "product_external_id": "SKU-101", "store_external_id": "MSK-1", "price": 2490, "currency": "RUB", "discount_price": 1990, "discount_from_date": "2026-06-01T00:00:00Z", "discount_to_date": "2026-06-30T23:59:59Z" } ]'

Price item fields

Field Type Req. Description
product_external_id string yes The product's external id (up to 255 characters).
store_external_id string yes The warehouse's external id (up to 255 characters).
price number yes The price, not less than 0.
currency string yes The currency code (see Currencies).
discount_price number | null no The discounted price, not less than 0.
discount_from_date datetime | null no When the discount starts (ISO 8601).
discount_to_date datetime | null no When the discount ends (ISO 8601).

Importing stock

POST /api/merchant-service/import/stocks

BASH
curl -X POST https://admin.mobiusapp.io/api/merchant-service/import/stocks \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '[ { "product_external_id": "SKU-100", "store_external_id": "MSK-1", "amount": 12 }, { "product_external_id": "SKU-101", "store_external_id": "MSK-1", "amount": 0 } ]'

Stock item fields

Field Type Req. Description
product_external_id string yes The product's external id (up to 255 characters).
store_external_id string yes The warehouse's external id (up to 255 characters).
amount number yes The stock figure, not less than 0.

The response

Both methods answer the same way: the task has been accepted.

JSON
{ "task_id": "imp_7f3a9c12", "status": "queued", "items_count": 2, "processed_at": "2026-06-21T10:15:00Z" }
Field Description
task_id The import task identifier, for your logs and for support.
status The queueing state, queued.
items_count How many items were accepted for processing.
processed_at When the request was accepted.

The response means the batch was accepted, not that it has been applied. The results appear in the shop as the background processing goes on.

Currencies

Allowed values of currency:

RUB, USD, EUR, BYN, KZT, UAH, AMD, AZN, KGS, MDL, TJS, TMT, UZS, AED.

Limits and recommendations

  • No more than 1,000 items per request. Split large exports into batches.
  • One product in different warehouses means different items, differing by store_external_id.
  • Before the first upload, make sure products and warehouses exist in the shop with the same external ids you send.

Errors

Status When
403 No valid token.
422 A validation error (format) or a business error (no active shop).

On a validation error the messages field points at the problem item by index: the key 0.price means the price field of the first array item. See Errors, limits and pagination.

Related pages

Updated 04.09.2026 18:04
Was this page helpful?