메인 콘텐츠로 건너뛰기
POST
cURL
이 엔드포인트를 사용하면 워크플로 노드를 직접 구성하지 않고도 API로 워크플로를 만들 수 있습니다. 사용자가 확인을 완료해야 하는 순서대로 features 배열을 보내십시오. Didit이 이를 내부적으로 노드 기반 워크플로로 변환하고 마지막 상태 단계를 자동으로 추가합니다. 이 POST /v3/workflows/ 엔드포인트는 단순하고 선형적인 워크플로만 생성하며, 평평한 features 목록만 지원합니다. 분기, 조건부 라우팅, Document AI, 거부 및 결정 노드가 필요하다면 아래에 설명된 노드 그래프 형식을 사용하십시오. 이 형식은 콘솔의 시각적 빌더와 Didit MCP 워크플로 도구를 지원합니다. 지원되는 각 기능의 모든 config 필드는 워크플로 기능 구성을 참조하십시오.

기본 KYC 워크플로

설문지 워크플로

먼저 POST /v3/questionnaires/로 설문지를 생성하십시오. 그다음 반환된 questionnaire_id를 questionnaire_uuid로 사용하십시오.
기능 순서가 중요합니다. 예를 들어 OCR은 FACE_MATCH, NFC, DATABASE_VALIDATION 또는 문서 데이터에 의존하는 사용자 AML 검사보다 앞에 두십시오.

기능 구성 참조

각 features[] 항목은 다음과 같은 형태를 가집니다:
정확한 config 객체는 기능마다 다릅니다. 전체 필드 목록, 기본값, 필수 설정, 값 범위 및 예시는 워크플로 기능 구성에서 확인하십시오. OCR의 경우 config.documents_allowed를 생략하거나, null을 보내거나, {}를 보내면 지원되는 모든 문서 유형을 허용합니다. 워크플로를 특정 국가 또는 문서 유형으로 제한하려는 경우에만 이 값을 포함하십시오. QUESTIONNAIRE의 경우 config.questionnaire_uuid는 필수입니다.

선택적 워크플로 설정

워크플로를 생성할 때 다음 최상위 필드를 포함하여 세션 동작을 제어할 수 있습니다. 모든 필드는 선택 사항이며, 생략하면 워크플로 기본값이 적용됩니다.

분기 및 노드 기반 워크플로(그래프)

단순한 features 목록으로는 “X이면 Y”와 같은 조건을 표현할 수 없습니다. 조건부 분기(특정 상태에서 거부, 추출된 필드에 따라 경로 지정, 일치 여부에 따라 단계를 조건부로 실행), Document AI 요청 단계, 또는 최종 거부/결정 노드를 사용하려면 Didit 워크플로가 노드 그래프를 사용해야 합니다. 콘솔의 시각적 빌더가 생성하는 구조와 같습니다.
노드 그래프 워크플로를 가장 쉽게 만드는 방법은 Didit MCP를 사용하는 것입니다. 자연어로 에이전트에게 요청하면(예: “신분증 인증 후 직업이 ≈ ‘Software Engineer’이면 자금 증명 단계를 추가해 줘”) 그래프를 구성하고, 검증하고, 저장해 줍니다. 아래 구조는 이 도구들과 콘솔이 생성하는 구조입니다.

그래프 구조

그래프는 { start_node, nodes }입니다. nodes는 노드 ID에서 노드로의 매핑입니다. 엣지는 암묵적으로 정의됩니다. 각 노드는 next(무조건) 및/또는 branches[].goto(조건부)를 통해 다음 노드를 가리킵니다. start_node은 반드시 기능 노드여야 합니다. 분기는 순서대로 평가되며, 가장 먼저 일치하는 분기가 적용됩니다. rules: []인 빈 분기는 모든 경우에 해당하는 기본(else) 분기이므로 마지막에 두어야 합니다. session_status: "Determine"은 결합된 기능 결과를 바탕으로 자동으로 결정합니다.
모든 분기 노드에는 명시적인 else 분기가 있어야 합니다. 즉 어떤 조건에도 해당하지 않는 세션을 라우팅하는 rules: [] 분기가 필요합니다. 분기 노드의 next를 기본 경로로 간주하지 마십시오. 단독 next는 빌더에서 모호한 엣지로 표시되며 쉽게 누락됩니다. next가 있고 else 분기가 없는 분기 노드를 보내면 API가 그 next를 명시적인 else 분기로 변환합니다(예: { …, "branches": [<conditions>], "next": "liveness" }는 branches: [<conditions>, { "id": "else", "rules": [], "goto": "liveness" }]로 저장됩니다). else 분기는 직접 작성하여 명확하게 하십시오. 이 변환은 안전장치이며 명시적 작성을 대신하지 않습니다.

분기 규칙 및 연산자

각 규칙은 연산자를 사용해 필드와 값을 비교합니다.
  • 필드는 기능 결과(kyc.status, aml.status, document_ai.status, face_match.score 등) 또는 추출된 값(kyc.full_name, kyc.age, kyc.nationality, kyc.extra_fields.profession, Document AI 필드 document_ai.<key>, expected_details.*)을 가리킵니다. 분기는 해당 경로에 도달하는 모든 경로에서 실행된 기능의 필드만 읽을 수 있습니다.
  • 연산자: equals, not_equals, greater_than(_or_equals), less_than(_or_equals), contains, not_contains, in, not_in, is_empty, is_not_empty, regex, 그리고 fuzzy_match(문자열 필드에만 사용 가능하며, 0~100 범위의 score가 필요합니다. 유사도 임계값이며, 예를 들어 직업이 “Software Engineer”와 80% 이상 유사함을 뜻합니다).

NFC가 실행되지 않은 이유에 따른 분기

NFC 노드 뒤에서 nfc.skip_reason을 equals 또는 in과 함께 사용하면 칩 판독이 이루어지지 않은 이유에 따라 세션을 라우팅할 수 있습니다. 이 필드에는 안정적인 값 일곱 개가 있습니다.
  • USER_SKIPPED
  • DOCUMENT_WITHOUT_CHIP
  • CHIP_CERTIFICATE_UNAVAILABLE
  • DEVICE_WITHOUT_NFC
  • INTEGRATION_WITHOUT_NFC_ACCESS
  • MRZ_KEY_UNAVAILABLE
  • JPKI_UNAVAILABLE
각 값의 의미는 NFC 건너뛰기 사유를 참조하십시오. NFC가 성공하면 nfc.skip_reason은 null이므로, 건너뛰기 사유에 대한 equals나 in 규칙은 어느 것도 일치하지 않습니다. 이 필드는 게이트에 의해 건너뛴 NFC 노드에도 값을 제공합니다. 여기에는 NFC 보고서나 경고가 존재하지 않는 경우, 그리고 allow_nfc_skip이 false이지만 문서 또는 기기 게이트 때문에 NFC가 실행되지 않은 경우가 포함됩니다. 따라서 nfc_verifications[] 항목에 의존하지 않고도 이러한 세션을 라우팅할 수 있습니다.
NFC 기능이 3상태로 바뀌기 전에 저장된 세션은 has_device_nfc_support: false를 가질 수 있습니다. 따라서 이전 웹 세션은 INTEGRATION_WITHOUT_NFC_ACCESS 대신 DEVICE_WITHOUT_NFC로 판정될 수 있습니다.
이 그래프는 사용자가 건너뛴 경우에는 equals를, 게이트 또는 기능 지원 여부에 따라 건너뛴 경우에는 in을 사용하며, NFC가 성공한 경우를 위한 명시적 else 분기를 둡니다. 분기는 NFC 노드 뒤에 오며, 모든 목적지는 종료 노드를 향해 앞으로 이동합니다.
“알려진 이유로 NFC가 수행되지 않은 경우”를 표현하려면 일곱 개 값 모두를 in에 넣으십시오. NFC 성공(nfc.skip_reason: null)을 위한 명시적 else 분기와, 그래프가 아직 인식하지 못하는 향후 값을 위한 else 분기를 유지하십시오.

Document AI(예: 자금 증명)

DOCUMENT_AI 기능 노드는 하나 이상의 문서를 요청하고 이름이 지정된 필드를 추출합니다.
설정된 각 필드는 분기에서 사용할 수 있는 값 document_ai.<key>가 되며, 이 단계의 결과는 document_ai.status입니다. 문서 소지자의 성명이 들어 있는 필드에는 "is_full_name": true를 설정하십시오. 추출된 값은 검증된 신원의 성명(OCR/신분증 인증 이름 또는 세션의 예상 세부 정보)과 비교되며, 일치 점수가 document_ai_name_match_score_threshold 미만일 때 수행할 불일치 동작을 document_ai_name_mismatch_action이 결정합니다. 이 플래그는 선택 사항입니다. 문서에서 어떤 필드도 이 플래그로 표시하지 않을 수도 있으며, 문서 하나당 최대 한 개의 필드만 이 플래그를 설정할 수 있습니다. Document AI의 모든 설정 필드는 워크플로 기능 설정 → Document AI를 참조하십시오.

엔드포인트 및 초안 수명 주기

그래프 편집은 애플리케이션 단위로 이루어지며 콘솔/관리 엔드포인트를 사용합니다(사용자 Bearer + read:workflows/write:workflows). 그래프는 초안 버전에서만 편집할 수 있으므로 수명 주기는 초안 생성 → 그래프 설정 → 게시입니다.

검증 경고

검증 endpoint는 { "is_valid": true, "graph": …, "warnings": [] } 형식으로 응답합니다. 경고는 참고용입니다. 그래프는 유효하며, 경고가 있어도 저장과 게시가 가능합니다. 각 항목에는 해당하는 분기 노드와 분기 가지가 포함되므로, 빌더가 정확한 조건을 확인할 수 있습니다:
유효하지 않은 그래프는 400으로 응답하며, errors와 함께 가능한 범위에서 생성한 warnings 목록을 반환합니다. 저장을 막는 것은 errors뿐입니다.

예시: 소프트웨어 엔지니어에게 자금 증명을 요청하도록 라우팅

신분증 인증 후, 결과가 거부됨이면 세션을 거부합니다. 소지자의 직업 ≈ “Software Engineer”(≥80% 유사)이면 자금 증명 문서를 요청합니다. 그다음 최종 결정을 내립니다.
마지막 노드는 session_status: "Determine"을 사용합니다. 이 노드는 세션에서 실제로 실행된 기능을 바탕으로 자동으로 결정(승인 / 거부 / 검토 중)합니다. 따라서 자금 증명 경로와 else 경로 모두, 어떤 분기도 document_ai.status를 읽지 않아도 올바르게 처리됩니다. Document AI를 건너뛰는 경로에는 이 필드가 존재하지 않기 때문입니다. 기억하세요: 분기는 모든 경로에서 실행된 기능의 필드만 읽을 수 있습니다. 먼저 검증한 다음, { "graph": <above> } 형태로 …/workflow-graph/ endpoint에 전송합니다. 처음부터 새 워크플로를 만들려면 MCP의 didit_workflow_set_graph를 사용하세요. 기존 워크플로를 수정하려면 didit_workflow_edit_graph를 사용하세요. 이 도구는 작은 작업 단위로 적용되며, 기존 노드와 허용 목록을 보존합니다. 자세한 내용은 Didit MCP를 참고하세요.

인증

x-api-key
string
header
필수

Business Console의 Developers -> API keys에서 발급받은 귀하 애플리케이션의 API 키입니다. 기본 키는 전체 접근 권한을 갖습니다. 이름이 지정된 키는 리소스별 none, read, write 범위로 권한을 제한할 수 있으며 특정 워크플로나 승인된 세션, IP 주소 목록, 만료일 등으로 제한할 수도 있습니다. 401은 키가 잘못되었거나 폐기되었거나 만료되었음을 의미합니다. 403은 키가 전송되지 않았거나, 키에 해당 리소스나 작업에 대한 접근 권한이 없거나, 요청이 허용된 IP 목록 외부 주소에서 발생했음을 의미합니다. 세션 경로에서의 404는 해당 세션이 키의 허용 워크플로 또는 상태 범위를 벗어났음을 의미합니다. 미디어 접근 권한이 없는 키는 이미지, 비디오, PDF URL을 null로 수신하며, 세션 write 권한이 없는 키는 세션 링크와 token을 null로 수신합니다. https://docs.didit.me/console/api-keys 를 참고하십시오.

본문

application/json

단순한 선형 워크플로를 생성합니다. API는 이 기능 목록을 내부적으로 노드 기반 워크플로 그래프로 변환합니다. 엄격한 필드 허용 목록: 여기에 나열되지 않은 모든 키(workflow_type 포함)는 400으로 거부됩니다.

features
object[]
필수

실행 순서에 따른 인증 기능입니다. API는 각 항목을 다음 항목에 연결하고 마지막 상태 노드 하나를 자동으로 추가합니다.

Minimum array length: 1
workflow_label
string
기본값:ID Verification

워크플로의 표시 이름(최대 50자)입니다. 생략 시 기본값은 "ID Verification"입니다 — 워크플로를 구분할 수 있도록 항상 설정하세요.

Maximum string length: 50
예시:

"Standard KYC"

is_default
boolean

이 워크플로를 새 세션의 기본값으로 설정합니다.

status
enum<string>

세션에 바로 사용할 수 있도록 게시된 워크플로를 생성하려면 이 필드를 생략하세요. 게시하지 않고 저장하려는 경우에만 draft를 사용하세요.

사용 가능한 옵션:
draft,
published
is_white_label_enabled
boolean
기본값:false

이 워크플로로 생성된 세션에 화이트 라벨 맞춤 설정을 활성화합니다.

is_desktop_allowed
boolean
기본값:false

데스크톱 브라우저에서 인증 워크플로가 실행되도록 허용합니다.

max_retry_attempts
integer
기본값:3

거부된 인증 후 허용되는 최대 재시도 횟수입니다. 0은 첫 번째 거부 후 사용자를 차단합니다.

필수 범위: 0 <= x <= 10
retry_window_days
integer | null
기본값:7

재시도 횟수를 계산하는 데 사용되는 롤링 윈도우 일수. null은 전체 기간 제한을 적용합니다.

필수 범위: 1 <= x <= 365
face_liveness_max_attempts
integer
기본값:3

세션당 최대 라이브니스 제출 횟수입니다. 기본값은 3(초기 시도 1회 + 재시도 2회)입니다. 기능 수준 구성에서 이를 재정의하지 않는 한, 이 값은 생성된 라이브니스 및 연령 추정 워크플로 노드에도 복사됩니다.

필수 범위: 1 <= x <= 3
face_match_max_attempts
integer
기본값:3

세션당 최대 얼굴 대조 제출 횟수입니다. 기본값은 3(초기 시도 1회 + 재시도 2회)입니다. 기능 수준 구성에서 이를 재정의하지 않는 한, 이 값은 생성된 얼굴 대조 워크플로 노드에도 복사됩니다.

필수 범위: 1 <= x <= 3
session_expiration_time
integer
기본값:604800

완료되지 않은 세션이 만료되기까지 남은 시간(초)입니다. 최소 1시간(3600), 최대 4주(2419200).

필수 범위: 3600 <= x <= 2419200

응답

워크플로가 생성되었습니다. 응답 본문은 축약된 목록 항목이 아닌, 전체 워크플로 구성(GET /v3/workflows/{settings_uuid}/에서 반환되는 동일한 원시 VerificationSettings 직렬화 형태: 모든 기능 토글, 임계값, 작업 및 생성된 workflow_graph를 포함한 약 190개 필드)입니다. 나중에 세션 생성 호출에서 참조할 수 있도록 uuid(workflow_id로도 제공됨)를 저장하십시오. 참고: features는 " + "로 연결된 문자열이며 가격은 JSON 숫자입니다.

아래 필드는 타입이 지정되어 있습니다. 또한 이 객체는 워크플로 설정의 다른 모든 열(기능 토글, 임계값, 경고 작업, 허용된 문서, 콜백)을 추가 속성으로 전달합니다. workflow_type에 적용되지 않는 필드는 null입니다.

uuid
string<uuid>

버전별 식별자(settings_uuid)입니다. 워크플로의 모든 버전에는 고유한 식별자가 있습니다.

workflow_id
string<uuid>

워크플로의 모든 버전에서 공유되는 안정적인 식별자입니다. 이 식별자로 생성된 세션은 게시된 최신 버전을 사용합니다.

workflow_label
string

워크플로의 표시 이름입니다.

workflow_type
enum<string> | null

워크플로 템플릿입니다. 템플릿 없이 생성된 그래프 워크플로의 경우 null입니다.

사용 가능한 옵션:
kyc,
kyb,
adaptive_age_verification,
biometric_authentication,
address_verification,
questionnaire_verification,
email_verification,
phone_verification,
null
is_default
boolean

이 워크플로가 애플리케이션의 기본 워크플로인지 여부입니다.

is_archived
boolean

보관된 워크플로는 새 세션을 시작할 수 없습니다.

version
integer

워크플로 내의 버전 번호입니다.

status
enum<string>

초안 버전은 편집할 수 있으며, 게시된 버전은 변경할 수 없고 새 세션에 사용됩니다.

사용 가능한 옵션:
draft,
published
published_at
string<date-time> | null

이 버전이 게시된 시점입니다. 초안의 경우 null입니다.

is_simple_workflow
boolean

워크플로에 사용자 지정 workflow_graph가 없는 경우 true입니다.

is_editable
boolean

draft 버전인 경우에만 true입니다.

workflow_url
string<uri>

이 워크플로로 세션을 시작하는 공개 URL입니다.

workflow_graph
object | null

워크플로의 그래프 구조(노드 및 에지)입니다. 단순 워크플로의 경우 null입니다.

features
string

" + "로 연결된 활성화된 기능입니다(예: "OCR + LIVENESS").

total_price
number | null

세션당 가격입니다. 그래프 워크플로의 경우 가장 비싼 경로의 가격입니다.

min_price
number | null

워크플로에서 가장 저렴한 경로의 가격입니다.

max_price
number | null

워크플로에서 가장 비싼 경로의 가격입니다.

special_add_on_prices
object | null

조직별 부가 기능 가격이며, 설정되지 않은 경우 null입니다.

max_retry_attempts
integer

거부된 인증 후 허용되는 재시도 횟수입니다.

retry_window_days
integer | null

재시도가 허용되는 일수.

session_expiration_time
integer

완료되지 않은 세션이 만료되기까지 남은 시간(초).

questionnaire
object | null

워크플로에 연결된 설문지 또는 null입니다.

kyb_role_settings
object[]

KYB 주요 인물에 대한 역할별 인증 설정입니다.

created_at
string<date-time>
updated_at
string<date-time>
signature_availability
object

현재 서명 가능한 전자 서명 등급입니다. signature_level을 설정하기 전에 확인하십시오. kyc, kyb 및 그래프 워크플로에서 반환됩니다.

is_bank_verification_enabled
boolean

단순 KYC 또는 KYB 워크플로가 은행 확인을 실행하는지 여부입니다. 연락처 단계(및 위치 확인) 이후, 데이터베이스 검증, AML 및 IP 분석 이전에 실행됩니다. 은행 확인은 아직 일반에 공개되지 않았으며, 활성화되지 않은 환경에서 켜려고 하면 거부됩니다.

bank_verification_config
object

BANK_VERIFICATION 노드가 사용하는 것과 동일한 키(예: bank_countries 및 bank_method_order)를 사용하는 단순 워크플로의 은행 인증 설정입니다. 알 수 없는 키는 삭제됩니다. 모든 키는 선택 사항이며 누락된 키는 기본값을 유지하므로 {}는 모든 기본값을 의미합니다. 은행 인증 설정을 참조하십시오.

예시:
is_geolocation_enabled
boolean

단순 KYC 워크플로가 위치 확인을 실행하는지 여부입니다. 연락처 단계 이후, 은행 확인 및 데이터베이스 검증 이전에 실행됩니다. 기업(KYB) 워크플로에서는 실행할 수 없습니다.

geolocation_config
object

간단한 워크플로의 위치 확인 설정으로, GEOLOCATION 노드가 사용하는 것과 동일한 키(예: is_geolocation_geofencing_enabled 및 geolocation_max_attempts)를 갖습니다. 알 수 없는 키는 삭제됩니다. 모든 키는 선택 사항이며 누락된 키는 기본값을 유지하므로 {}는 모든 기본값을 의미합니다.

예시:
마지막 수정일 2026년 11월 7일