config fields inside each item of the features array for POST /v3/workflows/ and PATCH /v3/workflows/{settings_uuid}/.
features array. Send features in the exact execution order.
Which engine runs a feature — Didit’s own, or a third-party provider — is not one of the config fields below. It’s managed through the console’s Marketplace, which sets
provider_key and fallback_to_native on the feature’s config object for you.Validation rules
OCRdefaults to all supported countries and document types whenconfig.documents_allowedis omitted,null, or{}. If you send a customdocuments_allowedobject, it must contain at least one valid country and one enabled document type. Each document config can setsidesto1for front-only capture or2for front-and-back capture.QUESTIONNAIRErequiresconfig.questionnaire_uuid.KYB_DOCUMENTSrequiresconfig.kyb_required_document_groups.FACE_MATCHmust come afterOCRin simple workflow requests.NFCandDATABASE_VALIDATIONrequireOCRwhen they appear in the same workflow.AMLneeds one ofOCR,KYB_REGISTRY, orDOCUMENT_AIbefore it; with onlyDOCUMENT_AIit additionally needsconfig.aml_field_sourcesto fill the screened name (see AML).- KYB sub-features such as
KYB_DOCUMENTSandKYB_KEY_PEOPLErequireKYB_REGISTRYearlier in the workflow. - A workflow is either a person (KYC) workflow or a business (KYB) workflow, never both. A workflow that uses any KYB feature (
KYB_REGISTRY,KYB_DOCUMENTS,KYB_KEY_PEOPLE) may only combine it withAML,DOCUMENT_AI,QUESTIONNAIRE,PHONE_VERIFICATION,EMAIL_VERIFICATION, andIP_ANALYSIS. It cannot include person-only features such asOCR,LIVENESS,FACE_MATCH,NFC,PROOF_OF_ADDRESS,DATABASE_VALIDATION, orAGE_ESTIMATION, and a person workflow cannot include KYB features. On a business workflowDOCUMENT_AIcompares any field markedis_full_nameagainst the verified company instead of a person. To verify the people behind a company, build a separate KYC workflow and reference it from theKYB_KEY_PEOPLEnode usingkyb_ubo_verification_workflow,kyb_officer_verification_workflow, orkyb_shareholder_verification_workflow. - Action fields use
DECLINE,REVIEW, orNO_ACTIONunless the field below says it is restricted. - Score and threshold fields are numbers from
0to100unless a narrower range is listed.
Common status rules
Every feature supports an optionalstatus_rules array. Use it to override the feature status when a field condition matches.
Read the example above as:
kyc.extra_fields.profession fuzzy matches Soft. Engineer with a minimum score of 80 → set the feature status to Declined.
For ID Verification, target extracted extra_fields values such as kyc.extra_fields.profession, driver license class validity dates like kyc.extra_fields.dl_class_code_b_from and kyc.extra_fields.dl_class_code_b_to, or per-class restriction/information codes like kyc.extra_fields.dl_class_code_b_notes (column 12 of UK licences). These values come from the OCR result’s extra_fields object; they are not part of expected_details.
dl_class_code_*_from and dl_class_code_*_to are always either a valid ISO date or absent from extra_fields — Didit never returns unreadable OCR text in a date field. If the class-table cell can’t be read, the field is omitted rather than sent as a raw string, so use the is_empty operator to route unreadable class dates instead of assuming the field is always present.value_type: "relative_date" with a value object shaped as { "direction": "past" | "future", "amount": number, "unit": "days" | "months" | "years" }. For example, operator: "less_than" with { "direction": "past", "amount": 3, "unit": "years" } matches dates older than three years from today.
OCR / ID Verification
Feature value:OCR.
Document liveness is configured with the six
document_liveness_* thresholds above, not with
per-signal action fields. portrait_replacement_action, printed_copy_action and
screen_capture_action are account-level settings and are not accepted in a workflow
feature config: the API strips unknown config keys on save, so sending them there has no
effect. Each signal has a decline threshold and a review threshold on a 0-100 scale where
a higher score means the document is more likely to be genuine.Methods per country
methods is keyed by ISO 3166-1 alpha-3 country code. Each country carries up to three method objects; anything you leave out takes its default.
available in today’s catalog, so that config saves as written. The wallet block is off on purpose: no wallet is live in production yet, so wallet.enabled: true is rejected and takes the whole save with it, lookup configuration included. When the catalog marks a wallet available in a country, add it to that country:
Validation the API applies on save:
- An unknown country code, an unknown key inside a country, or an unknown key inside a method is rejected — nothing is silently dropped.
- A country where no method is enabled is rejected: nobody there could verify.
fallback_to_documentin a country wheredocument.enabledisfalsedeclines at runtime, because there is nowhere to fall back to.
methods — through the console’s Countries tab, or with the didit_workflow_get_id_verification_methods_catalog MCP tool. Behaviour, coverage and billing are on ID Verification methods.
NFC / ePassport
Feature value:NFC.
Liveness
Feature value:LIVENESS.
Face Match
Feature value:FACE_MATCH.
Age Estimation
Feature value:AGE_ESTIMATION.
Phone Verification
Feature value:PHONE_VERIFICATION.
Phone Verification is disabled until the organization completes its first top-up.
Phone intelligence enrichment is an optional add-on. When
phone_enrichment_enabled is true, each completed phone verification is enriched with phone intelligence and billed $0.05 per request in addition to the standard phone verification cost. The score-based actions only take effect once the enrichment score is available; the trust-index, phone-type and porting actions apply as soon as enrichment runs.The social footprint check is a second, separate add-on. When phone_social_enabled is true, each completed phone verification also reports which online platforms the number is registered on - messaging, social media, e-commerce and professional services - and is billed $0.05 per request. It can be enabled with or without phone_enrichment_enabled: the two add-ons are priced and billed independently. A lookup that finds the number on none of the platforms it covers is a valid, billable answer and triggers phone_no_social_presence_action. Use phone.social_profiles_registered (the number of platforms the number is registered on) to branch on the result in a workflow graph.Email Verification
Feature value:EMAIL_VERIFICATION.
Email intelligence enrichment is an optional add-on. When
email_enrichment_enabled is true, each completed email verification is enriched with email intelligence and billed $0.05 per request in addition to the standard email verification cost. The score-based action takes effect once the enrichment score is available; the breach actions apply as soon as enrichment runs.The social footprint check is a second, separate add-on. When email_social_enabled is true, each completed email verification also reports which online platforms the address is registered on - email providers, social media, professional, e-commerce and entertainment services - and is billed $0.05 per request. It can be enabled with or without email_enrichment_enabled: the two add-ons are priced and billed independently. A lookup that finds the address on none of the platforms it covers is a valid, billable answer and triggers email_no_social_presence_action. Use email.social_profiles_registered (the number of platforms the address is registered on) to branch on the result in a workflow graph.Database Validation
Feature value:DATABASE_VALIDATION.
Example:
AML
Feature value:AML.
For KYC person screening, use these fields:
For KYB company screening, use these fields:
Screening an entity a Document AI step extracted
An AML step normally reads who it screens from theOCR step (a person) or the KYB_REGISTRY step (a company). A workflow whose only extraction step is DOCUMENT_AI - non-standardised documents such as a tax certificate or an incorporation deed - has neither, so it has to say where each screening input comes from.
Example - screening the company named in a Mexican acta constitutiva, with no ID document anywhere in the workflow:
Device & IP Analysis
Feature value:IP_ANALYSIS.
Example:
recovered_device_action separately from duplicated_device_action when you want to monitor high-confidence recovered devices before automatically declining them. This is useful during rollout because recovered-device matches are designed for fraud-ring detection but should still be calibrated against your own traffic.
Proof of Address
Feature value:PROOF_OF_ADDRESS.
Questionnaire
Feature value:QUESTIONNAIRE.
KYB Registry
Feature value:KYB_REGISTRY.
kyb_registry_fields_config maps each configurable field key to {"enabled": bool, "required": bool}. enabled: false hides the field, enabled: true, required: false shows it as optional, and enabled: true, required: true makes it mandatory at submit. company_name, country_code, and region are always shown and required and cannot be configured. When the object is omitted, null, or {}, the default applies: only incorporation_date is required and every other field is optional.
registration_number, incorporation_date, legal_address, vat_number, alternative_names, tax_number, company_type, legal_entity_identifier, location_of_registration, nature_of_business, registered_capital_amount, registered_capital_currency, website, email, phone, control_scheme. See configurable registry form fields for the end-user behavior and VAT validation for how vat_number is checked against VIES.
KYB Documents
Feature value:KYB_DOCUMENTS.
KYB Key People
Feature value:KYB_KEY_PEOPLE.
Document AI
Feature value:DOCUMENT_AI.
Requests one or more documents from the user and extracts the named fields you define with a vision model. Each configured field becomes a branchable value document_ai.<key>, and the step’s outcome is document_ai.status.
Each entry in
document_ai_documents is a document:
Each entry in a document’s
fields is a field:
Example: