Сервис «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
Host: b2b-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»: { *Указание дополнительных параметров в данный момент для сохранения транзакционности и не приводит к изменению данных организации в БД СЭП. |
Ответ сервера
Успех:
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 |
| applicatiapplication/pdfon/pdf | |
| .odt | application/vnd.oasis.opendocument.text |
6. Доставка (delivery)
| Поле | Тип | Обязательность | Описание |
| delivery | array | Обязательно | Способы доставки: • «sms» |
Важные примечания:
- Для полиса ДМС (idDocumentType: 240) обязательно указать второй документ (например, паспорт). Предпочтительнее паспорт.
- Если esiaAuth: true, пациент должен авторизоваться через ЕСИА для подписи.
- Все даты — в формате 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) | Святославович |
| 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-… не найдено»
}
}