> ## 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.

# Предпросмотр письма о повторной верификации

> В Didit проверьте получателя, отправителя, локализованное сообщение и ссылку на верификацию перед запросом повторной верификации.

Предпросмотр не меняет сессию и не отправляет письмо.
После проверки ответа подтвердите с помощью [Обновление статуса сессии](https://docs.didit.me/ru/sessions-api/update-status.md) и передайте возвращённый `preview_token` в поле `email_preview_token`.
Срок действия квитанции истекает через 15 минут.
Если квитанция изменилась или истекла, API возвращает `409` до того, как сессия изменится или письмо будет отправлено.
После конфликта создайте новый предпросмотр.
Существующие API-интеграции могут не передавать квитанцию: при подтверждении предпросмотра её передаёт консоль.

Отправитель и брендинг соответствуют вашей [конфигурации White label](https://docs.didit.me/ru/console/white-label.md).
Содержимое письма берётся из переведённого шаблона верификации: произвольные темы, тексты писем и URL-адреса действий как входные данные шаблона не принимаются.

## Кто получает письмо

`email_address` необязателен.
Если его не передать, письмо уходит на собственный адрес человека: тот, который он подтвердил на шаге проверки электронной почты в сценарии, а если в рамках этого шага адрес не был подтверждён, то адрес из `contact_details`, указанный при создании сессии.
Адрес, переданный в `email_address`, имеет приоритет.

`recipient_source` показывает, какой адрес применяется:

| `recipient_source` | Откуда берётся `recipient` |
| - | - |
| `email_verification` | Адрес, который человек подтвердил в сценарии |
| `contact_details` | Адрес, указанный в `contact_details` при создании сессии |
| `request` | Переданный вами `email_address` |
| `""` (пусто) | Адрес неизвестен: `recipient` и `preview_token` пустые, отправить письмо нельзя |

## Отправится ли письмо

`will_be_sent` равно `true`, если при подтверждении повторной отправки с `send_email: true` письмо действительно отправляется.
Если значение `false`, `not_sent_reason` объясняет причину:

| `not_sent_reason` | Что это значит |
| - | - |
| `no_user_action` | Все выбранные шаги выполняются без участия человека (например, AML или Проверка по базам данных), поэтому повторная отправка завершается автоматически и письмо не отправляется. `requires_user_action` тоже равно `false`. |
| `no_recipient` | Адрес человека неизвестен, а вы не передали адрес. |
| `sandbox` | Сессия работает в песочнице, а получатель не дал согласие на доставку писем в песочнице, поэтому письмо только имитируется. См. [согласие на получение писем](https://docs.didit.me/ru/integration/sandbox-testing.md#códigos-otp-y-suscripción-al-envío-de-correos). |

## Подтвердите повторную отправку

Вызовите [Обновление статуса сессии](https://docs.didit.me/ru/sessions-api/update-status.md) со следующими полями:

| Поле обновления статуса сессии | Значение |
| - | - |
| `new_status` | `Resubmitted` |
| `nodes_to_resubmit` | Тот же выбор, что и в предпросмотре (если в предпросмотре его не было, не передавайте и здесь) |
| `send_email` | `true` |
| `email_address` | `recipient` из предпросмотра |
| `email_language` | Тот же `email_language`, что вы передали в предпросмотр |
| `email_preview_token` | `preview_token` из предпросмотра |

Поле `language` в ответе указывает язык письма: если запрошенный язык недоступен, письмо пишется на английском.

## Повторная отправка только на бэкенде

Когда все шаги для повторной отправки выполняются без участия человека (AML, Проверка по базам данных или анализ IP), сессию можно повторно отправить для этого человека не чаще одного раза в 30 секунд.
В этом окне предпросмотр возвращает `429`, как и Обновление статуса сессии, а время ожидания указано в заголовке `Retry-After`.

## Связанное

* [Обновление статуса сессии](https://docs.didit.me/ru/sessions-api/update-status.md): подтверждение повторной отправки.
* [Предпросмотр письма о решении](https://docs.didit.me/ru/sessions-api/preview-decision-email.md): предпросмотр письма об одобрении или отклонении.
* [White label](https://docs.didit.me/ru/console/white-label.md): отправитель и брендинг, которые используются в письме.


## OpenAPI

````yaml ru/openapi-25.json POST /v3/session/{sessionId}/resubmission-preview/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: >-
    API верификации личности. Аутентификация выполняется с помощью заголовка
    x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/resubmission-preview/:
    post:
      tags:
        - Sessions
      summary: Предварительный просмотр письма с запросом повторной отправки
      description: >-
        Сформировать предпросмотр электронного письма, сопровождающего повторную
        отправку KYC или KYB, без изменения сессии, сброса проверок, продления
        срока действия, запуска проверок или отправки почты. Требуется
        привилегия `write:sessions` (для API-ключа с ограниченным доступом
        необходим доступ на запись к решениям) и сессия в статусе `Approved`,
        `Declined`, `In Review`, `Kyc Expired` или `Abandoned`. Сервер проверяет
        выбранные шаги сценария и формирует фиксированный переведённый шаблон с
        соответствующим верифицированным отправителем White label и брендингом.
        В запросе нельзя задать тему, текст сообщения или URL действия.


        Поле `email_address` необязательно. Без него письмо отправляется на
        собственный адрес пользователя: подтверждённый им на шаге проверки
        электронной почты в сценарии либо указанный в `contact_details` при
        создании сессии. Переданный вами адрес имеет приоритет
        (`recipient_source: request`). Если адрес неизвестен и вы его не
        передали, поля `recipient` и `preview_token` будут пустыми строками, и
        отправить письмо нельзя.


        Ответ включает получателя и источник адреса, отправителя, тему, HTML,
        язык, определённые шаги, признак отправки письма при подтверждении
        (`will_be_sent`, `not_sent_reason`) и подписанный `preview_token`. Поле
        `requires_user_action` имеет значение `false`, если все выбранные шаги
        выполняются без участия пользователя: в этом случае повторная отправка
        завершается автоматически, и письмо не отправляется (`not_sent_reason:
        no_user_action`).


        Этот предпросмотр не резервирует состояние сессии и не разрешает
        доставку. После его проверки вызовите [Update Session
        Status](/ru/sessions-api/update-status) со значением `new_status:
        Resubmitted`, теми же `nodes_to_resubmit` и `email_language`, что и в
        предпросмотре, `send_email: true`, `email_address`, установленным в
        `recipient`, и `email_preview_token`, установленным в `preview_token`.
        Квитанция истекает через 15 минут. Если квитанция предоставлена,
        изменённые входные данные, текст сообщения, отправитель или состояние
        сессии возвращают ошибку `409` до любых изменений или отправки.
        Существующие интеграции могут опускать квитанцию. После конфликта
        сгенерируйте предпросмотр заново. Относитесь к ответу как к
        конфиденциальным данным верификации; в ответах используется заголовок
        `Cache-Control: no-store`. Отрисовывайте HTML в изолированном фрейме,
        никогда напрямую в DOM вашего приложения.
      operationId: post_v3_session_resubmission_preview
      parameters:
        - in: path
          name: sessionId
          required: true
          description: >-
            UUID сессии верификации для обновления. Принимает ID сессий как
            пользователей (KYC), так и компаний (KYB) — сервис сопоставляет ID
            для обоих типов сессий.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                nodes_to_resubmit:
                  type: array
                  description: >-
                    Шаги для предварительного просмотра с использованием тех же
                    правил валидации, выбора и порядка выполнения сценария, что
                    и при повторной подаче. Опустите, чтобы автоматически
                    выбрать записанные попытки, требующие повторной подачи.
                  items:
                    type: object
                    required:
                      - node_id
                      - feature
                    properties:
                      node_id:
                        type: string
                        description: >-
                          Идентификатор узла в том виде, в каком он указан в
                          определении сценария сессии (например, `feature_ocr`,
                          `feature_liveness`).
                        example: feature_ocr
                      feature:
                        type: string
                        description: >-
                          Тип функции узла. Алиасы `ID_VERIFICATION`, `POA`,
                          `PHONE` и `EMAIL` нормализуются на стороне сервера в
                          `OCR`, `PROOF_OF_ADDRESS`, `PHONE_VERIFICATION` и
                          `EMAIL_VERIFICATION`. `KYB_REGISTRY`, `KYB_KEY_PEOPLE`
                          и `KYB` проходят валидацию схемы, но всегда
                          отклоняются с бизнес-ошибкой `400`, показанной в
                          примерах.
                        enum:
                          - OCR
                          - OCR_BACK
                          - NFC
                          - AML
                          - FACE
                          - LIVENESS
                          - FACE_MATCH
                          - IP_ANALYSIS
                          - AGE_ESTIMATION
                          - PROOF_OF_ADDRESS
                          - PHONE_VERIFICATION
                          - EMAIL_VERIFICATION
                          - FACE_SEARCH
                          - DATABASE_VALIDATION
                          - QUESTIONNAIRE
                          - DOCUMENT_AI
                          - KYB_DOCUMENTS
                          - ID_VERIFICATION
                          - POA
                          - PHONE
                          - EMAIL
                          - KYB_REGISTRY
                          - KYB_KEY_PEOPLE
                          - KYB
                          - GEOLOCATION
                        example: OCR
                email_address:
                  type: string
                  format: email
                  description: >-
                    Необязательно. Отправить электронное письмо на этот адрес
                    вместо собственного адреса человека. Без него получателем
                    является адрес, который человек подтвердил в сценарии, либо
                    адрес, указанный в `contact_details`. Этот вызов не
                    отправляет электронное письмо.
                  example: user@example.com
                email_language:
                  type: string
                  description: >-
                    Язык для письма с уведомлением. На уровне схемы принимается
                    любая строка; для неподдерживаемых кодов без уведомления
                    используется английский (`en`).
                  default: en
                  example: en
            examples:
              Person's Own Address:
                summary: >-
                  Предварительный просмотр повторной отправки подтверждения
                  адреса для собственного адреса пользователя
                value:
                  nodes_to_resubmit:
                    - node_id: feature_poa_1
                      feature: POA
                  email_language: en
              Named Recipient:
                summary: Предварительный просмотр письма для указанного вами адреса
                value:
                  nodes_to_resubmit:
                    - node_id: feature_ocr
                      feature: OCR
                  email_address: person@example.com
                  email_language: en
      responses:
        '200':
          description: >-
            Только предварительный просмотр. Сессия остаётся без изменений,
            письмо не отправляется.
          content:
            application/json:
              schema:
                type: object
                required:
                  - recipient
                  - recipient_source
                  - sender
                  - sender_name
                  - sender_email
                  - sender_kind
                  - subject
                  - html
                  - text
                  - language
                  - will_be_sent
                  - not_sent_reason
                  - preview_token
                  - nodes_to_resubmit
                  - requires_user_action
                properties:
                  recipient:
                    type: string
                    description: >-
                      Адрес, на который отправляется электронное письмо. Пустая
                      строка, если адрес человека неизвестен: в этом случае
                      письмо отправить нельзя, и `preview_token` также пуст.
                      Передайте его как `email_address` при подтверждении.
                    example: person@example.com
                  recipient_source:
                    type: string
                    enum:
                      - email_verification
                      - contact_details
                      - request
                      - ''
                    description: >-
                      Источник значения `recipient`. `request`: переданный вами
                      `email_address`. `email_verification`: адрес,
                      подтвержденный пользователем на шаге проверки электронной
                      почты сценария. `contact_details`: адрес, указанный в
                      `contact_details` при создании сессии. Пустая строка, если
                      адрес отсутствует.
                    example: email_verification
                  sender:
                    type: string
                    description: >-
                      Заголовок `From`, с которым отправляется электронное
                      письмо.
                    example: Example App <no-reply@mail.example.com>
                  sender_name:
                    type: string
                    description: Отображаемая часть имени в `sender`.
                    example: Example App
                  sender_email:
                    type: string
                    format: email
                    description: Часть адреса `sender`.
                    example: no-reply@mail.example.com
                  sender_kind:
                    type: string
                    enum:
                      - customer
                      - didit
                    description: >-
                      `customer`: письмо отправляется с подтверждённого домена
                      отправителя вашего приложения (White label). `didit`:
                      отправляется с собственного отправителя Didit.
                    example: customer
                  subject:
                    type: string
                    description: Тема письма в точности так, как она отправляется.
                    example: 'Action Required: Complete your verification in Example App'
                  html:
                    type: string
                    description: >-
                      HTML письма точно в том виде, в котором оно отправляется,
                      со встроенным логотипом в формате data URL. Отображайте
                      его в изолированном фрейме (sandbox), ни в коем случае не
                      напрямую в DOM вашего приложения.
                    example: <!DOCTYPE html><html><body>...</body></html>
                  text:
                    type: string
                    description: >-
                      Текст письма в виде обычного текста, как он хранится в
                      цепочке сообщений пользователя, для компактного
                      предварительного просмотра (в качестве получаемого письма
                      остаётся HTML).
                    example: |-
                      Almost there

                      Some steps need to be completed again.
                      Here’s what to fix:

                      https://verify.didit.me/session/abc123
                  language:
                    type: string
                    description: >-
                      Язык, на котором составлено письмо. Английский (`en`),
                      если запрошенный `email_language` недоступен.
                    example: en
                  will_be_sent:
                    type: boolean
                    description: >-
                      Отправляет ли подтверждение изменения с помощью
                      `send_email: true` это электронное письмо. Значение
                      `false`, если задан `not_sent_reason`.
                    example: true
                  not_sent_reason:
                    type: string
                    nullable: true
                    enum:
                      - no_user_action
                      - no_recipient
                      - sandbox
                      - null
                    description: >-
                      Причина, по которой подтверждение не приведёт к отправке
                      электронного письма, или `null`, если письмо будет
                      отправлено. `no_user_action`: каждый выбранный шаг
                      выполняется без участия человека, поэтому повторная
                      отправка завершается автоматически и электронное письмо не
                      отправляется. `no_recipient`: адрес человека неизвестен, и
                      вы его не передали. `sandbox`: сессия в песочнице,
                      получатель которой не дал согласие на доставку тестовых
                      электронных писем, поэтому отправка только имитируется.
                    example: null
                  nodes_to_resubmit:
                    type: array
                    items:
                      type: object
                      required:
                        - node_id
                        - feature
                      properties:
                        node_id:
                          type: string
                          description: >-
                            Идентификатор узла в том виде, в каком он указан в
                            определении сценария сессии (например,
                            `feature_ocr`, `feature_liveness`).
                          example: feature_ocr
                        feature:
                          type: string
                          description: >-
                            Тип функции узла. Алиасы `ID_VERIFICATION`, `POA`,
                            `PHONE` и `EMAIL` нормализуются на стороне сервера в
                            `OCR`, `PROOF_OF_ADDRESS`, `PHONE_VERIFICATION` и
                            `EMAIL_VERIFICATION`. `KYB_REGISTRY`,
                            `KYB_KEY_PEOPLE` и `KYB` проходят валидацию схемы,
                            но всегда отклоняются с бизнес-ошибкой `400`,
                            показанной в примерах.
                          enum:
                            - OCR
                            - OCR_BACK
                            - NFC
                            - AML
                            - FACE
                            - LIVENESS
                            - FACE_MATCH
                            - IP_ANALYSIS
                            - AGE_ESTIMATION
                            - PROOF_OF_ADDRESS
                            - PHONE_VERIFICATION
                            - EMAIL_VERIFICATION
                            - FACE_SEARCH
                            - DATABASE_VALIDATION
                            - QUESTIONNAIRE
                            - DOCUMENT_AI
                            - KYB_DOCUMENTS
                            - ID_VERIFICATION
                            - POA
                            - PHONE
                            - EMAIL
                            - KYB_REGISTRY
                            - KYB_KEY_PEOPLE
                            - KYB
                            - GEOLOCATION
                          example: OCR
                  requires_user_action:
                    type: boolean
                    description: >-
                      Требует ли хотя бы одна выбранная проверка взаимодействия
                      с пользователем. Это не предопределяет итоговый результат
                      сценария.
                  preview_token:
                    type: string
                    description: >-
                      Подписанная квитанция для этого конкретного письма,
                      действующая в течение 15 минут. Передайте ее как
                      `email_preview_token` в [Обновить статус
                      сессии](/ru/sessions-api/update-status). Пустая строка,
                      если получатель отсутствует.
                    example: >-
                      eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000
              examples:
                Will Be Sent:
                  summary: >-
                    Получатель по умолчанию: адрес, верифицированный в процессе
                    проверки
                  value:
                    recipient: person@example.com
                    recipient_source: email_verification
                    sender: Example App <no-reply@mail.example.com>
                    sender_name: Example App
                    sender_email: no-reply@mail.example.com
                    sender_kind: customer
                    subject: 'Action Required: Complete your verification in Example App'
                    html: <!DOCTYPE html><html><body>...</body></html>
                    language: en
                    will_be_sent: true
                    not_sent_reason: null
                    nodes_to_resubmit:
                      - node_id: feature_poa_1
                        feature: PROOF_OF_ADDRESS
                    requires_user_action: true
                    preview_token: >-
                      eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000
                No User Action:
                  summary: >-
                    Выбраны только бэкенд-шаги, поэтому электронное письмо не
                    отправляется
                  value:
                    recipient: person@example.com
                    recipient_source: contact_details
                    sender: Example App <no-reply@mail.example.com>
                    sender_name: Example App
                    sender_email: no-reply@mail.example.com
                    sender_kind: customer
                    subject: 'Action Required: Complete your verification in Example App'
                    html: <!DOCTYPE html><html><body>...</body></html>
                    language: en
                    will_be_sent: false
                    not_sent_reason: no_user_action
                    nodes_to_resubmit:
                      - node_id: feature_aml
                        feature: AML
                    requires_user_action: false
                    preview_token: >-
                      eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000
          headers:
            Cache-Control:
              description: >-
                Всегда `no-store`: предпросмотр содержит данные верификации и не
                должен кэшироваться.
              schema:
                type: string
                example: no-store
        '400':
          description: >-
            Сессия не находится в статусе, который принимает этот endpoint, она
            уже находится в статусе `Resubmitted`, выбранные шаги не могут быть
            отправлены повторно, либо поле недействительно.
          content:
            application/json:
              examples:
                Wrong Current Status:
                  summary: Сессия не находится в статусе, допустимом для этого endpoint
                  value:
                    detail: >-
                      Only sessions with status Approved, Declined, In Review,
                      Kyc Expired, Abandoned, Resubmitted can be updated.
                      Current status: In Progress
                Already Resubmitted:
                  summary: Сессия уже находится в статусе Resubmitted
                  value:
                    - The new status is the same as the current status.
                Nothing To Resubmit:
                  summary: Автовыбор не нашел шагов, требующих повторной отправки
                  value:
                    nodes_to_resubmit: >-
                      No features found that need resubmission. All features are
                      already approved.
                Invalid Email:
                  summary: email_address не является адресом электронной почты
                  value:
                    email_address:
                      - Enter a valid email address.
        '401':
          description: Срок действия API-ключа с ограниченной областью действия истёк.
          content:
            application/json:
              examples:
                Expired API Key:
                  summary: >-
                    API-ключ с ограниченной областью действия с истёкшим сроком
                    действия
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Отсутствуют учетные данные, у вызывающей стороны нет привилегии
            `write:sessions`, у API-ключа с ограниченной областью видимости нет
            необходимого для этого endpoint доступа, либо передан `session_id`,
            принадлежащий другому приложению.
          content:
            application/json:
              examples:
                Invalid Credentials:
                  summary: Отсутствует или недействителен x-api-key
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Missing Privilege:
                  summary: У вызывающей стороны отсутствует разрешение write:sessions
                  value:
                    detail: You do not have permission to perform this action.
                Scoped Key Without Access:
                  summary: >-
                    API-ключ с ограниченной областью действия без данного
                    доступа
                  value:
                    detail: This API key has no write access to decisions.
        '404':
          description: Сессия KYC или KYB с таким `session_id` не существует.
          content:
            application/json:
              examples:
                Not Found:
                  summary: Неизвестный session_id
                  value:
                    detail: Not found.
        '429':
          description: >-
            Все шаги для повторной отправки относятся только к бэкенду (AML,
            DATABASE_VALIDATION, IP_ANALYSIS), и сессия уже отправлялась
            повторно для таких шагов за последние 30 секунд, поэтому Update
            Session Status отклонит повторную отправку. Повторите попытку через
            интервал, указанный в `Retry-After`.
          content:
            application/json:
              examples:
                Backend-only resubmit throttled:
                  value:
                    detail: >-
                      This session was already resubmitted for backend-only
                      features within the last 30 seconds; repeating it cannot
                      change the outcome. Wait before resubmitting again.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.preview_resubmission(
                "11111111-2222-3333-4444-555555555555",
                nodes_to_resubmit=[{
                    "node_id": "feature_poa_1",
                    "feature": "POA",
                }],
                email_language="en",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const result = await
            didit.sessions.previewResubmission("11111111-2222-3333-4444-555555555555",
            {
              nodes_to_resubmit: [{
                node_id: "feature_poa_1",
                feature: "POA",
              }],
              email_language: "en",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.PreviewResubmission(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsPreviewResubmissionParams{\n\tNodesToResubmit: didit.Some([]didit.SessionsPreviewResubmissionParamsNodesToResubmit{{\n\t\tNodeID:  \"feature_poa_1\",\n\t\tFeature: \"POA\",\n\t}}),\n\tEmailLanguage: didit.String(\"en\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.util.List;

            import me.didit.Didit;

            import me.didit.types.SessionsPreviewResubmissionParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().previewResubmission("11111111-2222-3333-4444-555555555555",
            SessionsPreviewResubmissionParams.builder()
                    .nodesToResubmit(List.of(SessionsPreviewResubmissionParams.NodesToResubmit.builder()
                            .nodeId("feature_poa_1")
                            .feature(SessionsPreviewResubmissionParams.NodesToResubmit.Feature.of("POA"))
                            .build()))
                    .emailLanguage("en")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->sessions->previewResubmission('11111111-2222-3333-4444-555555555555',
            [
                'nodes_to_resubmit' => [[
                    'node_id' => 'feature_poa_1',
                    'feature' => 'POA',
                ]],
                'email_language' => 'en',
            ]);

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.sessions.preview_resubmission(
              "11111111-2222-3333-4444-555555555555",
              nodes_to_resubmit: [{
                node_id: "feature_poa_1",
                feature: "POA",
              }],
              email_language: "en"
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.Sessions.PreviewResubmissionAsync("11111111-2222-3333-4444-555555555555",
            new SessionsPreviewResubmissionParams

            {
                NodesToResubmit = new SessionsPreviewResubmissionParamsNodesToResubmit[]
                {
                    new()
                    {
                        NodeId = "feature_poa_1",
                        Feature = "POA",
                    },
                },
                EmailLanguage = "en",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API-ключ вашего приложения из раздела «Разработчикам» -> «API-ключи» в
        Business Console. Основной ключ имеет полный доступ. Именованный ключ
        может иметь ограниченную область действия: без доступа, чтение или
        запись для каждого ресурса, ограничение определенными сценариями или
        одобренными сессиями, списком IP-адресов и сроком действия. 401
        означает, что ключ неверен, отозван или его срок действия истек; 403
        означает, что ключ не был передан, у ключа нет доступа к этому ресурсу
        или действию, либо запрос поступил с адреса вне его списка IP-адресов;
        404 на маршруте сессии означает, что сессия не входит в сценарии или
        статусы ключа. Ключ без доступа к медиа получает URL изображений, видео
        и PDF как null, а ключ без прав на запись сессий получает ссылки на
        сессии и токены как null. См. https://docs.didit.me/console/api-keys.

````

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