> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Электронная подпись: отчёт и справочник signatures[]

> Изучайте signatures[] в решении сессии и webhook Didit, скачивайте подписанные PDF, PDF с доказательствами и проверяйте подпись.

Каждый шаг [Электронная подпись](https://docs.didit.me/ru/core-technology/electronic-signature/overview.md) формирует один результат для каждого подписанта. Его можно найти как элемент `signatures[]` в следующих местах:

* [`GET /v3/session/{sessionId}/decision/`](https://docs.didit.me/ru/sessions-api/retrieve-session) для сессий «Проверка пользователей» (KYC) и «Верификация бизнеса» (KYB).
* `decision` [webhook-ов сессий](https://docs.didit.me/ru/integration/webhooks.md) V3, отправляемых, когда сессия переходит в статус `Approved`, `Declined`, `In Review` или `Abandoned`.
* на вкладке **Подпись** сессии в консоли и в разделе подписи [PDF-отчёта](https://docs.didit.me/ru/sessions-api/generate-pdf.md).

`signatures` присутствует в решении только тогда, когда в сценарии есть шаг «Электронная подпись». Это пустой массив до тех пор, пока подписант не дойдет до этого шага. Шаг KYC содержит один элемент; шаг KYB содержит по одному элементу для каждого подписанта.

## Пример

```json theme={null}
{
  "signatures": [
    {
      "id": "0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10",
      "node_id": "feature_signature",
      "status": "signed",
      "verdict": "Approved",
      "level": "aes",
      "format": "pades",
      "profile": "PAdES-B-LT",
      "signer": {
        "name": "Jane Doe",
        "capacity": "self",
        "company": null,
        "role": null,
        "roles": [],
        "identity_session_id": "11111111-2222-3333-4444-555555555555"
      },
      "identity_used": {
        "session_id": "11111111-2222-3333-4444-555555555555",
        "kyc_id": "6f1e8f6c-1d2b-4c3a-9e8f-7a6b5c4d3e2f",
        "verified": true,
        "expected_name": "Jane Doe"
      },
      "certificate": {
        "issuer": "<certificate issuer>",
        "issued_to": "<certificate subject>",
        "serial": "5A3F9C21",
        "valid_from": "2026-01-01T00:00:00+00:00",
        "valid_until": "2028-01-01T00:00:00+00:00"
      },
      "confirmation": {
        "channel": "email",
        "destination": "j***@example.com",
        "confirmed_at": "2026-11-03T10:42:18.512Z",
        "attempts": 1
      },
      "timestamp": {
        "time": "2026-11-03T10:42:21+00:00",
        "qualified": false,
        "valid": true
      },
      "documents": [
        {
          "id": "9b0a7f44-2c1d-4e5f-8a9b-0c1d2e3f4a5b",
          "uuid": "9b0a7f44-2c1d-4e5f-8a9b-0c1d2e3f4a5b",
          "title": "Account agreement",
          "file_name": "agreement.pdf",
          "pages": 4,
          "size_bytes": 182344,
          "sha256_original": "3b8e5f0c2a9d4e7f1b6c0a5d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f",
          "sha256_signed": "a1f2e3d4c5b6a7980f1e2d3c4b5a69788f7e6d5c4b3a29180f1e2d3c4b5a6978",
          "status": "signed",
          "opened_at": "2026-11-03T10:40:02.118Z",
          "read_at": "2026-11-03T10:41:10.044Z",
          "read_to_end": true,
          "consented_at": "2026-11-03T10:41:12.730Z",
          "consent": true,
          "signed_file": "/v3/session/11111111-2222-3333-4444-555555555555/signatures/feature_signature/documents/9b0a7f44-2c1d-4e5f-8a9b-0c1d2e3f4a5b/file/",
          "mode": "fields",
          "source_format": "pdf",
          "conversion": null,
          "fields": [
            {
              "key": "full_name",
              "type": "full_name",
              "role": "verified_person",
              "label": "Full name",
              "page": 1,
              "x": 0.34,
              "y": 0.2326,
              "width": 0.57,
              "height": 0.0325,
              "required": true,
              "value": "Jane Doe",
              "display_value": "Jane Doe",
              "value_source": "identity",
              "filled_at": "2026-11-03T10:40:02.118Z",
              "value_unavailable_reason": null
            },
            {
              "key": "occupation",
              "type": "text",
              "role": "verified_person",
              "label": "Occupation",
              "page": 1,
              "x": 0.34,
              "y": 0.4618,
              "width": 0.57,
              "height": 0.0325,
              "required": true,
              "value": "Architect",
              "display_value": "Architect",
              "value_source": "signer",
              "filled_at": "2026-11-03T10:40:41.502Z",
              "value_unavailable_reason": null
            },
            {
              "key": "signature",
              "type": "signature",
              "role": "verified_person",
              "label": "Signature",
              "page": 4,
              "x": 0.09,
              "y": 0.5303,
              "width": 0.36,
              "height": 0.0849,
              "required": true,
              "value": true,
              "display_value": "Signed",
              "value_source": "signer",
              "filled_at": "2026-11-03T10:41:05.200Z",
              "image_url": "/v3/session/11111111-2222-3333-4444-555555555555/signatures/feature_signature/fields/c4d5e6f7-0a1b-4c2d-8e3f-4a5b6c7d8e9f/image/",
              "value_unavailable_reason": null
            }
          ]
        }
      ],
      "adopted_signature": {
        "method": "drawn",
        "font": null,
        "adopted_at": "2026-11-03T10:41:02.871Z"
      },
      "electronic_signature_consent_at": "2026-11-03T10:41:40.016Z",
      "evidence_file": "/v3/session/11111111-2222-3333-4444-555555555555/signatures/feature_signature/evidence/?signature_id=0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10",
      "warnings": [],
      "validation": {
        "valid": true,
        "checked_at": "2026-11-03T10:42:24.903Z",
        "documents": [
          {
            "id": "9b0a7f44-2c1d-4e5f-8a9b-0c1d2e3f4a5b",
            "checked_at": "2026-11-03T10:42:24.903Z",
            "valid": true,
            "integrity": true,
            "trusted": true,
            "revoked": false,
            "trusted_list": { "status": "not_applicable", "reason": "aes_not_qualified" },
            "certificate": {
              "issuer": "<certificate issuer>",
              "issued_to": "<certificate subject>",
              "serial": "5A3F9C21",
              "valid_from": "2026-01-01T00:00:00+00:00",
              "valid_until": "2028-01-01T00:00:00+00:00"
            },
            "timestamp": { "time": "2026-11-03T10:42:21+00:00", "qualified": false, "valid": true }
          }
        ]
      },
      "declined_at": null,
      "declined_action": "REVIEW",
      "signed_at": "2026-11-03T10:42:24.903Z",
      "expires_at": "2026-11-10T10:30:00.000Z",
      "email_sent_at": "2026-11-03T10:42:30.011Z",
      "email_unavailable_reason": null,
      "ip_address": "203.0.113.10",
      "place": null,
      "place_unavailable_reason": "not_collected"
    }
  ]
}
```

## Объект подписи

| Поле | Тип | Описание |
| - | - | - |
| `id` | string (UUID) | Подпись подписанта. Передайте его как `signature_id`, чтобы скачать доказательства или проверить подпись. |
| `node_id` | string | Шаг сценария, создавший её. |
| `status` | string | Где находится подписант в рамках шага: `intro`, `review`, `code`, `signing`, `signed` или `declined`. Только `signed` означает, что документы подписаны. |
| `verdict` | string | Итог шага: `Not Finished`, `Approved`, `In Review` или `Declined`. Отклонённая или неудавшаяся подпись принимает решение соответствующего [правила](https://docs.didit.me/ru/core-technology/electronic-signature/warnings-electronic-signature.md), а пользовательские правила статуса могут его изменить. |
| `level` | string | `simple` (по умолчанию) или `aes`. `qes` - это дополнение, которое пока недоступно. |
| `format` | string | `pdf` для простой подписи (Simple), `pades` для усиленной (AES). |
| `profile` | string \| null | `PAdES-B-LT` после подписания усиленной подписью (AES), иначе `null`. |
| `signer` | object | Кто подписал. См. [Подписант](#подписант). |
| `identity_used` | object | Верифицированная личность, на которую опирается подпись. См. [Подписант](#подписант). Пусто для простой подписи (Simple) без верифицированной личности. |
| `certificate` | object \| null | Сертификат, которым были подписаны документы: `issuer`, `issued_to`, `serial`, `valid_from` и `valid_until`. `null` до подписания и всегда `null` для простой подписи (Simple). |
| `confirmation` | object | Одноразовый код: `channel` (`email` или `sms`), `destination` (маскированный контакт, на который он был отправлен), `confirmed_at` и `attempts` (введённые коды, включая правильный). Для простой подписи (Simple) код не используется, поэтому `channel` и `destination` имеют значение `null`. |
| `timestamp` | object \| null | Метка времени RFC 3161 в подписи, выпущенная Didit: `time`, `qualified` (всегда `false` для AES) и `valid`. `null` до момента подписания и всегда `null` для простой подписи (Simple). |
| `documents` | array | По одному элементу на документ. См. [Документы](#документы). |
| `adopted_signature` | object \| null | Подпись и инициалы, выбранные подписантом для полей подписи и инициалов: `method` (`typed` или `drawn`), `font` (стиль начертания подписи, введённой с клавиатуры, или `null` при рисовании от руки) и `adopted_at`. `null` до тех пор, пока подписант не выберет вариант. |
| `electronic_signature_consent_at` | string \| null | Когда подписант согласился на экране проверки подписать документы в электронном виде. Заполняется, если хотя бы в одном документе есть поля. |
| `evidence_file` | string \| null | Путь к [PDF-файлу с доказательствами](#pdf-с-доказательствами) этого подписанта после подписания. |
| `warnings` | array | Элементы вида `{ "code", "node_id" }` для каждого возникшего [предупреждения](https://docs.didit.me/ru/core-technology/electronic-signature/warnings-electronic-signature.md). |
| `validation` | object \| null | Последняя криптографическая проверка подписанных документов. См. [Повторная валидация подписи](#проверить-подпись-снова). |
| `declined_at` | string \| null | Когда подписант отклонил подписание. |
| `declined_action` | string | Значение `signature_declined_action` шага: как отклонение влияет на итоговое решение. |
| `signed_at` | string \| null | Когда документы были подписаны. |
| `expires_at` | string | Когда ссылка на подписание перестает действовать. |
| `email_sent_at` | string \| null | Когда Didit отправил подписанту подписанную копию по электронной почте. |
| `email_unavailable_reason` | string \| null | Причина, по которой копия не была отправлена по электронной почте, если вы её запрашивали. |
| `ip_address` | string \| null | IP-адрес подписанта на момент запроса кода. |
| `place` | string \| null | Не собирается. Всегда `null` со значением `place_unavailable_reason: "not_collected"`. |

Никогда не считайте, что подписант поставил подпись, пока `status` не станет `signed`. Для усиленной подписи (AES) значение `null` в полях certificate, timestamp или `signed_file` означает, что подпись ещё не поставлена. У подписанной простой подписи (Simple) есть `signed_file`, но поля certificate и timestamp всегда имеют значение `null`.

### Подписант

| Поле | Описание |
| - | - |
| `signer.name` | Верифицированное имя подписанта из его одобренной верификации личности. На уровне Simple это верифицированное имя из сессии, если оно есть, либо введённое подписантом имя, которое не верифицировано. |
| `signer.capacity` | `self`, когда человек подписывает за себя (KYC), `company`, когда ключевое лицо подписывает за компанию (KYB). |
| `signer.company` | Название компании для KYB. |
| `signer.role` | Должность ключевого лица согласно декларации для KYB. |
| `signer.roles` | Структурированные роли ключевого лица, такие как `representative` или `authorized_signatory`, благодаря которым он стал подписантом. Это роли, заявленные для компании, а не подтверждение из реестра. |
| `signer.identity_session_id` | KYC-сессия, в которой был верифицирован подписант. Для KYB - собственная KYC-сессия ключевого лица. Отсутствует для простой подписи (Simple) без верифицированной личности. |
| `identity_used.session_id` | То же, что и `signer.identity_session_id`. Объект `identity_used` пуст для простой подписи (Simple) без верифицированной личности, поэтому ни одно из его полей не представлено. |
| `identity_used.kyc_id` | Верификация личности, из которой было получено имя. |
| `identity_used.verified` | `true`, если эта верификация личности была одобрена. |
| `identity_used.expected_name` | Имя, которому должен был соответствовать подписант. Для KYB - имя, заявленное для ключевого лица. |

### Документы

| Поле | Описание |
| - | - |
| `id`, `uuid` | Документ. Используйте его для скачивания подписанного файла. |
| `title`, `file_name` | В том виде, как были загружены или отправлены. |
| `pages`, `size_bytes` | Параметры документа, который подписал подписант. Для Word - сконвертированного PDF. |
| `sha256_original` | SHA-256 документа в том виде, в каком он был показан подписанту. |
| `sha256_signed` | SHA-256 подписанного PDF после подписания. |
| `status` | `signed`; `declined`; `not_signed` (открыт, но не подписан); или `not_reached` (ни разу не открывался). |
| `opened_at` | Когда подписант впервые открыл его. |
| `read_at`, `read_to_end` | Когда подписант достиг конца документа без полей (если требуется дочитывание до конца). Документу с полями это не требуется. |
| `consented_at`, `consent` | Когда подписант согласился с документом без полей (если требуется согласие по каждому документу) или заполнил поля документа с полями. |
| `signed_file` | Путь к подписанному PDF после подписания. |
| `mode` | `fields` для документа с полями, `read_and_agree` для документа без полей. |
| `source_format` | `pdf` или `docx` для документа Word, преобразованного Didit. |
| `conversion` | `null` для PDF. Для документа Word, `{ "from": "docx", "file_name", "sha256", "size_bytes", "converter" }`: ваш исходный файл, его SHA-256 и размер, а также версия конвертера. |
| `fields` | [Поля](#поля) документа с их значениями. Пусто для документа без полей. |

### Поля

Каждый элемент `documents[].fields[]` представляет собой одно поле документа со значением в копии документа для этого подписанта:

| Поле | Описание |
| - | - |
| `key` | [Ключ](https://docs.didit.me/ru/core-technology/electronic-signature/overview.md#поля-на-документе) поля, тот же, что вы используете в `sign.field_values`. |
| `type`, `role`, `label`, `required` | Так, как они размещены на документе. |
| `page`, `x`, `y`, `width`, `height` | Положение поля, выраженное в долях отображаемой страницы. |
| `value` | Строка для полей `text`, `email`, `full_name`, `date_signed` и `data`, булево значение для чекбокса и `true` для применённой подписи или инициалов. `null`, когда поле пустое. |
| `display_value` | Значение в том виде, в каком оно проставлено на странице: даты в формате `date_format` поля, `Yes` или `No` для чекбокса и `Signed` для подписи или инициалов. |
| `value_source` | Источник значения: `signer` (введено, отмечено или применено подписантом), `identity` (проверенное удостоверение личности), `contact` (проверенный email или телефон), `company` (проверенная компания), `session` (`vendor_data` сессии), `metadata` (`metadata` сессии), `api` (ваши `sign.field_values`) или `signing_time` (дата подписания). |
| `filled_at` | Когда значение было установлено. |
| `image_url` | Для подписи или инициалов: путь к применённому изображению, файл PNG. См. раздел [Скачать изображение подписи](https://docs.didit.me/ru/sessions-api/electronic-signature/download-field-image.md). |
| `value_unavailable_reason` | Причина, по которой поле, заполняемое Didit, не имеет значения: `not_verified` (личность или контакт не были проверены), `not_applicable` (поле компании для личной подписи физического лица), `not_provided` (в источнике нет значения) или `set_at_confirmation` (дата подписания до подтверждения подписантом). В остальных случаях `null`. |

## Скачивание подписанных документов

Используйте пути из `signed_file` и `evidence_file` с вашим API-ключом. Каждый маршрут возвращает сам PDF-файл.

```bash theme={null}
# Signed PDF of one document
curl -L 'https://verification.didit.me/v3/session/{session_id}/signatures/{node_id}/documents/{document_id}/file/' \
  -H 'x-api-key: YOUR_API_KEY' \
  -o agreement-signed.pdf

# Evidence PDF of one signer
curl -L 'https://verification.didit.me/v3/session/{session_id}/signatures/{node_id}/evidence/?signature_id={signature_id}' \
  -H 'x-api-key: YOUR_API_KEY' \
  -o signature-evidence.pdf
```

| Маршрут | Ссылка |
| - | - |
| `GET .../documents/{document_id}/file/` | [Скачать подписанный документ](https://docs.didit.me/ru/sessions-api/electronic-signature/download-signed-document.md) |
| `GET .../evidence/` | [Скачать доказательства подписи](https://docs.didit.me/ru/sessions-api/electronic-signature/download-evidence.md) |
| `GET .../fields/{field_id}/image/` | [Скачать изображение подписи](https://docs.didit.me/ru/sessions-api/electronic-signature/download-field-image.md) |
| `POST .../validate/` | [Проверить подписи](https://docs.didit.me/ru/sessions-api/electronic-signature/validate-signatures.md) |

Перед отправкой ответа Didit сверяет сохранённый файл с записанным значением SHA-256. Если они различаются, маршруты подписанного PDF и доказательств возвращают `409`, а маршрут изображения возвращает `400`, в каждом случае с `signature_document_changed`. Всегда передавайте `signature_id` в маршрут доказательств, когда в шаге KYB участвуют несколько подписантов.

## Подписанный PDF

Подписанный PDF содержит по порядку:

1. Страницы документа, показанные подписанту, со всеми проставленными значениями полей там, где вы их разместили.
2. Страницу с доказательствами, если вы не отключили `signature_evidence_page`.
3. Только для Advanced (AES): подпись PAdES с меткой времени RFC 3161, выпущенной Didit, и данными об отзыве сертификата, необходимыми для её проверки в будущем. Файл Simple PDF заканчивается после страницы с доказательствами и не содержит цифровой подписи, печати или метки времени.

В PDF Advanced (AES) подпись охватывает каждый предшествующий байт, включая значения полей и страницу с доказательствами. Любое последующее изменение файла делает его недействительным, и любой валидатор с поддержкой PAdES это покажет. Сведения о подписи содержат имя подписанта и ссылаются на его сессию проверки личности и подтверждение кодом.

Значения полей становятся частью содержимого страницы, а не полями формы, поэтому их нельзя отредактировать позже, и они отображаются в любом средстве просмотра PDF. Отмеченный чекбокс отображается с галочкой, а неотмеченный остаётся в том виде, в каком он был отрисован в документе. Блок подписи высотой более 24 пунктов также получает небольшую надпись под подписью: `Signed with Didit ·`, за которой следуют первые 8 символов `id` подписи.

Didit добавляет значения полей, страницу с доказательствами и подпись после байтов документа, показанного подписанту. Этот документ является точным префиксом подписанного файла, поэтому `sha256_original` по-прежнему можно сверять с подписанным PDF.

## PDF с доказательствами

PDF с доказательствами фиксирует для одного подписанта:

* Уровень и формат.
* Имя подписанта, его полномочия на подписание и, для KYB, компанию.
* Сессию проверки личности (только для Advanced (AES)).
* Подтверждение: канал, маскированный адрес назначения и время (только для Advanced (AES)).
* IP-адрес подписанта.
* Каждый документ: название, количество страниц и SHA-256 оригинала. Для документа Word: имя файла Word и его SHA-256, версию конвертера и SHA-256 файла PDF.
* Выбранную подпись: введённую текстом (с её рукописным стилем) или нарисованную, время её выбора, а также изображения подписи и инициалов.
* Каждое поле по документам: его метку, страницу и тип, значение (изображение для подписи или инициалов), источник значения (например, **Введено подписантом**, **Проверенное удостоверение личности** или **Ваш API**), время заполнения (UTC) и IP-адрес подписанта в тот момент для значения, введённого им.
* Финальное согласие: текст, с которым подписант согласился на экране проверки, и время согласия.
* SHA-256 каждого подписанного файла и, для Advanced (AES), сертификат (кому выдан, кем выдан, серийный номер и срок действия) и метку времени.

Страница, добавляемая к каждому подписанному PDF, содержит то же самое без раздела сертификата, поскольку она добавляется до применения подписи.

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

`POST /v3/session/{session_id}/signatures/{node_id}/validate/` повторно считывает каждый подписанный PDF шага и проверяет его SHA-256. Для усиленной подписи (AES) он также валидирует подпись PAdES, её сертификат, данные об отзыве и метку времени. Простая подпись не содержит цифровой подписи, поэтому проверяется только целостность файла. Запрос сохраняет результат в `validation` и возвращает обновлённый массив `signatures[]`. Передайте `signature_id`, чтобы проверить одного подписанта. Для этого требуется разрешение `write:sessions`, а в консоли за это отвечает кнопка **Проверить снова**. Сохранённый подписанный PDF, который больше не совпадает со своим `sha256_signed`, возвращает ошибку `400` с кодом `signature_document_changed`.

До тех пор, пока документы не подписаны, `validation` имеет значение `null`. Если Didit не может подтвердить результат подписания, `validation` принимает значение `{ "valid": null, "reason": "signature_provider_outcome_unknown", "checked_at" }`, а `status` остаётся в значении `signing`, пока ситуация не будет разрешена: считайте документ неподписанным.

| Поле `validation.documents[]` | Описание |
| - | - |
| `valid` | `true`, если подпись и метка времени действительны и являются доверенными. Для простой подписи `true`, если файл не изменялся. |
| `integrity` | `true`, если документ не изменялся с момента подписания. |
| `trusted` | `true`, если сертификат подписи образует цепочку доверия до доверенного корневого сертификата. `null` для простой подписи. |
| `revoked` | `true`, если сертификат подписи был отозван. `null` для простой подписи. |
| `trusted_list` | `{ "status": "not_applicable", "reason": "aes_not_qualified" }` для AES. Проверка по Доверенному списку ЕС применяется к квалифицированным подписям. Простая подпись возвращает `{ "status": "not_applicable", "reason": "simple_not_sealed" }`. |
| `certificate`, `timestamp` | В том виде, в котором они найдены в файле. |

## В PDF-отчёте

В [PDF-отчёте](https://docs.didit.me/ru/sessions-api/generate-pdf.md) формируется раздел подписи с информацией о подписанте, подтверждении, сертификате, метке времени и документах с их хешами. Если документы содержат поля, следом идёт страница **Электронная подпись · поля** с одной таблицей на каждый документ: значение каждого поля, изображения подписи и инициалов, время и источники. Раздел подписи располагается после верификации банка в отчёте KYC и после документов в отчёте KYB. Передайте `pages=signature`, чтобы напечатать только этот раздел.

## Связанные разделы

* [Обзор электронной подписи](https://docs.didit.me/ru/core-technology/electronic-signature/overview.md)
* [Предупреждения электронной подписи](https://docs.didit.me/ru/core-technology/electronic-signature/warnings-electronic-signature.md)
* [Модели данных: электронная подпись](https://docs.didit.me/ru/reference/data-models.md#электронная-подпись)
* [Webhook](https://docs.didit.me/ru/integration/webhooks.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.