# Общие правила и ограничения

**Для работы с api в** [**личном кабинете**](https://my.livesklad.com/settings/api) **вам необходимо получить данные для авторизации.**\
\
Все запросы отправляются только по HTTPS протоколу в кодировке:\
**application/x-www-form-urlencoded**\
Каждый запрос должен содержать заголовок:\
**Authorization:** \<token>\
В случае отсутствия или в случае некорректного заголовка, в ответ на запрос будет возвращаться ошибка с кодом 401:

```
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

Ограничения: **100 запросов в 15 минут**. \
В случае превышения лимита в указанный промежуток времени, все последующие запросы будут возвращаться с кодом ошибки 429.

```
{
  error: {
    statusCode: 429,
    name: "Error",
    message: "Too Many Requests",
    expireDate: "2022-12-13T09:02:13.953Z"
  }
}
```

При многократном превышении данного ограничения, доступ к api временно блокируется для всей компании и на любые запросы будет возвращаться ошибка 403. Разблокировка произойдет автоматически после даты указанной в поле **expireDate.**

```
{
  error: {
    statusCode: 403,
    name: "Error",
    message: "Forbidden. Try again later",
    expireDate: "2022-12-13T10:02:13.953Z"
}
```

В случае если вы получаете ошибку без поля **expireDate**, это значит что доступ к **api** был польностью заблокирован и для разблокировки необходимо обратиться в техподдержку.

```
{
  error: {
    statusCode: 403,
    name: "Error",
    message: "Forbidden"
}
```

В поле **remainRequest** приходит количество запросов оставшихся до блокировки.

В поле **expireDate** приходит время в которое произойдет обновление ограничений.

Все ответы приходят в **JSON** формате.

{% hint style="info" %}
Для работы с API необходимы иметь навыки программирования и понимание базовых принципов работы Интернета и протокола HTTPS. Уметь отправлять и обрабатывать HTTPS запросы, в том числе уметь обрабатывать данные в формате JSON. Если вы не обладаете такими навыками, обратитесь к разработчику или вебмастеру.
{% endhint %}


# Авторизация

## Авторизация

<mark style="color:green;">`POST`</mark> `https://api.livesklad.com/auth`

В случае успешной авторизации в ответ придет токен, он будет действителен в течение 15 минут, данный токен должен передаваться в каждом запросе в заголовке:\
**Authorization:** \<token>

#### Request Body

| Name     | Type   | Description |
| -------- | ------ | ----------- |
| login    | string | Логин       |
| password | string | Пароль      |

{% tabs %}
{% tab title="200 " %}

```
{
    token: "PGhXX81XLhkiUm5ua7IsUShqBJiBYroLhG8Y5jjgiY4t2NMrBX6M91x1WXqeKhaA",
    ttl: 900
    remainRequest: 99,
    expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Ошибка авторизации" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}

{% tab title="403 Заблокировано" %}

```json
{
  statusCode: 403,
  name: "Error",
  message: "Forbidden",
  expireDate: "2022-12-13T10:02:13.953Z"
}
```

{% endtab %}

{% tab title="429: Too Many Requests Превышен лимит" %}

```json
{
  error: {
    statusCode: 429,
    name: "Error",
    message: "Too Many Requests",
    expireDate: "2022-12-13T09:02:13.953Z"
  }
}
```

{% endtab %}
{% endtabs %}

<details>

<summary>LOGIN_FAILED – где взять логин / пароль для работы с API</summary>

Логин и пароль для работы с API необходимо сформировать в разделе "Настройки / [Доступ к API](https://my.livesklad.com/settings/api)"

<figure><img src="https://2774753422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LzByu5Y8mhMOXYbMrOI%2Fuploads%2Fae868GxtR3oSTuNiFJwZ%2F%D0%9B%D0%BE%D0%B3%D0%B8%D0%BD%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C.png?alt=media&amp;token=13cee0c1-9ebb-406d-8a27-daee94e872c3" alt=""><figcaption></figcaption></figure>

</details>


# Статусы

## Список доступных статусов

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/statuses`

Возвращает массив доступных статусов

#### Headers

| Name          | Type   | Description       |
| ------------- | ------ | ----------------- |
| Authorization | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}


# Мастерские

## Список доступных мастерских

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/shops`

Возвращает массив доступных мастерских

#### Headers

| Name          | Type   | Description       |
| ------------- | ------ | ----------------- |
| Authorization | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```
{
  data: [
    {
      id: "5e0ce9c17ae81e080c8be662",
      name: "Мастерская 1",
      color: "#ff6666"
    },
    {
      id: "5e0cea7f7ae81e080c8be6cf",
      name: "Мастерская 2",
      color: "#00FF21",
    }
  ],
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}


# Заказы

## Список заказов в мастерской

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/shops/{id}/orders`

Возвращает массив заказов для мастерской. Для получения списка заказов у API должен быть настроен доступ к заказам и доступ к соответствующей мастерской\
\
Для сортировки результата необходимо в параметре **sort** передать строку "**<название\_поля> ASC**" или "**<название\_поля> DESC**". Где **ASC** - сортировать по возрастанию, **DESC** - сортировать по убыванию, **<название\_поля>** - поле по которому осуществляется сортировка, может быть одно из: **id**, **sn**, **typeOrder**, **manager**, **closeManager**, **master**, **brand**, **model**, **typeDevice**, **node**, **problem**, **completeSet**, **number**, **num**, **dateCreate**, **lastAction**, **dateClose**, **dateFinish**, **deadline**, **statusDeadline**, **counteragent**, **address**, **summ**, **cash**, **status**, **isUrgent**. По умолчанию заказы сортируются от новых к старым\
\
Фильтры по датам передаются в виде массива из двух чисел в формате Unix (**в миллисекундах**), где первый число - это начало диапазона, а второе - конец диапазона. Если какая-то граница диапазона отсутствует, то вместо нее нужно передать null. Например \[1690837200000,1693515599999] или \[null,1693515599999]

Из списка с любым заданным набором фильтров можно получить максимум 10000 элементов, то есть максимальное значение для **page** \* **pageSize** = 10000. Чтобы получить другие элементы, нужно либо изменить фильтр, либо изменить сортировку

#### Path Parameters

| Name                                 | Type   | Description   |
| ------------------------------------ | ------ | ------------- |
| id<mark style="color:red;">\*</mark> | string | id мастерской |

#### Query Parameters

| Name             | Type    | Description                                                                                                                                                                                    |
| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| isVisible        | boolean | Фильтр по удаленным заказам. Если true - будут считаны только не удаленные заказы, если false - будут считаны только удаленные заказы, если параметр не отсутствует - будут считаны все заказы |
| sort             | string  | Сортировка                                                                                                                                                                                     |
| statusIds        | array   | Фильтр по статусам заказов, передается в виде массива id статусов                                                                                                                              |
| masterId         | string  | Фильтр по мастеру которому назначен заказ                                                                                                                                                      |
| managerId        | string  | Фильтр по менеджеру которому назначен заказ                                                                                                                                                    |
| counteragentId   | string  | Фильтр по контрагенту                                                                                                                                                                          |
| isUrgent         | boolean | Фильтр: "Срочные заказы"                                                                                                                                                                       |
| isDeadline       | boolean | Фильтр: "Просроченные заказы"                                                                                                                                                                  |
| isStatusDeadline | boolean | Фильтр: "Просроченные по норме времени статуса"                                                                                                                                                |
| page             | number  | Номер страницы выборки ( по умолчанию - 1)                                                                                                                                                     |
| pageSize         | number  | Количество элементов в выборке (по умолчанию - 10, максимум - 50)                                                                                                                              |
| filter           | string  | Текст для поиска по содержимому заказа                                                                                                                                                         |
| dateCreate       | array   | Фильтр по дате создания                                                                                                                                                                        |
| dateFinish       | array   | Фильтр по дате готовности                                                                                                                                                                      |
| dateClose        | array   | Фильтр по дате выдачи                                                                                                                                                                          |
| deadline         | array   | Фильтр по дате крайнего срока                                                                                                                                                                  |
| statusDeadline   | array   | Фильтр по дате крайнего срока статуса                                                                                                                                                          |
| lastAction       | array   | Фильтр по дате последнего изменения                                                                                                                                                            |
| num              | number  | Номер заказа (числовой номер, ищет по точному соответствию номера заказа без учета префикса)                                                                                                   |
| numer            | string  | Номер заказа (текстовый номер, ищет по частичному совпадению номера заказа с учетом префикса)                                                                                                  |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      isUrgent: false,
      color: "Белый",
      manager: {
        name: "Фамилия Имя",
        id: "63c015adcce57401c832fab4"
      },
      typeOrder: {
        name: "Платный",
        id: "63c015adcce57401c832fbf4"
      },
      approximatePrice: "3000р",
      counteragent: {
        name: "Кузнецов Евгений Анатольевич",
        rating: -1,
        phones: [
          "+7 (933) 333-33-33"
        ],
        id: "63c015afcce57401c832fc9e"
      },
      isVisible: true,
      dateCreate: "2022-12-12T14:14:07.820Z",
      number: "A000003",
      problem: [
        "Не заряжается"
      ],
      summ: {
        price: 0,
        soldPrice: 0
      },
      typeDevice: "Планшет",
      sn: "355636789089331",
      cash: {
        summ: 0
      },
      device: "Apple iPad 3",
      status: {
        id: "63c015adcce57401c832fbf1",
        name: "Новый",
        color: "#3E8EF7",
        type: "new",
        comment: "none",
        isChange: true
      },
      id: "63c015afcce57401c832fca4",
      shop: {
        id: "63c015adcce57401c832faee",
        name: "Мастерская",
        color: "#ff6666"
      }
    },
    {
      isUrgent: false,
      color: "Синий",
      manager: {
        name: "Фамилия Имя",
        id: "63c015adcce57401c832fab4"
      },
      typeOrder: {
        name: "Платный",
        id: "63c015adcce57401c832fbf4"
      },
      approximatePrice: "4000 р",
      counteragent: {
        name: "Смирнов Иван Андреевич",
        rating: 0,
        phones: [
          "+7 (944) 444-44-44"
        ],
        id: "63c015afcce57401c832fc9f"
      },
      isVisible: true,
      dateCreate: "2022-12-12T14:14:07.820Z",
      number: "A000004",
      problem: [
        "Замена корпуса"
      ],
      summ: {
        price: 0,
        soldPrice: 0
      },
      typeDevice: "Телефон",
      sn: "354578765434567",
      cash: {
        summ: 0
      },
      device: "Alcatel 5080x",
      status: {
        id: "63c015adcce57401c832fbf1",
        name: "Новый",
        color: "#3E8EF7",
        type: "new",
        comment: "none",
        isChange: true
      },
      id: "63c015afcce57401c832fca5",
      shop: {
        id: "63c015adcce57401c832faee",
        name: "Мастерская",
        color: "#ff6666"
      }
    }
  ],
  total: 10,
  page: 1,
  pageSize: 10,
  sort: {
    field: "dateCreate",
    dir: "DESC"
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Список заказов без привязки к мастерской

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/company/orders`

Возвращает массив заказов найденных по всем мастерским. Для получения списка заказов у API должен быть настроен доступ к заказам\
\
Для сортировки результата необходимо в параметре **sort** передать строку "**<название\_поля> ASC**" или "**<название\_поля> DESC**". Где **ASC** - сортировать по возрастанию, **DESC** - сортировать по убыванию, **<название\_поля>** - поле по которому осуществляется сортировка, может быть одно из: **id**, **sn**, **typeOrder**, **manager**, **closeManager**, **master**, **brand**, **model**, **typeDevice**, **node**, **problem**, **completeSet**, **number**, **num**, **dateCreate**, **lastAction**, **dateClose**, **dateFinish**, **deadline**, **statusDeadline**, **counteragent**, **address**, **summ**, **cash**, **status**, **isUrgent**. По умолчанию заказы сортируются от новых к старым\
\
Фильтры по датам передаются в виде массива из двух чисел в формате Unix (**в миллисекундах**), где первый число - это начало диапазона, а второе - конец диапазона. Если какая-то граница диапазона отсутствует, то вместо нее нужно передать null. Например \[1690837200000,1693515599999] или \[null,1693515599999]

Из списка с любым заданным набором фильтров можно получить максимум 10000 элементов, то есть максимальное значение для **page** \* **pageSize** = 10000. Чтобы получить другие элементы, нужно либо изменить фильтр, либо изменить сортировку

#### Query Parameters

| Name             | Type    | Description                                                                                                                                                                                    |
| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| isVisible        | boolean | Фильтр по удаленным заказам. Если true - будут считаны только не удаленные заказы, если false - будут считаны только удаленные заказы, если параметр не отсутствует - будут считаны все заказы |
| sort             | string  | Сортировка                                                                                                                                                                                     |
| statusIds        | array   | Фильтр по статусам заказов, передается в виде массива id статусов                                                                                                                              |
| masterId         | string  | Фильтр по мастеру которому назначен заказ                                                                                                                                                      |
| managerId        | string  | Фильтр по менеджеру которому назначен заказ                                                                                                                                                    |
| counteragentId   | string  | Фильтр по контрагенту                                                                                                                                                                          |
| isUrgent         | boolean | Фильтр: "Срочные заказы"                                                                                                                                                                       |
| isDeadline       | boolean | Фильтр: "Просроченные заказы"                                                                                                                                                                  |
| isStatusDeadline | boolean | Фильтр: "Просроченные по норме времени статуса"                                                                                                                                                |
| page             | number  | Номер страницы выборки (по умолчанию - 1)                                                                                                                                                      |
| pageSize         | number  | Количество элементов в выборке (по умолчанию - 10, максимум - 50)                                                                                                                              |
| filter           | string  | Текст для поиска по содержимому заказа                                                                                                                                                         |
| dateCreate       | array   | Фильтр по дате создания                                                                                                                                                                        |
| dateFinish       | array   | Фильтр по дате готовности                                                                                                                                                                      |
| dateClose        | array   | Фильтр по дате выдачи                                                                                                                                                                          |
| deadline         | array   | Фильтр по дате крайнего срока                                                                                                                                                                  |
| statusDeadline   | array   | Фильтр по дате крайнего срока статуса                                                                                                                                                          |
| lastAction       | array   | Фильтр по дате последнего изменения                                                                                                                                                            |
| num              | number  | Номер заказа (числовой номер, ищет по точному соответствию номера заказа без учета префикса)                                                                                                   |
| number           | string  | Номер заказа (текстовый номер, ищет по частичному совпадению номера заказа с учетом префикса)                                                                                                  |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      isUrgent: false,
      color: "Белый",
      manager: {
        name: "Фамилия Имя",
        id: "63c015adcce57401c832fab4"
      },
      typeOrder: {
        name: "Платный",
        id: "63c015adcce57401c832fbf4"
      },
      approximatePrice: "3000р",
      counteragent: {
        name: "Кузнецов Евгений Анатольевич",
        rating: -1,
        phones: [
          "+7 (933) 333-33-33"
        ],
        id: "63c015afcce57401c832fc9e"
      },
      isVisible: true,
      dateCreate: "2022-12-12T14:14:07.820Z",
      number: "A000003",
      problem: [
        "Не заряжается"
      ],
      summ: {
        price: 0,
        soldPrice: 0
      },
      typeDevice: "Планшет",
      sn: "355636789089331",
      cash: {
        summ: 0
      },
      device: "Apple iPad 3",
      status: {
        id: "63c015adcce57401c832fbf1",
        name: "Новый",
        color: "#3E8EF7",
        type: "new",
        comment: "none",
        isChange: true
      },
      id: "63c015afcce57401c832fca4",
      shop: {
        id: "63c015adcce57401c832faee",
        name: "Мастерская",
        color: "#ff6666"
      }
    },
    {
      isUrgent: false,
      color: "Синий",
      manager: {
        name: "Фамилия Имя",
        id: "63c015adcce57401c832fab4"
      },
      typeOrder: {
        name: "Платный",
        id: "63c015adcce57401c832fbf4"
      },
      approximatePrice: "4000 р",
      counteragent: {
        name: "Смирнов Иван Андреевич",
        rating: 0,
        phones: [
          "+7 (944) 444-44-44"
        ],
        id: "63c015afcce57401c832fc9f"
      },
      isVisible: true,
      dateCreate: "2022-12-12T14:14:07.820Z",
      number: "A000004",
      problem: [
        "Замена корпуса"
      ],
      summ: {
        price: 0,
        soldPrice: 0
      },
      typeDevice: "Телефон",
      sn: "354578765434567",
      cash: {
        summ: 0
      },
      device: "Alcatel 5080x",
      status: {
        id: "63c015adcce57401c832fbf1",
        name: "Новый",
        color: "#3E8EF7",
        type: "new",
        comment: "none",
        isChange: true
      },
      id: "63c015afcce57401c832fca5",
      shop: {
        id: "63c015adcce57401c832faee",
        name: "Мастерская",
        color: "#ff6666"
      }
    }
  ],
  total: 10,
  page: 1,
  pageSize: 10,
  sort: {
    field: "dateCreate",
    dir: "DESC"
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Создание заказа

<mark style="color:green;">`POST`</mark> `https://api.livesklad.com/shops/{id}/orders`

Создает заказ в мастерской. Для создания заказа у API должен быть настроен доступ к заказам и и доступ к соответствующей мастерской, так же должен быть установлен доступ на создание заказов

#### Path Parameters

| Name                                 | Type   | Description   |
| ------------------------------------ | ------ | ------------- |
| id<mark style="color:red;">\*</mark> | string | id мастерской |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

#### Request Body

| Name                                          | Type    | Description                                                            |
| --------------------------------------------- | ------- | ---------------------------------------------------------------------- |
| counteragentId                                | string  | id контрагента                                                         |
| name                                          | string  | Имя контрагента                                                        |
| address                                       | string  | Адрес контрагента                                                      |
| phones                                        | array   | Телефоны контрагента, передаются в виде массива строк                  |
| email                                         | string  | email контрагента                                                      |
| isBuyer                                       | boolean | Контрагент является покупателем (по умолчанию - false)                 |
| isVendor                                      | boolean | Контрагент является поставщиком (по умолчанию - false)                 |
| counteragentNode                              | string  | Примечание контрагента                                                 |
| isSendSms                                     | boolean | Контрагенту можно отправлять смс-сообщения (по умолчанию - false)      |
| rating                                        | number  | Рейтинг контрагента (обычный: 0, негативный клиент: -1, позитивный: 1) |
| typeOrderId<mark style="color:red;">\*</mark> | string  | id типа заказа                                                         |
| isUrgent                                      | boolean | Срочный заказ (по умолчанию - false)                                   |
| masterId                                      | string  | id мастера которому необходимо назначить заказ                         |
| managerId                                     | string  | id менеджера которому необходимо назначить заказ                       |
| deadline                                      | number  | Крайний срок заказа (передается в формате Unix, в **миллисекундах**)   |
| typeDevice                                    | string  | Тип устройства                                                         |
| brand                                         | string  | Марка                                                                  |
| model                                         | string  | Модель                                                                 |
| sn                                            | string  | Серийный номер                                                         |
| problem                                       | array   | Список неисправностей, передается в виде массива строк                 |
| completeSet                                   | array   | Комплектация, передается в виде массива строк                          |
| cashRegisterId                                | string  | id кассы в которую будет принята предоплата                            |
| money                                         | number  | Сумма предоплаты наличными                                             |
| bank                                          | number  | Сума предоплаты безналичными                                           |
| approximatePrice                              | string  | Предварительная стоимость                                              |
| orderNode                                     | string  | Примечание к заказу                                                    |
| appearance                                    | array   | Внешний вид, передается в виде массива строк                           |
| color                                         | string  | Цвет                                                                   |
| customFields                                  | array   | Массив пользовательских полей                                          |
| howKnowId                                     | string  | id источника рекламы                                                   |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: {
    dateCreate: "2022-12-13T13:49:50.907Z",
    lastAction: "2022-12-13T13:49:50.907Z",
    number: "A000011",
    num: 11,
    isVisible: true,
    isUrgent: false,
    id: "63c1617e360b094eed16ab6a",
    shop: {
      id: "63c015adcce57401c832faee",
      name: "Мастерская",
      color: "#ff6666",
      phones: [],
      address: null,
      isVisible: true
    },
    status: {
      name: "Новый",
      color: "#3E8EF7",
      type: "new",
      id: "63c015adcce57401c832fbf1",
      comment: "none",
      isPayRequired: false
    },
    createManager: {
      id: "63c0164bcce57401c832fd36",
      name: "API"
    },
    typeOrder: {
      id: "63c015adcce57401c832fbf4",
      name: "Платный"
    },
    counteragent: {
      name: "Клиент",
      phones: [],
      isBuyer: true,
      isVendor: false,
      isVisible: true,
      isSendSms: false,
      isSendEmail: false,
      isSendTelegram: false,
      rating: 0,
      id: "63c1617e360b094eed16ab69",
      typeCounteragent: {
        name: "Частное лицо",
        id: "63c015adcce57401c832fbf5"
      }
    },
    howKnow: {
      name: "Повторное обращение",
      id: "63c015adcce57401c832fabb"
    },
    positions: []
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

Контрагент при создании заказ может быть указан двумя способами:\
1\) **counteragentId** - id уже существующего контрагента\
2\) **name**, **typeCounteragentId**, **phones**, **isBuyer**, **isVendor**, **email**, **address**, **isSendSms**, **rating**, **counteragentNode, howKnowId** - данные контрагента которого необходимо создать при создании заказа. В случае если не указан **typeCounteragentId,** используется значение указанное в системе по умолчанию.\
Один из параметров **counteragentId** или **name** - обязателен.

В **customFields** передаются пользовательские поля по заказу и контрагенту (в том случае если контрагент создается при создании заказа). Поле передается в формате:

```
[
  {
    id: "5e0cea8e7ae81e080c8be6d8",
    value: true
  },
  {
    id: "5e0ceaf77ae81e080c8be700",
    value: "Приоритетный клиент"
  }
]
```

В случае если по заказу нужно внести предоплату, необходимо указать параметры **cashRegisterId** и какой-то из параметров **money** или **bank** (в случае смешанной оплаты можно указать сразу оба параметра)

По умолчанию для создания заказа обязательным является только поле **typeOrderId** и одно из полей **counteragentId** или **name**. Но в случае если для указанного типа заказа (определяется по **typeOrderId**) изменена форма заказа, то обязательными могут быть так же и другие поля

Для создания контрагента при создании заказа, по умолчанию обязательным является только поле **name**. Но в случае если для типа контрагента указанного в системе по умолчанию, изменена форма контрагента, то обязательными могут быть так же и другие поля.

Если указать поле **howKnowId**, то для заказа будет прописан источник рекламы. Если при создании заказа создается новый контрагент, а не используется уже существующий, то для созданного контрагента будет прописан тот же источник рекламы.

## Список типов заказов

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/type-orders`

Возвращает массив типов заказов

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      id: "5d0cb1188ede076111d797fe"
      name: "Платный"
    },
    {
      id: "5d0cb1188ede076111d79837",
      name: "Гарантийный"
    }
  ],
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Список пользовательских полей для типа заказа

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/type-orders/{id}/fields`

Возвращает массив пользовательских полей для типа заказов

#### Path Parameters

| Name                                 | Type   | Description     |
| ------------------------------------ | ------ | --------------- |
| id<mark style="color:red;">\*</mark> | string | id типа заказов |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      description: "Мое поле",
      type: "order",
      dataType: "string",
      items: null,
      defaultValue: null,
      id: "5d21b65ed25624421c1b310a"
    }
  ],
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Информация о заказе

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/orders/{id}`

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

#### Path Parameters

| Name                                 | Type   | Description |
| ------------------------------------ | ------ | ----------- |
| id<mark style="color:red;">\*</mark> | string | id заказа   |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: {
    dateCreate: "2022-12-12T14:14:07.820Z",
    number: "A000009",
    num: 9,
    isVisible: true,
    isUrgent: false,
    typeDevice: "Телефон",
    typeDeviceId: "63c015afcce57401c832fc79",
    brand: "Samsung",
    model: "I9300",
    sn: "354578765434567",
    problem: [
      "Не работает кнопка громкости"
    ],
    completeSet: [],
    approximatePrice: "500 р",
    appearance: [
      "царапины",
      "потертости"
    ],
    customFields: [
      {
        id: "5e9958929dd07567102a19b4",
        value: "2024-05-01T10:36:00.869Z"
      },
      {
        id: "652550d56ee1234d73c61be0",
        value: false
      }
    ],
    color: "Синий",
    lastAction: "2022-12-12T14:14:08.577Z",
    dateFinish: "2022-12-12T14:14:08.551Z",
    id: "63c015afcce57401c832fcaa",
    shop: {
      name: "Мастерская",
      color: "#ff6666",
      phones: [],
      isVisible: true,
      id: "63c015adcce57401c832faee"
    },
    typeOrder: {
      name: "Платный",
      id: "63c015adcce57401c832fbf4"
    },
    storageFiles: [
      {
        id: "69f84a25faf85ec8fc6a2343",
        name: null,
        date: "2026-05-04T10:26:10.508Z",
        url: "https://cloud.livesklad.com/xxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxx.png",
        mimetype: "image/png",
        size: 1115356,
        customer: {
          id: "63c015adcce57401c832fab4",
          name: "Фамилия Имя"
        }
      },
      {
        id: "69f84a2c8db39589429adf2a",
        name: "202500812953.pdf",
        date: "2026-05-05T10:26:41.493Z",
        url: "https://cloud.livesklad.com/xxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxx.pdf",
        mimetype: "application/pdf",
        size: 201058,
        customer: {
          id: "63c015adcce57401c832fab4",
          name: "Фамилия Имя"
        }
      }
    ],
    cash: {
      order: 500,
      orderReturn: 0,
      invoice: 0,
      elements: [
        {
          id: "65f56f78069ccb6dc9a0a3ee",
          date: "2022-12-12T14:14:07.820Z",
          money: 500,
          type: "order",
          isBankTransfer: false
        }
      ]
    },
    status: {
      name: "Готов",
      color: "#00B86A",
      type: "finish",
      isPayRequired: false,
      comment: "none",
      id: "63c015adcce57401c832fbf3",
      isChange: true,
      isChecked: true
    },
    counteragent: {
      name: "Смирнов Иван Андреевич",
      phones: [
        "+7 (944) 444-44-44"
      ],
      isBuyer: true,
      isVendor: false,
      isVisible: true,
      isSendSms: true,
      isSendEmail: false, 
      isSendTelegram: false,
      rating: 0,
      id: "63c015afcce57401c832fc9f",
      typeCounteragent: {
        name: "Частное лицо",
        id: "63c015adcce57401c832fbf5"
      }
    },
    manager: {
      id: "63c015adcce57401c832fab4",
      name: "Фамилия Имя"
    },
    createManager: {
      id: "63c015adcce57401c832fab4",
      name: "Фамилия Имя"
    },
    positions: [
      {
        measure: {
          id: "63c015adcce57401c832fab5",
          value: "шт.",
          isFloat: false
        },
        positionId: "63c015b0cce57401c832fd1c",
        modifyId: "63c015b0cce57401c832fcf3",
        nomenclatureId: "63c015b0cce57401c832fcf2",
        code: 12,
        name: "Диагностика",
        isWork: true,
        price: 500,
        soldPrice: 500,
        date: "2022-12-12T14:14:08.484Z",
        minPrice: 500,
        count: 1,
        purchasePriceSumm: 0,
        customer: {
          id: "63c015adcce57401c832fab4",
          name: "Фамилия Имя"
        }
      }
    ]
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Изменить заказ

<mark style="color:purple;">`PATCH`</mark> `https://api.livesklad.com/orders/{id}`

Для изменения заказа в настройках API должен быть установлен доступ к заказам. Так же в настройках статусов у API должен быть настроен доступ на редактирование заказов в нужных статусах

#### Path Parameters

| Name                                 | Type   | Description |
| ------------------------------------ | ------ | ----------- |
| id<mark style="color:red;">\*</mark> | string | id заказ    |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

#### Request Body

| Name             | Type    | Description                                             |
| ---------------- | ------- | ------------------------------------------------------- |
| howKnowId        | string  | id источника рекламы (изменяет источник рекламы заказа) |
| statusId         | string  | id статуса                                              |
| typeOrderId      | string  | id типа заказа                                          |
| isUrgent         | boolean | Срочный заказ                                           |
| managerId        | string  | id менеджера которому необходимо назначить заказ        |
| masterId         | string  | id мастера которому необходимо назначить заказ          |
| deadline         | number  | Крайний срок                                            |
| typeDevice       | string  | Тип устройства                                          |
| brand            | string  | Марка                                                   |
| model            | string  | Модель                                                  |
| sn               | string  | Серийный номер                                          |
| problem          | array   | Список неисправностей, передается в виде массива строк  |
| completeSet      | array   | Комплектация, передается в виде массива строк           |
| approximatePrice | string  | Предварительная стоимость                               |
| orderNode        | string  | Примечание к заказу                                     |
| appearance       | array   | Внешний вид, передается в виде массива строк            |
| cashRegisterId   | string  | id кассы в которую будет принята оплата                 |
| money            | number  | Сумма наличными                                         |
| bank             | number  | Сумма безналичными                                      |
| nodePay          | string  | Примечание к оплате                                     |
| color            | string  | Цвет                                                    |
| recommendation   | string  | Вердикт / рекомендации                                  |
| comment          | string  | Комментарий                                             |
| customFields     | array   | Массив пользовательских полей                           |
| counteragentId   | string  | id контрагента                                          |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: {
    success: true
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

В customFields передаются пользовательские поля по заказу и контрагенту (в том случае если контрагент создается при создании заказа). Поле передается в формате:

```
[
  {
    id: "5e0cea8e7ae81e080c8be6d8",
    value: true
  },
  {
    id: "5e0ceaf77ae81e080c8be700",
    value: "Приоритетный клиент"
  }
]
```

Произвести оплату по заказу (параметры **cashRegisterId**, **money**, **bank**, **nodePay**) возможно только в том случае если у заказа меняется статус (указан параметр **statusId**) и у данного статуса в настройках задан параметр "Затребовать оплату при перехода заказа в этот статус".

## Удалить заказ

<mark style="color:red;">`DELETE`</mark> `https://api.livesklad.com/orders/{id}`

Для удаления заказа в настройках API должен стоять соответствующий доступ

#### Path Parameters

| Name | Type   | Description |
| ---- | ------ | ----------- |
| id   | string | id заказа   |

#### Headers

| Name          | Type   | Description       |
| ------------- | ------ | ----------------- |
| Authorization | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: {
    count: 1
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}


# Контрагент

## Список контрагентов

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/counteragents`

Возвращает массив контрагентов

Для сортировки результата необходимо в параметре **sort** передать строку "**<название\_поля> ASC**" или "**<название\_поля> DESC**". Где **ASC** - сортировать по возрастанию, **DESC** - сортировать по убыванию, **<название\_поля>** - поле по которому осуществляется сортировка, может быть одно из: **id**, **typeCounteragent**, **lastAction**, **name**, **howKnow**, **node**, **address**, **email**, **phones**. По умолчанию контрагенты сортируются по имени\
\
Фильтры по датам передаются в виде массива из двух чисел в формате Unix (**в миллисекундах**), где первый число - это начало диапазона, а второе - конец диапазона. Если какая-то граница диапазона отсутствует, то вместо нее нужно передать null. Например \[1690837200000,1693515599999] или \[null,1693515599999]

Из списка с любым заданным набором фильтров можно получить максимум 10000 элементов, то есть максимальное значение для **page** \* **pageSize** = 10000. Чтобы получить другие элементы, нужно либо изменить фильтр, либо изменить сортировку

#### Query Parameters

| Name               | Type    | Description                                                                   |
| ------------------ | ------- | ----------------------------------------------------------------------------- |
| dateCreate         | array   | Фильтр по дате создания                                                       |
| sort               | string  | Сортировка                                                                    |
| filter             | string  | Текст для поиска по контрагентам                                              |
| lastAction         | array   | Фильтр по дате последнего изменения                                           |
| phone              | string  | Телефон для поиска                                                            |
| page               | number  | Номер страницы выборки (по умолчанию - 1)                                     |
| pageSize           | number  | Количество элементов в выборке (по умолчанию - 10, максимум - 50)             |
| isBuyer            | boolean | Фильтр: "Только покупатели"                                                   |
| isVendor           | boolean | Фильтр: "Только поставщики"                                                   |
| howKnowIds         | array   | Фильтр по источникам рекламы, передается в виде массива id источников рекламы |
| typeCounteragentId |         | Фильтр по типу контрагента                                                    |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Токен авторизации |

{% tabs %}
{% tab title="200: OK " %}

```json
{
  data: [
    {
      isSendSms: false,
      typeCounteragent: {
        name: "Компания",
        id: "63c015adcce57401c832fc15"
      },
      isSendTelegram: false,
      rating: 0,
      name: "GreenSpark",
      isSendEmail: false,
      phones: [],
      isVendor: true,
      isVisible: true,
      isBuyer: false,
      id: "63c015afcce57401c832fca1"
    },
    {
      isSendSms: true,
      typeCounteragent: {
        name: "Частное лицо",
        id: "63c015adcce57401c832fbf5"
      },
      isSendTelegram: false,
      rating: 0,
      name: "Смирнов Иван Андреевич",
      isSendEmail: false,
      phones: [
        "+7 (944) 444-44-44"
      ],
      isVendor: false,
      isVisible: true,
      isBuyer: true,
      id: "63c015afcce57401c832fc9f"
    }
  ],
  total: 2,
  page: 1,
  pageSize: 10,
  sort: {
    field: "name",
    dir: "ASC"
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401: Unauthorized Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Создание контрагента

<mark style="color:green;">`POST`</mark> `https://api.livesklad.com/counteragents`

Создает контрагента и возвращает созданную запись

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

#### Request Body

| Name                                                 | Type    | Description                                                              |
| ---------------------------------------------------- | ------- | ------------------------------------------------------------------------ |
| name<mark style="color:red;">\*</mark>               | string  | Имя контрагента                                                          |
| typeCounteragentId<mark style="color:red;">\*</mark> | string  | id типа контрагента                                                      |
| isBuyer<mark style="color:red;">\*</mark>            | boolean | Контрагент является покупателем                                          |
| isVendor<mark style="color:red;">\*</mark>           | boolean | Контрагент является поставщиком                                          |
| email                                                | string  | email контрагента                                                        |
| howKnowId                                            | string  | id источника рекламы контрагента                                         |
| address                                              | string  | Адрес контрагента                                                        |
| phones                                               | array   | Телефоны контрагента, передается в виде массива строк                    |
| node                                                 | string  | Примечание                                                               |
| isSendSms                                            | boolean | Контрагенту можно отправлять смс-сообщения (по умолчанию - false)        |
| rating                                               | number  | Рейтинг контрагента (обычный: 0, негативный клиент: -1, позитивный: 1)   |
| customFields                                         | array   | Массив пользовательских полей                                            |
| isSendTelegram                                       | boolean | Контрагенту можно отправлять сообщения в Telegram (по умолчанию - false) |
| isSendEmail                                          | boolean | Контрагенту можно отправлять письма на email (по умолчанию - false)      |

{% tabs %}
{% tab title="200 " %}

```json
{
    data: {
        isBuyer: true,
        isVendor: false,
        isSendSms: false,
        isSendEmail: false,
        isSendTelegram: false,
        dateCreate: "2022-12-13T12:40:09.553Z",
        lastAction: "2022-12-13T12:40:09.553Z",
        rating: 0,
        name: "Иванов Павел",
        phones: [
            "+7 (999) 123-45-67"
        ],
        isVisible: true,
        id: "63c151296690d34d165b803d",
        balance: 0,
        typeCounteragent: {
            id: "63c015adcce57401c832fbf5",
            name: "Частное лицо"
        }
    },
    version: "2.0.0.0",
    remainRequest: 50,
    expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Изменение контрагента

<mark style="color:purple;">`PATCH`</mark> `https://api.livesklad.com/counteragents/{id}`

Изменяет информацию в карточке контрагента

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

#### Request Body

| Name               | Type    | Description                                                            |
| ------------------ | ------- | ---------------------------------------------------------------------- |
| name               | string  | Имя контрагента                                                        |
| isSendSms          | boolean | Контрагенту можно отправлять смс-сообщения                             |
| node               | string  | Примечание                                                             |
| phones             | array   | Телефоны контрагента, передаются в виде массива строк                  |
| address            | string  | Адрес контрагента                                                      |
| howKnowId          | string  | id источника рекламы                                                   |
| email              | string  | email контрагента                                                      |
| isVendor           | boolean | Контрагент является поставщиком                                        |
| isBuyer            | boolean | Контрагент является покупателем                                        |
| typeCounteragentId | string  | id типа контрагента                                                    |
| isSendEmail        | boolean | Контрагенту можно отправлять письма на email                           |
| isSendTelegram     | boolean | Контрагенту можно отправлять сообщения в Telegram                      |
| rating             | number  | Рейтинг контрагента (обычный: 0, негативный клиент: -1, позитивный: 1) |
| customFields       | array   | Массив пользовательских полей                                          |

{% tabs %}
{% tab title="200: OK " %}

```json
{
    data: {
        isBuyer: true,
        isVendor: false,
        isSendSms: false,
        isSendEmail: false,
        isSendTelegram: false,
        dateCreate: "2022-12-13T12:40:09.553Z",
        lastAction: "2022-12-13T12:40:09.553Z",
        rating: 0,
        name: "Иванов Павел",
        phones: [
            "+7 (999) 123-45-67"
        ],
        isVisible: true,
        id: "63c151296690d34d165b803d",
        balance: 0,
        typeCounteragent: {
            id: "63c015adcce57401c832fbf5",
            name: "Частное лицо"
        }
    },
    version: "2.0.0.0",
    remainRequest: 50,
    expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401: Unauthorized Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

**customFields** передается в формате:

```
[
  {
    id: "5e0cea8e7ae81e080c8be6d8",
    value: true
  },
  {
    id: "5e0ceaf77ae81e080c8be700",
    value: "Приоритетный клиент"
  }
]
```

По умолчанию обязательными являются только поля **name**, **typeCounteragentId**, **isBuyer**, **isVendor**. Но в случае если для указанного типа контрагента (определяется по **typeCounteragentId**) изменена форма контрагента, то обязательными могут быть так же и другие поля

## Список типов контрагентов

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/type-counteragents`

Возвращает массив типов контрагентов

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      name: "Частное лицо",
      sort: 2,
      id: "63c015adcce57401c832fbf5"
    },
    {
      name: "Компания",
      sort: 1,
      id: "63c015adcce57401c832fc15"
    }
  ],
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Список пользовательских полей для типа контрагента

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/type-counteragents/{id}/fields`

Возвращает массив пользовательских полей для типа контрагента

#### Path Parameters

| Name                                 | Type   | Description         |
| ------------------------------------ | ------ | ------------------- |
| id<mark style="color:red;">\*</mark> | string | id типа контрагента |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      id: "5d4c13abcf76126f63994b6e",
      description: "Рабочий адрес",
      type: "counteragent",
      dataType: "string",
      items: null,
      defaultValue: null
    },
    {
      id: "5e0a0dfdb955fb765ad25b3c",
      description: "Договор",
      type: "counteragent",
      dataType: "boolean",
      items: null,
      defaultValue: null
    }
  ],
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Информация о контрагенте

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/counteragents/{id}`

Возвращает полную информацию о контрагенте

#### Path Parameters

| Name                                 | Type   | Description    |
| ------------------------------------ | ------ | -------------- |
| id<mark style="color:red;">\*</mark> | string | id контрагента |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: {
    dateCreate: "2022-12-12T14:14:07.820Z",
    lastAction: "2022-12-12T14:14:07.820Z",
    name: "GreenSpark",
    phones: [],
    isBuyer: false,
    isVendor: true,
    isSendSms: false,
    rating: 0,
    isVisible: true,
    isSendEmail: false,
    isSendTelegram: false,
    id: "63c015afcce57401c832fca1",
    typeCounteragent: {
      name: "Компания",
      id: "63c015adcce57401c832fc15"
    }
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}


# Касса

## Список касс

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/shops/{id}/cash-registers`

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

#### Path Parameters

| Name                                 | Type   | Description   |
| ------------------------------------ | ------ | ------------- |
| id<mark style="color:red;">\*</mark> | string | id мастерской |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 В случае если у API не настроен доступ Может видеть деньги в кассе, значения cashMoney и bankMoney будут отсутствовать" %}

```json
{
  data: [
    {
      id: "5e2871b46b9502040ef6ad3a",
      name: "Касса",
      cashMoney: 10000,
      bankMoney: 5000,
      bankPercent: 0,
      isEnableCash: true,
      isEnableBank: true,
      isEnableNegative: true,
      shopId: "5e29bdba6d76c77b5b8714a6",
      isEnableInternalMove: true,
      isDefault: false
    }
  ],
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Список транзакций

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/cash-registers/{id}/cash`

Возвращает список транзакций по кассе. Для доступа к списку транзакций у API должен быть настроен доступ к соответствующей кассе\
\
Для сортировки результата необходимо в параметре **sort** передать строку "**<название\_поля> ASC**" или "**<название\_поля> DESC**". Где **ASC** - сортировать по возрастанию, **DESC** - сортировать по убыванию, **<название\_поля>** - поле по которому осуществляется сортировка, может быть одно из: **node**, **customer**, **id**, **cashRegister**, **date**, **money**, **isBankTransfer**, **counteragent**, **cashItem**, **number, dateChange**. По умолчанию транзакции сортируются от новых к старым\
\
Фильтры по датам передаются в виде массива из двух чисел в формате Unix (**в миллисекундах**), где первый число - это начало диапазона, а второе - конец диапазона. Если какая-то граница диапазона отсутствует, то вместо нее нужно передать null. Например \[1690837200000,1693515599999] или \[null,1693515599999]

Из списка с любым заданным набором фильтров можно получить максимум 10000 элементов, то есть максимальное значение для **page** \* **pageSize** = 10000. Чтобы получить другие элементы, нужно либо изменить фильтр, либо изменить сортировку

#### Path Parameters

| Name                                 | Type   | Description |
| ------------------------------------ | ------ | ----------- |
| id<mark style="color:red;">\*</mark> | string | id кассы    |

#### Query Parameters

| Name           | Type    | Description                                                                                                                                                                        |
| -------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| type           | string  | Фильтр по типу транзакций. Может быть delete - будут считаны удаленные транзакции, active - будут считаны не удаленные транзакции, если отсутствует - будут считаны все транзакции |
| sort           | string  | Сортировка                                                                                                                                                                         |
| filter         | string  | Текст для поиска по транзакциям                                                                                                                                                    |
| counteragentId | string  | Фильтр по контрагенту                                                                                                                                                              |
| customerId     | string  | Фильтр по ответственному сотруднику                                                                                                                                                |
| isBankTransfer | boolean | Фильтр по типу операции (true - только безналичные операции, false - только операции с наличными)                                                                                  |
| cashItemId     | string  | Фильтр по статье движения денежных средств                                                                                                                                         |
| date           | array   | Фильтр по дате операции                                                                                                                                                            |
| page           | number  | Номер страницы выборки (по умолчанию - 1)                                                                                                                                          |
| pageSize       | number  | Количество элементов в выборке (по умолчанию - 10, максимум - 50)                                                                                                                  |
| dateChange     | array   | Фильтр по дате изменения                                                                                                                                                           |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      date: "2022-12-13T09:42:29.259Z",
      money: 500,
      isBankTransfer: true,
      remain: 3000,
      cashRegister: {
        name: "Касса",
        id: "63c015adcce57401c832fb68"
      },
      shopId: "63c015adcce57401c832faee",
      cashItem: {
        isIncome: true,
        name: "Оплата чека",
        id: "63c015adcce57401c832fbdc",
        type: "sale"
      },
      type: "sale",
      customer: {
        name: "Фамилия Имя",
        id: "63c015adcce57401c832fab4"
      },
      id: "63c127859bb329405df8b404",
      document: {
        id: "63c125aca0360d3ba1fd3747",
        number: "B000001"
      }
    },
    {
      date: "2022-12-12T14:14:08.229Z",
      money: 2500,
      isBankTransfer: false,
      remain: 2500,
      cashRegister: {
        name: "Касса",
        id: "63c015adcce57401c832fb68"
      },
      counteragent: {
        name: "Иванов Василий Петрович",
        id: "63c015afcce57401c832fc9c"
      },
      shopId: "63c015adcce57401c832faee",
      cashItem: {
        isIncome: true,
        name: "Оплата за заказ",
        id: "63c015adcce57401c832fbdb",
        type: "order"
      },
      type: "order",
      customer: {
        name: "Фамилия Имя",
        id: "63c015adcce57401c832fab4"
      },
      id: "63c015b0cce57401c832fd06",
      order: {
        id: "63c015afcce57401c832fca2",
        number: "A000001"
      }
    }
  ],
  total: 2,
  page: 1,
  pageSize: 10,
  sort: {
    field: "date",
    dir: "DESC"
  },
  summ: {
    income: {
      money: 7800,
      bank: 1500
    },
    consumption: {
      bank: 0,
      money: 0
    }
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Список транзакций

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/cash`

Возвращает массив транзакций для выбранного списка касс\
\
Для сортировки результата необходимо в параметре **sort** передать строку "**<название\_поля> ASC**" или "**<название\_поля> DESC**". Где **ASC** - сортировать по возрастанию, **DESC** - сортировать по убыванию, **<название\_поля>** - поле по которому осуществляется сортировка, может быть одно из: **node**, **customer**, **id**, **cashRegister**, **date**, **money**, **isBankTransfer**, **counteragent**, **cashItem**, **number, dateChange**. По умолчанию транзакции сортируются от новых к старым\
\
Фильтры по датам передаются в виде массива из двух чисел в формате Unix (**в миллисекундах**), где первый число - это начало диапазона, а второе - конец диапазона. Если какая-то граница диапазона отсутствует, то вместо нее нужно передать null. Например \[1690837200000,1693515599999] или \[null,1693515599999]

Из списка с любым заданным набором фильтров можно получить максимум 10000 элементов, то есть максимальное значение для **page** \* **pageSize** = 10000. Чтобы получить другие элементы, нужно либо изменить фильтр, либо изменить сортировку

#### Query Parameters

| Name            | Type   | Description                                                                                                                                |
| --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
| sort            | string | Сортировка                                                                                                                                 |
| cashRegisterIds | array  | Список касс по которым нужно найти транзакции, передается в виде массива id касс. Если не указать этот параметр, то вернется пустой массив |
| filter          | string | Текст для поиска по транзакциям                                                                                                            |
| counteragentId  | string | Фильтр по контрагенту                                                                                                                      |
| customerId      | string | Фильтр по ответственному сотруднику                                                                                                        |
| isBankTransfer  | string | Фильтр по типу операции (true - только безналичные операции, false - только операции с наличными)                                          |
| cashItemId      | string | Фильтр по статье движения денежных средств                                                                                                 |
| date            | array  | Фильтр по дате операции                                                                                                                    |
| page            | string | Номер страницы выборки (по умолчанию - 1)                                                                                                  |
| pageSize        | string | Количество элементов в выборке (по умолчанию - 10, максимум - 50)                                                                          |
| dateChange      | array  | Фильтр по дате изменения                                                                                                                   |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      date: "2022-12-13T09:42:29.259Z",
      money: 500,
      isBankTransfer: true,
      remain: 3000,
      cashRegister: {
        name: "Касса",
        id: "63c015adcce57401c832fb68"
      },
      shopId: "63c015adcce57401c832faee",
      cashItem: {
        isIncome: true,
        name: "Оплата чека",
        id: "63c015adcce57401c832fbdc",
        type: "sale"
      },
      type: "sale",
      customer: {
        name: "Фамилия Имя",
        id: "63c015adcce57401c832fab4"
      },
      id: "63c127859bb329405df8b404",
      document: {
        id: "63c125aca0360d3ba1fd3747",
        number: "B000001"
      }
    },
    {
      date: "2022-12-12T14:14:08.229Z",
      money: 2500,
      isBankTransfer: false,
      remain: 2500,
      cashRegister: {
        name: "Касса",
        id: "63c015adcce57401c832fb68"
      },
      counteragent: {
        name: "Иванов Василий Петрович",
        id: "63c015afcce57401c832fc9c"
      },
      shopId: "63c015adcce57401c832faee",
      cashItem: {
        isIncome: true,
        name: "Оплата за заказ",
        id: "63c015adcce57401c832fbdb",
        type: "order"
      },
      type: "order",
      customer: {
        name: "Фамилия Имя",
        id: "63c015adcce57401c832fab4"
      },
      id: "63c015b0cce57401c832fd06",
      order: {
        id: "63c015afcce57401c832fca2",
        number: "A000001"
      }
    }
  ],
  total: 2,
  page: 1,
  pageSize: 10,
  sort: {
    field: "date",
    dir: "DESC"
  },
  summ: {
    income: {
      money: 7800,
      bank: 1500
    },
    consumption: {
      bank: 0,
      money: 0
    }
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Список статей движения денег

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/cash-items`

#### Headers

| Name          | Type   | Description       |
| ------------- | ------ | ----------------- |
| Authorization | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      name: "Оплата за заказ",
      isIncome: true,
      type: "order",
      id: "5d0cb1178ede076111d797e3"
    },
    {
      name: "Предоплата за заказ",
      isIncome: true,
      type: "orderPrepayment",
      id: "5d0cb1178ede076111d797e4"
    },
    {
      name: "Выдача работнику",
      isIncome: false,
      id: "5d63957ac66f681fcacfbb7e"
    },
    {
      name: "Инкассация",
      isIncome: false,
      type: "collection",
      id: "5d0cb1178ede076111d797ec"
    }
  ],
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}


# Корзина

## Список корзины

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/shops/{id}/carts`

Возвращает массив элементов корзины. Для получения корзины у API должен быть настроен доступ к корзине и доступ к соответствующей мастерской. В зависимости от настроенных доступов система будет возвращать либо корзину для указанной мастерской (доступ **Только своя**), либо корзины всех мастерских (доступ **Все корзины**)

Из списка с любым заданным набором фильтров можно получить максимум 10000 элементов, то есть максимальное значение для **page** \* **pageSize** = 10000. Чтобы получить другие элементы, нужно либо изменить фильтр, либо изменить сортировку

#### Path Parameters

| Name                                 | Type   | Description   |
| ------------------------------------ | ------ | ------------- |
| id<mark style="color:red;">\*</mark> | string | id мастерской |

#### Query Parameters

| Name     | Type   | Description                                                       |
| -------- | ------ | ----------------------------------------------------------------- |
| filter   | string | Текст для поиска по содержимому корзины                           |
| page     | number | Номер страницы выборки (по умолчанию - 1)                         |
| pageSize | number | Количество элементов в выборке (по умолчанию - 10, максимум - 50) |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```
{
  data: [
    {
      address: "Сенная пл д 14",
      count: 1,
      customer: "Фамилия Имя",
      customerId: "5d4f431d4c9f131245da61ff",
      dateCreate: "2020-01-24T13:03:07.176Z",
      name: "Задняя крышка Huawei Y3 II  Черный",
      price: 100,
      purchasePrice: 100,
      seller: "Ultra-Details",
      id: "5e2aeb0b9c975c0d296b291e",
      shop: {
        name: "Мастерская",
        color: "#ff6666",
        phones: [],
        id: "5e0ceb937ae81e080c8be769"
      }
    },
    {
      address: "Сенная пл д 14",
      count: 1,
      customer: "Фамилия Имя",
      customerId: "5d4f431d4c9f131245da61ff",
      dateCreate: "2020-01-24T13:03:07.177Z",
      name: "Коннектор SIM Huawei G8",
      price: 50,
      purchasePrice: 50,
      seller: "Ultra-Details",
      id: "5e2aeb0b9c975c0d296b291f",
      shop: {
        name: "Мастерская",
        color: "#ff6666",
        phones: [],
        id: "5e0ceb937ae81e080c8be769"
      }
    }
  ],
  total: 2,
  page: 1,
  pageSize: 10,
  summ: 150,
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}


# Продажи

## Список продаж

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/shops/{id}/sales`

Возвращает массив продаж для мастерской. Для получения списка продаж у API должен быть настроен доступ к соответствующей мастерской и у для мастерской должен быть установлен **Доступ к магазину**\
\
Для сортировки результата необходимо в параметре **sort** передать строку "**<название\_поля> ASC**" или "**<название\_поля> DESC**". Где **ASC** - сортировать по возрастанию, **DESC** - сортировать по убыванию, **<название\_поля>** - поле по которому осуществляется сортировка, может быть одно из: **node**, **id**, **date**, **cash**, **purchasePrice**, **counteragent**, **soldPrice**, **number**. По умолчанию продажи сортируются от новых к старым\
\
Фильтры по датам передаются в виде массива из двух чисел в формате Unix (**в миллисекундах**), где первый число - это начало диапазона, а второе - конец диапазона. Если какая-то граница диапазона отсутствует, то вместо нее нужно передать null. Например \[1690837200000,1693515599999] или \[null,1693515599999]

Из списка с любым заданным набором фильтров можно получить максимум 10000 элементов, то есть максимальное значение для **page** \* **pageSize** = 10000. Чтобы получить другие элементы, нужно либо изменить фильтр, либо изменить сортировку

#### Path Parameters

| Name                                 | Type   | Description   |
| ------------------------------------ | ------ | ------------- |
| id<mark style="color:red;">\*</mark> | string | id мастерской |

#### Query Parameters

| Name     | Type   | Description                                                       |
| -------- | ------ | ----------------------------------------------------------------- |
| filter   | string | Текст для поиска по содержимому корзины                           |
| date     | array  | Фильтр по дате продажи                                            |
| page     | number | Номер страницы выборки (по умолчанию - 1)                         |
| pageSize | number | Количество элементов в выборке (по умолчанию - 10, максимум - 50) |
| sort     | String | Сортировка                                                        |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      date: "2022-12-13T09:45:13.894Z",
      number: "B000002",
      summ: {
        price: 1500,
        soldPrice: 1500,
        purchasePrice: 900
      },
      cash: {
        summ: 1500
      },
      id: "63c128159bb329405df8b407"
    },
    {
      date: "2022-12-13T09:42:29.259Z",
      number: "B000001",
      summ: {
        price: 500,
        soldPrice: 500,
        purchasePrice: 200
      },
      cash: {
        summ: 500
      },
      id: "63c125aca0360d3ba1fd3747"
    }
  ],
  total: 2,
  page: 1,
  pageSize: 10,
  sort: {
    field: "date",
    dir: "DESC"
  },
  summ: {
    soldPrice: 2000,
    purchasePrice: 1100
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Информация о продаже

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/documents/{id}`

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

#### Path Parameters

| Name                                 | Type   | Description |
| ------------------------------------ | ------ | ----------- |
| id<mark style="color:red;">\*</mark> | string | id продажи  |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: {
    date: "2023-01-13T09:42:29.259Z",
    type: "sale",
    dateChange: "2023-01-13T09:50:29.763Z",
    number: "B000001",
    id: "63c125aca0360d3ba1fd3747",
    customer: {
      id: "63c015adcce57401c832fab4",
      name: "Фамилия Имя"
    },
    cash: {
      bank: 500,
      money: 0,
      invoice: 0,
      elements: [
        {
          id: "63c127859bb329405df8b404",
          date: "2023-01-13T09:42:29.259Z",
          money: 500,
          type: "sale",
          isBankTransfer: true
        }
      ]
    },
    shop: {
      name: "Мастерская",
      color: "#ff6666",
      id: "63c015adcce57401c832faee"
    },
    positions: [
      {
        batches: [
          {
            storeId: "63c015adcce57401c832fb5f",
            batchId: "63c015afcce57401c832fcde",
            count: 1,
            purchasePrice: 200,
            returnCount: 0
          }
        ],
        measure: {
          id: "63c015adcce57401c832fab5",
          value: "шт.",
          isFloat: false
        },
        positionId: "63c1277d9bb329405df8b400",
        modifyId: "63c015afcce57401c832fcbe",
        nomenclatureId: "63c015afcce57401c832fcbd",
        code: 5,
        article: "456789",
        name: "АКБ iPhone 5S/5C (1560 mAh)",
        isWork: false,
        price: 500,
        soldPrice: 500,
        guaranteeInMonth: 1,
        date: "2023-01-13T09:42:29.259Z",
        minPrice: 500,
        returnCount: 0,
        count: 1,
        purchasePriceSumm: 200
      }
    ],
    total: 1,
    pageSize: 10
  },
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}


# Источники рекламы

## Список источников рекламы

<mark style="color:blue;">`GET`</mark>&#x20;

## Список источников рекламы

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/how-knows`

Возвращает список источников рекламы

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      name: "Знакомые",
      id: "5d0cb1188ede076111d79870"
    },
    {
      name: "Интернет",
      id: "5e0475ad824bad4b5dfb94c8"
    },
    {
      name: "Наружная реклама",
      id: "5e0475ad824bad4b5dfb94c9"
    },
    {
      name: "Повторное обращение",
      isRepeat: true,
      id: "5da4994d81b53a338e9a4b3c"
    },
    {
      name: "Реклама",
      id: "5d0cb1188ede076111d79871"
    }
  ],
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}


# Сотрудники

## Список сотрудников мастерской

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/shops/{id}/customers`

Возвращает список сотрудников выбранной мастерской. Для получения списка сотрудников у API должен быть доступ к соответствующей мастерской

#### Path Parameters

| Name                                 | Type   | Description   |
| ------------------------------------ | ------ | ------------- |
| id<mark style="color:red;">\*</mark> | string | id мастерской |

#### Query Parameters

| Name     | Type   | Description                                                       |
| -------- | ------ | ----------------------------------------------------------------- |
| filter   | string | Текст для поиска по ФИО сотрудника                                |
| page     | number | Номер страницы выборки ( по умолчанию - 1)                        |
| pageSize | number | Количество элементов в выборке (по умолчанию - 10, максимум - 50) |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
        id: "5e46514bc43cad35b1c12778",
        name: "Петров Александр"
    },
    {
      id: "5e46342ac43cad35b1c029f9",
      name: "Иванов Иван"
    },
    {
      id: "5e466708c43cad35b1c23fb6",
      name: "Фамилия Имя"
    }
  ],
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Список мастеров мастерской

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/shops/{id}/customers/masters`

Возвращает список мастеров выбранной мастерской. Для получения списка мастеров у API должен быть доступ к соответствующей мастерской

#### Path Parameters

| Name                                 | Type   | Description   |
| ------------------------------------ | ------ | ------------- |
| id<mark style="color:red;">\*</mark> | string | id мастерской |

#### Query Parameters

| Name     | Type   | Description                                                       |
| -------- | ------ | ----------------------------------------------------------------- |
| filter   | string | Текст для поиска по ФИО сотрудника                                |
| page     | number | Номер страницы выборки ( по умолчанию - 1)                        |
| pageSize | number | Количество элементов в выборке (по умолчанию - 10, максимум - 50) |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
      id: "5e46342ac43cad35b1c029f9",
      name: "Иванов Иван"
    },
    {
      id: "5e466708c43cad35b1c23fb6",
      name: "Фамилия Имя"
    }
  ],
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}

## Список менеджеров мастерской

<mark style="color:blue;">`GET`</mark> `https://api.livesklad.com/shops/{id}/customers/managers`

Возвращает список менеджеров выбранной мастерской. Для получения списка менеджеров у API должен быть доступ к соответствующей мастерской

#### Path Parameters

| Name                                 | Type   | Description   |
| ------------------------------------ | ------ | ------------- |
| id<mark style="color:red;">\*</mark> | string | id мастерской |

#### Query Parameters

| Name     | Type   | Description                                                       |
| -------- | ------ | ----------------------------------------------------------------- |
| filter   | string | Текст для поиска по ФИО сотрудника                                |
| page     | number | Номер страницы выборки ( по умолчанию - 1)                        |
| pageSize | number | Количество элементов в выборке (по умолчанию - 10, максимум - 50) |

#### Headers

| Name                                            | Type   | Description       |
| ----------------------------------------------- | ------ | ----------------- |
| Authorization<mark style="color:red;">\*</mark> | string | Токен авторизации |

{% tabs %}
{% tab title="200 " %}

```json
{
  data: [
    {
        id: "5e46514bc43cad35b1c12778",
        name: "Петров Александр"
    }
  ],
  version: "2.0.0.0",
  remainRequest: 50,
  expireDate: "2022-12-13T09:09:20.861Z"
}
```

{% endtab %}

{% tab title="401 Доступ запрещен" %}

```json
{
  error: {
    statusCode: 401,
    name: "Error",
    message: "Access denied"
  }
}
```

{% endtab %}
{% endtabs %}


# Общие правила и ограничения

Webhook – это механизм, который позволяет отправлять уведомления сторонним приложениям о произошедших в LiveSklad событиях. В отличие от API, при работе с webhook не нужно выполнять никаких запросов, система сама отправит нужные данные в случае наступления заданного события. Таким образом, с помощью webhook можно быстро получать актуальную информацию об изменившихся в системе данных. Webhook можно настроить в [личном кабинете](https://my.livesklad.com/settings/webhooks).

Для получения таких уведомлений необходимо создать URL-адрес который будет принимать POST-запросы с информацией о событиях из LiveSklad. Все запросы отправляются по протоколу HTTPS в формате JSON.&#x20;

Прежде чем система начнет отправлять уведомления, нужно будет подтвердить URL-адрес. Для этого в разделе с настройками нужно взять сгенерированное значение и вернуть его в ответе на проверочный запрос с URL-адреса:

<figure><img src="https://2774753422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LzByu5Y8mhMOXYbMrOI%2Fuploads%2FrQGmeSDlyP8CAlMwPIOK%2Fimage.png?alt=media&amp;token=a4cf6589-7d3e-4232-af9f-4d4b30402504" alt=""><figcaption><p>Подтверждение URL-адреса</p></figcaption></figure>

После успешного подтверждения URL-адреса на все последующие запросы необходимо отвечать сообщением "OK" и статусом 200, таким образом подтверждается успешное  получение уведомления:

<figure><img src="https://2774753422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LzByu5Y8mhMOXYbMrOI%2Fuploads%2Ft9kyLjyhcxHIH46N8kQ8%2Fimage.png?alt=media&amp;token=6edc92b2-a23d-4eb4-9ee4-d3380ac72427" alt=""><figcaption><p>URL-адрес успешно подтвержден</p></figcaption></figure>

{% hint style="info" %}
После отправки Webhook система будет ждать ответ в течение 3 секунд. Если ответ будет некорректным или не поступит вовремя, система LiveSklad предпримет еще 2 попытки повторной отправки, первая через 60 секунд и вторая через 15 минут. В общей сложности система делает три попытки отправки, после этого уведомление считается недоставленным.
{% endhint %}

{% hint style="info" %}
Все уведомления от LiveSklad (кроме тестовых запросов) будут приходить с IP-адресов:

185.148.83.31\
185.127.148.28\
178.57.79.83
{% endhint %}

{% hint style="warning" %}
В случае если в течение часа было более 50 безуспешных попыток отправки уведомлений, webhook будет принудительно отключен в целях безопасности. Вы сможете повторно его активировать вручную.
{% endhint %}


# Настройки

Чтобы настроить webhook, необходимо указать URL-адрес на который будут отправляться уведомления, выбрать нужные события и данные которые будут передаваться.

Все уведомления передаются в формате JSON и содержат поля `eventId`, `action` и `data`.

* В поле `action` передаётся информация о наступившем событии (его тип, название и идентификаторы).
* В поле `data` содержатся выбранные в настройках данные, относящиеся к событию.
* Поле `eventId` является уникальным идентификатором конкретного события в системе. Для каждого отдельного события (например, каждого создания заказа) значение этого поля будет уникальным. Оно остаётся неизменным только при повторной отправке одного и того же уведомления.

```
{
  eventId: <уникальный id конкретного события>,
  action: {
    id: <id типа события>,
    groupId: <id webhook>,
    name: <название события>
  },
  data: {
    ...
  }
}
```

Поле `data` настраивается для каждого события отдельно:

<figure><img src="https://2774753422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LzByu5Y8mhMOXYbMrOI%2Fuploads%2FUu3AD07cg5iqA3TEudoe%2Fimage.png?alt=media&amp;token=50d5dd9c-249e-4c2f-a39f-6d111436ee1a" alt=""><figcaption><p>Настройка передаваемых данных</p></figcaption></figure>

Дополнительно для webhook можно добавить собственные заголовки. Эти заголовки будут добавляться в каждое уведомление:

<figure><img src="https://2774753422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LzByu5Y8mhMOXYbMrOI%2Fuploads%2Ffq31ukFtPid0UOFkgJXr%2Fimage.png?alt=media&amp;token=cec79408-c3e0-475f-9ed2-a3410a057de0" alt=""><figcaption><p>Настройка заголовков</p></figcaption></figure>


# Пример обработчика

Для того чтобы принимать данные, которые отправляются через POST-запросы на ваш сервер, необходимо написать обработчик. Для этого, необходимо:

1. **Создать обработчик на сервере** — это скрипт (например, на PHP, Python, Node.js и т.д.), который будет принимать данные POST-запроса.
2. **Настроить ваш сервер для получения POST-запросов** — ваш сервер должен уметь слушать определенные URL или эндпоинты, на которые могут приходить запросы.
3. **Обрабатывать данные запроса** — ваш скрипт должен корректно считывать и сохранять данные, поступающие в теле запроса.
4. **Вернуть ответ** — по завершении обработки данных, ваш скрипт должен отправить ответ нашему серверу, сообщив, что запрос был обработан успешно.

#### Пример на PHP для обработки POST-запросов:

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

**Шаг 1: Создайте PHP файл (например, `webhook.php`):**

```php
<?php
// Получение "сырого" тела запроса
$requestBody = file_get_contents('php://input');

// Логирование данных в файл (чтобы сохранить все запросы)
$logFile = 'webhook_log.txt';  // Файл для хранения логов
file_put_contents($logFile, date('Y-m-d H:i:s') . " - " . $requestBody . PHP_EOL, FILE_APPEND);

// Код ответа
http_response_code(200);

// Отправка ответа серверу LiveSklad
header('Content-Type: text/plain');
echo 'OK'; // Значение
?>
```

**Шаг 2: Настройте ваш сервер**

Убедитесь, что ваш сервер настроен правильно для обработки запросов:

* Создайте файл `webhook.php` на вашем сервере (в корневой директории сайта или в нужной папке).
* Убедитесь, что веб-сервер (например, Apache или Nginx) правильно настроен для выполнения PHP-кода.

**Шаг 3: Отправьте POST-запрос**

Теперь вы можете отправить POST-запрос на ваш сайт по URL, например: `https://example.com/webhook.php`.<br>

**Шаг 4: Проверьте файл логов**

Данные запроса будут сохранены в файл `webhook_log.txt`, чтобы вы могли их анализировать.

#### Как это должно работать:

1. **Ваш сервер должен быть доступен по URL** — как только вы разместите файл `webhook.php` на вашем сервере, этот файл будет доступен по определенному URL.
2. **Скрипт обрабатывает запрос** — PHP скрипт принимает данные (через `file_get_contents('php://input')`), и может обрабатывать их, записывать в базу данных или логировать в файл.
3. **Ответ серверу** — по завершению обработки скрипт отправляет ответ нашему серверу, подтверждая успешное получение данных.


