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

# Обновление сценария через API: изменение KYC-процесса

> Обновляйте сценарий Didit KYC или KYB через API: переименовывайте, заменяйте функции и настраивайте пороги. Оплата за вызов, без контрактов.



Промпт API обновления сценария
        Скопировать промпт в буфер обмена



      
      

\<pre>

\`Update a simple Didit workflow through the Management API.

Endpoint:
PATCH https://verification.didit.me/v3/workflows/{settings_uuid}/

Authentication:
Use the x-api-key header with my Didit API key.

Requirements:
\- Use PATCH and include only the fields I want to change.
\- To rename the workflow, send workflow_label only.
\- To change workflow checks, send the full desired features array. This replaces the previous feature order and config.
\- Do not send workflow_graph, branches, actions, webhooks, or conditional logic.
\- Send features in the exact execution order.
\- Use uppercase feature values such as OCR, LIVENESS, FACE_MATCH, AML, QUESTIONNAIRE, EMAIL_VERIFICATION, PHONE_VERIFICATION, or PROOF_OF_ADDRESS.
\- Configure each feature with the fields from /management-api/workflows/feature-configs.
\- For an OCR feature, omit config.documents_allowed or send an empty object to allow every supported document type. Send config.documents_allowed only to restrict the allowed documents.
\- Keep dependency order valid. For example, put OCR before FACE_MATCH.
\- If the workflow includes QUESTIONNAIRE, use the latest questionnaire_id as config.questionnaire_uuid.

Example metadata update body:
\{
"workflow_label": "Premium KYC"
}

Example full feature replacement body:
\{
"features": [
\{
  "feature": "OCR",
  "config": {
    "documents_allowed": {
      "USA": {
        "DL": {
          "enabled": 1,
          "sides": 2
        }
      }
    }
  }
},
\{
  "feature": "AML",
  "config": {
    "aml_score_review_threshold": 70,
    "aml_score_approve_threshold": 30
  }
}
]
}

Build the API call, handle validation errors, and return the updated workflow response.`

\</pre>



      
      

Вставьте в

Для частичного обновления используйте `PATCH`. Чтобы переименовать сценарий, отправьте только `workflow_label`.```json theme={null}
{
  "workflow_label": "Premium KYC"
}
```Чтобы изменить проверки в сценарии, отправьте полный желаемый массив `features`. Он заменит текущий порядок функций и их конфигурацию.```json theme={null}
{
  "features": [
    {
      "feature": "OCR",
      "config": {
        "documents_allowed": {
          "USA": {
            "DL": {
              "enabled": 1,
              "sides": 2
            }
          }
        }
      }
    },
    {
      "feature": "AML",
      "config": {
        "aml_score_review_threshold": 70,
        "aml_score_approve_threshold": 30
      }
    }
  ]
}
```API v3 поддерживает только простые сценарии: один линейный путь и один финальный шаг со статусом. Ветвление, узлы действий и узлы webhook здесь не принимаются.## Справочник по конфигурации функцийКогда вы отправляете `features` в `PATCH`, массив заменяет текущий порядок функций и их конфигурацию. Укажите заново все обязательные параметры конфигурации.Точный объект `config` зависит от функции. Полный список полей, значений по умолчанию, обязательных настроек, допустимых диапазонов и примеров см. в разделе [Конфигурации функций сценария](https://docs.didit.me/ru/management-api/workflows/feature-configs.md).Для `OCR` опустите `config.documents_allowed`, передайте `null` или `{}`, чтобы разрешить все поддерживаемые типы документов. Указывайте этот параметр, только если хотите ограничить сценарий определёнными странами или типами документов. Для `QUESTIONNAIRE` параметр `config.questionnaire_uuid` обязателен.## Обновление настроек сценарияВы можете изменять настройки на уровне сессии, не затрагивая список функций. Отправляйте только те поля, которые хотите изменить.| Поле | Тип | Описание |
| - | - | - |
| `is_white_label_enabled` | логическое значение | Включает настройку White label для сессий, созданных с этим сценарием. |
| `is_desktop_allowed` | логическое значение | Разрешает запуск потока верификации в настольных браузерах. |
| `max_retry_attempts` | целое число (0–10) | Максимальное количество повторных попыток после отклонённой верификации. `0` блокирует пользователя после первого отказа. |
| `retry_window_days` | целое число (1–365) или `null` | Скользящее окно в днях, по которому считаются повторные попытки (`null` = лимит за всё время). |
| `session_expiration_time` | целое число (3600–2419200) | Количество секунд до истечения незавершённой сессии. Минимум 1 час, максимум 4 недели. |```json theme={null}
{
  "is_white_label_enabled": true,
  "is_desktop_allowed": true,
  "max_retry_attempts": 5,
  "retry_window_days": 14,
  "session_expiration_time": 86400
}
```Используйте `uuid` сценария, полученный из endpoint списка, создания или получения, как `settings_uuid` в этом URL.


## OpenAPI

````yaml ru/openapi-25.json PATCH /v3/workflows/{settings_uuid}/
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/workflows/{settings_uuid}/:
    patch:
      tags:
        - Workflows
      summary: Обновить сценарий
      description: >-
        Обновить сценарий. Версионирование зависит от переданного поля `status`
        и текущего состояния версии: (1) нет `status` для **опубликованной**
        версии → опубликованная версия обновляется на месте (тот же `uuid`, та
        же `version`); (2) нет `status` для **черновика** → черновик обновляется
        и сразу публикуется; (3) `status: "published"` для **опубликованной**
        версии → создаётся и возвращается НОВАЯ опубликованная версия в том же
        `workflow_id` (новый `uuid`, `version` + 1), а любой существующий
        черновик в группе удаляется; (4) `status: "draft"` сохраняет черновик
        как черновик (автосохранение), но для опубликованной версии отклоняется
        с ошибкой 400 (`"Cannot revert a published version to draft."`). Тело
        запроса принимает тот же строгий список разрешённых полей, что и при
        создании: неизвестные ключи отклоняются с ошибкой 400.
      operationId: update_workflow
      parameters:
        - name: settings_uuid
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: UUID конкретной версии обновляемого сценария.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SimpleWorkflowUpdateRequest'
            examples:
              Replace features:
                summary: Отправьте полный желаемый порядок функций
                value:
                  features:
                    - feature: OCR
                    - feature: AML
              Rename:
                summary: Переименовать сценарий
                value:
                  workflow_label: Premium KYC
              Set as default:
                summary: Назначить этот сценарий сценарием приложения по умолчанию
                value:
                  is_default: true
              Update config:
                summary: Изменить конфигурацию функции
                value:
                  features:
                    - feature: OCR
                    - feature: LIVENESS
                      config:
                        face_liveness_method: passive
              Publish a draft:
                summary: Опубликовать черновик
                value:
                  status: published
      responses:
        '200':
          description: >-
            Сценарий обновлён. Тело ответа представляет собой ПОЛНУЮ
            конфигурацию полученной версии (та же исходная структура
            `VerificationSettings`, что и в `GET
            /v3/workflows/{settings_uuid}/`). Если обновление создало новую
            версию (отправлено `status: "published"` для опубликованной строки),
            возвращённые `uuid` и `version` отличаются от тех, к которым вы
            применили патч — используйте возвращённый `uuid` для последующих
            вызовов.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowDetail'
        '400':
          description: >-
            Ошибка валидации — ключ верхнего уровня вне разрешённого белого
            списка, неизвестная функция, неверный порядок, выход порога за
            допустимый диапазон, ссылка на несуществующую анкету, функция
            `SIGNATURE`, которая будет запущена в продакшн без документа для
            подписания, новая функция `SIGNATURE` со значением `signature_level:
            "aes"`, когда Advanced (AES) недоступен (`aes_not_available`, см.
            `signature_availability` в сценарии; шаг, в котором уже сохранён
            `aes`, сохраняет его) или передача `status: "draft"` для
            опубликованной версии (`"Cannot revert a published version to
            draft."`). Тело ответа представляет собой ошибку валидации DRF с
            ключами по именам полей.
        '403':
          description: API-ключ отсутствует или недействителен.
          content:
            application/json:
              examples:
                Invalid token:
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            Сценарий с таким `settings_uuid` не существует для
            аутентифицированного приложения.
        '415':
          description: >-
            Неподдерживаемый тип содержимого. Укажите `Content-Type:
            application/json`.
        '429':
          description: >-
            Превышен лимит запросов. Повторите попытку с экспоненциальной
            задержкой.
        '500':
          description: Непредвиденная ошибка сервера. Повторная попытка безопасна.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: >-
            curl -X PATCH
            'https://verification.didit.me/v3/workflows/a1b2c3d4-5678-90ab-cdef-111111111111/'
            \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"workflow_label": "Premium KYC"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.workflows.update(
                "11111111-2222-3333-4444-555555555555",
                features=[{
                    "feature": "OCR",
                }, {
                    "feature": "AML",
                }],
            )
            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.workflows.update("11111111-2222-3333-4444-555555555555", {
              features: [{
                feature: "OCR",
              }, {
                feature: "AML",
              }],
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Workflows.Update(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SimpleWorkflowUpdateRequest{\n\tFeatures: didit.Some([]didit.SimpleWorkflowFeature{{\n\t\tFeature: \"OCR\",\n\t}, {\n\t\tFeature: \"AML\",\n\t}}),\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.SimpleWorkflowFeature;

            import me.didit.types.SimpleWorkflowUpdateRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.workflows().update("11111111-2222-3333-4444-555555555555",
            SimpleWorkflowUpdateRequest.builder()
                    .features(List.of(
                            SimpleWorkflowFeature.builder()
                                    .feature(SimpleWorkflowFeature.Feature.of("OCR"))
                                    .build(),
                            SimpleWorkflowFeature.builder()
                                    .feature(SimpleWorkflowFeature.Feature.of("AML"))
                                    .build()))
                    .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->workflows->update('11111111-2222-3333-4444-555555555555', [
                'features' => [[
                    'feature' => 'OCR',
                ], [
                    'feature' => 'AML',
                ]],
            ]);

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

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

            result = didit.workflows.update(
              "11111111-2222-3333-4444-555555555555",
              features: [{
                feature: "OCR",
              }, {
                feature: "AML",
              }]
            )
            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.Workflows.UpdateAsync("11111111-2222-3333-4444-555555555555",
            new SimpleWorkflowUpdateRequest

            {
                Features = new SimpleWorkflowFeature[]
                {
                    new()
                    {
                        Feature = "OCR",
                    },
                    new()
                    {
                        Feature = "AML",
                    },
                },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    SimpleWorkflowUpdateRequest:
      type: object
      description: >-
        Обновить метаданные сценария или заменить полный линейный список
        функций. СТРОГИЙ белый список полей: любой неуказанный здесь ключ
        отклоняется с ошибкой 400.
      properties:
        workflow_label:
          type: string
          maxLength: 50
          description: Отображаемое имя для сценария (максимум 50 символов).
        is_default:
          type: boolean
          description: Установить этот сценарий по умолчанию для новых сессий.
        status:
          type: string
          enum:
            - draft
            - published
          description: >-
            Управляет версионированием. Опустите, чтобы обновить текущую версию
            на месте (черновики публикуются автоматически). Значение `published`
            для уже опубликованной версии создаёт и возвращает НОВУЮ версию.
            Значение `draft` допустимо только тогда, когда версия всё ещё
            является черновиком.
        features:
          type: array
          minItems: 1
          description: Если указано, полностью заменяет порядок и конфигурацию функций.
          items:
            $ref: '#/components/schemas/SimpleWorkflowFeature'
        is_white_label_enabled:
          type: boolean
          description: >-
            Включить кастомизацию White label для сессий, созданных с этим
            сценарием.
        is_desktop_allowed:
          type: boolean
          description: Разрешить запуск сценария верификации в браузерах на десктопе.
        max_retry_attempts:
          type: integer
          minimum: 0
          maximum: 10
          description: >-
            Максимальное количество повторных попыток после отклонения
            верификации. `0` блокирует пользователя после первого отклонения.
        retry_window_days:
          type: integer
          minimum: 1
          maximum: 365
          nullable: true
          description: >-
            Скользящее окно в днях для подсчёта повторных попыток. `null`
            устанавливает лимит за всё время.
        face_liveness_max_attempts:
          type: integer
          minimum: 1
          maximum: 3
          description: >-
            Максимальное количество попыток проверки живости за сессию. Это
            значение также копируется в сгенерированные узлы проверки живости и
            оценки возраста в сценарии, если только оно не переопределено в
            конфигурации на уровне функции.
        face_match_max_attempts:
          type: integer
          minimum: 1
          maximum: 3
          description: >-
            Максимальное количество попыток сравнения лиц за сессию. Это
            значение также копируется в сгенерированные узлы сравнения лиц в
            сценарии, если только оно не переопределено в конфигурации на уровне
            функции.
        session_expiration_time:
          type: integer
          minimum: 3600
          maximum: 2419200
          description: >-
            Количество секунд до истечения срока незавершённой сессии. Минимум 1
            час (3600), максимум 4 недели (2419200).
    WorkflowDetail:
      type: object
      description: >-
        Поля ниже являются типизированными; объект также содержит все остальные
        столбцы конфигурации сценария (переключатели функций, пороги, действия
        при предупреждениях, разрешённые документы, обратные вызовы) в качестве
        дополнительных свойств. Поля, неприменимые к `workflow_type`, имеют
        значение `null`.
      properties:
        uuid:
          type: string
          format: uuid
          description: >-
            Идентификатор конкретной версии (`settings_uuid`). Каждая версия
            сценария имеет собственный идентификатор.
        workflow_id:
          type: string
          format: uuid
          description: >-
            Постоянный идентификатор, общий для всех версий сценария. Созданные
            с его помощью сессии используют последнюю опубликованную версию.
        workflow_label:
          type: string
          description: Отображаемое имя сценария.
        workflow_type:
          type: string
          nullable: true
          enum:
            - kyc
            - kyb
            - adaptive_age_verification
            - biometric_authentication
            - address_verification
            - questionnaire_verification
            - email_verification
            - phone_verification
            - null
          description: >-
            Шаблон сценария. `null` для графовых сценариев, созданных без
            шаблона.
        is_default:
          type: boolean
          description: Является ли этот сценарий сценарием по умолчанию для приложения.
        is_archived:
          type: boolean
          description: Архивные сценарии не могут запускать новые сессии.
        version:
          type: integer
          description: Номер версии внутри сценария.
        status:
          type: string
          enum:
            - draft
            - published
          description: >-
            Черновые версии можно редактировать; опубликованные версии
            неизменяемы и используются для новых сессий.
        published_at:
          type: string
          format: date-time
          nullable: true
          description: Когда была опубликована эта версия. `null` для черновиков.
        is_simple_workflow:
          type: boolean
          description: '`true`, если сценарий не имеет пользовательского `workflow_graph`.'
        is_editable:
          type: boolean
          description: '`true` только для версий со статусом `draft`.'
        workflow_url:
          type: string
          format: uri
          description: Публичный URL для запуска сессии с этим сценарием.
        workflow_graph:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Структура графа сценария (узлы и рёбра). `null` для простых
            сценариев.
        features:
          type: string
          description: >-
            Включенные функции, объединенные через `" + "`, например `"OCR +
            LIVENESS"`.
        total_price:
          type: number
          nullable: true
          description: Цена за сессию; для графовых сценариев это самый дорогой путь.
        min_price:
          type: number
          nullable: true
          description: Цена самого дешёвого пути в сценарии.
        max_price:
          type: number
          nullable: true
          description: Цена самого дорогого пути в сценарии.
        special_add_on_prices:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Специальные цены на дополнения для организации или `null`, если они
            не заданы.
        max_retry_attempts:
          type: integer
          description: >-
            Количество повторных попыток, разрешенных после отклоненной
            верификации.
        retry_window_days:
          type: integer
          nullable: true
          description: Количество дней, в течение которых разрешены повторные попытки.
        session_expiration_time:
          type: integer
          description: Количество секунд до истечения срока незавершённой сессии.
        questionnaire:
          type: object
          nullable: true
          additionalProperties: true
          description: Анкета, прикрепленная к сценарию, или `null`.
        kyb_role_settings:
          type: array
          items:
            type: object
            additionalProperties: true
          description: Настройки верификации по ролям для ключевых лиц KYB.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        signature_availability:
          type: object
          description: >-
            Какие уровни Электронной подписи доступны для подписания прямо
            сейчас. Проверьте это перед установкой `signature_level`.
            Возвращается в сценариях `kyc`, `kyb` и графовых сценариях.
          properties:
            simple:
              type: boolean
              description: Simple доступен всегда.
            aes:
              type: boolean
              description: >-
                Доступна ли сейчас подпись с расширенным уровнем (AES). Пока
                значение `false`, сохранение нового шага с `signature_level:
                "aes"` отклоняется с ошибкой `aes_not_available`.
            qes:
              type: boolean
              description: >-
                Доступна ли сейчас подпись с квалифицированным уровнем (QES).
                Имеет значение `false`, пока не подключен квалифицированный
                провайдер.
        is_bank_verification_enabled:
          type: boolean
          description: >-
            Выполняется ли в простом сценарии KYC или KYB верификация банка. Она
            выполняется после шагов контакта (и верификации местоположения) и
            перед проверкой по базам данных, AML и анализом IP. Верификация
            банка пока не является общедоступной: её включение отклоняется
            везде, где она не активирована.
        bank_verification_config:
          type: object
          additionalProperties: true
          description: >-
            Настройки верификации банковских счетов простого сценария с теми же
            ключами, которые принимает узел `BANK_VERIFICATION` (например,
            `bank_countries` и `bank_method_order`). Неизвестные ключи
            отбрасываются. Каждый ключ необязателен, а отсутствующий ключ
            сохраняет значение по умолчанию, поэтому `{}` означает использование
            всех значений по умолчанию. См. раздел [Настройки верификации
            счетов](/ru/management-api/workflows/feature-configs#верификация-банка).
          example: {}
        is_geolocation_enabled:
          type: boolean
          description: >-
            Выполняется ли в простом сценарии KYC верификация местоположения.
            Она выполняется после шагов контакта и перед верификацией банка и
            проверкой по базам данных. В сценариях верификации бизнеса (KYB)
            этот шаг недоступен.
        geolocation_config:
          type: object
          additionalProperties: true
          description: >-
            Настройки верификации местоположения для простого сценария с теми же
            ключами, которые принимает узел `GEOLOCATION` (например,
            `is_geolocation_geofencing_enabled` и `geolocation_max_attempts`).
            Неизвестные ключи отбрасываются. Каждый ключ необязателен;
            отсутствующий ключ сохраняет значение по умолчанию, поэтому `{}`
            означает использование всех значений по умолчанию.
          example: {}
      additionalProperties: true
    SimpleWorkflowFeature:
      type: object
      required:
        - feature
      properties:
        feature:
          type: string
          description: >-
            Функция для запуска. Используйте значения в верхнем регистре,
            приведенные здесь.
          enum:
            - OCR
            - NFC
            - LIVENESS
            - FACE_MATCH
            - PROOF_OF_ADDRESS
            - QUESTIONNAIRE
            - DOCUMENT_AI
            - PHONE_VERIFICATION
            - EMAIL_VERIFICATION
            - DATABASE_VALIDATION
            - AML
            - IP_ANALYSIS
            - AGE_ESTIMATION
            - KYB_REGISTRY
            - KYB_DOCUMENTS
            - KYB_KEY_PEOPLE
            - SIGNATURE
        config:
          type: object
          description: >-
            Настройки конкретной функции. Для `QUESTIONNAIRE` укажите
            `questionnaire_uuid` со значением `questionnaire_id`, возвращённым
            endpoint создания анкеты. Для `SIGNATURE`: сценарию, переводимому в
            продакшн, требуется документ для подписания: установите
            `signature_documents_source` в `session` или `both`, чтобы каждая
            сессия могла передавать свой собственный, либо передайте `status:
            "draft"` и добавьте документы перед публикацией. Значение
            `signature_level: "aes"` отклоняется с ошибкой `aes_not_available`,
            пока `signature_availability.aes` имеет значение `false` в сценарии.
            Для `OCR` параметр `methods` определяет, какие методы Верификации
            личности разрешены для каждой страны (захват документа, проверка без
            документов по государственным или другим авторитетным источникам и
            цифровые кошельки удостоверений личности); если его опустить, для
            всех стран будет использоваться только захват документов. Для
            `SIGNATURE` см. [Настройки электронной
            подписи](/ru/management-api/workflows/feature-configs#электронная-подпись):
            `signature_level` сейчас принимает значения `simple` (по умолчанию,
            верификация личности, электронная почта или телефон не требуются) и
            `aes`, а документы сценария и их поля настраиваются в консоли,
            поэтому через API отправляйте документы и поля для каждой сессии с
            параметром `signature_documents_source: "session"`.
          additionalProperties: true
        label:
          type: string
          description: Необязательная внутренняя метка для этого узла сценария.
  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.