JSON API

Для работы с розничными операциями: продажами, возвратами и т.д. существует специальный POS API.
Документация — https://online.moysklad.ru/api/posap/1.0/doc/index.html
В данной статье содержатся общие сведения по работе с JSON API. Подробная документация — описание структур данных, команд и кодов ошибок, расположена по адресу
https://online.moysklad.ru/api/remap/1.1/doc/index.html

Версия

Программный интерфейс JSON API расположен по адресу https://online.moysklad.ru/api/remap/1.1/. Адрес интерфейса содержит номер версии. Каждая версия API доступна по своему адресу, с указанием своего номера версии. Актуальной в настоящий момент является версия 1.1 (изменения). 

Безопасность и аутентификация

Используется BASIC–аутентификация поверх HTTPS. Для логина нужно использовать тот же логин-пароль, что и при обычной аутентификации в интерфейсе МойСклад. Например:

curl -u логин@компания:пароль \
https://online.moysklad.ru/api/remap/1.1/report/stock/all

Формат данных

JSON API предоставляет возможность обмениваться данными в формате JSON и поддерживает концепцию HATEOAS. Т.е. каждый ответ содержит мета информацию (блоки meta), содержащие ссылки, по которым можно осуществлять дальнейшую навигацию по API.

Тарифные ограничения

JSON API доступен для подписчиков на всех тарифах, кроме Бесплатного.

Ограничения по запросам

Существуют ограничения по количеству одновременных запросов, объему передаваемых данных и длительностью одного запроса. Подробнее можно узнать в документации.

Листание (paging)

Большинство списков и отчетов поддерживают листание. За него отвечают два параметра:

  • offset — отступ от первого элемента (считается с нуля);
  • limit — кол-во элементов на странице (по умолчанию 25, максимум 100).

Пример

Вывести 50 товаров из списка остатки, начиная с 100-го товара.

curl -u логин@компания:пароль \
https://online.moysklad.ru/api/remap/1.1/entity/product?offset=100&limit=50

Отображение вложенных сущностей (expand)

В API есть возможность дозапрашивать дополнительные данные о вложенных сущностях в рамках одного и того же запроса. Для этого используется параметр запроса expand.

Пример

Допустим, на запрос товара по id:

curl -u логин@компания:пароль \
https://online.moysklad.ru/api/remap/1.1/entity/product/4e36721c-2660-11e5-007d-ff4e000003ce

сервер выдаёт ответ:

{
   "meta": {
       "href": "...",
       "type": "product",
       "mediaType": "application/json"
   },
   "id": "4e36721c-2660-11e5-007d-ff4e000003ce",
   "accountId": "c0c3e19c-2630-11e5-007d-ff4e00000008",
   ...
   "productFolder": {
       "meta": {
           "href": "...",
           "type": "productfolder",
           "mediaType": "application/json"
       }
   },
}

Но необходимо получить информацию о вложенном объекте productFolder (папке товара) сразу же. Для этого можно изменить запрос следующим образом:

curl -u логин@компания:пароль \
https://online.moysklad.ru/api/remap/1.1/entity/product/\
4e36721c-2660-11e5-007d-ff4e000003ce?expand=productFolder

Тогда ответ уже будет включать полную информацию о productFolder:

{
   "meta": {
       "href": "...",
       "type": "product",
       "mediaType": "application/json"
   },
   "id": "4e36721c-2660-11e5-007d-ff4e000003ce",
   "accountId": "c0c3e19c-2630-11e5-007d-ff4e00000008",
   ...
   "productFolder": {
       "meta": {
           "href": "...",
           "type": "productfolder",
           "mediaType": "application/json"
       },
       "id": "145b5258-264a-11e5-007d-ff4e0000017a",
       "accountId": "c0c3e19c-2630-11e5-007d-ff4e00000008",
       "version": 1,
       "updated": "2015-07-13 13:09:36",
       "updatedBy": "admin@acc1",
       "name": "Слишком длинное наименование папки",
       "description": "Описание",
       "code": "123123",
       "externalCode": "8EZZ6BlEjEGo-D3gZoAMm3",
       "pathName": "Папка/Другая папка",
       "article": "",
   },
}
Еще есть вопросы? Отправить запрос

Комментарии

  • Avatar
    Юрий

    > Очень хотелось бы публичное обещание от МоегоСклада…

    Roman, у них ведь уже есть публичное обещание — «Устаревшая версия JSON API 1.0 будет доступна до 1 сентября 2016 года» это написано публично в самом описании этой страницы. Вот только они видимо не стали спешить отключать его.

  • Avatar
    Александр Фомин

    Ну вот и замечательно, Ваши клиенты вечно будут тратить деньги на доп разработку)) спасибо вам))

    Юрий, если вам не затруднит можете показать expand именно валюты в данном случае, а то что-то не выходит ((

  • Avatar
    Александр Фомин

    Прошу подсказок как можно в выгрузке всех товаров сразу раскрыть (expand) все валюты.
    А также ответа когда будет прекращена работа api 1.0 , т.к. все наши интеграции работают на ней. (хотели бы знать когда все накроется медным тазом)

  • Avatar
    Ilia Maltsev

    JSON схема одним файлом не появилась?

  • Avatar
    Виталий Макеев

    Почему при фильтрации товаров по id - "../api/remap/1.1/entity/product?filter=id%3D{id}", нужно указывать goodUuid из XML API? Ведь сейчас в JSON API идентификаторы товаров "product" это прежние consignmentUuid. Это баг?

  • Avatar
    ZorG zerg

    Юля, еще в ноябре вы писали

    Сожалею, но в документации ошибка - значение All не работает. Для получения всех товаров, включая архивные, необходимо указать параметр archived сразу для двух значений - для true и для false.

    https://online.moysklad.ru/api/remap/1.1/entity/assortment?limit=4&filter=archived=true;archived=false

    Так вот не работает. Уже что-то изменилось?

  • Avatar
    ООО Сонекс

    Добрый день.
    До какого числа и какого года будет поддерживаться JSON API 1.0?
    Стали переписывать на версию 1.1 - в документации ошибки, api 1.1 сырой.
    В частности пытаюсь выгрузить заказ по его номеру (номер заказа 113025):
    https://online.moysklad.ru/api/remap/1.1/entity/customerorder?search=113025
    В документации четко указано:
    "search string (optional) Example: 0001 URL Параметр для поиска по имени документа. Фильтр документов по указанной поисковой строке. Фильтрация происходит по полю name."
    Вместо одного заказа api возвращает кучу заказов у которых в поле description встречаются цифры 113025.

  • Avatar
    Виталий Макеев

    Скорее всего, в документации ошибка. Ведь для других сущностей параметр "search" описан как полнотекстовый поиск (проверено на контрагентах), что, собственно, вы и получаете и как, по логике вещей, должно быть. Я очень сильно удивился, когда прочитал что "search" в заказе ищет только по имени заказа (но сам не пробовал, поверил).
    Если вы ищите по имени заказа, то может быть лучше использовать параметр "filter"?

    А какие другие баги? Интересно узнать прямо с фронта, т.к. сам только начинаю внедрять новый API.

  • Avatar
    Samokhin

    Добрый день! Пытаюсь создать технологическую операцию через API. В теле запроса я должен указать в том числе список материалов в формате метаданных. В примере указано:
    "materials": {
    "meta": {
    "href": "http://online.moysklad.ru/api/remap/1.1/entity/processing/493ddf6b-aff9-11e6-5bed-427b00000076/materials",
    "type": "processingpositionmaterial",
    "mediaType": "application/json",
    "size": 2,
    "limit": 100,
    "offset": 0

    В поле "href" откуда я должен получить идентификатор в ссылке вида "http://online.moysklad.ru/api/remap/1.1/entity/processing/493ddf6b-aff9-11e6-5bed-427b00000076/materials"? Технологическую операцию я только создаю, взять UID я должен где?

  • Avatar
    Andrejs Krotovs

    До последнего момента все работало без ошибок, но начиная с 28го марта при создании заказа на 67 позиций сам заказ создается, а добавление позиций вызывает в ответ ошибку - 429002: Превышено ограничение на количество запросов в единицу времени
    при этом никаких других запросов не происходит в это время.

    а когда путаюсь получить информацию о данном заказе, то в ответ получаю
    429001: Превышено ограничение на количество попыток проверки имени и пароля

    при это также никаких запросов параллельно не идет

    на нашей стороне ничего не менялось, используется JSON API 1.0

    можете помочь, в чем может быть проблема?

  • Avatar
    Харитонова Юлия

    Andrejs Krotovs

    Вам срочно нужно переходить на JSON API 1.1. Так как JSON API 1.0 уже с 1 марта должен быть отключен. В настоящий момент на JSON API 1.0 снижены лимиты обслуживания и пока этот API ещё работает. Но скоро он будет отключен совсем.

  • Avatar
    Andrejs Krotovs

    Спасибо, за быстрый ответ. Придется переходить на 1.1

  • Avatar
    Евгений Цаплинов

    Добрый день!
    Подскажите, есть ли в JSON API функции для получения истории изменения документов или история событий?
    Пример одного из кейсов, которые надо реализовать: Получить список заказов с измененными статусами, чтобы в дальнейшем выгрузить измененные статусы на сайт.

  • Avatar
    Харитонова Юлия

    Комментарии к статье закрываются. Все вопросы по API для МойСклад в дальнейшем вы можете задать в сообществе разработчиков - https://support.moysklad.ru/hc/ru/community/topics/115000356368-JSON-API