Работа со служебными документами
Генерация и отправка служебных документов
Диадок позволяет сгенерировать следующие ответные служебные документы:
универсальное сообщение,
извещение о получении,
предложение об аннулировании,
отказ от подписи,
отказ от предложения об аннулировании,
уведомление об уточнении,
документ для отмены сведений об отгрузке маркированных товаров.
Эти документы можно отправить (добавить к сообщению) с помощью метода PostMessagePatch (V3) или PostMessagePatch (V4), передав ему структуру MessagePatchToPost или MessagePatchToPostV2 с соответствующим заполненным полем.
Генерация и отправка универсального сообщения
Универсальное сообщение — служебный документ, который может заменить собой извещение о получении (ИоП), уведомление об уточнении (УоУ) и отказ в подписи. Подробная информация об использовании универсального сообщения приведена на странице Переход на универсальные сообщения.
Сгенерировать универсальное сообщение можно с помощью метода GenerateUniversalMessage. В запросе нужно передать идентификатор ящика получателя (boxId), идентификатор отправленного сообщения (messageId) и идентификатор родительской сущности, на которую нужно сформировать универсальное сообщение (attachmentId). Эти значения можно получить из структуры Message.
В теле запроса нужно передать XML-файл с данными для формирования универсального сообщения, соответствующий упрощенной XSD-схеме.
Пример HTTP-запроса метода GenerateUniversalMessage:
POST GenerateUniversalMessage?boxId={{boxId}}&messageId={{messageId}}&attachmentId={{attachmentId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Content-Type: application/xml
Пример тела запроса метода GenerateUniversalMessage:
<UniversalMessage>
<UniversalMessageInfos>
<UniversalMessageInfo StatusCode="1999">
<PlainText>123</PlainText>
</UniversalMessageInfo>
</UniversalMessageInfos>
<Sender Position="Сотрудник" UseDefaultPersonInfo="false">
<Fio FirstName="Иван" LastName="Иванов" MiddleName="Иванович"/>
<Contacts OtherContactInfo="OtherContactInfo">
<Phones>
<Phone>8-343-123-4567</Phone>
</Phones>
<Emails>
<Email>email@sample.com</Email>
</Emails>
</Contacts>
</Sender>
<Recipient Position="Сотрудник" UseDefaultPersonInfo="false">
<Fio FirstName="Петров" LastName="Петр" MiddleName="Петрович"/>
<Contacts OtherContactInfo="OtherContactInfo">
<Phones>
<Phone>8-343-123-4567</Phone>
</Phones>
<Emails>
<Email>email@sample.com</Email>
</Emails>
</Contacts>
</Recipient>
</UniversalMessage>
Пример тела ответа метода GenerateUniversalMessage:
<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="DP_UNISOOBSCH_2BM-6125600340-732644841-202407101103418496883_2BM-9147414342-757645784-202407101104400484330_20250529_3839e349-99d5-4a54-9b5f-546bffbfb44a" ВерсПрог="Diadoc 1.0" ВерсФорм="5.01">
<Документ КНД="1115144">
<СведУС ДатаФорм="29.05.2025" ВремФорм="13.53.27" ИмяПолФайл="ON_NSCHFDOPPR_2BM-9147414342-757645784-202407101104400484330_2BM-6125600340-732644841-202407101103418496883_20250207_30f13ccc-deb2-4d49-8201-0ab211e8683d" />
<СвСобытДок СтатусУС="1999">
<ТекстУС>123</ТекстУС>
</СвСобытДок>
<ОтпрУС ИдОтпрУС="2BM-9147414342-757645784-202407101104400484330">
<СвЛицОтпрУС Должн="Сотрудник">
<ФИО Фамилия="Иванов" Имя="Иван" Отчество="Иванович" />
<Контакт>
<Тлф>8-343-123-4567</Тлф>
<ЭлПочта>email@google.com</ЭлПочта>
<ИнКонт>OtherContactInfo</ИнКонт>
</Контакт>
</СвЛицОтпрУС>
</ОтпрУС>
<ПолучУС ИдПолучУС="2BM-6125600340-732644841-202407101103418496883">
<СвЛицПолучУС Должн="Сотрудник">
<ФИО Фамилия="Петр" Имя="Петров" Отчество="Петрович" />
<Контакт>
<Тлф>8-343-123-4567</Тлф>
<ЭлПочта>email@google.com</ЭлПочта>
<ИнКонт>OtherContactInfo</ИнКонт>
</Контакт>
</СвЛицПолучУС>
</ПолучУС>
</Документ>
</Файл>
В ответе метод вернет сгенерированный XML-файл универсального сообщения, соответствующий XSD-схеме, для сущности attachmentId из сообщения messageId в ящике boxId. Отправить полученный XML-файл можно с помощью метода PostMessagePatch (V4), передав его в поле UniversalMessages структуры MessagePatchToPostV2.
В теле запроса метода передайте структуру MessagePatchToPostV2, заполненную следующими данными:
BoxId— идентификатор ящика, в котором находится исходное сообщение;
MessageId— идентификатор сообщения, к которому относится дополнение;
UniversalMessages— вложенная структура для передачи XML-файлов универсальных сообщений:
ParentEntityId— идентификатор документа, к которому относится универсальное сообщение;
CodeGroup— группа кода универсального сообщения, которая определяет назначение универсального сообщения: извещение о получении, уведомление об уточнении или отказ в подписи.
UniversalMessageContent— содержимое XML-файла универсального сообщения, сконвертированное в Base64-строку;
Labels— метки (необязательно).
Примечание
На время переходного периода вместе с универсальным сообщением нужно передать соответствующий служебный документ текущего формата. Это значит, что помимо данных в поле UniversalMessages нужно передать данные в одном из полей — Receipts, CorrectionRequests или XmlSignatureRejections.
Пример тела запроса метода PostMessagePatch:
{
"BoxId": "{{boxId}}",
"MessageId": "bbcedb0d-ce34-4e0d-b321-3f600c920935",
"Receipts": [
{
"ParentEntityId":"30cf2c07-7297-4d48-bc6f-ca7a80e2cf95&",
"SignedContent":
{
"Content": "PD94bWwgdmVyc2l...LDQudC7Pg==", // содержимое XML-файла в кодировке base-64
"Signature": "MIIN5QYJKoZIhvc...KsTM6zixgz" // содержимое файла подписи в кодировке base-64
}
}
],
"UniversalMessages": [
{
"ParentEntityId":"30cf2c07-7297-4d48-bc6f-ca7a80e2cf95&",
"CodeGroup": "Receipt",
"UniversalMessageContent":
{
"Content": "PD94bWwgdmVyc2l...LDQudC7Pg==" // содержимое XML-файла в кодировке base-64
}
}
]
}
Генерация и отправка извещения о получении
Возможность отправки извещения о получении для каждого типа документа задается в свойствах вида документооборота.
Сгенерировать извещение о получении можно с помощью метода GenerateReceiptXml (V2). В запросе нужно передать идентификатор ящика получателя (boxId) и структуру ReceiptGenerationRequestV2 со следующими данными:
messageId— идентификатор отправленного сообщения,
attachmentId— идентификатор сущности титула продавца.
Эти значения можно получить из структуры Message.
Данные подписанта нужно передать в универсальном формате в виде XML-файла, сконвертированного в Base64-строку.
Пример HTTP-запроса метода GenerateReceiptXml:
POST V2/GenerateReceiptXml?boxid={{boxId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json
Content-Type: application/json charset=utf-8
Пример тела запроса метода GenerateReceiptXml:
{
"MessageId": "bbcedb0d-ce34-4e0d-b321-3f600c920935",
"AttachmentId": "30cf2c07-7297-4d48-bc6f-ca7a80e2cf95",
"SignerContent": "PD94bWwgdmVyc2l...LDQudC7Pg==" // содержимое XML-файла с данными подписанта в кодировке Base-64
}
Пример тела ответа метода GenerateReceiptXml:
<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="DP_IZVPOL_2BM-9616675014-961601000-201906250926373816603_2BM-7770357771-2012082810454029703720000000000_20230904_54c96f37-a745-4e02-8dda-41404992952f" ВерсПрог="Diadoc 1.0" ВерсФорм="1.03">
<Документ КНД="1115110">
<УчастЭДО ИдУчастЭДО="2BM-7770357771-2012082810454029703720000000000">
<ЮЛ НаимОрг="ОАО" ИННЮЛ="7770357771" КПП="770101001"/>
</УчастЭДО>
<СвИзвПолуч ДатаПол="04.09.2023" ВремяПол="13.32.26">
<СведПолФайл ИмяПолФайла="ON_NSCHFDOPPR_2BM-7770357771-2012082810454029703720000000000_2BM-9616675014-961601000-201906250926373816603_20200826_6efc7ad3-88ff-485d-86bb-c84c2262caf2">
<ЭППолФайл>MIINB3RI=...</ЭППолФайл>
</СведПолФайл>
</СвИзвПолуч>
<ОтпрДок ИдУчастЭДО="2BM-9616675014-961601000-201906250926373816603">
<ЮЛ НаимОрг="ООО" ИННЮЛ="9616675014" КПП="961601000"/>
</ОтпрДок>
<Подписант ТипПодпис="1" СтатПодп="2" Должн="Подписант-Должн">
<ФИО Фамилия="Петров" Имя="Петр" Отчество="Петрович"/>
<СвДоверЭл СпособПредставл="1" НомДовер="4a743152-e772-4249-9a47-e2e290258e79" ДатаВыдДовер="17.09.2018" ВнНомДовер="123" ДатаВнРегДовер="18.09.2018" ИдСистХран="СвДоверЭл-ИдСистХран"/>
</Подписант>
</Документ>
</Файл>
В ответе метод вернет сгенерированный XML-файл извещения о получении для сущности attachmentId из сообщения messageId в ящике boxId. Отправить полученный XML-файл можно с помощью метода PostMessagePatch (V4), передав его в поле Receipts структуры MessagePatchToPostV2.
В теле запроса метода передайте структуру MessagePatchToPostV2, заполненную следующими данными:
BoxId— идентификатор ящика, в котором находится исходное сообщение;
MessageId— идентификатор сообщения, к которому относится дополнение;
Receipts— вложенная структура для передачи XML-файлов извещений о получении:
ParentEntityId— идентификатор документа, к которому относится извещение;
SignedContent.Content— содержимое XML-файла извещения, сконвертированное в Base64-строку;
SignedContent.Signature— содержимое файла подписи извещения, сконвертированное в Base64-строку;
Labels— метки (необязательно).
Пример тела запроса метода PostMessagePatch:
{
"BoxId": "{{boxId}}",
"MessageId": "bbcedb0d-ce34-4e0d-b321-3f600c920935",
"Receipts": [
{
"ParentEntityId":"30cf2c07-7297-4d48-bc6f-ca7a80e2cf95&",
"SignedContent":
{
"Content": "PD94bWwgdmVyc2l...LDQudC7Pg==", // содержимое XML-файла в кодировке base-64
"Signature": "MIIN5QYJKoZIhvc...KsTM6zixgz" // содержимое файла подписи в кодировке base-64
},
"Comment": "Подписание извещения о получении счета-фактуры",
"Label": "label"
}
]
}
Генерация уведомления об уточнении
Чтобы создать запрос на исправление или корректировку счета-фактуры, сгенерируйте и отправьте уведомление об уточнении.
Сгенерировать уведомление об уточнении можно с помощью метода GenerateInvoiceCorrectionRequestXml (V2). Данные подписанта нужно передать в универсальном формате в виде XML-файла, сконвертированного в Base64-строку.
Пример HTTP-запроса метода GenerateInvoiceCorrectionRequestXml:
POST /V2/GenerateInvoiceCorrectionRequestXml?boxId={{boxId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json; charset=utf-8
Content-Type: application/json
Пример тела запроса метода GenerateInvoiceCorrectionRequestXml:
{
"ErrorMessage": "Текстовый комментарий",
"MessageId": "{{messageId}}",
"AttachmentId": "{{documentId}}",
"SignerContent": "PD94bWwgdmVyc2l...LDQudC7Pg==" // содержимое XML-файла с данными подписанта в кодировке Base-64
}
Пример тела ответа метода GenerateInvoiceCorrectionRequestXml:
<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="DP_UVUTOCH_2BM-1839264655-732644841-202407101103418496883_2BM-9147414342-757645784-202407101104400484330_20250207_8bc3aae6-ce88-459e-943a-37094526c16c" ВерсПрог="Diadoc 1.0" ВерсФорм="1.03">
<Документ КНД="1115113">
<УчастЭДО ИдУчастЭДО="2BM-9147414342-757645784-202407101104400484330">
<ЮЛ НаимОрг="Получатель" ИННЮЛ="8147414342" КПП="857645784" />
</УчастЭДО>
<СвУведУточ ДатаПол="07.02.2025" ВремяПол="10.06.17">
<СведПолФайл ИмяПолФайла="ON_NSCHFDOPPR_2BM-9147414342-757645784-202407101104400484330_2BM-1839264655-732644841-202407101103418496883_20250207_30f13ccc-deb2-4d49-8201-0ab211e8683d">
<ЭППолФайл>...</ЭППолФайл>
</СведПолФайл>
<ТекстУведУточ>Текстовый комментарий</ТекстУведУточ>
</СвУведУточ>
<ОтпрДок ИдУчастЭДО="2BM-1839264655-732644841-202407101103418496883">
<ЮЛ НаимОрг="Отправитель" ИННЮЛ="8125600340" КПП="832644841" />
</ОтпрДок>
<Подписант ТипПодпис="1" СтатПодп="2" Должн="Подписант-Должн">
<ФИО Фамилия="Фамилия" Имя="Имя" Отчество="Отчество" />
<СвДоверЭл СпособПредставл="1" НомДовер="c8a8949a-4907-4c36-9f48-7efb2fba1987" ДатаВыдДовер="17.09.2024" ВнНомДовер="123" ДатаВнРегДовер="18.09.2024" СвСистХран="СвДоверЭл-ИдСистХран" />
</Подписант>
</Документ>
</Файл>
В ответе метод вернет сгенерированный XML-файл уведомления. Отправить полученный XML-файл можно с помощью метода PostMessagePatch (V4), передав его в поле CorrectionRequests структуры MessagePatchToPostV2.
Генерация и отправка предложения об аннулировании
Если вы обнаружили ошибки в отправленном документе, его можно аннулировать. Для этого сгенерируйте и отправьте предложение об аннулировании.
Сгенерировать предложение об аннулировании можно с помощью метода GenerateRevocationRequestXml (V2). Можно отправить предложение об аннулировании форматов 1.01 и 1.02.
Пример HTTP-запроса метода GenerateRevocationRequestXml:
POST V2/GenerateRevocationRequestXml?boxId={{boxId}}&messageId={{messageId}}&attachmentId={{attachmentId}}&contentTypeId=revocation_request_02 HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json
Content-Type: application/json charset=utf-8
Пример тела запроса метода GenerateRevocationRequestXml:
{
"Comment": "Текстовый комментарий",
"Signer": {
"SignerDetails": {
"Surname": "Иванов",
"FirstName": "Иван",
"Patronymic": "Иванович",
"JobTitle": "Сотрудник",
"Inn": "7713964071"
}
}
}
Пример тела ответа метода GenerateRevocationRequestXml:
<?xml version="1.0" encoding="windows-1251"?><Файл ИдФайл="DP_PRANNUL_2BM-9147414342-757645784-202407101104400484330_2BM-1839264655-732644841-202407101103418496883_20250423_3d2a09bf-748d-4583-b4b3-fd91bf0092b3" ВерсПрог="Diadoc 1.0" ВерсФорм="1.02"><Документ><УчастЭДО ИдУчастЭДО="2BM-1839264655-732644841-202407101103418496883">
<ЮЛ НаимОрг="Отправитель" ИННЮЛ="1839264655" КПП="732644841" />
</УчастЭДО><СвПредАн><СведАнФайл ИмяАнФайла="ON_NSCHFDOPPR_2BM-9147414342-757645784-202407101104400484330_2BM-1839264655-732644841-202407101103418496883_20250207_30f13ccc-deb2-4d49-8201-0ab211e8683d"><ЭЦПАнФайл>MIINLgYLwVeXpzCZ25uwFn
</ЭЦПАнФайл>
</СведАнФайл><ТекстПредАн>Текстовый комментарий
</ТекстПредАн>
</СвПредАн><НапрПредАн ИдУчастЭДО="2BM-9147414342-757645784-202407101104400484330">
<ЮЛ НаимОрг="Получатель" ИННЮЛ="9147414342" КПП="757645784" />
</НапрПредАн><Подписант Должность="Сотрудник">
<ФИО Фамилия="Иванов" Имя="Иван" Отчество="Иванович" />
</Подписант>
</Документ>
</Файл>
В ответе метод вернет сгенерированный XML-файл предложения об аннулировании. Полученный XML-файл можно подписать электронной подписью и отправить с помощью метода PostMessagePatch (V4), передав его в поле RevocationRequests структуры MessagePatchToPostV2.
В теле запроса метода передайте структуру MessagePatchToPostV2, заполненную следующими данными:
BoxId— идентификатор ящика, в котором находится исходное сообщение;
MessageId— идентификатор сообщения, к которому относится дополнение;
RevocationRequests— вложенная структура для передачи XML-файлов предложений об аннулировании:
ParentEntityId— идентификатор документа, к которому относится предложение;
SignedContent.Content— содержимое XML-файла предложения об аннулировании, сконвертированное в Base64-строку;
SignedContent.Signature— содержимое файла подписи предложения об аннулировании, сконвертированное в Base64-строку;
Labels— метки (необязательно).
Пример тела запроса метода PostMessagePatch:
{
"BoxId": "{{boxId}}",
"MessageId": "e9d6b396-934f-4ab5-801a-212c2bc0e1f8",
"RevocationRequests": [
{
"ParentEntityId": "07946392-8e2c-4df5-9b13-97b8b329befe",
"SignedContent":
{
"Content": "PD94bWwgdmVyc2l...LDQudC7Pg==", // содержимое XML-файла в кодировке base-64
"Signature": "MIIN5QYJKoZIhvc...KsTM6zixgz" // содержимое файла подписи в кодировке base-64
}
}
]
}
Генерация и отправка отказа от подписи и отказа от предложения об аннулировании
Сгенерировать отказ можно с помощью метода GenerateSignatureRejectionXml (V2). Данные подписанта нужно передать в универсальном формате в виде XML-файла, сконвертированного в Base64-строку.
Пример HTTP-запроса метода GenerateSignatureRejectionXml:
POST V2/GenerateSignatureRejectionXml?boxid={{boxId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Content-Type: application/json charset=utf-8
Пример тела запроса метода GenerateSignatureRejectionXml:
{
"ErrorMessage": "Текстовый комментарий",
"MessageId": "bbcedb0d-ce34-4e0d-b321-3f600c920935",
"AttachmentId": "30cf2c07-7297-4d48-bc6f-ca7a80e2cf95",
"SignerContent": "PD94bWwgdmVyc2l...LDQudC7Pg==" // содержимое XML-файла с данными подписанта в кодировке Base-64
}
Пример тела ответа метода GenerateSignatureRejectionXml:
<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="DP_UVUTOCH_2BM-9017770974-757645784-202407101104400484330_2BM-5242989368-732644841-202407101103418496883_20250416_6a0d86e6-f052-455d-a62b-7e684a3906ad" ВерсПрог="Diadoc 1.0" ВерсФорм="1.03">
<Документ КНД="1115113">
<УчастЭДО ИдУчастЭДО="2BM-5242989368-732644841-202407101103418496883">
<ЮЛ НаимОрг="Продавец" ИННЮЛ="5242989368" КПП="732644841"/>
</УчастЭДО>
<СвУведУточ ДатаПол="16.04.2025" ВремяПол="10.05.46">
<СведПолФайл ИмяПолФайла="Group12">
<ЭППолФайл>MIIMiQYJKoZIhv...UNp8A
</ЭППолФайл>
</СведПолФайл>
<ТекстУведУточ>Текстовый комментарий
</ТекстУведУточ>
</СвУведУточ>
<ОтпрДок ИдУчастЭДО="2BM-9017770974-757645784-202407101104400484330">
<ЮЛ НаимОрг="Покупатель" ИННЮЛ="9017770974" КПП="757645784"/>
</ОтпрДок>
<Подписант ТипПодпис="1" СтатПодп="2" Должн="Не указана">
<ФИО Фамилия="Иванов" Имя="Иван" Отчество="Иванович"/>
<СвДоверЭл СпособПредставл="1" НомДовер="4a743152-e772-4249-9a47-e2e290258e79" ДатаВыдДовер="17.09.2018" ВнНомДовер="123" ДатаВнРегДовер="18.09.2018" СвСистХран="СвДоверЭл-ИдСистХран"/>
</Подписант>
</Документ>
</Файл>
В ответе метод вернет сгенерированный XML-файл отказа. Полученный XML-файл можно подписать электронной подписью и отправить с помощью метода PostMessagePatch (V4), передав его в поле XmlSignatureRejections структуры MessagePatchToPostV2.
В теле запроса метода передайте структуру MessagePatchToPostV2, заполненную следующими данными:
BoxId— идентификатор ящика, в котором находится исходное сообщение;
MessageId— идентификатор сообщения, к которому относится дополнение;
XmlSignatureRejections— вложенная структура для передачи XML-файлов отказов:
ParentEntityId— идентификатор предложения об аннулировании или документа, к которому относится отказ;
SignedContent.Content— содержимое XML-файла отказа, сконвертированное в Base64-строку;
SignedContent.Signature— содержимое файла подписи отказа, сконвертированное в Base64-строку;
Labels— метки (необязательно).
Пример тела запроса метода PostMessagePatch:
{
"BoxId": "{{boxId}}",
"MessageId": "3815fb36-aabe-4588-8fe7-a1a33154278c",
"XmlSignatureRejections": [
{
"ParentEntityId": "33ba16c68-cc54-4b25-b81c-0e79134e219d",
"SignedContent":
{
"Content": "PD94bWwgdmVyc2l...LDQudC7Pg==", // содержимое XML-файла в кодировке base-64
"Signature": "MIIN5QYJKoZIhvc...KsTM6zixgz" // содержимое файла подписи в кодировке base-64
}
}
]
}
Генерация и отправка документа для отмены сведений об отгрузке маркированных товаров
Чтобы отменить сведения об отгрузке маркированных товаров, сгенерируйте и отправьте специальный служебный документ.
Сгенерировать документ для отмены сведений об отгрузке можно с помощью метода GenerateTtGisFixationCancellationRequest.
Пример HTTP-запроса метода GenerateTtGisFixationCancellationRequest:
POST /GenerateTtGisFixationCancellationRequest?boxId={{boxId}}&messageId={{messageId}}&documentId={{documentId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json; charset=utf-8
Пример тела ответа метода GenerateTtGisFixationCancellationRequest:
{
"fixation_document_id": "FIX_ON_NSCHFDOPPR_2BM-9147414342-757645784-202407101104400484330_2BM-3175546205-732644841-202407101103418496883_20250620_fc857ac8-5e25-4cd3-91fd-77f0a8e141d4_0_1_1_0_0_00",
"inn": "1234567890"
}
В ответе метод вернет сгенерированный JSON-файл документа. Полученный файл нужно подписать электронной подписью и поместить в структуру TtGisFixationCancellationRequestAttachment. Отправить эту структуру можно с помощью метода PostMessagePatch (V3) или PostMessagePatch (V4), передав ее в поле TtGisFixationCancellationRequests структуры MessagePatchToPost или MessagePatchToPostV2 соответственно.
В теле запроса метода PostMessagePatch (V4) передайте структуру MessagePatchToPostV2, заполненную следующими данными:
BoxId— идентификатор ящика, в котором находится исходное сообщение;
MessageId— идентификатор сообщения, к которому относится дополнение;
TtGisFixationCancellationRequests— вложенная структура для передачи документов для отмены сведений об отгрузке маркированных товаров:
DocumentId— идентификатор документа, содержащего маркированные товары, сведения об отгрузки которых необходимо отменить;
SignedContent.Content— содержимое JSON-файла документа для отмены сведений об отгрузке, сконвертированное в Base64-строку;
SignedContent.Signature— содержимое файла подписи документа для отмены сведений об отгрузке, сконвертированное в Base64-строку.
Пример тела запроса метода PostMessagePatch:
{
"BoxId": "{{boxId}}",
"MessageId": "d94982e8-7eb9-4993-8c52-41c14e3fc3a8",
"TtGisFixationCancellationRequests": [
{
"DocumentId": "05ea290d-9aa1-4291-a87b-d30be9ccf5b7",
"SignedContent":
{
"Content": "eyJpbm4iOiI2MT...F8wMCJ9", // содержимое XML-файла в кодировке base-64
"Signature": "MIIMtAYJKoZIhvc...KW1oPlA==" // содержимое файла подписи в кодировке base-64
}
}
]
}
Универсальный формат данных подписанта в служебных документах
При генерации извещения о получении, отказа от подписи и уведомления об уточнении нужно в поле SignerContent передать упрощенный XML-файл с данными подписанта в универсальном бинарном формате (подробнее в разделе Универсальный формат заполнения данных подписанта). Файл необходимо сформировать в соответствии с упрощенной XSD-схемой подписанта для служебных документов.
Пример упрощенного XML-файла подписанта:
<?xml version="1.0" encoding="UTF-8"?>
<Signer SignerStatus="2" SignatureType="1">
<Certificate CertificateBytes="PD94bWwgdmVy...c2l"/>
<Fio LastName="Петров" FirstName="Петр" MiddleName="Петрович"/>
<Position PositionSource="Manual">Подписант-Должн</Position>
<PowerOfAttorney>
<Electronic MethodOfProviding="1">
<Manual RegistrationNumber="4a743152-e772-4249-9a47-e2e290258e79" RegistrationDate="17.09.2018" InternalNumber="123" InternalDate="18.09.2018" SystemId="СвДоверЭл-ИдСистХран"/>
</Electronic>
</PowerOfAttorney>
</Signer>
SignerStatus— статус подписанта, может принимать значения:1— лицо, имеющее полномочия на подписание документа без доверенности,2— лицо, имеющее полномочия на подписание документа на основании доверенности в электронной форме,3— лицо, имеющее полномочия на подписание документа на основании доверенности на бумажном носителе.
SignatureType— тип подписи, может принимать значения:1— усиленная квалифицированная электронная подпись,2— простая электронная подпись,3— усиленная неквалифицированная электронная подпись.
Certificate— данные сертификата подписанта. Обязательное поле. Можно передать:CertificateThumbprint— отпечаток сертификата,CertificateBytes— сертификат, сериализованный в массив байтов в DER-кодировке.
Fio— фамилия, имя, отчество подписанта.LastName— фамилия подписанта, обязательное поле,FirstName— имя подписанта, обязательное поле,MiddleName— отчество подписанта.
Position— должность подписанта.PositionSource— способ заполнения должности сотрудника. Может принимать значения:Employee— заполнение из данных сотрудника в Диадоке,Certificate— заполнение из данных в сертификате,Manual— ручное заполнение данных.
PowerOfAttorney— сведения о машиночитаемой доверенности. Доверенность может быть электронной или бумажной.Electronic— электронная доверенность. Данные доверенности можно заполнить автоматически (выбрать из хранилища Диадока) или вручную.MethodOfProviding— способ представления доверенности. Обязательное поле. Может принимать значения:1— представление доверенности осуществляется посредством ее включения в пакет электронных документов,2— представление доверенности способом, не предусматривающим его включение в пакет электронных документов.
Storage— автоматическое заполнение информации по доверенности на основе трех обязательных реквизитов: номера доверенности, ИНН доверителя и ИНН представителя:RegistrationNumber— номер доверенности, обязательное поле,IssuerInn— ИНН организации, выдавшей доверенность, обязательное поле,RepresentativeInn— ИНН представителя,UseDefault— признак того, что нужно автоматически заполнить информацию на основе доверенности, используемой сотрудником по умолчанию. Обязательное поле.
Manual— ручное заполнение данных доверенности. Можно указать следующие данные:RegistrationNumber— номер доверенности, обязательное поле,RegistrationDate— дата совершения (выдачи) доверенности, обязательное поле,InternalNumber— внутренний регистрационный номер доверенности,InternalDate— дата внутренней регистрации доверенности,SystemId— идентифицирующая информация об информационной системе, в которой осуществляется хранение доверенности.
Paper— бумажная доверенность. Можно указать следующие данные:Fio— фамилия, имя, отчество (при наличии) лица, подписавшего доверенность,InternalNumber— внутренний регистрационный номер доверенности, обязательное поле,RegistrationDate— дата совершения (выдачи) доверенности, обязательное поле,IssuerInfo— сведения о доверителе.
Получение служебных документов
Диадок позволяет получить информацию о служебных документах из сообщения.
Получение универсального сообщения
Чтобы получить универсальное сообщение, можно воспользоваться следующими способами:
методы работы с сообщениями, например, GetMessage (V6),
методы работы с документооборотом, например, GetDocflows (V4).
Метод GetMessage
Чтобы получить универсальное сообщение методом GetMessage (V6), нужно передать в запросе:
boxId— идентификатор ящика отправителя,
messageId— идентификатор отправленного сообщения,
entityId— идентификатор родительской сущности, на которую сформировано универсальное сообщение.
Эти значения можно получить из структуры Message.
В ответе метод вернет структуру Message с вложенной структурой Entity. Универсальное сообщение будет представлено структурой Entity со следующими полями:
EntityType = Attachment,
AttachmentType = UniversalMessage.
Информация об универсальном сообщении будет хранится в поле Entity.UniversalMessageInfo в виде структуры UniversalMessageInfo.
Пример HTTP-запроса метода GetMessage:
GET /V6/GetMessage?boxId={{boxId}}&messageId={{messageId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json
Пример ответа метода GetMessage:
{
"CreatedFromDraftId": "",
"DraftIsLocked": false,
"DraftIsRecycled": false,
"DraftIsTransformedToMessageIdList": [
],
"Entities": [
{
"AttachmentType": "XmlTorg12",
<...>
},
{
"AttachmentType": "XmlTorg12BuyerTitle",
<...>
},
{
"AttachmentType": "InvoiceReceipt",
"AuthorUserId": "",
"Content": {
"Size": 5575
},
"ContentTypeId": "receipt_133_01_03",
"EntityId": "529b4e21-a982-4364-a52b-fff1f1cd8409",
"EntityType": "Attachment",
"FileName": "DP_IZVPOL_2BM-7743911253-774301001-201512151245491116742_2BM-7717704518-770101001-201708200655456926042_20250528_7ce74dc9-0943-4fb9-90cd-327d445e5198.xml",
"IsApprovementSignature": false,
"IsEncryptedContent": false,
"Labels": [
],
"NeedReceipt": false,
"NeedRecipientSignature": false,
"ParentEntityId": "e9bfc749-51e7-4575-a587-7033b9f2e882",
"RawCreationDate": 638840213353178450
},
{
"AttachmentType": "UniversalMessage",
"AuthorUserId": "",
"Content": {
"Size": 856
},
"ContentTypeId": "receipt_uni_01",
"EntityId": "647250f0-c833-4cd2-a6b1-afe2ee812986",
"EntityType": "Attachment",
"FileName": "DP_UNISOOBSCH_2BM-7743911253-774301001-201512151245491116742_2BM-7717704518-770101001-201708200655456926042_20250528_6ca0fdf6-0ab4-461b-9c67-1b5d9c200bbb.xml",
"IsApprovementSignature": false,
"IsEncryptedContent": false,
"Labels": [
],
"NeedReceipt": false,
"NeedRecipientSignature": false,
"ParentEntityId": "e9bfc749-51e7-4575-a587-7033b9f2e882",
"RawCreationDate": 638840213353178450,
"UniversalMessageInfo": {
"CodeGroup": "Receipt",
"Events": [
{
"PlainText": "",
"StatusCode": 1999
}
]
}
}
],
"FromBoxId": "eab6c66b8f644ada8cf04c6a2b7ba915@diadoc.ru",
"FromTitle": "Отправитель",
"IsDeleted": false,
"IsDraft": false,
"IsInternal": false,
"IsProxified": false,
"IsReusable": false,
"IsTest": false,
"LastPatchTimestampTicks": 638840428633821944,
"LockMode": "None",
"MessageId": "d213fc6e-1c0c-4ced-ae35-9078c895b92b",
"MessageType": "Letter",
"PacketIsLocked": false,
"ProxyBoxId": "",
"ProxyTitle": "",
"TimestampTicks": 638840213224709349,
"ToBoxId": "1234b472842f47baa1a309100064ace4@diadoc.ru",
"ToTitle": "Получатель"
}
Метод GetMessage (V6) не возвращает содержимое универсального сообщения, а только информацию о нем. Чтобы получить содержимое, используйте метод GetEntityContent (V4).
Метод GetDocflows
Чтобы получить универсальное сообщение методом GetDocflows (V4), нужно передать в запросе идентификатор ящика отправителя boxId, а в теле запроса — идентификатор документа в виде пары MessageId и EntityId.
Эти значения можно получить из структуры Message.
В ответе метод вернет структуру GetDocflowBatchResponseV4 с вложенной структурой Documents.Docflow, в которой универсальное сообщение UniversalMessageAttachmentDocflow вернется в поле UniversalMessage одной из следующих структур:
ReceiptDocflowV4 — для извещения о получении,
AmendmentRequestDocflowV4 — для уведомления об уточнении,
SignatureRejectionDocflowV4 — для отказа в подписи.
Пример HTTP-запроса метода GetDocflows:
POST /V4/GetDocflows?boxId={{boxId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Content-Type: application/json charset=utf-8
Accept: application/json
Пример тела запроса метода GetDocflows:
{
"Requests": [
{
"DocumentId": {
"MessageId": "d213fc6e-1c0c-4ced-ae35-9078c895b92b",
"EntityId": "e9bfc749-51e7-4575-a587-7033b9f2e882"
}
}
]
}
Пример ответа метода GetDocflows:
{
"Documents": [
{
"Docflow": {
"Confirmation": {...},
"DocflowStatus": {...},
"OuterDocflowEntities": [...],
"OuterDocflows": [...],
"RecipientReceipt": {
"Confirmation": {...},
"DeliveredAt": {...},
"IsFinished": true,
"ReceiptAttachment": {
"Attachment": {
"AttachmentFilename": "DP_IZVPOL_2BM-7743911253-774301001-201512151245491116742_2BM-7717704518-770101001-201708200655456926042_20250528_7ce74dc9-0943-4fb9-90cd-327d445e5198.xml",
"DisplayFilename": "Извещение о получении исправления",
"Entity": {
"Content": {
"Size": 5575
},
"CreationTimestamp": {
"Ticks": 638840213353178450
},
"EntityId": "529b4e21-a982-4364-a52b-fff1f1cd8409"
}
},
"ContentTypeId": "receipt_133_01_03",
"Signature": {
"CadesT": {
"Content": {
"Size": 7098
},
"CreationTimestamp": {
"Ticks": 638840213356162462
},
"EntityId": "5a6cdfb3-973f-47b2-b1cb-19b228d1eb2f"
},
"Cms": {
"Content": {
"Size": 3466
},
"CreationTimestamp": {
"Ticks": 638840213353178450
},
"EntityId": "620dcec7-1a09-4525-8ccd-4e6a273201ab"
},
"DeliveredAt": {
"Ticks": 638840213356162462
},
"IsValid": true,
"PowerOfAttorneyAttachmentStatus": {
"StatusName": "PowerOfAttorneyNotRequired"
},
"SignerBoxId": "4926b472842f47baa1a309100064ace4@diadoc.ru",
"SignerDepartmentId": "00000000-0000-0000-0000-000000000000"
}
},
"SentAt": {...},
"Status": "Finished",
"UniversalMessage": {
"Attachment": {
"AttachmentFilename": "DP_UNISOOBSCH_2BM-7743911253-774301001-201512151245491116742_2BM-7717704518-770101001-201708200655456926042_20250528_6ca0fdf6-0ab4-461b-9c67-1b5d9c200bbb.xml",
"DisplayFilename": "Извещение о получении исправления",
"Entity": {
"Content": {
"Size": 856
},
"CreationTimestamp": {
"Ticks": 638840213353178450
},
"EntityId": "647250f0-c833-4cd2-a6b1-afe2ee812986"
}
},
"ContentTypeId": "receipt_uni_01",
"MessageInfo": {
"CodeGroup": "Receipt",
"Events": [
{
"PlainText": "",
"StatusCode": 1999
}
]
}
}
},
"RecipientResponse": {...},
"ResolutionEntities": {...},
"SenderReceipt": {...},
"SenderTitle": {...}
},
"DocumentId": {...},
"DocumentInfo": {...},
"LastEvent": {...}
}
]
}
Получение извещения о получении
После получения титула продавца покупатель формирует извещение о получении титула и отправляет его продавцу. Получить извещение о получении можно с помощью метода GetMessage (V5).
В запросе нужно передать:
boxId— идентификатор ящика отправителя,
messageId— идентификатор отправленного сообщения с титулом продавца,
entityId— идентификатор отправленного титула продавца.
Эти значения можно получить из структуры Message.
В ответе метод вернет структуру Message с вложенной структурой Entity. Извещение о получении будет представлено структурой Entity со следующими полями:
EntityType = Attachment,
AttachmentType = InvoiceReceipt.
Пример HTTP-запроса метода GetMessage:
GET /V5/GetMessage?boxId={{boxId}}&messageId={{messageId}}&entityId={{entityId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json
Content-Type: application/json charset=utf-8
Пример тела ответа метода GetMessage:
{
"EntityType": "Attachment",
"EntityId": "1d7b2e96-9945-41ab-aeea-2f310382bfad",
"ParentEntityId": "45d16c54-8700-4882-afaf-97678d6ed135",
"Content": "lores ipsum",
"AttachmentType": "InvoiceReceipt",
"FileName": "DP_IZVPOL_2BM-9610384428-961001000-201510080625090688235_2BM-9653544919-965301000-201508270726013081470_20151008_6bbfab54-4e9f-4ca1-99eb-37f34880a784.xml",
"NeedRecipientSignature": false,
"SignerBoxId": "",
"NotDeliveredEventId": "",
"RawCreationDate": 635798950114653648,
"SignerDepartmentId": "",
"NeedReceipt": false,
"IsApprovementSignature": false,
"IsEncryptedContent": false
}
Получение подтверждения оператора
После отправки титула продавца Диадок автоматически формирует подтверждение оператора о дате получения документа. Получить подтверждение оператора можно с помощью метода GetMessage (V5).
В запросе нужно передать:
boxId— идентификатор ящика отправителя,
messageId— идентификатор отправленного сообщения с титулом продавца,
entityId— идентификатор отправленного титула продавца.
Эти значения можно получить из структуры Message.
В ответе метод вернет структуру Message с вложенной структурой Entity. Подтверждение оператора будет представлено структурой Entity со следующими полями:
EntityType = Attachment,
AttachmentType = InvoiceConfirmation.
Пример HTTP-запроса метода GetMessage:
GET /V5/GetMessage?boxId={{boxId}}&messageId={{messageId}}&entityId={{entityId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json
Content-Type: application/json charset=utf-8
Пример ответа метода GetMessage:
{
"EntityType": "Attachment",
"EntityId": "9955dccd-82fd-4412-b953-7854e102f782",
"ParentEntityId": "736aa0c4-12f5-4412-bfea-1de59948b904",
"Content": "lores ipsum",
"AttachmentType": "InvoiceConfirmation",
"FileName": "DP_PDPOL_2BM-7750370234-4012052808304878702630000000000_2BM_20150927_324c290e-f049-4906-baac-1ddcd7f3c2ff.xml",
"NeedRecipientSignature": false,
"SignerBoxId": "",
"NotDeliveredEventId": "",
"RawCreationDate": 635789700936777240,
"SignerDepartmentId": "",
"NeedReceipt": false,
"IsApprovementSignature": false,
"IsEncryptedContent": false
}
Получение документа для отмены сведений об отгрузке маркированных товаров
Чтобы получить служебный документ для отмены сведений об отгрузке, можно воспользоваться следующими способами:
Методы для работы с документами, сообщениями и событиями:
Информация о документе для отмены сведений об отгрузке будет представлена структурой Entity со следующими полями:
EntityType = Attachment,AttachmentType = TtGisFixationCancellationRequest.
Методы для работы с документооборотом:
Статус подписания документа для отмены сведений об отгрузке хранится в поле
CancellationStatusструктуры Document в виде значения TtGisFixationCancellationStatus.Информация о документе для отмены сведений об отгрузке хранится в поле
TtGisFixationструктур DocflowV3 и DocflowV4 в виде структуры TtGisFixationDocflow.