Отрасль: Ритейл и e-commerce. Актуально на 2026-10-25.
REST API сервиса управления торговлей и складом МойСклад (JSON API Remap 1.2). Даёт доступ к справочникам (товары, услуги, комплекты, модификации, контрагенты, склады, юрлица), документам (заказы покупателей, отгрузки, приёмки, платежи, перемещения и др.), отчётам (остатки, прибыльность, деньги, показатели), вебхукам и асинхронным выгрузкам. Типовые задачи — синхронизация каталога и остатков с интернет-магазином или маркетплейсом, создание заказов и отгрузок из внешней системы, получение уведомлений об изменениях.
Есть:
Нет — смотри официальную документацию:
Для интеграций удобнее токен: его передают как Bearer, логин и пароль не хранятся в каждом запросе.
Authorization: Basic (логин:пароль в Base64). Предыдущие токены пользователя при этом отзываются.Authorization: Bearer <AccessToken>.Accept-Encoding: gzip — без него сервер ответит 415.curl --compressed -X POST \
"https://api.moysklad.ru/api/remap/1.2/security/token" \
-H "Authorization: Basic <Credentials>" \
-H "Accept-Encoding: gzip"
Синхронизация товаров и остатков с сайтом или маркетплейсом. Новый эндпоинт ассортимента не считает остатки — их берут из краткого отчёта и связывают по id.
X-Lognex-Remap-Beta-Feature: assortmentWithoutStock; листай по limit (до 1000) и offset.stockType (stock, freeStock, quantity, reserve, inTransit).id из ассортимента с assortmentId из отчёта.changedSince (не дальше 24 часов назад) и раз в сутки делай полную синхронизацию.curl --compressed -X GET \
"https://api.moysklad.ru/api/remap/1.2/entity/assortment" \
-H "Authorization: Basic <Credentials>" \
-H "Accept-Encoding: gzip" \
-H "X-Lognex-Remap-Beta-Feature: assortmentWithoutStock"
Заказ из интернет-магазина: найти или создать контрагента, затем создать заказ с позициями и резервом.
filter по inn, phone, email).name).organization и agent (ссылки в формате meta) и массивом positions (quantity, price, assortment.meta, reserve).curl --compressed -X POST \
"https://api.moysklad.ru/api/remap/1.2/entity/counterparty" \
-H "Authorization: Basic <Credentials>" \
-H "Accept-Encoding: gzip" \
-H "Content-Type: application/json" \
-d '{"name": "ООО Радуга", "inn": "125152124152", "email": "raduga@stroi.ru"}'
Отгрузка на основе заказа: шаблон заполнит контрагента, юрлицо, склад и позиции из заказа.
customerOrder.meta в теле.store) и позиции в полученном JSON.organization, agent, store).curl --compressed -X PUT \
"https://api.moysklad.ru/api/remap/1.2/entity/demand/new" \
-H "Authorization: Basic <Credentials>" \
-H "Accept-Encoding: gzip" \
-H "Content-Type: application/json" \
-d '{
"customerOrder": {
"meta": {
"href": "https://api.moysklad.ru/api/remap/1.2/entity/customerorder/451cb4c0-3d1d-11e6-8a84-bae500000004",
"metadataHref": "https://api.moysklad.ru/api/remap/1.2/entity/customerorder/metadata",
"type": "customerorder",
"mediaType": "application/json"
}
}
}'
Вебхук присылает POST на ваш URL при создании, изменении или удалении сущности — без постоянного опроса API. Доступно на платных тарифах администратору или решению.
url, action (CREATE, UPDATE, DELETE) и entityType (например, customerorder, product).events[] (meta.href изменённой сущности, action, updatedFields) и auditContext.meta.href из события.curl --compressed -X POST \
"https://api.moysklad.ru/api/remap/1.2/entity/webhook" \
-H "Authorization: Basic <Credentials>" \
-H "Accept-Encoding: gzip" \
-H "Content-Type: application/json" \
-d '{
"url": "http://www.example.com",
"action": "CREATE",
"entityType": "supply"
}'
Для больших коллекций (остатки, контрагенты, ассортимент, отчёты) без листания.
async=true к запросу (без limit и offset) — ответ 202 с заголовками Location (результат) и Content-Location (статус).Location. Результат хранится 1 час.curl --compressed -X GET \
"https://api.moysklad.ru/api/remap/1.2/report/stock/bystore?async=true" \
-H "Authorization: Bearer <Access-Token>" \
-H "Accept-Encoding: gzip"
https://api.moysklad.ru/api/remap/1.2Тип: Bearer-токен
Два способа: Basic Auth (заголовок Authorization: Basic с логин:пароль в Base64) или токен доступа (Authorization: Bearer <AccessToken>). Токен пользователя выдаёт POST /api/remap/1.2/security/token; для решений из маркетплейса используется токен решения. Лимит запросов зависит от способа: токены решений расходуют лимит медленнее, чем логин/пароль и токен пользователя.
В ответе access_token. Новый токен отзывает ранее выданные токены пользователя.
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/general
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
Authorization |
header | string | да | Basic <логин:пароль в Base64> |
Accept-Encoding |
header | string | да | gzip |
Все товары, услуги, комплекты, модификации и партии. Без заголовка assortmentWithoutStock запрос уходит в старый эндпоинт, который планируется удалить.
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/dictionaries/assortment#2-assortiment
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
X-Lognex-Remap-Beta-Feature |
header | string | да | assortmentWithoutStock |
limit |
query | integer | нет | До 1000 (по умолчанию 1000) |
offset |
query | integer | нет | Отступ, по умолчанию 0 |
search |
query | string | нет | Контекстный поиск |
filter |
query | string | нет | Фильтр, например filter=archived=false |
Достаточно непустого name.
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/dictionaries/product#3-sozdat-tovar
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
name |
body | string | да | Наименование товара |
code |
body | string | нет | Код |
article |
body | string | нет | Артикул |
salePrices |
body | array | нет | Цены продажи |
productFolder.meta |
body | object | нет | Группа товаров |
barcodes |
body | array | нет | Штрихкоды |
Только ID позиции и остаток, все данные одним ответом без листания. Для частого обновления (каждые 5–15 минут). Доступен администратору или сотруднику с правом на остатки.
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/reports/report-stock#3-kratkij-otchet-ob-ostatkah
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
stockType |
query | string | нет | stock (по умолчанию), freeStock, quantity, reserve, inTransit |
changedSince |
query | string | нет | Остатки, изменившиеся с момента гггг-мм-дд чч:мм:сс (не больше 24 часов назад) |
include |
query | string | нет | zeroLines — включить нулевые остатки |
filter |
query | string | нет | assortmentId=... и/или storeId=..., несколько через запятую |
Остатки с разбивкой по складам. Строка без склада содержит резервы без привязки к складу.
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/reports/report-stock#3-kratkij-otchet-ob-ostatkah
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
stockType |
query | string | нет | Тип остатка |
changedSince |
query | string | нет | Изменившиеся остатки |
withRecalculate |
query | boolean | нет | Включить позиции на пересчёте (остаток null) |
filter |
query | string | нет | assortmentId=..., storeId=... |
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/dictionaries/counterparty#2-kontragent
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
limit |
query | integer | нет | До 1000 |
offset |
query | integer | нет | Отступ |
search |
query | string | нет | Контекстный поиск по полям |
filter |
query | string | нет | Фильтр по полям, например inn, phone, email |
async |
query | boolean | нет | Асинхронная выгрузка |
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/dictionaries/counterparty#2-kontragent
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
name |
body | string | да | Наименование |
inn |
body | string | нет | ИНН |
kpp |
body | string | нет | КПП |
legalTitle |
body | string | нет | Полное наименование |
legalAddress |
body | string | нет | Юридический адрес |
email |
body | string | нет | |
phone |
body | string | нет | Телефон |
tags |
body | array | нет | Группы (теги) |
externalCode |
body | string | нет | Внешний код |
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/documents/customerOrder#2-zakaz-pokupatelya
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
organization.meta |
body | object | да | Ваше юрлицо |
agent.meta |
body | object | да | Контрагент-покупатель |
positions[].assortment.meta |
body | object | нет | Товар, услуга или модификация |
positions[].quantity |
body | number | нет | Количество |
positions[].price |
body | number | нет | Цена в копейках |
positions[].discount |
body | number | нет | Скидка, % |
positions[].vat |
body | integer | нет | НДС, % |
positions[].reserve |
body | number | нет | Резерв |
store.meta |
body | object | нет | Склад |
state.meta |
body | object | нет | Статус заказа |
name |
body | string | нет | Номер заказа |
moment |
body | string | нет | Дата документа |
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/documents/customerOrder#2-zakaz-pokupatelya
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
limit |
query | integer | нет | До 1000 |
offset |
query | integer | нет | Отступ |
filter |
query | string | нет | Например filter=moment>2016-10-11 12:00:00 |
expand |
query | string | нет | Раскрыть связанные объекты, например positions |
search |
query | string | нет | Контекстный поиск |
Возвращает предзаполненную отгрузку; без тела — пустой шаблон со стандартными значениями.
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/documents/demand#2-otgruzka
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
customerOrder.meta |
body | object | нет | Заказ покупателя, на основе которого создаётся отгрузка |
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/documents/demand#2-otgruzka
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
organization.meta |
body | object | да | Ваше юрлицо |
agent.meta |
body | object | да | Контрагент |
store.meta |
body | object | да | Склад |
customerOrder.meta |
body | object | нет | Связанный заказ |
positions |
body | array | нет | Позиции, до 1000 |
Сочетание entityType, action, url должно быть уникальным; на одно сочетание entityType и action — до 5 URL для пользователей и 1 для решения.
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/dictionaries/webhook#2-vebhuki
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
url |
body | string | да | Адрес для уведомлений |
action |
body | string | да | CREATE, UPDATE, DELETE |
entityType |
body | string | да | Тип сущности, например customerorder |
diffType |
body | string | нет | Формат изменений для UPDATE (отображение изменённых полей) |
Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/async#2-asinhronnyj-obmen
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
path | string | да | ID задачи из заголовка Content-Location |
Accept-Encoding: gzip, иначе 415 без тела.meta (href, type, mediaType).meta (size, limit, offset, nextHref, previousHref) и rows; limit — до 1000.positions в запросе на обновление полностью заменяет позиции документа: непереданные удаляются.X-Lognex-Remap-Beta-Feature не подпадают под гарантию неизменности структуры.X-RateLimit-Limit, X-RateLimit-Remaining, X-Lognex-Retry-TimeInterval, X-Lognex-Reset, X-Lognex-Retry-After.| Код | Описание |
|---|---|
400 |
Ошибка в структуре JSON запроса |
401 |
Неверные имя или пароль, пользователь или аккаунт заблокирован |
403 |
Нет прав на просмотр объекта |
404 |
Ресурс не существует |
405 |
Неверный HTTP-метод для ресурса |
409 |
Объект используется и не может быть удалён |
410 |
Версия API больше не поддерживается |
412 |
Не указан обязательный параметр или поле |
413 |
Превышен размер запроса или число элементов (больше 1000 позиций) |
414 |
Превышена длина URL |
415 |
Формат запроса не поддерживается (в том числе нет Accept-Encoding: gzip) |
429 |
Превышен лимит запросов (ошибка 1073 — лимит параллельных запросов) |
500 |
Непредвиденная ошибка |
502 |
Сервис временно недоступен |
503 |
Сервис временно отключён |
504 |
Таймаут, повторите позднее |
GET /report/stock/all и /report/stock/bystore — вес 5 единиц за запрос.429 в минуту в течение часа, а также при 100+ PUT-запросах к одной сущности в минуту.Если этого недостаточно — официальная документация: https://dev.moysklad.ru/doc/api/remap/1.2/ JSON: https://mcp-everything.ru/api/integrations/moysklad. MCP: https://mcp-everything.ru/mcp