Авторизация

  • /auth - получение сессионного ключа доступа
  • /signup - регистрация нового пользователя

Звонки

Склады

Товары

Заказы

Магазины

  • /shops/goods - получение списка товаров магазина

Продавцам

Функция /auth

Функция позволяет получить пользовательский сессионный ключ доступа к API.

Входные параметры:

Параметр Назначение
email* Адрес электронной почты пользователя
password* Пароль пользователя

Пример вызова:

{
  "email": "test@test.ru",
  "password": "foobar"
}

Возвращаемые значения:

Параметр Назначение
token Сессионный ключ доступа для API v2.0
legacy Данные, использующиеся для авторизации в предыдущих версиях системы. Массив состоящий из двух полей: affid и security, где affid - идентификатор пользователя, а security - хэшированный пароль. Для корректной работы устаревших частей системы, эти два параметра должны быть сохранены в одноименных cookie.

Пример:

{
    "token": "27a6e9abc4b2bb0bab2ffadfef915ae86bc",
    "legacy": {
        "affid": 27,
        "security": "6e9abc4b2bb0bab2ffadfef915ae86bc"
    }
}

Возможные ошибки:

Код Константа Описание
1 ERROR_EMAIL_REQUIRED Необходимо указать e-mail
2 ERROR_PASSWORD_REQUIRED Необходимо указать пароль
3 ERROR_EMAIL_INVALID Неверный e-mail адрес
7 ERROR_DATABASE Ошибка базы данных
8 ERROR_ACCESS_DENIED Доступ запрещен

Функция /signup

Функция позволяет зарегистрировать в системе нового пользователя.

Входные параметры:

Параметр Назначение Примечание
name* Имя пользователя
email* Адрес электронной почты
password* Пароль пользователя
captcha* reCAPTCHA g-recaptcha-response Для защиты от спама используется reCAPTCHA
sitekey="6LcEU8ISAAAAAAhA6dWEeQMfZD4_gOmTgdDLl9q-"
ref_id Идентификатор реферала

Функция /warehouses/list

Функция позволяет получить список складов с группировкой по городам.

В зависимоти от роли ключа авторизации список складов ограничивается следующей логикой: роль ADMIN имеет доступ к полному списку, список складов для роли MANAGER и COURIER ограничивается настройками прав доступа, роль SELLER имеет доступ лишь к собственным складам, для роли AFFILIATE доступны лишь города (группирующие склады), доступа к отдельным складам - нет, для роли SITE так же доступны лишь города, причем их список может быть ограничен настройками магазина.

Передаваемые данные:

Параметр Назначение
token* Ключ авторизации. Могут быть использованы как сессионный, так и постоянный ключ.

Пример вызова:

{
  "token": "27a6e9abc4b2bb0bab2ffadfef915ae86bc",
}

Возвращаемые значения:

Параметр Назначение
warehouses Массив складов

Каждый элемент массива warehouses имеет следующие аттрибуты:

Аттрибут Тип Описание Примечание
id* int Идентификатор склада
parent_id* int Идентификатор родительского склада Для корневых складов - null
name* string Название склада
abbr string Краткое название склада

Пример ответа:

{
  "warehouses": [
    {
      "id": 1,
      "parent_id": null,
      "name": "Москва",
      "abbr": "МСК",
    },
    {
      "id": 2,
      "parent_id": null,
      "name": "Санкт-Петербург",
      "abbr": "СПБ",
    },
    {
      "id": 11,
      "parent_id": 1,
      "name": "Люберцы",
      "abbr": "",
    },
    {
      "id": 12,
      "parent_id": 1,
      "name": "Митино",
      "abbr": "",
    },
    {
      "id": 21,
      "parent_id": 2,
      "name": "Центральный",
      "abbr": "",
    },
  ]
}

Функция /goods/groups/list

Функция позволяет получить полный список групп товаров.

Передаваемые данные:

Параметр Назначение
token* Ключ авторизации. Могут быть использованы как сессионный, так и постоянный ключ.

Пример вызова:

{
  "token": "27a6e9abc4b2bb0bab2ffadfef915ae86bc",
}

Возвращаемые значения:

Параметр Назначение
groups Массив групп

Каждый элемент массива groups имеет следующие аттрибуты:

Аттрибут Тип Описание Примечание
id* int Идентификатор группы
parent_id* int Идентификатор родительской группы Для корневых групп - null
name* string Название группы
description* string Описание группы Может быть null
sort_order* int Порядок сортировки Может быть null

Пример ответа:

{
  "groups": [
    {
      "id": 1,
      "parent_id": null,
      "name": "Однофазные стабилизаторы",
      "description": "Однофазные стабилизаторы напряжения на 220В",
      "sort_order": 10,
    },
    {
      "id": 2,
      "parent_id": 1,
      "name": "Rucelf SDF/SDV/SDW",
      "description": null,
      "sort_order": 10,
    },
  ]
}

Функция /goods/list

Функция позволяет получить полный список товаров ассортимента.

Передаваемые данные:

Параметр Назначение
token* Ключ авторизации. Могут быть использованы как сессионный, так и постоянный ключ.

Пример вызова:

{
  "token": "27a6e9abc4b2bb0bab2ffadfef915ae86bc",
}

Возвращаемые значения:

Параметр Назначение
goods Массив товаров

Каждый элемент массива goods имеет следующие аттрибуты:

Аттрибут Тип Описание Примечание
id* int Идентификатор товара
code* string Код товара Для совместимости с API v1.х
name* string Название
trademark string Название торговой марки Будет исключено в следующих версиях
trademark_id int Идентификатор торговой марки См. семейство функцией /goods/trademarks/
article string Артикул
group_id int Идентификатор группы к которой относится товар См. семейство функцией /goods/groups/
price* float Актуальная цена
available* boolean Обощенный признак наличия true если товар присутвует хотя бы на одном складе, осуществляющем доставку транспортными компаниями
bestseller* boolean Товар рекомендуется к отображению на главной странице магазина
public boolean Товар является публично доступным Приватные товары доступны лишь для ролей ADMIN и SELLER, а так же для AFFILIATE и SITE при соотвествующих настройках
stock object Наличие товара на складах

Ассоциативный массив stock показывает товарные остатки на складах. Ключами массива являются идентификаторы складов, а значением - объект с полями a и r. Поле a соответствует количеству свободных единиц товара на данном складе, а поле r - количеству единиц товара, находящихся в резерве. Значение 4294967295 следет трактовать как "есть на складе", оно используется для ролей COURIER, AFFILIATE и SITE в качестве ограничителя доступа к приватным данным.

Пример ответа:

{
  "goods": [
    {
      "id": 302,
      "code": "is550",
      "name": "ИнСтаб IS550",
      "trademark": "Штиль",
      "trademark_id": 13,
      "article": "IS550",
      "group_id": 27,
      "price": 5990,
      "available": true,
      "bestseller": true,
      "public": true,
      "stock": [
        "2": {"a": 15, "r": 2},
        "6": {"a": 4294967295, "r": 0}
      ],
    },
  ]
}

Функция /orders/new

Функция позволяет зарегистрировать в системе новый заказ.

Передаваемые данные:

Параметр Назначение
token Ключ авторизации. При использовании сессионного ключа необходима передача параметра shop_id
order Объект, содержащий данные заказа

Аттрибуты объекта order:

Аттрибут Назначение Примечание
fname* Имя
lname* Фамилия
mname* Отчество
phone* Контактный телефон
email Адрес электронной почты
note Примечание к заказу
shop_id Идентификатор магазина Обязательный, если используется сессионный API Key
customer* Тип покупателя 1 - Физ.лицо
2 - Юр.лицо/ИП
paymethod* Способ оплаты 1 - Наличные
2 - Банковский платёж/безналичный расчёт
3 - Банковская карта (лично)
4 - Электронный платёж (Я.Деньги, Webmoney, QIWI и т.п.)
5 - Банковская карта (онлайн)
recievemethod* Способ получения 0 - Собственная курьерская служба
1 - Самовывоз с собственных пунктов выдачи
2 - Транспортная компания
address Адрес доставки Обязательно, для курьерской доставки
city Город доставки Обязательно, для доставок транспортными компаниями
emoney_details Идентификатор кошелька плательщика Обязательно, при оплате электронным платежом
individual_address Адрес прописки Обязательно, при доставке транспортной компанией на физ.лицо
transport_company_id Идентификатор транспортной компании 2 - ПЭК
3 - Деловые линии
4 - EMS Почта России
5 - СДЭК (возможна оплата при получении)
legal_name Наименование организации Обязательно, для покупателя юр.лица
legal_address Юридический адрес организации Обязательно, для покупателя юр.лица
legal_inn ИНН Обязательно, для покупателя юр.лица
legal_kpp КПП Обязательно, для покупателя юр.лица
legal_rs Расчётный счёт Обязательно, для покупателя юр.лица
legal_bank Банк, город Обязательно, для покупателя юр.лица
legal_ks Кор.счёт Обязательно, для покупателя юр.лица
legal_bik БИК Обязательно, для покупателя юр.лица
delivery_tariff_id Идентификатор индивидуального тарифа доставки Используется для функционала "Доставка за счёт партнера"
ym_client_id Идентификатор ClientID Яндекс.Метрики Используется при экспорте данных в Я.Метрику
goods* Массив идентификаторов товаров заказа их количества См. примеры

Пример, самовывоз с ПВЗ, физ.лицо, оплата наличными:

{
  "token": "27a6e9abc4b2bb0bab2ffadfef915ae86bc",
  "order": {
    "fname": "Иван",
    "lname": "Иванов",
    "mname": "Иванович",
    "phone": "+79123456789",
    "note": "Подъедет на личном а/м, заказать заранее пропуск",
    "customer": 1,
    "paymethod": 1,
    "recievemethod": 1,
    "goods": [
      {
         "code": "hybrid-500",
         "quantity": 2,
      },
    ]
  }
}

Пример, физ.лицо, оплата картой на сайте, доставка транспортной компанией ПЭК:

{
  "token": "27a6e9abc4b2bb0bab2ffadfef915ae86bc",
  "order": {
    "fname": "Пётр",
    "lname": "Петров",
    "mname": "Петрович",
    "phone": "+79876543219",
    "customer": 1,
    "paymethod": 2,
    "recievemethod": 2,
    "transport_company_id": 2,
    "city": "Воронеж",
    "individual_address": "Воронеж, ул.Стачек, д.15, кв.234",
    "goods": [
      {
         "code": "ibp-pro-500",
         "quantity": 1,
      },
      {
         "code": "akb-12-100",
         "quantity": 1,
      },
    ]
  }
}

Пример, юр.лицо, курьерская доставка:

{
  "token": "27a6e9abc4b2bb0bab2ffadfef915ae86bc",
  "order": {
    "fname": "Сидор",
    "lname": "Сидоров",
    "mname": "Сидорович",
    "phone": "+79876543219",
    "customer": 2,
    "paymethod": 5,
    "recievemethod": 0,
    "address": "Санкт-Петербург, ул.Воронежская, д.31, офис 15",
    "legal_name": "ООО \"Рога и Копыта\"",
    "legal_address": "630108, Ленинградская обл., пос.Вешки, ул.Кленовая, д.11, офис 31",
    "legal_inn": "5428946287",
    "legal_kpp": "540505008",
    "legal_rs": "40702610807000001386",
    "legal_bank": "Банк Филиал №7701 БАНКА ВТБ (ПАО) г.Москва",
    "legal_ks": "30102810148270000795",
    "legal_bik": "044535745",
    "goods": [
      {
         "code": "ibp-pro-500",
         "quantity": 1,
      },
      {
         "code": "akb-12-100",
         "quantity": 1,
      },
    ]
  }
}

Возвращаемые значения:

Параметр Назначение
order Объект, содержащий принятый заказ

Следует отметить, что возвращаемый объект orders не является копией одноименного передаваемого объекта. Возвращаемый объект содержит обработанные и нормализованные данные (например ФИО, адрес доставки и т.п.), а так же дополнен некоторыми аттрибутами:

Аттрибут Назначение
id Идентификатор присвоенный заказу
price Общая стоимость товаров в заказе (без учета доставки)
status Статус заказа (код статуса)
status_str Описание статуса заказа

Возможные ошибки:

Код Константа Описание
8 ERROR_ACCESS_DENIED Недействительный API Key
15 ERROR_INSUFFICIENT_DATA Не переданы необходимые данные
17 ERROR_INSUFFICIENT_DATA_SHOP Использован сессионный API Key, но не передано поле shop_id
16 ERROR_INSUFFICIENT_DATA_NAME Не указано имя покупателя

Функция /shops/goods

В API v2.x для каждого магазина может быть настроен индивидуальный ассортимент товаров. Данная функция позволяет получить список товаров конкретного магазина с привязкой их к категориям.

Входные параметры:

Параметр Назначение Примечание
token* Ключ доступа Для авторизации в этой функции может быть использован как сессионный ключ (token), так и постоянный (API Key). При использовании постоянного ключа, список товаров будет определяться настройками магазина, для которого этот ключ сформирован. При использовании сессионного ключа, будет получен полный список товаров партнерской программы.

Возвращаемые значения:

Параметр Назначение
categories Массив, содержащий описание категорий
goods Массив, содержащий описание товаров

Каждый элемент массива categories имеет следующие аттрибуты:

Аттрибут Тип Описание
id int Идентификатор категории
name string Название категории
description string Текстовое описание категории
parent_id int Идентификатор родительской категории. Задается только для дочерних категорий. В корневых категориях отсутствует
sort_order int порядковый номер для сортировки категорий

Каждый элемент массива goods имеет следующие аттрибуты:

Аттрибут Тип Описание
code string Код товара (идентификатор)
model string Полное название модели (включая название торговой марки)
trademark string Название торговой марки
type string Тип товара (префикс названия)
categories array of int Массив с идентификаторами категорий товара (включая все родительские категории)
price float Цена (в руб.)
special_price float Специальная цена: акция или цена, установленная партнером (для товаров, допускающих произвольную установку цены)
weight float Вес брутто (кг)
length float Длина упаковки (мм)
width float Ширина упаковки (мм)
height float Высота упаковки (мм)
quantity int Товарный остаток (шт.) Включая товары, находящиеся в резерве
article string Артикул, присвоенный производителем
description_short string Краткое описание товара
description string Полное описание товара
attributes array of object Массив характеристик товара. Каждая характеристика обладает аттрибутами name и value
images array of object Массив картинок товара. Каждая картинка описывается объектом с аттрибутами url и md5_checksum
certificate object Сертификат товара. Описывается объектом с аттрибутами url и md5_checksum
manual object Инструкция по эксплуатации/технический паспорт. Описывается объектом с аттрибутами url и md5_checksum

Пример ответа:

{
  "categories": [
    {
      "id": 1,
      "name": "Однофазные стабилизаторы",
      "description": "Однофазные стабилизаторы напряжения на 220В",
      "sort_order": 1
    },
    {
      "id": 2,
      "name": "Rucelf SDF\/SDV\/SDW",
      "description": "Стабилизаторы напряжения с плавной регулировкой и многоступенчатой защитой",
      "parent_id": 1,
      "sort_order": 2
    },
    ...
  ],
  "goods": [
    {
      "code": "ach-500",
      "model": "Энергия АСН-500",
      "trademark": "Энергия",
      "type": "Стабилизатор напряжения",
      "categories": [ 1, 7 ],
      "price": 2100,
      "special_price": 2100,
      "weight": 2.3,
      "length": 230,
      "width": 125,
      "height": 155,
      "quantity": 20,
      "article": "Е0101-0112",
      "description_short": "Однофазный стабилизатор напряжения с повышенной скоростью срабатывания. Используется для защиты оборудования небольшой мощности",
      "description": "Автоматический стабилизатор напряжения Энергия АСН-500 используется для защиты  маломощного оборудования от избыточного или недостаточного напряжения электросети,  а так же от частых колебаний напряжения в диапазоне от 120 до 280В. Благодаря своим  компактным габаритам, малому весу и возможности работать при отрицательных температурах  стабилизатор может быть использован для защиты кассовых аппаратов, газовых котлов или   другого маломощного оборудования в неотапливаемых помещениях или передвижных торговых точках.\nАвтоматические однофазные стабилизаторы напряжения АСН-500 произведятся на  современном заводе и соответствуют высоким международным стандартам (ISO9001). Прибор  оснащен микропроцессором, обеспечивающим скорость переключения реле в 2-4 раза быстрее  других стабилизаторов релейного типа. Блок самотестирования и интеллектуальная программируемая  защита значительно повышает надёжность и продлевает срок службы стабилизатора.\nПрименение новейших разработок при проектировании и создании стабилизаторов наряду с их  невысокой ценой и высоким качеством изготовления позволило стабилизаторам марки АСН быстро  занять большой сегмент рынка бытовых стабилизаторов.",
      "attributes": [
        {
          "name": "Мощность стабилизатора",
          "value": "500 ВA (350..500 Вт)"
        },
        {
          "name": "Количество фаз",
          "value": 1
        },
        ...
      ],
      "images": [
        {
          "url": "http:\/\/cdn.powerpartners.ru\/goods\/img\/ach-500_big.jpg",
          "md5_checksum": "e87598faa158b6333efd297e061f4866"
        },
        {
          "url": "http:\/\/cdn.powerpartners.ru\/goods\/img\/ach-500_big_2.jpg",
          "md5_checksum": "da9705d0ab826f32be8fbea12a3ced6d"
        },
        ...
      ],
      "certificate": {
        "url": "http:\/\/cdn.powerpartners.ru\/goods\/doc\/energy-cert.jpg",
        "md5_checksum": "d40336e57362afeca850effc84a9109b"
      },
      "manual": {
        "url": "http:\/\/cdn.powerpartners.ru\/goods\/doc\/energy_ach_passport.pdf",
        "md5_checksum": "960d0436ac1bb15f69ebb55c6ce57487"
      }
    },
    ...
  ]
}

Следует обратить особое внимание, что любая ссылка на внешний файл (изображения, pdf и т.п.) описывается 2 аттрибутами: url и md5_checksum это позволяет существенно ускорить и оптимизировать процесс синхронизации, поскольку загрузку следует производить лишь при изменении хэша файла (md5_checksum). А так же, позволяет отследить изменение файла, даже если его имя осталось прежним.

Функция /sellers/delivery/list

Функция позволяет получить список доставок на заданную дату.

Функция доступна исключительно для ролей ADMIN, MANAGER, SELLER и COURIER. Роли ADMIN и MANAGER могут получить полный список без каких-либо ограничений. Для роли SELLER список ограничен доставками относящимся к подразделениям, управляемым данным продавцом. Для роли COURIER возможно получение лишь тех доставок, на которые данный курьер назначен.

Передаваемые данные:

Параметр Назначение
token* Ключ авторизации. Могут быть использованы как сессионный, так и постоянный ключ.
date Дата в формате YYYY-MM-DD. Если не задана - возвращаются доставки на текущий день.
departments Массив со списком идентификаторов подразделений. Если параметр не задан - возвращается список всех доступных доставок.

Пример вызова:

{
  "token": "27a6e9abc4b2bb0bab2ffadfef915ae86bc",
  "date": "2020-10-07",
  "departmets": [1, 2],
}

Возвращаемые значения:

Параметр Назначение
orders Массив заказов, подлежащих доставке курьерской службой

Каждый элемент массива orders имеет следующие аттрибуты:

Аттрибут Тип Описание Примечание
id* int Идентификатор заказа
fname* string Имя покупателя или ответственного за заказ лица
lname* string Фамилия покупателя
mname* string Отчество покупателя
email* string Адрес электронной почты покупателя
phone* string Контактный телефон(ы)
note* string Примечание
customer* int Тип покупателя 1 - Физ.лицо
2 - Юр.лицо/ИП
paymethod* int Способ оплаты 1 - Наличные
2 - Банковский платёж/безналичный расчёт
3 - Банковская карта (лично)
4 - Электронный платёж (Я.Деньги, Webmoney, QIWI и т.п.)
5 - Банковская карта (онлайн)
recievemethod* int Способ получения 0 - Собственная курьерская служба
1 - Самовывоз с собственных пунктов выдачи
2 - Транспортная компания
address* string Адрес доставки
city* string Город назначения Только для доставок транспортными компаниями, в остальных случаях null
shop_id int Идентификатор партнёрского магазина на котором был оформлен заказ Поле доступно только для ролей ADMIN и MANAGER
department_id* int Идентификатор подразделения осуществляющего доставку
emoney_details string Идентификатор кошелька плательщика Только при оплате электронными деньгами. Поле доступно только для ролей ADMIN и MANAGER
individual_address* string Адрес прописки Только при доставке транспортной компанией на физ.лицо
transport_company_id* int Идентификатор транспортной компании 2 - ПЭК
3 - Деловые линии
4 - EMS Почта России
5 - СДЭК (возможна оплата при получении)
legal_name* string Наименование организации Только для юр.лиц
legal_address* string Юридический адрес организации Только для юр.лиц
legal_inn* string ИНН Только для юр.лиц
legal_kpp* string КПП Только для юр.лиц
legal_rs* string Расчётный счёт Только для юр.лиц
legal_bank* string Банк, город Только для юр.лиц
legal_ks* string Кор.счёт Только для юр.лиц
legal_bik* string БИК Только для юр.лиц
price* float Сумма заказа Без учета доставки
status* int Статус заказ 10 - В обработке
15 - Предзаказ
20 - Ожидает оплаты
25 - В доставке
30 - Ожидает получения
35 - Выполнен
40 - Завершён
45 - Отменён
50 - Возврат покупки
status_str* string Текстовое описание статуса
delivery_tariff_id* int Идентификатор тарифа доставки
delivery_tariff* string Название тарифа доставки
delivery_price* float Стоимость доставки
goods* array Товары заказа

Каждый элемент массива goods имеет следующую структуру:

Аттрибут Тип Описание Примечание
product_id* int Идентификатор товара
code* string Код товара
article* string Артикул товара
trademark* string Торговая марка
name* string Название
price* float Цена
actual_price* float Справочная цена по прайс-листу на день оформления заказ
quantity* int Количество

Пример ответа:

{
  "orders": [
    {
      "id": 63235,
      "fname": "Сергей",
      "lname": "Иванов",
      "mname": "Николаевич",
      "email": "",
      "phone": "8-926-111-22-33",
      "note": "34 км от МКАД. Перед выездом контрольный звонок",
      "customer": 1,
      "paymethod": 1,
      "recievemethod": 0,
      "address": "МО, Одинцовский городской округ, посёлок Горки-10, д.123",
      "city": null,
      "department_id": 2,
      "individual_address": "",
      "transport_company_id": null,
      "legal_name": null,
      "legal_address": null,
      "legal_inn": null,
      "legal_kpp": null,
      "legal_rs": null,
      "legal_bank": null,
      "legal_ks": null,
      "legal_bik": null,
      "price": 36490,
      "status": 25,
      "status_str": "В доставке",
      "delivery_tariff_id": 0,
      "delivery_tariff": "Стандартный",
      "delivery_price": 0,
      "goods": [
        {
          "product_id": 388,
          "code": "resanta-ach-15000-3",
          "article": "63\/4\/5",
          "trademark": "Ресанта",
          "name": "АСН-15000\/3-ЭМ",
          "price": 36490,
          "actual_price": 38890,
          "quantity": 1
        }
      ]
    },
    {
      "id": 63236,
      "fname": "Сидор",
      "lname": "Сидоров",
      "mname": "Сидорович",
      "email": "sidor@roga-i-kopyta.ru",
      "phone": "+79876543219",
      "note": "",
      "customer": 2,
      "paymethod": 5,
      "recievemethod": 2,
      "address": "Санкт-Петербург, ул.Воронежская, д.31, офис 15",
      "city": "Санкт-Петербург",
      "department_id": 2,
      "individual_address": "",
      "transport_company_id": 3,
      "legal_name": "ООО \"Рога и Копыта\"",
      "legal_address": "630108, Ленинградская обл., пос.Вешки, ул.Кленовая, д.11, офис 31",
      "legal_inn": "5428946287",
      "legal_kpp": "540505008",
      "legal_rs": "40702610807000001386",
      "legal_bank": "Банк Филиал №7701 БАНКА ВТБ (ПАО) г.Москва",
      "legal_ks": "30102810148270000795",
      "legal_bik": "044535745",
      "price": 7180,
      "status": 25,
      "status_str": "В доставке",
      "delivery_tariff_id": 12,
      "delivery_tariff": "Скверный",
      "delivery_price": 400,
      "goods": [
        {
          "product_id": 125,
          "code": "ach-500",
          "article": "Е0101-0112",
          "trademark": "Энергия",
          "name": "АСН-500",
          "price": 1800,
          "actual_price": 1800,
          "quantity": 2
        },
        {
          "product_id": 214,
          "code": "kotel-400",
          "article": "КОТЕЛ-400",
          "trademark": "Rucelf",
          "name": "КОТЁЛ-400",
          "price": 3580,
          "actual_price": 3580,
          "quantity": 1
        }
      ]
    }
  ]
}