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

Сервис «N3.Health.Сервис электронной подписи»

«N3.Health.СЭП» предназначен для реализации процесса подписания документов с пациентом (клиентом) юридического лица как простой электронной подписью, так и иными видами электронной подписи, в т.ч. квалифицированной.

Пациент подписывает документ простой электронной подписью (ПЭП) или ПЭП с ЕСИА (для определенных типов документов, к примеру: ИДС) через свой смартфон без установки дополнительного ПО.

Для осуществления интеграции требуется создавать комплект документов в формате docx, PDF и файлы открепленной подписи (sig, sign, p7ks) при необходимости.

Сценарий использования предполагает создание комплекта документов на стороне ИС и осуществления их отправки в сервис СЭП – одним post запросом /sep/api/signing с указанием типа доставки: (на данный момент только SMS) и указание на необходимость авторизации через ЕСИА (для ИДС, Телемедицинских консультаций и иных сценариев требующих подписание с использованием ЕСИА).

МЕТОДЫ POST

Эндпоинт https://b2b-demo.n3health.ru/sep/api

  • Метод POST /sep/api/signing – направление комплекта документов на подпись в сервис СЭП.

Метод осуществляет немедленную доставку ссылки с кодом и паролем указанным способом доставки и возвращает trackingId отправления или ошибку.

Рекомендуем сохранять связь ID отправления СЭП (trackingId) с карточкой Пациента в используемой информационной системе для осуществления запросов GET методами статуса и направленного комплекта документов с визуализацией подписи в дальнейшем.

Пакетное подписание — при передачи нескольких документов, будет осуществлено пакетное подписание всех входящих в запрос документов

Тарификация осуществляется за пакеты (1 документ – 1 пакет, 5 документов в запросе – 1 пакет).

АВТОРИЗАЦИЯ

Authorization Обязателен 44556afd-0e84-b847-2322-75999668f590 Авторизационный токен.  Выдается разработчику МИС администратором Интеграционной платформы;
X-Id-Lpu Обязателен 12346afd-0e84-b847-2322-75999668f500a Уникальный идентификатор ЛПУ в системе согласно справочнику 1.2.643.2.69.1.1.1.64

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

POST /sep/api/signing

HTTP/1.1

Hostb2b-demo.n3health.ru
Authorization: 44556afd-0e84-b847-2312-75999668f777
X-Id-Lpu: 12346afd-0e84-b847-2322-75999668f500a
Content-Type: multipart/form-data; boundary=razdelitel

—razdelitel
Content-Disposition: form-data; name=»meta»
Content-Type: application/json; charset=utf-8

{
  «organization«: {
    «idLpu»: «d39269b3-289d-4c5d-aa33-b3c945ad22ee»,
    «inn»: «1234567890»,
    «ogrn»: «1234567890123»,
    «name»: «Городская больница №1»,
    «telecom»: [
      { «system»: «Email», «value»: «email@example.com» },
      { «system»: «Telephone», «value»: «+7XXXXXXXXXX» }
    ]
  },
  «practitioner«: {
    «mrProxyNumber»: «12-52884аАА»,
    «familyName»: «Иванов»,
    «givenName»: «Иван»,
    «middleName»: «Иванович»,
    «userIdLpu»: «doc-123»,
    «telecom»: [
      { «system»: «Email», «value»: «email@example.com» },
      { «system»: «Telephone», «value»: «+7XXXXXXXXXX» }
    ]
  },
  «patients»: [
    {
      «idPatientMis»: «patient-456»,
      «mpiId»: «123e4567-e89b-12d3-a456-426614174000»,
      «familyName»: «Петров»,
      «givenName»: «Пётр»,
      «middleName»: «Петрович»,
      «birthDate»: «1980-01-01»,
      «sex»: «male»,
      «telecom»: [
        { «system»: «Email», «value»: «email@example.com» },
        { «system»: «Telephone», «value»: «+7XXXXXXXXXX» }
      ],
      «documentDto»: [
        {
          «providerName»: «ОВД»,
          «issuedDate»: «2010-05-15»,
          «docN»: «1234»,
          «docS»: «123456»,
          «documentName»: «Паспорт гражданина РФ»,
          «idDocumentType»: 14
        }
      ]
    }
  ],
  «medDocument»: {
    «esiaAuth»: true,
    «attachments»: [
      { «partName»: «file0», «documentType»: «2» },
      { «partName»: «file1», «documentType»: «3» },
      { «partName»: «file2», «documentType»: «4» }
    ]
  },
  «delivery»: [«sms»],
  «welcomeTG»: «ABCD1234»
}

—razdelitel
Content-Disposition: form-data; name=»file0″; filename=»document.pdf»
Content-Type: application/pdf

<бинарные данные PDF документа>

—razdelitel
Content-Disposition: form-data; name=»file1″; filename=»document.docx»
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document

<бинарные данные DOCX документа>

—razdelitel
Content-Disposition: form-data; name=»file2″; filename=»signature.p7s»
Content-Type: application/pkcs7-signature

<бинарные данные файла подписи>

—razdelitel—

Параметры запроса:
— file0: Основной документ (PDF/DOC и
т.д.)
* MIME: application/pdf, contentType:
‘application/msword’
contentType: ‘application/pdf’
— file1: Файл открепленной подписи
в доработке v 1.0
* Допустимые MIME-типы:
* Для PKCS#7 (.p7s):
— application/pkcs7-signature
— application/x-pkcs7-signature
* Для бинарных подписей (.sig):
— application/octet-stream
* Примеры имен файлов: — signature.p7s
— document.p7ks
— attached.sig
organization Допустимо только IdLpu передать*
«organization»: {
«idLpu»: » 11c13250-8f1b-49d5-b878-
73c095948243″,
«inn»: «1234567890»,
«ogrn»: «1234567890123»,
«name»: «Городская больница №1»,
«telecom»: [
{ «system»: «Email», «value»:
«email@example.com» },
{ «system»: «Telephone», «value»:
«+7XXXXXXXXXX» }
]
},

«organization»: {
«idLpu»: » 11c13250-8f1b-49d5-b878-
73c095948243″ }.

*Указание дополнительных параметров в данный момент для сохранения транзакционности и не приводит к изменению данных организации в БД СЭП.

Ответ сервера

Успех:

HTTP/1.1 201 Created
Location: /sep/api/signing/123e4567-e89b-12d3-a456-426614174000
Content-Type: application/json

{
  «status»: «created»,
  «trackingId»: «123e4567-e89b-12d3-a456-426614174000»
}

Ошибка:

HTTP/1.1 400 Bad Request
Content-Type: application/json

{
  «status»: «error»,
  «trackingId»: «123e4567-e89b-12d3-a456-426614174000»,
  «errorCode»: «INVALID_ATTACHMENT»,
  «errorMessage»: «Файл file1 отсутствует в multipart-теле»
}

* Все варианты ошибок ниже

Метод отмены подписания

Метод позволяет отменить подписание до того, как один из подписантов осуществлено подписание. 

POST sep/api/signing/{trackingId}/cancel 

trackingId отправления — полученный при выполнении метода отправки на подпись.

Успешный ответ:

{
    «status»: «success»
}

Дополнительно возможно отменить отправку до подписания в личном кабинете клиники в Mila при просмотре конкретного отправления через меню опция (Шестеренка отправления)

1. Заголовок (Headers)

Поле Тип Обязательность Описание
Authorization string Обязательно Авторизационный токен. Выдается разработчику МИС администратором Интеграционной платформы. Формат: 44556afd-0e84-b847-2322-75999668f590
X-Id-Lpu string Обязательно Уникальный идентификатор ЛПУ в системе
Content-Type string Обязательно multipart/form-data; boundary=—-pepsign

2. Организация (organization)

Поле Тип Обязательность Описание
idLpu string Обязательно Уникальный идентификатор ЛПУ в системе согласно
справочнику 1.2.643.2.69.1.1.1.64
inn string Обязательно ИНН организации (10 цифр)
ogrn string Обязательно ОГРН организации (13 цифр)
name string Обязательно Название организации
telecom array Обязательно Контактные данные. Минимум 1 объект с system: «Email»

Поля объектов в telecom:

Поле Тип Обязательность Описание
system string Обязательно Тип контакта: «Email» или «Telephone»
value string Обязательно Значение (email/телефон). Телефон в формате +7XXXXXXXXXX.

3. Медицинский работник (practitioner)

Поле Тип Обязательность Описание
mrProxyNumber string Опционально Номер машиночитаемой доверенности (например, 12-52884аАА)
familyName string Обязательно Фамилия
givenName string Обязательно Имя
middleName string Опционально Отчество
userIdLpu string Обязательно Идентификатор врача в ЛПУ
telecom array Опционально Контактные данные (аналогично organization.telecom)

4. Пациенты (patients)

Массив объектов, где каждый объект содержит:

Поле Тип Обязательность Описание
idPatientMis string Обязательно ID пациента в МИС (например, patient-456)
mpiId string Опционально MPI ID из ИЭМК (например, 123e4567-e89b-12d3-a456-426614174000)
familyName string Обязательно Фамилия
givenName string Обязательно Имя
middleName string Опционально Отчество
birthDate string Обязательно Дата рождения в формате YYYY-MM-DD
sex string Обязательно Пол: male или female
telecom array Обязательно Минимум 1 объект с system: «Telephone».

Документы пациента (documentDto):

Массив объектов (обязательно хотя бы 1 документ, предпочтительнее передавать номер СНИЛС» (код документа «223»)):

Поле Тип Обязательность Описание
providerName string Обязательно Кто выдал документ (например, «ОВД», «ПФР»)
issuedDate string Опционально Дата выдачи (YYYY-MM-DD)
docN string Обязательно Номер документа
docS string Обязательно Серия документа (если есть)
documentName string Опционально Название документа (например, «СНИЛС»)
idDocumentType integer Обязательно Код типа документа:
• 14 — паспорт РФ
• 223 — СНИЛС
• 240 — полис ДМС
(полный список в справочнике 1.2.643.2.69.1.1.1.6)

5. Медицинский документ (medDocument)

Поле Тип Обязательность Описание
esiaAuth boolean Опционально true — требуется подпись через ЕСИА. Если комплект содержит шаблон ИДС – обязательно указывайте TRUE. Рекомендуется предусмотреть в используемой системе флаг для шаблона документа – ИДС.
attachments array Обязательно Массив вложений.

Вложения (attachments):

Поле Тип Обязательность Описание
partName string Обязательно Оригинальное название файла <String>
documentType string Опционально Тип вложения:
• 1 — медицинские
• 2 — бухгалтерские
• 3 — прочие
• 4 — откреплённая УКЭП
 MIME Type
.doc application/msword
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.pdf applicatiapplication/pdfon/pdf
.odt application/vnd.oasis.opendocument.text

6. Доставка (delivery)

Поле Тип Обязательность Описание
delivery array Обязательно Способы доставки:
• «sms»

Важные примечания:

  1. Для полиса ДМС (idDocumentType: 240) обязательно указать второй документ (например, паспорт). Предпочтительнее паспорт.
  2. Если esiaAuth: true, пациент должен авторизоваться через ЕСИА для подписи.
  3. Все даты — в формате ISO 8601 (YYYY-MM-DD).

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

400 INVALID_SIGNTOKEN Неверный SIGNTOKEN: проверьте, что токен выдан для передаваемых guid и IdLpu 
403 ESIA_AUTH_REQUIRED Ошибка авторизации ЕСИА
403 PATIENT_NO_DATA Не все обязательные поля переданы ВЫВОДИТ СПИСОК ТРЕБУЕМЫХ ПОЛЕЙ 
403 PATIENTS_DENIED Запрет со стороны пациента
403 INVALID_BASE64  «Некорректные данные в поле Content»
403 EMPTY_ARRAY Обязательное поле не может быть пустым.
429 RATE_LIMIT_EXCEEDED Превышен лимит запросов

Статусы

201 Создан Created Документ создан через API, готов к обработке
202 Отправлен на подписание Sent for Signing Документ отправлен получателю
203 Просмотрел Viewed Документ просмотрен получателем
204 Подписал Signed Документ подписан получателем
205 Отказался Rejected Получатель отказался от подписания
206 Срок для подписания истек Signing Period Expired Срок действия ссылки истек до момента проставления подписи или отказа
207 Ожидание действий всех получателей Awaiting Actions from All Recipients Ожидание действий от всех получателей
208 Успешно. Подписан всеми — обработка Success. Fully Signed — Processing Все получатели подписали, документ обрабатывается
209 Успешно. Подписан не всеми — обработка Success. Partially Signed — Processing Не все получатели подписали, документ обрабатывается
210 Завершено. Подписано всеми Completed. Fully Signed Все получатели подписали, документ сохранен
211 Завершено. Подписано не всеми Completed. Partially Signed Не все получатели подписали, документ сохранен
212 Отменен для получателя Cancelled for Recipient Подписание отменено для конкретного получателя
213 Завершено. Отменено для всех Completed. Cancelled for All Подписание отменено для всех получателей
498 Завершено. Отклонено всеми Completed. Rejected by All Все получатели отказались от подписания
499 Завершено. Истекло для всех Completed. Expired for All Срок ссылки истек для всех получателей
500 Ошибка обработки Processing Error Ошибка во время обработки документа
501 Ошибка доставки получателю Delivery Error Произошла ошибка при доставке конкретному получателю

Лимиты

SEP_API_BLOCKED_ALLOW включает и отключает механизм блокировки
SEP_API_BLOCKED_TIME=15
SEP_API_BLOCKED_PERIOD=10
SEP_API_BLOCKED_COUNT=50
SEP_API_BLOCKED_ALLOW=true
в данной конфигурации можно делать 50 запросов к POST /signing в 10 минут, если больше — блокировка на 15 минут

МЕТОДЫ GET

Методы предназначены для получения списка отправлений по организации и пациенту или получения конкретного отправления по его трекинг — ID в системе СЭП.

ЭНДПОИНТ: https://b2b-demo.n3health.ru/sep/api/

Заголовки запроса

Authorization string Да Токен доступа СЭП 44556afd-0e84-b847-2322-75999668f590
X-Id-Lpu string Да Идентификатор МО (из регионального справочника) 0453937e-fad5-402d-aacb-3ce6df2bf6fe

1. Списочные методы

GET /signing (без параметров)

Получение списка отправлений по query параметрам.

Списочный метод, возвращает все подписания для указанного пользователя через query параметры. Например idPatientMis (id-пациента из информационной системы, который ранее был передан вместе с данными пациента) с указанием пагинации, метод возвращает помимо прочего — {trackingId} отправления.

 

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

Если направить запрос без параметров, то вернётся весь перечень отправлений по организации в соответствии с заголовком X-Id-Lpu.

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

Параметры запроса: Без параметров

GET /sep/api/signing
Authorization: 44556afd-0e84-b847-2322-75999668f590
X-Id-Lpu: 0453937e-fad5-402d-aacb-3ce6df2bf6fe

Получение отправлений по ID пациента из внешней системы

GET /signing?idPatientMis={id}

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

idPatientMis string Query Да

ID пациента из внешней системы (например в МИС обязателен при отправке на подпись в post)

123e4567-e89b-12d3-a456-426614174000

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

GET /sep/api/signing?idPatientMis=123e4567-e89b-12d3-a456-426614174000
Authorization: 44556afd-0e84-b847-2322-75999668f590
X-Id-Lpu: 0453937e-fad5-402d-aacb-3ce6df2bf6fe

Query-параметры:

idPatientMis string Условно Уникальный идентификатор пациента в МИС 1Сmed1235A_6
familyName string Условно Фамилия пациента Иванов
givenName string Условно Имя пациента (только с familyName) Павел
middleName string Условно Отчество пациента (только с familyName и givenName) Святославович
email string Условно Email пациента examplename@anydomain.net
telephone string Условно Телефон пациента 79262119529
limit number Нет Количество элементов (1-50) 50
offset number Нет Смещение 0

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

# Поиск по idPatientMis
GET /signing?idPatientMis=Красносолнышкин

# Поиск по фамилии
GET /signing?familyName=Красносолнышкин

# Поиск по ФИО
GET /signing?familyName=Иванов&givenName=Павел&middleName=Святославович

# Поиск по контактным данным
GET /signing?email=examplename@anydomain.net
GET /signing?telephone=79262119529

# Комбинированный поиск
GET /signing?familyName=Иванов&givenName=Павел&telephone=79262119529

# С пагинацией
GET /signing?familyName=Иванов&limit=20&offset=40

Формат ответа для списочных методов (200 OK):

"data": [
        {
            "id": "660b3057-a0dc-4be1-a309-5cd730bf6bf3",
            "status": {
                "code": 208,
                "name": "Успешно. Подписан всеми - обработка",
                "message": "Успешно. Подписан всеми - обработка",
                "description": "Успешно. Подписан всеми - обработка"
            },
            "updatedAt": "2025-11-10T14:24:42.604Z",
            "practitioner": {
                "userIdLpu": "doc-123",
                "status": {
                    "code": 204,
                    "description": "Получатель подписал документ"
                }
            },
            "patients": [
                {
                    "idPatientMis": "",
                    "status": {
                        "code": 204,
                        "description": "Получатель подписал документ"
                    }
                }
            ]
        },
        {
            "id": "2eb002f0-5e9e-4ddd-886e-b5c3bcccdb28",
            "status": {
                "code": 208,
                "name": "Успешно. Подписан всеми - обработка",
                "message": "Успешно. Подписан всеми - обработка",
                "description": "Успешно. Подписан всеми - обработка"
            },
            "updatedAt": "2025-11-10T12:16:43.420Z",
            "practitioner": {
                "userIdLpu": "doc-123",
                "status": {
                    "code": 204,
                    "description": "Получатель подписал документ"
                }
            },
            "patients": [
                {
                    "idPatientMis": "",
                    "status": {
                        "code": 204,
                        "description": "Получатель подписал документ"
                    }
                }
            ]
        }
]

2. МЕТОД: GET /signing/{trackingId}

Получение подписания по трекинг ID отправления СЭП.

Метод получения конкретного отправления. Возвращает одно конкретное подписание с PDF вложением комплекта документов и визуализацией подписи.

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

Параметр

Тип

Расположение

Обязательность

Описание

Пример значения

trackingId

string

URL (path)

Да

это возвращаемый при направлении документа на подпись в ответ на запрос о подписании или при выполнении списочного метода

a1b2c3d4-5678-90ef-1234-567890abcdef

Пример запроса:
Host: b2b-demo.n3health.ru

Authorization: 44556afd-0e84-b847-2322-75999668f590
X-Id-Lpu: 12346afd-0e84-b847-2322-75999668f500a

GET /sep/api/signing/a1b2c3d4-5678-90ef-1234-567890abcdef

формат ответа GET /signing/{id} (200 OK):

{
    "data": {
        "id": "2eb002f0-5e9e-4ddd-886e-b5c3bcbbdb28",
        "status": "208",
        "createdAt": "2025-11-10T12:15:27.787Z",
        "practitioner": {
            "mrProxyNumber": "10-test-223",
            "familyName": "Иванов",
            "givenName": "Иван",
            "middleName": "Иванович",
            "userIdLpu": "doc-123",
            "status": {
                "code": 204,
                "description": "Получатель подписал документ"
            }
        },
        "patients": [
            {
                "idPatientMis": "sepTestProd07102025",
                "familyName": "Виноградов",
                "givenName": "Вячеслав",
                "middleName": "Александрович",
                "status": {
                    "code": 204,
                    "description": "Получатель подписал документ"
                }
            }
        ],
        "medDocument": {
            "attachments": [
                {
                    "content": "JVB....
         }
            ]
        }
    }
}

Ошибки

400 Bad Request Неверный формат UUID.
401 Unauthorized Отсутствует/недействительный токен.
404 Not Found

Для /signing/{id}: «Подписание с указанным ID не найдено»

404 Not Found Для /signing: «Документы для указанного пациента (idPatientMis) в данной МО (idLpu) не найдены»

{
  «error»: {
    «code»: «invalid_uuid»,
    «message»: «Неправильный формат UUID»
  }
}

{
  «error»: {
    «code»: «signing_not_found»,
    «message»: «Подписание с ID a1b2c3d4-… не найдено»
  }
}