---
title: "Create or update a draft workflow"
method: POST
path: "/resources/api/agent/applicantWorkflows"
tags: ["ApplicantWorkflowApiAgentResource"]
---

# Create or update a draft workflow

`POST /resources/api/agent/applicantWorkflows`

Creates a new draft workflow or updates an existing one. Omit `id` to create a new draft: the server assigns the id, revision number, and a draft status. Provide an existing `id` to update that draft in place. Only drafts can be edited — a published or archived revision is read-only, so to change a published workflow create a new draft revision from it first. The response includes a `notices` list describing any schema or logic problems; saving does not require the workflow to be free of notices, so you can store a work-in-progress draft and resolve them before publishing.

Workflow names:
- `default` — runs for any verification via standard applicant levels. Selected automatically.
- `actions` — runs for any applicant action. Selected automatically.
- `test` — an isolated counterpart of `default` for testing workflow changes. The system never selects it automatically; start it manually on an applicant.

## Request body

- UpsertApplicantWorkflowDto
  - `edges` ApplicantWorkflowEdge[] — Transitions between steps, including the conditions that route between them.
    - `condition` Condition
      - `astId` integer
      - `negate` boolean
      - `or` And[]
        - `and` Criterion[]
          - `args` Arg[]
            - `astId` integer
            - `exp` string
            - `lit` string
          - `astId` integer
          - `op` string
        - `astId` integer
        - `negate` boolean
        - `score` integer
    - `from` string
    - `id` string
    - `reviewDecisions` ReviewDecision[]
    - `to` string
  - `id` string
  - `name` 'default' | 'test' | 'actions' — Workflow name shared by every revision of the same workflow.
  - `nodes` ApplicantWorkflowNode[] — The steps that make up the workflow.
    - `actions` ActionsNodeParams
      - `items` ApplicantWorkflowAction[]
        - `id` string
        - `kytCase` KytCaseAction
          - `blueprintId` string
          - `deadlineHours` integer
          - `priority` string
          - `tags` string[]
        - `notes` NotesAction
          - `note` string
          - `targetType` 'applicant' | 'applicantAction'
        - `riskLevel` RiskLevelAction
          - `riskLevel` string
        - `sourceKey` SourceKeyAction
          - `sourceKey` string
        - `tags` TagsAction
          - `tags` string[]
          - `tagsToRemove` string[]
          - `targetType` 'applicant' | 'applicantAction'
        - `type` string
        - `verificationEmailAction` VerificationEmailAction
          - `notifyAssociatedParties` boolean
    - `applicantLevel` ApplicantLevelNodeParams
      - `levelName` string
      - `resetDocSets` ApplicantLevelResetDocSetParam[]
        - `companyDocsGroupDefinitions` string[]
        - `idDocSetType` 'APPLICANT_DATA' | 'EMAIL_VERIFICATION' | 'PHONE_VERIFICATION' | 'IDENTITY' | 'IDENTITY2' | 'IDENTITY3' | 'IDENTITY4' | 'SELFIE' | 'SELFIE2' | 'PROOF_OF_RESIDENCE' | 'PROOF_OF_RESIDENCE2' | 'PROOF_OF_PAYMENT' | 'PAYMENT_METHODS' | 'INVESTABILITY' | 'COMPANY' | 'ACCREDITED_INVESTOR' | 'E_SIGN' | 'QUESTIONNAIRE' | 'QUESTIONNAIRE2' | 'QUESTIONNAIRE3' | 'QUESTIONNAIRE4' | 'E_KYC' | 'OTHER_DOCS' | 'COMPANY_DATA' | 'COMPANY_DOCUMENTS' | 'COMPANY_BENEFICIARIES' | 'COMPANY_ADDRESSES' | 'TR_RECIPIENT_INFORMATION' | 'DEVICE_CHECK' | 'SOLANA_ATTESTATION' | 'LINEA_ATTESTATION' | 'CHAINLINK_ATTESTATION'
    - `applicantTransition` ApplicantTransitionNodeParams
      - `applicantLevel` ApplicantLevelNodeParams
        - `levelName` string
        - `resetDocSets` ApplicantLevelResetDocSetParam[]
          - `companyDocsGroupDefinitions` string[]
          - `idDocSetType` 'APPLICANT_DATA' | 'EMAIL_VERIFICATION' | 'PHONE_VERIFICATION' | 'IDENTITY' | 'IDENTITY2' | 'IDENTITY3' | 'IDENTITY4' | 'SELFIE' | 'SELFIE2' | 'PROOF_OF_RESIDENCE' | 'PROOF_OF_RESIDENCE2' | 'PROOF_OF_PAYMENT' | 'PAYMENT_METHODS' | 'INVESTABILITY' | 'COMPANY' | 'ACCREDITED_INVESTOR' | 'E_SIGN' | 'QUESTIONNAIRE' | 'QUESTIONNAIRE2' | 'QUESTIONNAIRE3' | 'QUESTIONNAIRE4' | 'E_KYC' | 'OTHER_DOCS' | 'COMPANY_DATA' | 'COMPANY_DOCUMENTS' | 'COMPANY_BENEFICIARIES' | 'COMPANY_ADDRESSES' | 'TR_RECIPIENT_INFORMATION' | 'DEVICE_CHECK' | 'SOLANA_ATTESTATION' | 'LINEA_ATTESTATION' | 'CHAINLINK_ATTESTATION'
    - `description` string
    - `disableGoBack` boolean
    - `exclusiveChoice` ExclusiveChoiceNodeParams
    - `finalRejection` FinalRejectionNodeParams
      - `reviewButtonIds` string[]
      - `reviewRejectLabels` ReviewLabel[]
    - `id` string
    - `manualReview` ManualReviewNodeParams
    - `name` string
    - `type` 'actions' | 'applicantLevel' | 'exclusiveChoice' | 'finalRejection' | 'manualReview' | 'actionActions' | 'actionApplicantLevel' | 'actionExclusiveChoice' | 'actionFinalRejection' | 'actionManualReview' | 'actionApplicantTransition'
  - `revision` integer — Revision number. Assigned by the server; leave unset.
  - `revisionStatus` string — Managed by the server: new workflows start as a draft, and status changes go through the publish or archive endpoint.
  - `title` string — Display title of the workflow.

## Response `default`

default response

- ApplicantWorkflowDto
  - `archived` EntityActionTrailDto — Records which user performed an action on the workflow revision, and when.
    - `clientSubject` string — Name of the user who performed the action.
    - `date` string, date-time — When the action occurred.
    - `subjectId` string
  - `clientId` string — Identifier of the client that owns this workflow.
  - `created` EntityActionTrailDto — Records which user performed an action on the workflow revision, and when.
    - `clientSubject` string — Name of the user who performed the action.
    - `date` string, date-time — When the action occurred.
    - `subjectId` string
  - `edges` ApplicantWorkflowEdge[] — Transitions between steps, including the conditions that route between them.
    - `condition` Condition
      - `astId` integer
      - `negate` boolean
      - `or` And[]
        - `and` Criterion[]
          - `args` Arg[]
            - `astId` integer
            - `exp` string
            - `lit` string
          - `astId` integer
          - `op` string
        - `astId` integer
        - `negate` boolean
        - `score` integer
    - `from` string
    - `id` string
    - `reviewDecisions` ReviewDecision[]
    - `to` string
  - `id` string
  - `modified` EntityActionTrailDto — Records which user performed an action on the workflow revision, and when.
    - `clientSubject` string — Name of the user who performed the action.
    - `date` string, date-time — When the action occurred.
    - `subjectId` string
  - `name` string — Workflow name shared by every revision of the same workflow.
  - `nodes` ApplicantWorkflowNode[] — The steps that make up the workflow.
    - `actions` ActionsNodeParams
      - `items` ApplicantWorkflowAction[]
        - `id` string
        - `kytCase` KytCaseAction
          - `blueprintId` string
          - `deadlineHours` integer
          - `priority` string
          - `tags` string[]
        - `notes` NotesAction
          - `note` string
          - `targetType` 'applicant' | 'applicantAction'
        - `riskLevel` RiskLevelAction
          - `riskLevel` string
        - `sourceKey` SourceKeyAction
          - `sourceKey` string
        - `tags` TagsAction
          - `tags` string[]
          - `tagsToRemove` string[]
          - `targetType` 'applicant' | 'applicantAction'
        - `type` string
        - `verificationEmailAction` VerificationEmailAction
          - `notifyAssociatedParties` boolean
    - `applicantLevel` ApplicantLevelNodeParams
      - `levelName` string
      - `resetDocSets` ApplicantLevelResetDocSetParam[]
        - `companyDocsGroupDefinitions` string[]
        - `idDocSetType` 'APPLICANT_DATA' | 'EMAIL_VERIFICATION' | 'PHONE_VERIFICATION' | 'IDENTITY' | 'IDENTITY2' | 'IDENTITY3' | 'IDENTITY4' | 'SELFIE' | 'SELFIE2' | 'PROOF_OF_RESIDENCE' | 'PROOF_OF_RESIDENCE2' | 'PROOF_OF_PAYMENT' | 'PAYMENT_METHODS' | 'INVESTABILITY' | 'COMPANY' | 'ACCREDITED_INVESTOR' | 'E_SIGN' | 'QUESTIONNAIRE' | 'QUESTIONNAIRE2' | 'QUESTIONNAIRE3' | 'QUESTIONNAIRE4' | 'E_KYC' | 'OTHER_DOCS' | 'COMPANY_DATA' | 'COMPANY_DOCUMENTS' | 'COMPANY_BENEFICIARIES' | 'COMPANY_ADDRESSES' | 'TR_RECIPIENT_INFORMATION' | 'DEVICE_CHECK' | 'SOLANA_ATTESTATION' | 'LINEA_ATTESTATION' | 'CHAINLINK_ATTESTATION'
    - `applicantTransition` ApplicantTransitionNodeParams
      - `applicantLevel` ApplicantLevelNodeParams
        - `levelName` string
        - `resetDocSets` ApplicantLevelResetDocSetParam[]
          - `companyDocsGroupDefinitions` string[]
          - `idDocSetType` 'APPLICANT_DATA' | 'EMAIL_VERIFICATION' | 'PHONE_VERIFICATION' | 'IDENTITY' | 'IDENTITY2' | 'IDENTITY3' | 'IDENTITY4' | 'SELFIE' | 'SELFIE2' | 'PROOF_OF_RESIDENCE' | 'PROOF_OF_RESIDENCE2' | 'PROOF_OF_PAYMENT' | 'PAYMENT_METHODS' | 'INVESTABILITY' | 'COMPANY' | 'ACCREDITED_INVESTOR' | 'E_SIGN' | 'QUESTIONNAIRE' | 'QUESTIONNAIRE2' | 'QUESTIONNAIRE3' | 'QUESTIONNAIRE4' | 'E_KYC' | 'OTHER_DOCS' | 'COMPANY_DATA' | 'COMPANY_DOCUMENTS' | 'COMPANY_BENEFICIARIES' | 'COMPANY_ADDRESSES' | 'TR_RECIPIENT_INFORMATION' | 'DEVICE_CHECK' | 'SOLANA_ATTESTATION' | 'LINEA_ATTESTATION' | 'CHAINLINK_ATTESTATION'
    - `description` string
    - `disableGoBack` boolean
    - `exclusiveChoice` ExclusiveChoiceNodeParams
    - `finalRejection` FinalRejectionNodeParams
      - `reviewButtonIds` string[]
      - `reviewRejectLabels` ReviewLabel[]
    - `id` string
    - `manualReview` ManualReviewNodeParams
    - `name` string
    - `type` 'actions' | 'applicantLevel' | 'exclusiveChoice' | 'finalRejection' | 'manualReview' | 'actionActions' | 'actionApplicantLevel' | 'actionExclusiveChoice' | 'actionFinalRejection' | 'actionManualReview' | 'actionApplicantTransition'
  - `notices` ApplicantWorkflowNoticeDto[] — Validation findings for this revision. Publishing requires no error-level notices.
    - `actionId` string
    - `edgeId` string — Id of the edge this notice refers to, if any.
    - `message` string — Identifies what the notice is about.
    - `nodeId` string — Id of the node this notice refers to, if any.
    - `params` object — Values that fill in the placeholders of the notice message.
    - `severity` string — Severity of the notice.
  - `published` EntityActionTrailDto — Records which user performed an action on the workflow revision, and when.
    - `clientSubject` string — Name of the user who performed the action.
    - `date` string, date-time — When the action occurred.
    - `subjectId` string
  - `revision` integer — Revision number within the workflow; increases with each new revision.
  - `revisionStatus` string — Current status of this revision.
  - `title` string — Display title of the workflow.

---

[API](https://skmtc.net/sumsub/apis/sumsub-api-service.md) · [All operations](https://skmtc.net/sumsub/apis/sumsub-api-service/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sumsub/sumsub-api-service/versions/cd1cf0bbd4f9/schema)
