Программное обеспечение «LIFE POS API»

Руководство администратора

Редакция от 17.12.2025

Скачать PDF

Введение

Сокращения

  • ПО — программное обеспечение.
  • API — программный интерфейс приложения.
  • LP — LIFE POS.

Назначение

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

Сведения о правообладателях

Авторские права на ПО «LIFE POS API» принадлежат ООО «Ритейл Бизнес Софт», 123112, г. Москва, вн. тер. г. муниципальный округ Пресненский, Пресненская наб., д. 10, стр. 2, помещ. 5Н. Сайт: life-pay.ru.

Работа с приложением

Управление продажами

В рамках быстрого старта вы открыли тестовую продажу. Как эта продажа соотносится с вашими реальными процессами? Чтобы разобраться в этом, рассмотрим пример. У Василия служба доставки. Покупатели заказывают еду из ресторанов, а курьеры её привозят и получают оплату. Василий берёт из оплаты свою долю за доставку, а остальное передаёт ресторанам. Пока курьер ходит по покупателям, Василий в офисе видит все открытые продажи и может получить информацию о каждой из них. Он может изменить данные заказа или отменить его. Когда работу над заказом закончили, Василий переносит его в архив.

Добавление продажи

Для всех заказов в API LIFE POS используется объект Продажа. Он объединяет информацию о товаре, передаваемом покупателю, его стоимости, статусе передачи и т. д. Именно продажу мы создавали в рамках быстрого старта. Продажа создаётся POST-запросом по адресу:

{base_url}/orgs/{org_guid}/deals/sales

base_url — адрес сервиса. Возможные значения:

Описание запроса.

Можно создать сразу несколько продаж. Для этого измените адрес POST-запроса:

{base_url}/orgs/{org_guid}/deals/sales.batch
  • Адреса сервиса.
  • Описание запроса.

Вместо одной продажи в теле запроса передайте массив сделок. Вне зависимости от количества созданных сделок, главный результат первого шага — продажа, имеющая идентификатор guid и статус New.

Созданные продажи появятся в приложении LIFE POS. Чтобы работать с продажей в приложении, включите приложение, откройте раздел Продажи и нажатием выберите продажу из списка. Подробнее: как в приложении LIFE POS редактировать созданную ранее продажу.

Изменение статуса продажи

Когда курьер доставил заказ, а покупатель оплатил его, можно изменить статус продажи. Для этого отправьте PATCH-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}
  • Адреса сервиса.
  • Описание запроса.

Модель статусов продажи описывается тремя параметрами:

ПараметрЧто описываетВозможные значения
stateСостояние самой продажиNew, InProgress, Completed, Cancelled
payment_statusСтатус оплатыNotPaid, Paid, PartiallyPaid, Refunded, PartiallyRefunded
shipping_statusСтатус отгрузки товаровNotShipped, Shipped, PartiallyShipped, Refunded, PartiallyRefunded

В нашем примере нужно передать payment_status=Paid и shipping_status=Shipped. С помощью PATCH-запроса на изменение продажи можно менять не только статус, но и другие данные. Например, если покупатель попросил добавить в заказ новый товар.

Получение данных о продаже

Если вам нужно видеть все открытые продажи, получите их список, отправив GET-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Важно. В запросе есть необязательный параметр selection. Это фильтр продаж по их статусу. Если параметр не передан, по умолчанию используется значение alive_only, то есть в ответе придут только данные продаж, не перенесённых в архив. Чтобы посмотреть весь список продаж или только архивные данные, укажите значение all или archived_only соответственно.

Чтобы получить информацию о конкретной продаже, отправьте GET-запрос по следующему адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}
  • Адреса сервиса.
  • Описание запроса.

Вы также можете получать уведомления обо всех изменениях по продажам. Для этого нужно настроить расширение notification_service — рассказываем в отдельной статье.

Получение информации об оплате

Вы можете выгружать из системы LIFE POS информацию о движении денежных средств. Она отражена в прямой сессии, которая будет создана, когда курьер примет оплату.

Чтобы получить список прямых сессий, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Важно. В запросе есть необязательный параметр selection. Это фильтр сессий по их статусу. Если параметр не передан, по умолчанию используется значение alive_only, то есть в ответе придут только данные сессий, не перенесённых в архив. Чтобы посмотреть весь список сессий или только архивные данные, укажите значение all или archived_only соответственно.

Данные конкретной прямой сессии получаются другим GET-запросом:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/{session_type}/{session_guid}

Адреса сервиса.

  • session_type — тип сессии. Возможные значения: direct, reversal, direct-correction, reversal-correction.
  • session_guid — идентификатор сессии. Передаётся в списке сессий.

Описание запроса.

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

{base_url}/orgs/{org_guid}/terminals/{method}/{terminal_guid}/transactions/{transaction_guid}

Адреса сервиса.

  • method — способ оплаты. Возможные значения: bank — банковская карта, quick-payments — СБП.
  • transaction_guid — идентификатор транзакции. Передаётся в описании сессии, в рамках которой была оплачена продажа.
  • Описание запроса для банковской карты.
  • Описание запроса для СБП.

Получение чека

Вы можете выгружать из системы LIFE POS фискальные документы, в том числе и чеки. Чтобы выгрузить список чеков, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/fiscal-registrars/{registrar_guid}/docs
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Важно. В запросе есть необязательный параметр selection. Это фильтр документов по их статусу. Если параметр не передан, по умолчанию используется значение alive_only, то есть в ответе придут только данные документов, не перенесённых в архив. Чтобы посмотреть весь список документов или только архивные данные, укажите значение all или archived_only соответственно.

Чтобы получить данные конкретного кассового чека, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/fiscal-registrars/{registrar_guid}/docs/receipts/{doc_guid}
  • Адреса сервиса.
  • Описание запроса.

Архивирование и восстановление продажи

Если ошибку в заказе невозможно исправить, если покупатель отказался от покупки, или если ваш заказ закрыт вне системы LIFE POS, можете перенести продажу в архив. Вместе с продажей в архив отправятся все её дочерние объекты. Чтобы архивировать продажу, отправьте DEL-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}
  • Адреса сервиса.
  • Описание запроса.

Никакая информация не удаляется навсегда — из архива продажу можно вернуть. Для этого отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}:unarchive
  • Адреса сервиса.
  • Описание запроса.

Скидки

Вы можете установить скидку на весь чек или на конкретную позицию. Рассказываем, как это сделать!

Чтобы устанавливать скидки, вам понадобится специальное расширение — это набор полей API, отвечающий за определённые возможности и подключаемый дополнительно на ваше усмотрение. Подключить расширение можно в личном кабинете (ЛК) LIFE POS или через API.

Чтобы начать работу с расширением, объявите его в заголовке запроса в параметре X-LP-Client-Extensions. Подставьте discounts вместо %extension_name%:

Объявление расширения в заголовке запроса:

curl -i -X GET \
  -H "Authorization:eyJhbGciOiJI.eyJzdWIiOiIxMjM0NTY.SflKxwRJSMeKK" \
  -H "Accept-Language:ru-RU" \
  -H "X-LP-Client-Identifier:unique_id" \
  -H "X-LP-Client-Type:App" \
  -H "X-LP-Client-Extensions:%extension_name%" \
  'https://api.life-pos.ru/v4/orgs/123e4567-e89b-12d3-a456-123456780000/deals/sales'

При подключении расширения вы можете ограничить максимальный размер скидки. Для этого укажите необязательный параметр max_value_percentage с числовым значением от 1 до 99. Это максимально допустимая скидка в процентах от полной стоимости товара. Если скидка указана в копейках, LIFE POS сам переведёт значение max_value_percentage в копейки и сравнит числа.

Рассмотрим работу расширения discounts, отвечающего за скидки. Когда вы его подключите, сможете передавать в запросе на создание продажи объект extensions.discounts.

Скидка на чек

Предположим, вы хотите сделать скидку 10% на всю продажу. Для этого передайте в объекте extensions.discounts поле sale_discount_percentage. Оно может иметь любое целое значение от 1 до 100 включительно. Пример кода:

"extensions" : {
  "discounts" : {
    "sale_discount_percentage" :
    } ],
    "version" : "1.0"
  }
},

Скидка на позицию

Если нужно сделать скидку на отдельную позицию, то в запросе на продажу в блоке positions сразу укажите цену позиции с учётом скидки. Затем в объекте extensions.discounts передайте размер скидки и исходную цену. Для этого добавьте массив deal_position_discounts, включающий в себя по одному элементу на каждую позицию, на которую вы хотите сделать скидку.

Каждый элемент массива deal_position_discounts — это объект со следующими полями:

ПолеОписание
deal_position_guidИдентификатор позиции, к которой относится скидка
sale_price_discountОбъект, описывающий скидку
original_sale_price_valueИсходная цена; указывается в копейках

Объект sale_price_discount описывается следующими полями:

ПолеОписание
typeТип скидки. Возможные значения: Percentage, Absolute
amountРазмер скидки. Если type=Percentage, это число от 1 до 100; если type=Absolute, это размер скидки в копейках

Обратите внимание, что скидка в копейках применяется не ко всей позиции, а к единице товара. Если вы хотите сделать скидку 50 рублей на позицию, в которой два товара, то в поле amount следует указать 2500 копеек.

Скидка 10% на позицию с исходной ценой 100 рублей (10 000 копеек):

"extensions" : {
  "discounts" : {
    "deal_position_discounts" : [
      {
        "deal_position_guid" : "4c1b13fc-f547-4913-8f29-4840259a399b" ,
        "sale_price_discount" : {
          "type" : "Percentage" ,
          "amount" :
        },
        "original_sale_price_value" : 10000
      }
    ],
    "version" : "1.0"
  }
},

Скидка 102,45 рублей (10 245 копеек) на товар с ценой в 150 рублей (15 000 копеек):

"extensions" : {
  "discounts" : {
    "deal_position_discounts" : [
      {
        "deal_position_guid" : "4c1b13fc-f547-4913-8f29-4840259a399b" ,
        "sale_price_discount" : {
          "type" : "Absolute" ,
          "amount" : 10245
        },
        "original_sale_price_value" : 15000
      }
    ],
    "version" : "1.0"
  }
},

Вот и всё, что нужно знать о скидках.

Продажа маркированных товаров

До сих пор мы разбирали продажу обычных товаров. Рассмотрим теперь специфику передачи данных о маркированных товарах. Коды маркировки нужны, чтобы товар можно было отследить по всей цепочке от производителя до конечного покупателя. Данные о лекарствах собирает ИС МДЛП, а об остальных маркированных товарах — система «Честный знак».

Данные о маркировке передаются вместе с данными о товаре в POST-запросе создания сделки:

{base_url}/orgs/{org_guid}/deals/sales

base_url — адрес сервиса. Возможные значения:

Описание запроса.

За данные о товаре отвечает массив positions. В нём с маркировкой связаны следующие поля:

ПолеОписание
is_markableЛогический признак маркированного товара
barcodeШтрихкод товара. Заполнять обязательно, если is_markable=true
marking_attributesМассив данных о маркированном товаре

В массиве marking_attributes передаются следующие поля:

  • is_part_of_package_of — параметр используется, если позиция является частью упаковки — например, пакетик Терафлю из упаковки на 20 пакетиков. Параметр нужен, чтобы показать связь между единицей товара и упаковкой. Позиции для этого не подходят: каждую единицу маркированного товара нужно передавать как отдельную позицию. Это обусловлено тем, что коды маркировки уникальные и являются атрибутом позиции, а не единицы товара.
  • marks — массив кодов маркировки.

В массиве marks передаются следующие поля:

ПолеОписание
marking_codeКод маркировки
checking_resultРезультат проверки кода маркировки. Проверка происходит при фискализации покупки. Результат проверки выставляется на основании данных, полученных от фискального регистратора. Возможные значения параметра: KMChecked, KPKMCorrect, OISMStatusChecked, OISMStatusCorrect, KPKMCheckedAutonomously
for_quantityОбязательный параметр. Количество позиций, к которым относится код маркировки

Чтобы код маркировки правильно обрабатывался во всех системах, он должен соответствовать требованиям «Честного знака». Специальные символы нужно экранировать по стандарту RFC 8259, а заменять на \u001D.

Исходный код:

0104650117240408211dmfcZNcM"4

Экранированный код:

0104650117240408211dmfcZNcM\"4

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

К примеру, у Василия заказали две пары кожаных ботинок. В сделке появится массив positions, содержащий среди своих объектов маркированную позицию «Ботинки рабочие кожаные размер 41 черные Трейл Плюс Т3». Обратим внимание на параметр "quantity": 2.0. Так как каждый код маркировки уникален, кодов должно быть передано два. Но Василий хочет одну марку передать по API, а вторую отсканировать на кассе. В этом случае объектов в массиве marks всё равно должно быть два, однако второй объект содержит только счётный параметр for_quantity.

"positions" : [
  {
    "settlement_subject" : "Product" ,
    "name" : "Ботинки рабочие кожаные размер 41 черные Трейл Плюс Т3" ,
    "uom" : {
      "guid" : "25865e33-2efc-11df-942d-0023543d7b52" ,
      "type_of" : "Uom"
    },
    "tax" : "Tax20" ,
    "sale_price" : {
      "value" : 48800 ,
      "currency" : "RUB" ,
      "type_of" : "Money"
    },
    "quantity" : 2.0 ,
    "total_sum" : {
      "value" : 48800 ,
      "currency" : "RUB" ,
      "type_of" : "Money"
    },
    "barcode" : "4678599263104" ,
    "is_markable" : true ,
    "marking_attributes" :
    {
      "marks" : [
        {
          "marking_code" : "010290000002493921AqjmFon,CoD_)\u001D91003E\u001D92DNI4UMPkN
5SpwqPRN7c2ihHTHmM4ZnGm81A6qlFMNkedQnPm6SmcbDKfYt3XAJ+
WVdl05ewWpGg/dpJEBAnI6g==" ,
          "for_quantity" : 1.0 ,
          "checking_result" : [ "KPKMCheckedAutonomously" ]
        },
        {
          "for_quantity" : 1.0
        }
      ]
    },
    "meta" : "good_guid=0a135191-6469-11ea-80c8-00155dfc0b56" ,
    "guid" : "2c9619d4-f005-49f6-a2b4-4014815b26f1" ,
    "type_of" : "DealPosition"
  },

Неправильно — при значении "quantity": 2.0 передавать в массиве marks только один объект кода маркировки:

"is_markable" : true ,
"marking_attributes" :
{
  "marks" : [
    {
      "marking_code" : "010290000002493921AqjmFon,CoD_)\u001D91003E\u001D92DNI4UMPkN
5SpwqPRN7c2ihHTHmM4ZnGm81A6qlFMNkedQnPm6SmcbDKfYt3XAJ+
WVdl05ewWpGg/dpJEBAnI6g==" ,
      "for_quantity" : 1.0 ,
      "checking_result" : [ "KPKMCheckedAutonomously" ]
    }
  ]
},

Готово! Вы зарегистрировали сделку с маркированным товаром.

Данные покупателя

LIFE POS позволяет собирать и хранить значительные данные о клиентах. Передав данные по API, вы упростите работу курьеру: ему не нужно будет вводить их руками при продаже — останется только передать товар, получить деньги и пробить чек.

Данные покупателя хранятся в сделке в объекте customer_data. Передать их в API можно POST-запросом, а получить — GET-запросом по адресу:

{base_url}/orgs/{org_guid}/deals/sales

base_url — адрес сервиса. Возможные значения:

  • Описание POST-запроса.
  • Описание GET-запроса.

Вот как выглядят сами данные:

customer_data : {
  name : "string",
  inn : "string",
  contacts : "string",
  citizenship : "RUS",
  identity_document_type : "RFPassport",
  identity_document_data : "string"
  date_of_birth : "2019-08-24T14:15:22Z"
  address : "string"
}

Нюансы работы с полями:

  • inn — максимум 12 символов.
  • citizenship — принимает трёхбуквенные коды стран.

Возможные значения поля identity_document_type:

  • RFPassport,
  • RFSpecialPassport,
  • RFTemporaryIdentity,
  • RFBirthCertificate,
  • RFOtherDocuments,
  • ForeignPassport,
  • ForeignOtherDocuments,
  • ForeignIdentity,
  • ForeignResidence,
  • ForeignTemporaryResidence,
  • RefugeeApplication.

Чаще всего эти поля используются для передачи ФИО и ИНН или данных паспорта покупателя на фискальный регистратор — если нужно указать их в чеке.

Продажа по агентской схеме

LIFE POS поддерживает продажу товаров по агентской схеме. Такая схема подразумевает, что поставщик продаёт свои товары через стороннее лицо — агента. Агентом может быть ИП, компания, кредитная организация или торговый посредник. Агент занимается доставкой товара и принимает оплату. Для расчётов с физическими клиентами ему нужна онлайн-касса. По закону касса должна передавать в ФНС информацию об агенте, поставщике и операторе перевода.

В LIFE POS эти реквизиты нужно передать в сделке в объекте additional_attributes. Он находится внутри объекта positions. Это позволяет продавать часть позиций по агентской схеме, а другую часть как собственные товары.

Чтобы провести сделку по агентской схеме, заполните additional_attributes и отправьте POST-запрос для создания продажи:

{base_url}/orgs/{org_guid}/deals/sales

base_url — адрес сервиса. Возможные значения:

Описание запроса.

Вот так выглядят сами данные:

additional_attributes : {
  "as_agent_type_of" : "String" ,
  "transfer_operator_name" : "String" ,
  "transfer_operator_phones" : "String" ,
  "transfer_operator_address" : "String" ,
  "transfer_operator_inn" : "String" ,
  "paying_agent_operation" : "String" ,
  "paying_agent_phones" : "String" ,
  "payment_operator_phones" : "String" ,
  "supplier_name" : "String" ,
  "supplier_inn" : "String" ,
  "supplier_phones" : "String"
}

Особенности работы с полями:

  • transfer_operator_inn и supplier_inn — максимум 12 символов,
  • paying_agent_operation — максимум 24 символа,
  • as_agent_type_of — принимает только 7 значений:
    • BankPayingAgent,
    • BankPayingSubagent,
    • PayingAgent,
    • PayingSubagent,
    • Attorney,
    • Consignee,
    • Agent.

Сессии

Сессия — это объект в LIFE POS API, отвечающий за движения денег и товаров между вами и покупателем. Это любое ваше взаимодействие с покупателем, в рамках которого передаются деньги или позиции номенклатуры.

Сессии делятся на прямые и обратные. Оплата заказа, отгрузка товара или предоставление услуги — это прямые сессии, а возврат — обратная. Например, у Василия интернет-магазин одежды. Покупатель заказал джинсы, пришёл в пункт выдачи, оплатил покупку и забрал её. Возникает прямая сессия — Василий получил от покупателя оплату и отгрузил ему товар. В терминах способов расчёта это полный расчёт. Если бы покупатель оплачивал джинсы картой на сайте, а получал их у курьера, то прямых сессий возникло бы две: в рамках первой Василий получил бы от покупателя аванс, а в рамках второй отгрузил бы ему товар.

Внимание! API LIFE POS пока не поддерживает работу со всеми признаками расчёта. Можно оформить только полный расчёт, т. е. получить оплату и отгрузить товар в рамках одной сессии.

Теперь представим, что покупатель примерил джинсы и они ему не подошли. Покупатель отдаёт их обратно курьеру, а Василий возвращает деньги на карту покупателю. Возникает обратная сессия: товар вернулся Василию, а деньги — покупателю. Сессия возврата должна быть привязана к исходной сессии продажи, чтобы было понятно, какая именно позиция и какие именно деньги возвращаются.

Бывает так, что в момент оплаты чек пробить не удалось. Тогда в момент создания чека коррекции возникает прямая сессия коррекции. Если же вы корректируете возврат, это обратная сессия коррекции. Как и обратная сессия, сессия коррекции должна быть привязана к той сессии, которую она корректирует.

Структура объекта Сессия

Рассмотрим структуру объекта Сессия в API LIFE POS — она одинакова и для прямых сессий, и для обратных, и для сессий коррекции; содержит следующие данные:

ПолеОписание
saleОбъект Продажа, содержащий guid продажи и тип объекта type_of
actionsМассив объектов Действия, который описывает, что именно произошло в рамках сессии
fiscal_documentsМассив объектов Фискальные документы. Когда по сессии появится чек, здесь появятся guid чека и тип объекта type_of

При необходимости каждый объект массива fiscal_documents можно раскрыть, чтобы получить полную информацию о каждой транзакции. Для этого надо передать в запросе параметр expand:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions?expand=expand=fiscal_documents[:].fiscal_registrar&presentation=full

base_url — адрес сервиса. Возможные значения:

Раскрытый объект будет содержать объект fiscal_registrar, который, в свою очередь, содержит следующие поля:

ПолеОписание
modelМодель фискального регистратора
registration_numberРегистрационный номер
serial_numberСерийный номер

В массиве actions передаются следующие данные:

  • money_action — объект Операция с деньгами и позициями. Содержит следующие поля:
    • purposes — массив объектов Предметы расчёта.
    • payment_parts — массив объектов Части платежа.
  • non_purpose_money_action — объект Операция с деньгами. Пока не используется, поскольку признаки способа расчёта не поддержаны и подразумевается, что при получении каждой оплаты вы передаёте покупателю товар.
  • shipping_action — объект Операция с позициями. Содержит массив объектов purposes, каждый из которых должен содержать (знаком * отмечены обязательные поля):
    • quantity * — количество позиций;
    • marking_attributes — данные о маркировке;
    • position — объект Позиция, содержащий guid позиции и тип объекта type_of.

В объекте money_action.purposes передаются следующие данные (знаком * отмечены обязательные поля):

  • amount * — объект Стоимость товара. Содержит поля:
    • value — сумма;
    • currency * — валюта. Возможные значения: RUB, GBP, USD, EUR, Unknown;
    • position — объект Позиция, содержащий guid позиции и тип объекта type_of.

Объект money_action.payment_parts содержит данные о частях платежа. Частей платежа может быть сколько угодно, а конкретное содержимое каждой части зависит от способа, которым покупатель оплачивает заказ.

Способ оплатыСпециальные поля
Сервис оплаты частями «Подели» (BnplPaymentPart)podeli_details — объект, содержащий обязательное поле order_id — идентификатор заказа
Оплата картой (CardPaymentPart)transactions — массив ссылок на транзакции; каждая ссылка содержит поля guid и type_of
Наличные (CashPaymentPart)Специальных полей нет
Незарегистрированный перевод (CashlessPaymentPart)Специальных полей нет. Этот способ оплаты используется, если покупатель расплатился с вами переводом без использования платёжного шлюза LIFE POS. Например, отправил деньги по СБП
Платёжная ссылка (LinkPaymentPart)external_id — внешний идентификатор; ttl — время жизни ссылки в минутах, от 5 до 2880; payment_url — адрес ссылки; expired_at — дата и время истечения срока жизни ссылки; transactions — массив ссылок на транзакции; каждая ссылка содержит поля guid и type_of
Система быстрых платежей (QuickPaymantPaymentPart)transactions — массив ссылок на транзакции; каждая ссылка содержит поля guid и type_of

При необходимости каждый объект массива transactions при оплате картой можно раскрыть, чтобы получить полную информацию о каждой транзакции. Для этого надо передать в запросе параметр expand:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions?expand=actions.*.payment_parts[:].transactions[:].bank_terminal&presentation=full

Адреса сервиса.

Раскрытый объект будет содержать объект bank_terminal, который, в свою очередь, содержит следующие поля:

ПолеОписание
modelМодель банковского терминала
terminal_idИдентификатор банковского терминала
merchant_idИдентификатор продавца, выданный банком
reference_retrieval_numberRRN операции
card_numberНомер карты покупателя

При необходимости каждый объект массива transactions при оплате по СБП можно раскрыть, чтобы получить полную информацию о каждой транзакции. Для этого надо передать в запросе параметр expand:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions?expand=actions.*.payment_parts[:].transactions[:].quick_payments_terminal&presentation=full

Адреса сервиса.

Раскрытый объект будет содержать объект quick_payments_terminal, который, в свою очередь, содержит следующие поля:

ПолеОписание
modelМодель терминала СБП
terminal_idИдентификатор терминала СБП
reference_retrieval_numberRRN операции

Поля объекта money_action.purposes, общие для всех способов оплаты:

  • amount * — объект Стоимость товара. Содержит поля:
    • value — сумма;
    • currency * — валюта. Возможные значения: RUB, GBP, USD, EUR, Unknown;
    • position — объект Позиция, содержащий guid позиции и тип объекта type_of.
  • status * — статус платежа. Возможные значения: Draft, Accepted, Refunded.
  • guid — идентификатор.

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

Оплаты

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

Создать оплату

За движения денежных средств в LIFE POS API отвечает объект Сессия. Сессия — это любое ваше взаимодействие с покупателем, в рамках которого передаются деньги или позиции номенклатуры. Оплата продавцу и отгрузка товара покупателю — это прямые сессии, а возврат — обратная. Подробнее о сессиях.

Чтобы создать новую прямую сессию, отправьте POST-запрос по адресу:

Описание запроса.

Получение информации об оплате

Чтобы получить список всех сессий, связанных с продажей, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Чтобы получить данные конкретной сессии, отправьте GET-запрос по другому адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/direct/{session_guid}
  • session_guid — идентификатор сессии. Можно получить в списке сессий по продаже.
  • Адреса сервиса.
  • Описание запроса.

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

{base_url}/orgs/{org_guid}/terminals/{method}/{terminal_guid}/transactions/{transaction_guid}
  • method — способ оплаты. Возможные значения: bank — банковская карта, quick-payments — СБП.
  • transaction_guid — идентификатор транзакции. Передаётся в документе оплаты.
  • Описание запроса для банковской карты.
  • Описание запроса для СБП.

Изменение информации об оплате

Когда статус оплаты изменится, нужно обновить информацию о ней. Например, когда оплата будет фискализирована, вы можете добавить в поле fiscal_documents ссылку на чек. Чтобы изменить информацию об оплате, отправьте PATCH-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/direct/{session_guid}
  • Адреса сервиса.
  • Описание запроса.

Удаление и восстановление информации об оплате

Вы можете отправить информацию об оплате в архив. Полностью информация не удаляется. Она исчезает из вашего интерфейса управления заказами, но продолжает храниться на сервере LIFE POS. Её можно восстановить, если она снова понадобится.

Чтобы удалить информацию об оплате, отправьте DEL-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/direct/{session_guid}
  • Адреса сервиса.
  • Описание запроса.

Восстановить информацию об оплате можно POST-запросом:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/direct/{session_guid}:unarchive
  • Адреса сервиса.
  • Описание запроса.

Вот и всё, что нужно знать о работе с оплатами.

Транзакции

В LIFE POS по одному заказу может проходить несколько транзакций. Самые частые примеры таких случаев — если покупатель оплачивает заказ частями или если состав оплаченного заказа изменился. Различать нужно транзакции по банковскому терминалу, т. е. классический эквайринг, и транзакции по СБП — переводы по QR-коду или ссылке. Они описываются разным набором данных, поэтому для них предусмотрены разные методы API. Рассказываем, как перенести данные о транзакциях из LIFE POS в вашу систему учёта.

Получить список транзакций

Чтобы получить список транзакций банковского терминала, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/bank/{terminal_guid}/transactions
  • base_url — адрес сервиса. Возможные значения:
  • terminal_guid — идентификатор банковского терминала.

Описание запроса.

Чтобы получить список транзакций по СБП, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/quick-payments/{terminal_guid}/transactions

Описание запроса.

Если вам нужен список всех транзакций вне зависимости от платёжной системы, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/*/{terminal_guid}/transactions

Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Получить описание транзакции

Чтобы получить описание транзакции по банковскому терминалу, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/bank/{terminal_guid}/transactions/{transaction_guid}

Адреса сервиса.

  • terminal_guid — идентификатор банковского терминала.
  • transaction_guid — идентификатор транзакции. Можно получить в списке транзакций.

Описание запроса.

Чтобы получить описание транзакции по СБП, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/quick-payments/{terminal_guid}/transactions/{transaction_guid}

Описание запроса.

Если нужны данные транзакции вне зависимости от платёжной системы, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/*/*/transactions/{transaction_guid}

Описание запроса.

Удалить и восстановить транзакцию

Удалить транзакцию из LIFE POS невозможно, но можно отправить её в архив. Она исчезнет из интерфейса, но останется на сервере LIFE POS.

Чтобы удалить транзакцию по банковскому терминалу, отправьте DEL-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/bank/{terminal_guid}/transactions/{transaction_guid}

Адреса сервиса.

  • terminal_guid — идентификатор банковского терминала.
  • transaction_guid — идентификатор транзакции. Можно получить в списке транзакций.

Описание запроса.

Чтобы удалить транзакцию по СБП, отправьте DEL-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/quick-payments/{terminal_guid}/transactions/{transaction_guid}

Описание запроса.

Если нужно восстановить транзакцию по банковскому терминалу, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/bank/{terminal_guid}/transactions/{transaction_guid}:unarchive

Описание запроса.

Если нужно восстановить транзакцию по СБП, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/quick-payments/{terminal_guid}/transactions/{transaction_guid}:unarchive

Описание запроса.

На этом с транзакциями всё.

Возвраты

Провести через API полноценную операцию возврата средств не получится — обязательно понадобится карта покупателя для проведения денег через эквайринг. Но через API вы можете создать обратную сессию для выполнения возврата. Рассказываем, как работать с обратными сессиями.

Оформить возврат

За движения денежных средств в LIFE POS API отвечает объект Сессия. Сессия — это любое ваше взаимодействие с покупателем, в рамках которого передаются деньги или товары. Оплата продавцу, отгрузка товара или предоставление услуги — это прямые сессии, а возврат — обратная. Подробнее о сессиях.

Чтобы создать обратную сессию, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/reversal

base_url — адрес сервиса. Возможные значения:

Возврат должен ссылаться на прямую сессию оплаты, а каждая часть платежа — на соответствующую часть платежа в этой прямой сессии. Для этого в описании операций, проведённых в рамках сессии, в объекте payment_parts используются объекты primary_sale_session и primary_payment_part соответственно. Передайте в них guid и type_of объектов, на которые хотите сослаться.

Подробное описание запроса.

Когда возврат будет оформлен, поменяйте статус сделки. Как поменять статус сделки.

Получить документ возврата

Чтобы получить список всех сессий, связанных с продажей, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Чтобы получить данные конкретного возврата, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/reversal/{session_guid}
  • session_guid — идентификатор сессии. Можно получить в списке всех сессий, связанных с продажей.

Описание запроса.

Изменить документ возврата

Когда возврат будет фискализирован, добавьте данные чека в описание сессии PATCH-запросом по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/reversal/{session_guid}
  • Адреса сервиса.
  • Описание запроса.

Удалить и восстановить возврат

Сессию нельзя удалить навсегда, но можно перенести в архив. Она исчезнет из интерфейса вашей учётной программы, но сохранится на сервере LIFE POS. Для этого отправьте DEL-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/reversal/{session_guid}

Чтобы восстановить архивную сессию, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/reversal/{session_guid}:unarchive

Описание запроса.

Сессии коррекции

Бывает так, что в момент оплаты на точке нет интернета. Платёж невозможно провести сразу, но он фиксируется в системе и будет проведён позже, когда связь восстановится. Тогда в момент списания возникает прямая сессия коррекции. Также она возникает, когда вы печатаете чек коррекции — например, если в момент продажи кассовый чек пробить не удалось. Если же вы корректируете возврат, возникает обратная сессия коррекции.

Как и обратные сессии, все сессии коррекции должны быть привязаны к тем сессиям, которые они корректируют. Для этого в описании операций, проведённых в рамках сессии, в объекте payment_parts используются объекты primary_sale_session и primary_payment_part соответственно. Передайте в них guid и type_of объектов, на которые хотите сослаться. Подробнее о сессиях.

Исправить ошибку

Чтобы создать новую сессию коррекции, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/direct-correction

Получить данные о коррекции

Чтобы получить список всех сессий, связанных с продажей, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Важно. В запросе есть необязательный параметр selection. Это фильтр сессий по их статусу. Если параметр не передан, по умолчанию используется значение alive_only, то есть в ответе придут только данные сессий, не перенесённых в архив. Чтобы посмотреть весь список сессий или только архивные данные, укажите значение all или archived_only соответственно.

Чтобы получить данные конкретной коррекции, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/direct-correction

Адреса сервиса.

  • session_guid — идентификатор сессии. Можно получить в списке всех сессий, связанных с продажей.

Отредактировать коррекцию

Когда коррекция будет фискализирована, добавьте данные чека в описание сессии PATCH-запросом по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/direct-correction

Адреса сервиса.

Удалить и восстановить коррекцию

Сессию нельзя удалить навсегда, но можно перенести в архив. Она исчезнет из интерфейса вашей учётной программы, но сохранится на сервере LIFE POS. Для этого отправьте DEL-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/direct-correction

Адреса сервиса.

Чтобы восстановить архивную сессию, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/deals/sales/{deal_guid}/sessions/direct-correction:unarchive

Адреса сервиса.

Отчёты

LIFE POS предоставляет подробные отчёты: по выручке, продажам, транзакциям, фискальным документам и т. д. Их можно посмотреть и скачать в личном кабинете (ЛК) LIFE POS, настроив период — например, квартал или полугодие. Если отчёты нужны вам регулярно за один и тот же период, проще настроить автоматическую выгрузку по API. Вы можете выгружать их в таблице Excel или в формате CSV, а также в различных срезах. Если файлы отчётов не подходят, или если нужно поменять представление, — получите данные отчётов по API и создайте свой интерфейс для работы с ними. Рассказываем, как это сделать.

Для передачи файлов используется тип данных multipart/form-data. Как работать с multipart.

Выручка за период

Чтобы получить файл отчёта, сперва нужно создать задачу на экспорт. Если экспортируете отчёт в таблицу Excel, создайте задачу POST-запросом по адресу:

{base_url}/orgs/{org_guid}/async/exports/revenueperiods:new.xlsx

base_url — адрес сервиса. Возможные значения:

  • Описание запроса Excel.
  • Описание запроса CSV.

Чтобы получить данные отчёта, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/reports/revenue/periods

Описание запроса.

Выручка с группировкой по точкам

Отчёт нужен, чтобы сравнивать торговые точки по выручке между собой. В той точке, где выручки больше, можно увеличить сотрудникам план продаж, и наоборот.

{base_url}/orgs/{org_guid}/async/exports/revenueoutletsperiods:new.xlsx

Адреса сервиса.

  • Описание запроса Excel.
  • Описание запроса CSV.

Получить данные отчёта можно GET-запросом.

{base_url}/orgs/{org_guid}/reports/revenue/outletsperiods
  • Описание запроса с группировкой.
  • Описание запроса итогов.

Выручка с группировкой по курьерам

Отчёт нужен для построения индивидуальных планов мотивации. Вы увидите, кто из курьеров принёс больше выручки, и сможете поощрять отличившихся.

{base_url}/orgs/{org_guid}/async/exports/revenueemployeesperiods:new.xlsx

Адреса сервиса.

  • Описание запроса Excel.
  • Описание запроса CSV.

Чтобы получить данные отчёта, отправьте GET-запрос. Доступен также итоговый отчёт по курьерам.

{base_url}/orgs/{org_guid}/reports/revenue/employeesperiods
  • Описание запроса с группировкой.
  • Описание запроса итогов.

Получить данные задачи

Вы можете получить список всех задач на экспорт.

{base_url}/orgs/{org_guid}/async/exports/revenuereports
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Также вы можете посмотреть данные конкретной задачи. Отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/async/exports/revenuereports/{task_guid}
  • task_guid — идентификатор задачи. Если вы не указали его при создании, LIFE POS создал его сам. Тогда его можно получить, запросив список задач на экспорт.

Описание запроса.

Следите за статусом задачи. Вот список статусов:

СтатусЗначение
InQueueВ очереди
InProgressВ работе
WaitingForFeedbackТребуется обратная связь
CompletedОтчёт готов
CanceledЗадача отменена

Скачать файл отчёта

Когда задача перейдёт в статус Completed, файл отчёта можно будет скачать. Чтобы скачать отчёт, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/async/exports/revenuereports/{task_guid}/result.xlsx

Адреса сервиса.

  • task_guid — идентификатор задачи. Если вы не указали его при создании, LIFE POS создал его сам. Тогда его можно получить, запросив список задач на экспорт.
  • Описание запроса Excel.
  • Описание запроса CSV.

Отменить экспорт

Чтобы отменить задачу на экспорт отчётов о выручке, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/async/exports/revenuereports/{task_guid}:cancel

Адреса сервиса.

  • task_guid — идентификатор задачи. Если вы не указали его при создании, LIFE POS создал его сам. Тогда его можно получить, запросив список задач на экспорт.

Описание запроса.

Вот и всё.

Уведомления об операциях

LIFE POS может уведомлять вас об операциях с продажами: создание, изменение и удаление. Для этого он отправляет API-запросы к клиенту. В запросе приходит содержимое объекта на момент выполнения операции. Чтобы уведомления продолжали отправляться, на запросы от LIFE POS нужно отвечать кодом ответа HTTP 200. Если в течение суток ни на один запрос такой ответ не получен, то отправка уведомлений отключается. Для отправки уведомлений нужно подключить бесплатное расширение. Рассказываем, как это сделать.

Включение уведомлений

Чтобы включить уведомления, отправьте PATCH-запрос по адресу:

{base_url}/v6/orgs/{org_guid}
  • base_url — адрес сервиса. Возможные значения:
  • org_guid — id организации в LIFE POS.

В параметре заголовка X-LP-Client-Extensions передайте значение notification_service. Также в теле запроса в параметре value отправьте параметры для настройки уведомлений:

ПараметрОписание
turned_onОпределяет, включена отправка уведомлений или нет. true — уведомления включены, false — выключены
primary_url_for_notificationsОсновной URL для отправки уведомлений, обязательный параметр
secondary_url_for_notificationsДополнительный URL для отправки уведомлений. Указывать необязательно. Используется при проблемах с отправкой на основной URL

Подробное описание запроса.

Пример запроса в curl:

curl -i -X PATCH \
  -H "X-LP-Client-Identifier:a6680000" \
  -H "X-LP-Client-Type:app" \
  -H "Accept-Language:en-US" \
  -H "X-LP-Client-Extensions:notification_service" \
  -d \
  '[
    {
      "op": "add",
      "path": "/extensions/notification_service",
      "value": {
        "turned_on": "true",
        "primary_url_for_notifications": "https://example.com/lifePOS/update",
        "version": "1.0"
      }
    }
  ]' \
  'https://api.life-pos.ru/orgs/aa000000'

Логика работы

После добавления расширения через параметр заголовка X-LP-Client-Extensions для организации будет создана очередь уведомлений. У каждой организации может быть только одна очередь. В очередь попадают уведомления, которые не удалось отправить с первого раза. Если в X-LP-Client-Extensions не передано значение notification_service, то очередь уведомлений будет удалена.

При добавленном расширении вы можете принудительно включать его или выключать. Это делается через параметр turned_on. Если расширение включено, то периодически происходят попытки отправить уведомления из очереди. Если выключено, то отправка не происходит и уведомления накапливаются в очереди.

Логика отправки уведомлений

У каждой организации может быть только одна очередь и один процесс отправки уведомлений. Отправка уведомлений происходит только в прямой последовательности по очереди. После любых изменений организации процесс отправки уведомлений останавливается. Обработчик уведомлений будет удалён и создан новый с сохранением очереди. Если в течение суток не удалось отправить ни одно уведомление, обработчик уведомлений будет остановлен. Чтобы перезапустить его, обновите организацию PATCH-запросом или выключите расширение и включите повторно.

Последовательность действий при отправке

  1. Обработчик отправляет уведомление на URL, указанный в параметре primary_url_for_notifications. Если в ответ получен код 200, то уведомление помечается обработанным. Если код 200 не получен, то выполняется действие из пункта 2.
  2. Обработчик отправляет уведомление на URL, указанный в параметре secondary_url_for_notifications. Если в ответ получен код 200, то уведомление помечается обработанным. Если код 200 не получен, то выполняется действие из пункта 3.
  3. Попытки отправить уведомление приостанавливаются до следующего времени повторной отправки. Если за все периоды повторной отправки код 200 от клиента не получен, то отправка уведомлений останавливается.

Формат запроса к клиенту

Метод: HTTP POST

Заголовки:
AcceptLanguage: ru-RU
Content-Type: application/json
X-LP-SRV-Identifier: {server_guid}
X-LP-SRV-Name: "LifePos.Notify.Consumer.Extensions"
X-LP-Extensions: "notification_service"
X-LP-SRV-Attempt: {attempt_number}

Тело сообщения: JSON-представление объекта
Ожидаемый ответ: HTTP

Организация

Организация в системе LIFE POS — это ваш бизнес. В организации может быть несколько юридических лиц, как и несколько магазинов. Их объединяет то, что они работают на вас. Рассказываем, что можно сделать с организацией через API LIFE POS.

Проверить псевдоним

У каждой организации в системе LIFE POS есть псевдоним — значение поля alias. Этот псевдоним должен быть уникальным. Чтобы проверить доступность придуманного псевдонима, отправьте POST-запрос по адресу:

{base_url}/orgs:check-alias-availability

base_url — адрес сервиса. Возможные значения:

Описание запроса.

Добавить организацию

Чтобы добавить организацию, отправьте POST-запрос по адресу:

{base_url}/orgs

Адреса сервиса.

Метод отправит вам СМС с логином и пин-кодом для входа в приложение LIFE POS. Кроме организации, метод создаст:

  • Роли пользователей по умолчанию.
  • Страницу с контактами техподдержки, если вы заполнили поле support.
  • Сотрудника организации с ролью Владелец. Сотрудник привязывается к аккаунту, от которого поступил запрос на создание организации.
  • Сущность Системная валюта (OrganizationOption: SYSTEM_CURRENCY) со значением RUB.
  • Единицы измерения: Не задана, Килограмм, Штука, Литр.
  • Расширения, данные которых вы указали в объекте extensions.

В тело запроса входит объект support — контакты поддержки, которые будут выводиться в приложении для курьера. Если их не передать, в приложении будут контакты поддержки LIFE POS. Вот что можно настроить в объекте support:

ПолеОписание
lineНазвание компании для заголовка: Контакты техподдержки %line%. Например: Контакты техподдержки LIFE POS
responsibilityКраткое описание вопросов, по которым помогает поддержка. Например: Обращайся сюда, если есть вопросы по заказам
phoneТелефон
emailЭлектронная почта
opening_hoursЧасы работы
whatsappWhatsApp
viberViber
telegramTelegram

Подробное описание запроса.

Получить данные организации

Чтобы получить список организаций, отправьте GET-запрос по адресу:

{base_url}/orgs
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Чтобы получить данные о конкретной организации, отправьте GET-запрос по другому адресу:

{base_url}/orgs/{org_guid}

Описание запроса.

Изменить данные организации

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

Чтобы скорректировать данные, отправьте PATCH-запрос по адресу:

{base_url}/orgs/{org_guid}

Адреса сервиса.

В теле запроса передайте изменения. Описание запроса.

Удалить и восстановить данные организации

Полностью удалить данные организации нельзя, но их можно отправить в архив. Данные исчезнут из интерфейса, но сохранятся на сервере LIFE POS.

Чтобы заархивировать данные, отправьте DELETE-запрос по адресу:

{base_url}/orgs/{org_guid}
  • Адреса сервиса.
  • Описание запроса.

Чтобы восстановить данные из архива, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}:unarchive

Вот и всё, что касается настроек организации.

Сотрудники

У каждого сотрудника, работающего с LIFE POS, должна быть учётная запись в системе. Вы можете работать с учётными записями сотрудников в личном кабинете (ЛК) или по API. Рассказываем, какие данные сотрудников хранит система и как работать с ними по API.

Добавить учётную запись

Чтобы добавить сотрудника, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/employees

base_url — адрес сервиса. Возможные значения:

Описание запроса.

Авторизовать сотрудника

Для доступа к сервисам LIFE POS сотруднику нужны пин-код или пароль. Чтобы сгенерировать их вместе, отправьте POST-запрос по адресу:

{base_url}/v6/orgs/{org_guid}/employees/{employee_guid}:reset-credentials
  • Адреса сервиса.
  • Описание запроса.

Если сотрудник входит на рабочее место впервые, рабочее место потребуется активировать. Как активировать рабочее место.

Если сотрудник забыл свои учётные данные, пин-код и пароль можно сгенерировать по отдельности. Чтобы сгенерировать пин-код, отправьте POST-запрос по адресу:

{base_url}/v6/orgs/{org_guid}/employees/{employee_guid}:reset-pincode

Описание запроса.

Чтобы сгенерировать пароль, отправьте POST-запрос по адресу:

{base_url}/v6/orgs/{org_guid}/employees/{employee_guid}:reset-password

Описание запроса.

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

Получить данные учётной записи

Чтобы получить список сотрудников, отправьте GET-запрос по адресу:

{base_url}/v6/orgs/{org_guid}/employees
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Важно. В запросе есть необязательный параметр selection. Это фильтр сотрудников по их статусу. Если параметр не передан, по умолчанию используется значение alive_only, то есть в ответе придут только данные сотрудников, не перенесённых в архив. Чтобы посмотреть весь список сотрудников или только архивные данные, укажите значение all или archived_only соответственно.

Теперь, если вам нужно получить данные о конкретном сотруднике, отправьте GET-запрос по другому адресу:

{base_url}/v6/orgs/{org_guid}/employees/{employee_guid}

Описание запроса.

Изменить данные учётной записи

Если у сотрудника изменился номер телефона, адрес электронной почты или фамилия, отразите изменения в системе. Чтобы изменить данные сотрудника, отправьте PATCH-запрос по адресу:

{base_url}/v6/orgs/{org_guid}/employees/{employee_guid}
  • Адреса сервиса.
  • Описание запроса.

В теле запроса передайте изменения.

Удалить или восстановить учётную запись

Полностью удалить данные сотрудника нельзя, но их можно отправить в архив. Они исчезнут из рабочих интерфейсов, но сохранятся на сервере LIFE POS. При необходимости их можно восстановить.

Чтобы заархивировать учётную запись, отправьте DEL-запрос по адресу:

{base_url}/v6/orgs/{org_guid}/employees/{employee_guid}
  • Адреса сервиса.
  • Описание запроса.

Чтобы восстановить учётную запись, отправьте POST-запрос по адресу:

{base_url}/v6/orgs/{org_guid}/employees/{employee_guid}:unarchive

Описание запроса.

Вот и всё, что нужно, чтобы работать с учётными записями сотрудников.

Рабочие места

Рабочее место — это устройство с приложением LIFE POS — смартфон или онлайн-касса. За одним рабочим местом могут работать разные сотрудники. Без рабочего места работать не выйдет, так что за каждым новым кассиром или курьером нужно закрепить хотя бы одно. Объясняем, как управлять рабочими местами через API LIFE POS.

Добавить рабочее место

Чтобы добавить рабочее место, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/workplaces

base_url — адрес сервиса. Возможные значения:

Параметры тела запроса (знаком * отмечены обязательные):

ПараметрОписание
workplace_type *Тип рабочего места. Параметр определяет принцип заполнения адреса места расчётов в чеке. Возможные значения: Unknown; Mobile — касса для развозной торговли, место расчётов определяется в момент печати чека; Stationary — стационарная касса, место расчётов задаётся при регистрации и не меняется; Automat — касса, которая может работать и как мобильная, и как стационарная
extensionsРасширения, подключённые на рабочем месте

Подробное описание запроса.

Активировать рабочее место

Чтобы использовать все возможности рабочего места, его надо активировать. Для этого сотрудник, начинающий работу, должен ввести код активации. Код активации вводится один раз и действует, пока вы не деактивируете рабочее место или не очистите данные приложения.

Код активации генерируется POST-запросом по адресу:

{base_url}/v6/orgs/{org_guid}/workplaces/{workplace_guid}:generate-activation-code
  • Адреса сервиса.
  • Описание запроса.

Код активации можно отправить в СМС сотруднику. Для этого передайте параметр send_sms=true. В описании сотрудника должен быть указан его номер телефона.

Теперь код активации нужно передать в API. Для этого отправьте POST-запрос по адресу:

{base_url}/v6/auth/activate-workplace

В параметре activation_code передайте код активации, полученный ранее. В ответ вы получите параметр token, который можно использовать для авторизации на рабочем месте. Описание запроса.

Кроме кода активации сотруднику нужно ввести пин-код или пароль. Их можно настроить в данных сотрудника. Там же есть запрос на отправку данных для входа в СМС. Как настроить пин-код и пароль.

Пример процесса активации вы уже видели в статье «Быстрый старт». Там вы активировали бесплатное рабочее место.

Получить данные о рабочем месте

Вы можете получить полный список рабочих мест, закреплённых за вашей организацией. Для этого отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/workplaces
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Важно. В запросе есть необязательный параметр selection. Это фильтр рабочих мест по их статусу. Если параметр не передан, по умолчанию используется значение alive_only, то есть в ответе придут только данные рабочих мест, не перенесённых в архив. Чтобы посмотреть весь список рабочих мест или только архивные данные, укажите значение all или archived_only соответственно.

Чтобы получить данные о конкретном рабочем месте, отправьте GET-запрос по другому адресу:

{base_url}/orgs/{org_guid}/workplaces/{workplace_guid}

Описание запроса.

Изменить данные рабочего места

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

{base_url}/orgs/{org_guid}/workplaces/{workplace_guid}
  • Адреса сервиса.
  • Описание запроса.

В теле запроса передайте изменения.

Удалить и восстановить рабочее место

Рабочее место нельзя удалить навсегда, но можно перенести в архив. Оно исчезнет из интерфейсов, но сохранится на сервере LIFE POS.

Чтобы заархивировать рабочее место, отправьте DEL-запрос по адресу:

{base_url}/orgs/{org_guid}/workplaces/{workplace_guid}
  • Адреса сервиса.
  • Описание запроса.

Чтобы восстановить рабочее место, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/workplaces/{workplace_guid}:unarchive

Описание запроса.

Деактивировать рабочее место

Чтобы деактивировать рабочее место, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/workplaces/{workplace_guid}:deactivate
  • Адреса сервиса.
  • Описание запроса.

Вот и всё, что касается рабочих мест.

Терминалы

Через LIFE POS вы можете управлять торговыми терминалами организации. Это удобно, когда нужно обработать много терминалов. Например, добавить 50 новых и удалить 20 старых. API поддерживает два типа терминалов: банковские и СБП.

Создать терминал

Чтобы добавить новый терминал, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/{type}
  • base_url — адрес сервиса. Возможные значения:
  • type — тип терминала. Возможные значения:
    • bank — банковский терминал,
    • quick-payments — терминал СБП.
  • Описание запроса для банковского терминала.
  • Описание запроса для терминала СБП.

Получить информацию о терминалах

Чтобы получить список всех терминалов организации, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/
  • Адреса сервиса.
  • Описание запроса.

Чтобы получить список терминалов одного типа, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/{type}

Адреса сервиса.

  • type — тип терминала. Возможные значения:
    • bank — банковский терминал,
    • quick-payments — терминал СБП.
  • Описание запроса для банковского терминала.
  • Описание запроса для терминала СБП.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Чтобы получить информацию о терминале по его ID без указания типа, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/*/{terminal_guid}
  • Адреса сервиса.
  • Описание запроса.

Чтобы получить информацию о терминале по его ID и типу, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/{type}/{terminal_guid}
  • Описание запроса для банковского терминала.
  • Описание запроса для терминала СБП.

Изменить терминал

Чтобы внести изменения в данные терминала, отправьте PATCH-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/{type}/{terminal_guid}

Адреса сервиса.

  • type — тип терминала. Возможные значения:
    • bank — банковский терминал,
    • quick-payments — терминал СБП.
  • Описание запроса для банковского терминала.
  • Описание запроса для терминала СБП.

Удалить и восстановить терминал

Вы можете отправить информацию о терминале в архив. Полностью информация не удаляется. Она исчезает из вашего интерфейса управления терминалами, но продолжает храниться на сервере LIFE POS. Её можно восстановить, если она снова понадобится.

Чтобы удалить терминал, отправьте DELETE-запрос по адресу:

{base_url}/orgs/{org_guid}/terminals/{type}/{terminal_guid}

Адреса сервиса.

  • type — тип терминала. Возможные значения:
    • bank — банковский терминал,
    • quick-payments — терминал СБП.
  • Описание запроса для банковского терминала.
  • Описание запроса для терминала СБП.

Восстановить информацию об оплате можно POST-запросом:

{base_url}/orgs/{org_guid}/terminals/{type}/{terminal_guid}:unarchive
  • Описание запроса для банковского терминала.
  • Описание запроса для терминала СБП.

На этом мы закончили с терминалами.

Торговые точки

Торговая точка в системе LIFE POS соответствует вашему магазину. Создать точку полезно, если вы хотите отдельно следить за продажами каждого магазина или применить к разным магазинам разные настройки. Рассказываем, как управлять торговыми точками.

СБП, облачная фискализация и права

В описании торговой точки есть параметр extensions, отвечающий за подключение и настройку расширений. С помощью расширений вы можете подключить СБП или облачную фискализацию, настроить гибкие права курьерам и кассирам. Подробнее про расширения.

Добавить торговую точку

Чтобы добавить торговую точку, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/outlets

base_url — адрес сервиса. Возможные значения:

В теле запроса передайте настройки торговой точки:

ПараметрОписание
nameНазвание
addressАдрес. Используется в реквизите чека «адрес и место расчётов»
legal_entityЮридическое лицо, которому принадлежит точка. Идентификатор юридического лица можно скопировать в личном кабинете LIFE POS
brandНе используется
permissionsНе используется
extensionsСписок расширений и их настройки

Подробное описание запроса.

Получить данные торговой точки

Чтобы получить список торговых точек, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/outlets
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Важно. В запросе есть необязательный параметр selection. Это фильтр торговых точек по их статусу. Если параметр не передан, по умолчанию используется значение alive_only, то есть в ответе придут только данные торговых точек, не перенесённых в архив. Чтобы посмотреть весь список торговых точек или только архивные данные, укажите значение all или archived_only соответственно.

Чтобы получить данные конкретной точки, отправьте GET-запрос по другому адресу:

{base_url}/orgs/{org_guid}/outlets/{outlet_guid}

outlet_guid — идентификатор торговой точки. Можете указать его при добавлении точки. Если не укажете, LIFE POS создаст его сам и пришлёт в ответе на запрос. Кроме того, идентификаторы точек можно получить, запросив их список.

Описание запроса.

Изменить торговую точку

Чтобы изменить данные торговой точки, отправьте PATCH-запрос по адресу:

{base_url}/orgs/{org_guid}/outlets/{outlet_guid}

Адреса сервиса.

  • outlet_guid — идентификатор торговой точки. Можете указать его при добавлении точки. Если не укажете, LIFE POS создаст его сам и пришлёт в ответе на запрос. Кроме того, идентификаторы точек можно получить, запросив их список.

Описание запроса.

Удалить или восстановить торговую точку

Полностью удалить торговую точку нельзя, но можно отправить её в архив. Точка исчезнет из интерфейса, но её данные останутся на сервере LIFE POS.

Чтобы архивировать торговую точку, отправьте DEL-запрос по адресу:

{base_url}/orgs/{org_guid}/outlets/{outlet_guid}

Адреса сервиса.

  • outlet_guid — идентификатор торговой точки. Можете указать его при добавлении точки. Если не укажете, LIFE POS создаст его сам и пришлёт в ответе на запрос. Кроме того, идентификаторы точек можно получить, запросив их список.

Описание запроса.

Чтобы восстановить торговую точку из архива, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/outlets/{outlet_guid}:unarchive

Описание запроса.

Вот и всё, что касается торговых точек.

Импорт товаров POST-запросом

Вы можете загрузить в LIFE POS свой каталог товаров и использовать его в торговле. Если у вас интернет-магазин, загрузка каталога вам не нужна — данные можно передавать в запросе на продажу. Если же у вас обычный магазин со стационарной кассой, можете загрузить каталог POST-запросом или в таблице Excel. Так вам не придётся добавлять товары по одному через личный кабинет. В этой статье разберёмся, как загружать каталог POST-запросом.

Добавить товар или услугу

Чтобы добавить товар в каталог, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/goods
  • base_url — адрес сервиса. Возможные значения:
  • goods — товары.

Описание запроса.

Если нужно добавить сразу много товаров, отправьте POST-запрос по другому адресу:

{base_url}/orgs/{org_guid}/goods.batch

Описание запроса.

Если добавляете маркированный товар, передайте следующие поля:

ПолеОписание
is_markableЛогический признак маркированного товара
barcodeШтрихкод товара. Заполнять обязательно, если is_markable=true
marking_attributesМассив данных о маркированном товаре

В массиве marking_attributes передайте параметр is_part_of_package_of. Он используется, если позиция является частью упаковки — например, пакетик Терафлю из упаковки на 20 пакетиков. Параметр нужен, чтобы показать связь между единицей товара и упаковкой. Позиции для этого не подходят: каждую единицу маркированного товара нужно передавать как отдельную позицию. Это обусловлено тем, что коды маркировки уникальные и являются атрибутом позиции, а не единицы товара.

Получить данные товара

Чтобы получить весь список товаров, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/goods

Адреса сервиса.

  • goods — товары.

Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Важно. В запросе есть необязательный параметр selection. Это фильтр товаров по их статусу. Если параметр не передан, по умолчанию используется значение alive_only, то есть в ответе придут только данные товаров, не перенесённых в архив. Чтобы посмотреть весь список товаров или только архивные данные, укажите значение all или archived_only соответственно.

Если нужно получить данные конкретного товара, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/goods/{good_guid}
  • good_guid — идентификатор товара. Можете указать его, когда добавляете товар в каталог. Если не укажете, LIFE POS создаст идентификатор сам. В этом случае идентификаторы товаров можно взять из общего списка.

Описание запроса.

Изменить данные товара

Если данные товара нужно изменить, отправьте PATCH-запрос по адресу:

{base_url}/orgs/{org_guid}/goods/{good_guid}

Адреса сервиса.

  • goods — товары.
  • good_guid — идентификатор товара. Можете указать его, когда добавляете товар в каталог. Если не укажете, LIFE POS создаст идентификатор сам. В этом случае идентификаторы товаров можно взять из общего списка.

Описание запроса.

Удалить или восстановить товар

Полностью удалить данные о товаре невозможно, но их можно отправить в архив. Он исчезнет из интерфейса, но сохранится на сервере LIFE POS. Если нужно, вы сможете его восстановить.

Чтобы архивировать товар, отправьте DEL-запрос по адресу:

{base_url}/orgs/{org_guid}/goods/{good_guid}

Адреса сервиса.

  • goods — товары.
  • good_guid — идентификатор товара. Можете указать его, когда добавляете товар в каталог. Если не укажете, LIFE POS создаст идентификатор сам. В этом случае идентификаторы товаров можно взять из общего списка.

Описание запроса.

Вы можете также отправить DEL-запрос на удаление всех товаров:

{base_url}/orgs/{org_guid}/goods

Описание запроса.

Чтобы восстановить товар, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/goods/{good_guid}:unarchive

Описание запроса.

Вот и всё, что касается передачи данных о товарах в теле запросов.

Импорт товаров из файла

Вы можете загрузить в LIFE POS свой каталог товаров и использовать его в торговле. Если у вас интернет-магазин, загрузка каталога вам не нужна — данные можно передавать в запросе на продажу. Если же у вас обычный магазин со стационарной кассой, можете загрузить каталог POST-запросом или в таблице Excel. Так вам не придётся добавлять товары по одному через личный кабинет. В этой статье разберёмся, как загружать каталог в таблице Excel.

Получить шаблон файла для импорта

Сначала скачайте шаблон файла для импорта. Для этого отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/async/imports/nomenclature/template.xlsx

base_url — адрес сервиса. Возможные значения:

Описание запроса.

Добавить задачу на импорт файла

Чтобы создать задачу на импорт файла, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/async/imports/nomenclature:new.xlsx

Адреса сервиса.

Для передачи файла используйте тип данных multipart/form-data. Как работать с multipart. Описание запроса.

Получить списки изменений

Обработав задачу на импорт, сервер LIFE POS сформирует три списка изменений: в единицах измерений, в категориях товаров и в товарных позициях. Вам нужно ознакомиться с этими изменениями и либо принять их, либо отменить импорт.

Чтобы получить список изменений в единицах измерения, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/async/imports/nomenclature/{task_guid}/previews/uoms

Адреса сервиса.

  • task_guid — идентификатор задачи на импорт. Возвращается в ответе метода, добавляющего задачу.

Описание запроса.

Чтобы получить список изменений в категориях товаров, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/async/imports/nomenclature/{task_guid}/previews/categories

Описание запроса.

Чтобы получить список изменений в товарных позициях, отправьте GET-запрос по адресу:

{base_url}/orgs/:org_guid/async/imports/nomenclature/{task_guid}/previews/goods

Описание запроса.

Подтвердить или отменить импорт

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

Чтобы принять изменения, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/async/imports/nomenclature/{task_guid}:confirm

Адреса сервиса.

  • task_guid — идентификатор задачи на импорт. Возвращается в ответе метода, добавляющего задачу.

Описание запроса.

Чтобы отменить импорт, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/async/imports/nomenclature/{task_guid}:cancel

Описание запроса.

Получить данные задачи на импорт

Задачи на импорт обрабатываются некоторое время. Их не нужно отслеживать постоянно — сервер LIFE POS сделает всё сам. Когда нужно проверить статус задачи, отправьте GET-запрос по адресу:

{base_url}/orgs/:org_guid/async/imports/nomenclature/{task_guid}

Адреса сервиса.

  • task_guid — идентификатор задачи на импорт. Возвращается в ответе метода, добавляющего задачу.

Статусы задачи:

СтатусЗначение
InQueueВ очереди
InProgressВ работе
WaitingForFeedbackТребуется подтверждение
CompletedЗавершена
CanceledОтменена

Описание запроса.

Если нужно получить данные всех задач, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/async/imports/nomenclature

Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

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

{base_url}/orgs/{org_guid}/async/imports/nomenclature/{task_guid}/source.xlsx

Описание запроса.

Очистить очередь на импорт

Вы можете отменить сразу все задачи, находящиеся в статусе InQueue. Для этого отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/async/imports/nomenclature/*:cancel
  • Адреса сервиса.
  • Описание запроса.

Вот и всё, что касается импорта каталога из файла Excel.

Единицы измерения

В каталоге LIFE POS можно использовать любые единицы измерения, какие только вам удобны. Мы уже настроили килограммы, штуки и литры, плюс единицу Не определено. Вы можете добавить что угодно: ящики, упаковки, сеансы. Рассказываем, как это сделать.

Добавить единицу измерения

Чтобы добавить единицу измерения, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/uoms

base_url — адрес сервиса. Возможные значения:

Параметры запроса (знаком * отмечены обязательные):

ПараметрОписание
name *Название
symbol *Сокращение или символ для чека. Например, килограмм → кг
is_fractionalПризнак дробности
code_ru_okeiКод по ОКЕИ
code_uneceКод по международному классификатору UNECE
guidИдентификатор. Если не передан, LIFE POS создаст сам и пришлёт в ответе на запрос

Подробное описание запроса.

Получить данные о единице измерения

Чтобы получить список единиц измерения, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/uoms
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Если нужны данные конкретной единицы измерения, отправьте GET-запрос по другому адресу:

{base_url}/orgs/{org_guid}/uoms/{uom_guid}
  • uom_guid — идентификатор единицы измерения. Присваивается при создании.

Описание запроса.

Изменить единицу измерения

Чтобы изменить данные единицы измерения, отправьте PATCH-запрос по адресу:

{base_url}/orgs/{org_guid}/uoms/{uom_guid}

Адреса сервиса.

  • uom_guid — идентификатор единицы измерения. Присваивается при создании.

Описание запроса.

Удалить и восстановить единицу измерения

Полностью удалить единицу измерения невозможно, но можно отправить её в архив. Единица измерения исчезнет из интерфейса, но сохранится на сервере LIFE POS.

Чтобы заархивировать единицу измерения, отправьте DELETE-запрос по адресу:

{base_url}/orgs/{org_guid}/uoms/{uom_guid}

Адреса сервиса.

  • uom_guid — идентификатор единицы измерения. Присваивается при создании.

Описание запроса.

Если хотите заархивировать сразу все единицы измерения, отправьте DELETE-запрос по другому адресу:

{base_url}/orgs/{org_guid}/uoms

Описание запроса.

Метод отправит в архив в том числе единицы измерения, настроенные по умолчанию. Если вы хотели вернуться к настройкам по умолчанию, эти единицы придётся дополнительно восстановить.

Если нужно восстановить единицу измерения из архива, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/uoms/{uom_guid}:unarchive

Описание запроса.

Вот и всё, что касается единиц измерения.

Категории товаров и услуг

С товарами на кассе проще работать, когда они не свалены в кучу, а разложены по полочкам. В LIFE POS тоже есть полочки — категории: Первые блюда, Вторые блюда, Холодные закуски, Горячие закуски, Напитки и т. д. Чтобы пробить товар, кассиру не нужно листать весь каталог — достаточно выбрать категорию. Рассказываем, как настроить категории товаров через API LIFE POS.

Добавить категорию

Чтобы добавить новую категорию товаров, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/goods-categories

base_url — адрес сервиса. Возможные значения:

Иногда одной категории мало, хочется разбить товары более дробно — на подкатегории. Например, сервис доставки еды может выделить в категории Молочные продукты несколько подкатегорий: Молоко и сливки, Кисломолочные продукты, Йогурты и творожки и т. д. Чтобы создать подкатегорию, добавьте обычную категорию и задайте ей родителя. Для этого укажите идентификатор родительской категории в параметре parent_category. Идентификатор можете получить из общего списка категорий.

Описание запроса.

Получить данные категории

Чтобы получить список товарных категорий, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/goods-categories
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Если нужны данные конкретной категории, отправьте GET-запрос по другому адресу:

{base_url}/orgs/{org_guid}/goods-categories/{category_guid}

Адреса сервиса.

  • category_guid — идентификатор категории. Если не зададите его при создании, LIFE POS создаст его сам и пришлёт в ответе. Также идентификатор можно запросить в списке категорий.

Описание запроса.

Наконец, если нужен список подкатегорий, отправьте GET-запрос по следующему адресу:

{base_url}/orgs/{org_guid}/goods-categories/{category_guid}/subcategories

Описание запроса.

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

Чтобы изменить данные категории, отправьте PATCH-запрос по адресу:

{base_url}/orgs/{org_guid}/goods-categories/{category_guid}

Адреса сервиса.

  • category_guid — идентификатор категории. Если не зададите его при создании, LIFE POS создаст его сам и пришлёт в ответе. Также идентификатор можно запросить в списке категорий.

Описание запроса.

Удалить и восстановить категорию

В LIFE POS нельзя удалить категорию товаров, но можно отправить её в архив. Она исчезнет из интерфейса, но сохранится на сервере LIFE POS. Вместе с категорией в архив отправятся входящие в неё подкатегории и товары.

Чтобы заархивировать категорию, отправьте DELETE-запрос по адресу:

{base_url}/orgs/{org_guid}/goods-categories/{category_guid}

Адреса сервиса.

  • category_guid — идентификатор категории. Если не зададите его при создании, LIFE POS создаст его сам и пришлёт в ответе. Также идентификатор можно запросить в списке категорий.

Вместе с категорией в архив отправятся все её подкатегории и товары. Описание запроса.

Вы можете заархивировать сразу все товарные категории. Для этого отправьте DELETE-запрос по адресу:

{base_url}/orgs/{org_guid}/goods-categories

Описание запроса.

Чтобы восстановить товарную категорию из архива, отправьте POST-запрос по адресу:

{base_url}/orgs/{org_guid}/goods-categories/{category_guid}:unarchive

Вместе с категорией будут восстановлены входящие в неё товары и подкатегории, но только те, которые не находились в архиве на момент архивации категории. Описание запроса.

Вот и всё про категории товаров.

Экспорт товаров

С каталогом товаров удобно работать, когда он одинаковый во всех программах. LIFE POS выгружает каталог товаров в виде таблицы Excel, так что вы легко можете настроить автоматическую актуализацию каталога. Рассказываем, как выгрузить каталог по API.

Для передачи файлов используется тип данных multipart/form-data. Как работать с multipart.

Получить каталог

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

{base_url}/orgs/{org_guid}/async/exports/nomenclature:new.xlsx

base_url — адрес сервиса. Возможные значения:

Описание запроса.

Получить данные задачи на экспорт

Чтобы получить список задач на экспорт, отправьте GET-запрос по адресу:

{base_url}/orgs/{org_guid}/async/exports/nomenclature
  • Адреса сервиса.
  • Описание запроса.

Данные выводятся постранично, по 20 записей на страницу. Если нужно получить данные второй страницы, возьмите из ответа значение параметра next_page_token и отправьте новый запрос, передав это значение в параметре page_token. Продолжайте до тех пор, пока параметр next_page_token не придёт пустым. Например, вы запросили данные о сотрудниках и получили такой ответ:

"next_page_token" : "OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0",
"page_number" : ,
"pages_total" : ,
"items_per_page" : ,
"items_total" : ,

В ответе представлены только записи 1–20. Чтобы посмотреть записи с 21 по 27, отправьте новый GET-запрос, указав page_token="OdDEFa2CzpYdp1CmlO9s9mjBn4NkUZB3CXKOtNfQWM0".

Чтобы получить информацию о конкретной задаче, отправьте GET-запрос по другому адресу:

{base_url}/orgs/{org_guid}/async/exports/nomenclature/{task_guid}

task_guid — идентификатор задачи. Если не передан при добавлении задачи, LIFE POS создаст его сам и пришлёт в ответе. Также можно получить в списке задач.

Описание запроса.

В описании задачи вам нужнее всего статусы. Вот они:

СтатусЗначение
InQueueВ очереди
InProgressВ работе
WaitingForFeedbackТребуется подтверждение
CompletedВыполнена
CanceledОтменена

Получить файл

Чтобы получить файл с каталогом товаров, дождитесь, когда задача перейдёт в статус Completed. После этого можете скачать файл, отправив GET-запрос по адресу:

{base_url}/orgs/{org_guid}/async/exports/nomenclature/{task_guid}/result.xlsx

Адреса сервиса.

  • task_guid — идентификатор задачи. Если не передан при добавлении задачи, LIFE POS создаст его сам и пришлёт в ответе. Также можно получить в списке задач.

Описание запроса.

Отменить выгрузку каталога

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

{base_url}/orgs/{org_guid}/async/exports/nomenclature/{task_guid}:cancel

Адреса сервиса.

  • task_guid — идентификатор задачи. Если не передан при добавлении задачи, LIFE POS создаст его сам и пришлёт в ответе. Также можно получить в списке задач.

Описание запроса.

Вот и всё, что касается экспорта каталога.

Управление ролями

В этой статье поговорим о том, как ваши сотрудники будут работать в API LIFE POS. У каждого сотрудника в LIFE POS есть роль. Она определяет, что сотрудник может делать, а что нет. К примеру, менеджер может добавлять и редактировать пользователей, а кассир — только просматривать их список. Разбираемся, как работать с ролями.

Вот список ролей:

РольПрава
ВладелецМожет добавлять, изменять, удалять и восстанавливать что угодно
АдминистраторМожет добавлять, изменять, удалять и восстанавливать всё, кроме организаций
МенеджерМожет добавлять, изменять и удалять, но не восстанавливать всё, что связано с продажами. Может просматривать, но не изменять базовые настройки — бренд, юридические лица, рабочие места, фискальные регистраторы
КассирМожет просматривать список пользователей, список товаров и подобные настройки. Роль не рекомендована для работы с API
Курьер, ГостьНе имеют прав работать с API

Кроме этих ролей, специально для работы с API вы можете настроить индивидуальные разрешения — добавлять позицию по свободной цене, редактировать данные покупателя, удалять сделку и т. д. Эти разрешения накладываются на обычные полномочия роли. Они помогают предотвратить мошенничество.

Чтобы настроить индивидуальные разрешения, подключите расширение retail_app. Для этого измените данные торговой точки — в поле extensions передайте настройки расширения.

Запрет на редактирование корзины

Вы можете запретить сотрудникам с определёнными ролями редактировать список позиций в продаже. Для этого подключите расширение retail_app. Рассказываем!

Принцип работы

Расширение retail_app сопоставляет список позиций в чеке со списком ролей. Для каждой пары «позиция — роль» расширение разрешает или запрещает определённые действия. Вот их список:

  • can_edit_name
  • can_edit_good_type
  • can_edit_uom
  • can_edit_quantity
  • can_edit_tax
  • can_edit_sale_price
  • can_delete

Подключение расширения

Чтобы начать работу с расширением, объявите его в заголовке запроса в параметре X-LP-Client-Extensions. Подставьте retail_app вместо %extension_name%:

Объявление расширения в заголовке запроса:

curl -i -X GET \
  -H "Authorization:eyJhbGciOiJI.eyJzdWIiOiIxMjM0NTY.SflKxwRJSMeKK" \
  -H "Accept-Language:ru-RU" \
  -H "X-LP-Client-Identifier:unique_id" \
  -H "X-LP-Client-Type:App" \
  -H "X-LP-Client-Extensions:%extension_name%" \
  'https://api.life-pos.ru/v4/orgs/123e4567-e89b-12d3-a456-123456780000/deals/sales'

Работа с расширением

В POST-запрос на создание продажи включается массив extensions.retail_app.deal_position_permissions. Каждый элемент массива содержит следующие поля (обязательные отмечены знаком *):

  • position * — объект, содержащий GUID позиции и тип type_of. GUID позиции — необязательное поле и при создании продажи обычно не указывается. В этом случае LIFE POS генерирует GUID позиции сам. Вы можете либо указать его явно, либо создать продажу как обычно и получить идентификаторы позиций в ответе. Во втором случае настройки расширения retail_app передаются PATCH-запросом к предварительно созданной продаже.
  • role * — объект, содержащий GUID роли и тип type_of.
  • Список разрешений для пары «позиция — роль».

Пример запроса:

"extensions" : {
  "retail_app" : {
    "deal_position_permissions" : [
      {
        "position" : {
          "guid" : "75747750-bce4-47bf-bf4e-76b3afbd1e07" ,
          "type_of" : "DealPosition"
        },
        "role" : {
          "guid" : "ffeeddcc-bbaa-0000-0000-000000000002" ,
          "type_of" : "Role"
        },
        "can_edit_name" : true ,
        "can_edit_good_type" : true ,
        "can_edit_uom" : true ,
        "can_edit_quantity" : false ,
        "can_edit_tax" : true ,
        "can_edit_sale_price" : true ,
        "can_delete" : true
      },
      ...
    ]

© ООО «Ритейл Бизнес Софт». Техническая поддержка: support_pos@life-pay.ru, круглосуточно.