Create Workflow
Create a simple workflow. Send features in execution order (ordering rules apply); defaults to published v1. Not idempotent — each call creates a new workflow.
features array in the order users should complete the checks. Didit converts it into a node-based workflow internally and adds the final status step automatically.
This endpoint supports simple linear workflows only. It does not support branching conditions, action nodes, or webhook nodes.
See Workflow Feature Configs for every config field accepted by each feature.
Basic KYC workflow
Questionnaire workflow
First create the questionnaire withPOST /v3/questionnaires/. Then use the returned questionnaire_id as questionnaire_uuid.
OCR before FACE_MATCH, NFC, DATABASE_VALIDATION, or user AML checks that depend on document data.
Feature config reference
Eachfeatures[] item has this shape:
config object depends on the feature. Review the full field list, defaults, required settings, value ranges, and examples in Workflow Feature Configs.
For OCR, omit config.documents_allowed, send null, or send {} to allow every supported document type. Include it only when you want to restrict the workflow to specific countries or document types. For QUESTIONNAIRE, config.questionnaire_uuid is required.
Optional workflow settings
You can include any of these top-level fields when creating a workflow to control session behavior. They are all optional and fall back to the workflow defaults when omitted.| Field | Type | Description |
|---|---|---|
is_white_label_enabled | boolean | Enable white-label customization for sessions created with this workflow. Default false. |
is_desktop_allowed | boolean | Allow the verification flow to run on desktop browsers. Default false. |
max_retry_attempts | integer (0–10) | Maximum retry attempts allowed after a declined verification. 0 blocks the user after the first decline. Default 3. |
retry_window_days | integer (1–365) or null | Rolling window in days used to count retries (null = all-time limit). Default 7. |
session_expiration_time | integer (3600–2419200) | Seconds before an unfinished session expires. Minimum 1 hour, maximum 4 weeks. Default 604800 (7 days). |
Authorizations
Body
Create a simple linear workflow. The API converts this feature list into a node-based workflow graph internally.
Display name for the workflow.
"Standard KYC"
Verification features in execution order. The API links each item to the next one and adds one final status node automatically.
1Set this workflow as the default for new sessions.
Omit this field to create a published workflow ready for sessions. Use draft only when you want to save without publishing.
draft, published Enable white-label customization for sessions created with this workflow.
Allow the verification flow to run on desktop browsers.
Maximum retry attempts allowed after a declined verification. 0 blocks the user after the first decline.
0 <= x <= 10Rolling window in days used to count retries. null enforces an all-time limit.
1 <= x <= 365Maximum liveness submissions per session. Default 3: one initial attempt plus two retries. This value is also copied into generated liveness and age-estimation workflow nodes unless the feature-level config overrides it.
1 <= x <= 3Maximum face-match submissions per session. Default 3: one initial attempt plus two retries. This value is also copied into generated face-match workflow nodes unless the feature-level config overrides it.
1 <= x <= 3Seconds before an unfinished session expires. Minimum 1 hour (3600), maximum 4 weeks (2419200).
3600 <= x <= 2419200Response
Workflow created. The response body is the full workflow record — store the uuid (also exposed as workflow_id) so you can reference it from later session-creation calls.
A workflow in the list view.
Workflow UUID. Use as workflow_id when creating sessions.
Display name for the workflow
Base type: kyc, adaptive_age_verification, biometric_authentication, etc.
Whether this is the default workflow for new sessions
Total price per verification in USD
Enabled features (e.g., OCR, LIVENESS, FACE_MATCH, AML)
True if not graph-based
True if no sessions have used this workflow
Maximum liveness submissions per session. Default 3: one initial attempt plus two retries.
1 <= x <= 3Maximum face-match submissions per session. Default 3: one initial attempt plus two retries.
1 <= x <= 3