NAV Navbar
cURL

МойСклад FiscalAPI

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

Что нужно сделать, чтобы поддержать интеграцию

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

Пример дескриптора

<ServerApplication xmlns="https://apps-api.moysklad.ru/xml/ns/appstore/app/v2"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="https://apps-api.moysklad.ru/xml/ns/appstore/app/v2
      https://apps-api.moysklad.ru/xml/ns/appstore/app/v2/application-v2.xsd">
    <vendorApi>
        <endpointBase>https://example.com/dummy-app</endpointBase>
    </vendorApi>

    <fiscalApi>
        <endpointBase>https://vendor.com/api/fiscal</endpointBase>
        <operationTypes>
            <retailDemand/>
        </operationTypes>
        <paymentTypes>
            <cash/>
            <card/>
            <cashCard/>
        </paymentTypes>
    </fiscalApi>

    <access>
        <resource>https://online.moysklad.ru/api/remap/1.2</resource>
        <scope>admin</scope>
    </access>
</ServerApplication>

Верификация запросов на фискализацию

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

Так же при установке решения генерируется идентификатор регистрации пары "аккаунт-решение" в МоемСкладе.

Публичный ключ и идентификатор "аккаунт-решение" передаются удаленному сервису фискализации через VendorApi в блоке additional.

Ключ и идентификатор "аккаунт-решение" внутри запроса VendorApi на установку решения:

{
  "additional": {
    "fiscalApi": {
      "token": "MIIBIjANBgkqhkiG9w0BAQEFAA...",
      "id": "f5080160-acc6-4241-b8d3-6c5f9731fe5e"
    }
  }
}

Сценарий работы

  1. Пользователь устанавливает решение для фискализации из каталога решений МоегоСклада
  2. Пользователь указывает, для какой точки продаж установлено приложение фискализации
  3. Пользователь устанавливает кассу, синхронизирует настройки
  4. Пользователь создаёт операцию. Например, проводит продажу
  5. Операция передается в выбранное решение для фискализации
  6. Решение выполняет фискализацию и другие манипуляции с чеком, затем возвращает МоемуСкладу чек (файл в формате PDF, сжатый в zip-архив; этот архив передается закодированным в base64 строку)
  7. Касса печатает чек

Поддерживаемые операции

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

Запросы осуществляются на определенный эндпоинт относительно базового адреса. Каждый из запросов содержит в заголовках идентификатор "аккаунт-решение".

Обработка ошибок

Если возникла ошибка при обработке запроса, она должна приходить с HTTP кодом, отличным от 200, 201 и 204

Структура ошибок

Ошибки представляют собой массив errors, содержащий объекты error, каждый из которых описывает отдельную ошибку.

Структура объекта error

Response
412 (application/json)

{
  "errors": [
    {
      "error": "Неправильный или просроченный ключ доступа",
      "code": 12017,
      "error_message": "Измените данные в приложении"
    }
  ]
}

Открытие смены

Запрос на фискализацию открытия смены

Параметры запроса

PUT /1/openshift

Request

Headers

Content-Type:application/json
X-Lognex-Fiscal-Signature: подпись
X-Lognex-Fiscal-Account-Id: идентификатор аккаунт-решение

Body

{
    "retailShift": {
        "meta": {
            "href": "https://api.moysklad.ru/api/remap/1.2/entity/retailshift/2b5eb22f-139e-11e6-9464-e4de00000073",
            "id": "2b5eb22f-139e-11e6-9464-e4de00000073",
            "type": "RetailShift",
            "idType": "native"
        }
    },
    "name": "0001",
    "retailstore": {
        "meta": {
            "href": "https://api.moysklad.ru/api/remap/1.2/entity/retailstore/e827ea09-1447-41b6-8118-13cf438e9145",
            "id": "e827ea09-1447-41b6-8118-13cf438e9145",
            "type": "RetailStore",
            "idType": "native"
        }
    },
    "cashier": {
    "meta": {
        "href": "https://online.moysklad.ru/api/remap/1.2/entity/employee/a4f36276-7b5a-11e6-8a84-bae500000004",
        "id": "a4f36276-7b5a-11e6-8a84-bae500000004",
        "type": "Employee",
        "idType": "native"
            },
    "firstName": "Иван",
    "middleName": "Иванович",
    "lastName": "Иванов"
             },
    "openMoment": "2024-11-18 21:41:46"
}

Параметры ответа

Параметр Описание
fnNumber string Номер ФН
kktRegNumber string Регистрационный номер
fiscalDocNumber string Номер фискального документа
fiscalDocSign string Фискальный признак документа
receipt string Чек в формате base64
shiftNumber string Номер смены
time date Момент фискализации смены в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС

Response
200 (application/json)

Headers

Content-Type:application/json

Body

{
    "fnNumber": "1234",
    "kktRegNumber": "5678",
    "fiscalDocSign": "9012",
    "shiftNumber": "3456",
    "fiscalDocNumber": "7890",
    "time": "2024-11-18 21:41:46"
}

Продажа

Запрос на фискализацию продажи

Параметры запроса​

POST /1/retaildemand

Request

Headers

Content-Type:application/json
X-Lognex-Fiscal-Signature: подпись
X-Lognex-Fiscal-Account-Id: идентификатор аккаунт-решение

Body

{
  "meta": {
    "href": "https://api.moysklad.ru/api/remap/1.0/entity/sale/saleId",
    "id": "saleId",
    "type": "RetailDemand",
    "idType": "native"
  },
  "name": "12345",
  "retailstore": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.0/entity/retailstore/retailStoreId",
      "id": "retailStoreId",
      "type": "RetailStore",
      "idType": "native"
    }
  },
  "retailShift": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.2/entity/retailshift/2b5eb22f-139e-11e6-9464-e4de00000073",
      "id": "2b5eb22f-139e-11e6-9464-e4de00000073",
      "type": "RetailShift",
      "idType": "native"
    }
  },
  "moment": "2024-11-20 14:30:00",
  "payments": {
    "cashSum": "1000",
    "cardSum": "500"
  },
  "phone": "+79051234567",
  "email": "example@example.com",
  "positions": [
    {
      "assortment": {
        "meta": {
          "href": "https://api.moysklad.ru/api/remap/1.0/entity/product/productId",
          "id": "productId",
          "type": "Product",
          "idType": "native"
        },
        "name": "Товар 1"
      },
      "uom": {
        "name": "шт",
        "code": "unit1"
      },
      "quantity": 2.0,
      "price": "500",
      "discount": "10",
      "pack": null,
      "vat": 18.0,
      "vatEnabled": true,
      "marks": ["markCode1", "markCode2"]
    }
  ],
  "cashier": {
    "meta": {
      "href": "https://online.moysklad.ru/api/remap/1.2/entity/employee/a4f36276-7b5a-11e6-8a84-bae500000004",
      "id": "a4f36276-7b5a-11e6-8a84-bae500000004",
      "type": "Employee",
      "idType": "native"
    },
    "firstName": "Иван",
    "middleName": "Иванович",
    "lastName": "Иванов"
  },
  "vatEnabled": true,
  "vatIncluded": true,
  "customerOrder": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.0/entity/customerorder/orderId",
      "id": "orderId",
      "type": "CustomerOrder",
      "idType": "native"
    }
  }
}

Параметры ответа​

Параметр Описание
fnNumber string Номер ФН
kktRegNumber string Регистрационный номер
fiscalDocNumber string Номер фискального документа
fiscalDocSign string Фискальный признак документа
receipt string Чек в формате base64
time date Момент фискализации продажи в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС

Response
200 (application/json)

Headers

Content-Type:application/json

Body

{
    "fnNumber": "1234",
    "kktRegNumber": "5678",
    "fiscalDocSign": "9012",
    "fiscalDocNumber": "7890",
    "time": "2024-11-18 21:41:46"
}

Возврат

Запрос на фискализацию возврата продажи
В составе запроса может быть указана ссылка на документ продажи

Параметры запроса 

POST /1/retaisalesreturn

Request

Headers

Content-Type:application/json
X-Lognex-Fiscal-Signature: подпись
X-Lognex-Fiscal-Account-Id: идентификатор аккаунт-решение

Body

{
  "meta": {
    "href": "https://api.moysklad.ru/api/remap/1.0/entity/retailsalesreturn/retailsalesreturnId",
    "id": "salesReturnId",
    "type": "RetailSalesReturn",
    "idType": "native"
  },
  "name": "12345",
  "retailstore": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.0/entity/retailstore/retailStoreId",
      "id": "retailStoreId",
      "type": "RetailStore",
      "idType": "native"
    }
  },
  "retailShift": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.2/entity/retailshift/2b5eb22f-139e-11e6-9464-e4de00000073",
      "id": "2b5eb22f-139e-11e6-9464-e4de00000073",
      "type": "RetailShift",
      "idType": "native"
    }
  },
  "moment": "2024-11-20 14:30:00",
  "demand": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.0/entity/retaildemand/retaildemandid",
      "id": "e21d80cb-8344-43c6-8c47-bedf0b7b5822",
      "type": "RetailDemand",
      "idType": "native"
    }
  },
  "payments": {
    "cashSum": "1000",
    "cardSum": "500"
  },
  "phone": "+79051234567",
  "email": "example@example.com",
  "positions": [
    {
      "assortment": {
        "meta": {
          "href": "https://api.moysklad.ru/api/remap/1.0/entity/product/productId",
          "id": "productId",
          "type": "Product",
          "idType": "native"
        },
        "name": "Товар 1"
      },
      "uom": {
        "name": "шт",
        "code": "unit1"
      },
      "quantity": 2.0,
      "price": "500",
      "discount": "10",
      "pack": null,
      "vat": 18.0,
      "vatEnabled": true,
      "marks": ["markCode1", "markCode2"]
    }
  ],
  "vatEnabled": true,
  "vatIncluded": true,
  "customerOrder": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.0/entity/customerorder/orderId",
      "id": "orderId",
      "type": "CustomerOrder",
      "idType": "native"
    }
  }
}

Параметры ответа 

Параметр Описание
fnNumber string Номер ФН
kktRegNumber string Регистрационный номер
fiscalDocNumber string Номер фискального документа
fiscalDocSign string Фискальный признак документа
receipt string Чек в формате base64
time date Момент фискализации возврата продажи в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС `

Response
200 (application/json)

Headers

Content-Type:application/json

Body

{
    "fnNumber": "1234",
    "kktRegNumber": "5678",
    "fiscalDocSign": "9012",
    "fiscalDocNumber": "7890",
    "time": "2024-11-18 21:41:46"
}

Внесение средств

Запрос на фискализацию внесения денежных средств в кассу

Параметры запроса 

POST /1/retaildrawercashin

Request

Headers

Content-Type:application/json
X-Lognex-Fiscal-Signature: подпись
X-Lognex-Fiscal-Account-Id: идентификатор аккаунт-решение

Body

{
  "meta": {
    "href": "https://api.moysklad.ru/api/remap/1.2/entity/retaildrawercashin/675b943f-a25b-433c-90e0-5c84c7b0c307",
    "id": "675b943f-a25b-433c-90e0-5c84c7b0c307",
    "type": "RetailDrawerCashIn",
    "idType": "native"
  },
  "retailShift": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.2/entity/retailshift/2b5eb22f-139e-11e6-9464-e4de00000073",
      "id": "2b5eb22f-139e-11e6-9464-e4de00000073",
      "type": "RetailShift",
      "idType": "native"
    }
  },
  "cashier": {
    "meta": {
      "href": "https://online.moysklad.ru/api/remap/1.2/entity/employee/a4f36276-7b5a-11e6-8a84-bae500000004",
      "id": "a4f36276-7b5a-11e6-8a84-bae500000004",
      "type": "Employee",
      "idType": "native"
    },
    "firstName": "Иван",
    "middleName": "Иванович",
    "lastName": "Иванов"
  },
  "name": "0001",
  "retailstore": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.2/entity/retilstore/e827ea09-1447-41b6-8118-13cf438e9145",
      "id": "e827ea09-1447-41b6-8118-13cf438e9145",
      "type": "RetailStore",
      "idType": "native"
    }
  },
  "moment": "2024-11-18 21:41:46",
  "sum": "340"
}

Параметры ответа 

Параметр Описание
fnNumber string Номер ФН
kktRegNumber string Регистрационный номер
fiscalDocNumber string Номер фискального документа
fiscalDocSign string Фискальный признак документа
receipt string Чек в формате base64
time date Момент фискализации внесения средств в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС

Response
200 (application/json)

Headers

Content-Type:application/json

Body

{
    "fnNumber": "1234",
    "kktRegNumber": "5678",
    "fiscalDocSign": "9012",
    "fiscalDocNumber": "7890",
    "time": "2024-11-18 21:41:46"
}

Выплата средств

Запрос на фискализацию выплаты денежных средств из кассы

Параметры запроса

POST /1/retaildrawercashout

Request

Headers

Content-Type:application/json
X-Lognex-Fiscal-Signature: подпись
X-Lognex-Fiscal-Account-Id: идентификатор аккаунт-решение

Body

{
  "meta": {
    "href": "https://api.moysklad.ru/api/remap/1.2/entity/retaildrawercashin/675b943f-a25b-433c-90e0-5c84c7b0c307",
    "id": "675b943f-a25b-433c-90e0-5c84c7b0c307",
    "type": "RetailDrawerCashOut",
    "idType": "native"
  },
  "retailShift": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.2/entity/retailshift/2b5eb22f-139e-11e6-9464-e4de00000073",
      "id": "2b5eb22f-139e-11e6-9464-e4de00000073",
      "type": "RetailShift",
      "idType": "native"
    }
  },
  "name": "0001",
  "retailstore": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.2/entity/retilstore/e827ea09-1447-41b6-8118-13cf438e9145",
      "id": "e827ea09-1447-41b6-8118-13cf438e9145",
      "type": "RetailStore",
      "idType": "native"
    }
  },
  "cashier": {
    "meta": {
      "href": "https://online.moysklad.ru/api/remap/1.2/entity/employee/a4f36276-7b5a-11e6-8a84-bae500000004",
      "id": "a4f36276-7b5a-11e6-8a84-bae500000004",
      "type": "Employee",
      "idType": "native"
    },
    "firstName": "Иван",
    "middleName": "Иванович",
    "lastName": "Иванов"
  },
  "moment": "2024-11-18 21:41:46",
  "sum": "340"
}

Параметры ответа

Параметр Описание
fnNumber string Номер ФН
kktRegNumber string Регистрационный номер
fiscalDocNumber string Номер фискального документа
fiscalDocSign string Фискальный признак документа
receipt string Чек в формате base64
time date Момент фискализации выплаты средств в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС

Response
200 (application/json)

Headers

Content-Type:application/json

Body

{
    "fnNumber": "1234",
    "kktRegNumber": "5678",
    "fiscalDocSign": "9012",
    "fiscalDocNumber": "7890",
    "time": "2024-11-18 21:41:46"
}

Закрытие смены

Запрос на фискализацию закрытия смены

Параметры запроса 

PUT /1/closeshift

Request

Headers

Content-Type:application/json
X-Lognex-Fiscal-Signature: подпись
X-Lognex-Fiscal-Account-Id: идентификатор аккаунт-решение

Body

{
  "retailShift": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.2/entity/retailshift/2b5eb22f-139e-11e6-9464-e4de00000073",
      "id": "2b5eb22f-139e-11e6-9464-e4de00000073",
      "type": "RetailShift",
      "idType": "native"
    }
  },
  "name": "0001",
  "retailstore": {
    "meta": {
      "href": "https://api.moysklad.ru/api/remap/1.2/entity/retailstore/e827ea09-1447-41b6-8118-13cf438e9145",
      "id": "e827ea09-1447-41b6-8118-13cf438e9145",
      "type": "RetailStore",
      "idType": "native"
    }
  },
  "cashier": {
    "meta": {
      "href": "https://online.moysklad.ru/api/remap/1.2/entity/employee/a4f36276-7b5a-11e6-8a84-bae500000004",
      "id": "a4f36276-7b5a-11e6-8a84-bae500000004",
      "type": "Employee",
      "idType": "native"
    },
    "firstName": "Иван",
    "middleName": "Иванович",
    "lastName": "Иванов"
  },
  "closeMoment": "2024-11-18 21:41:46"
}

Параметры ответа 

Параметр Описание
fnNumber string Номер ФН
kktRegNumber string Регистрационный номер
fiscalDocNumber string Номер фискального документа
fiscalDocSign string Фискальный признак документа
receipt string Чек в формате base64
shiftNumber string Номер смены
time date Момент фискализации смены в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
chequesTotal integer Количество чеков за смену
fiscalDocsTotal integer Количество фискальных документов за смену

Response
200 (application/json)

Headers

Content-Type:application/json

Body

{
  "fnNumber": "1234",
  "kktRegNumber": "5678",
  "fiscalDocSign": "9012",
  "shiftNumber": "3456",
  "fiscalDocNumber": "7890",
  "time": "2024-11-18 21:41:46",
  "chequesTotal": 10,
  "fiscalDocsTotal": 8
}