Saltar al contingut principal
POST
cURL
Fes servir aquest endpoint per crear fluxos de treball a través de l’API sense haver de construir tu mateix els nodes del graf. Envia un array features en l’ordre en què els usuaris han de completar les comprovacions. Didit el converteix internament en un flux de treball basat en nodes i afegeix automàticament el pas final d’estat. Aquest endpoint POST /v3/workflows/ només crea fluxos de treball simples i lineals, amb una llista plana features. Per a enrutament condicional, ramificacions, Document AI i nodes de rebuig o de decisió, fes servir el format de graf de nodes que es documenta a continuació (és el que alimenta el constructor visual de la consola i les eines de flux de treball del MCP de Didit). Consulta Configuració de les funcionalitats del flux de treball per a cada camp config que accepta cada funcionalitat.

Flux de treball de KYC bàsic

Flux de treball de qüestionari

Primer crea el qüestionari amb POST /v3/questionnaires/. Després fes servir el questionnaire_id retornat com a questionnaire_uuid.
L’ordre de les funcionalitats importa. Per exemple, posa OCR abans de FACE_MATCH, NFC, DATABASE_VALIDATION o de les comprovacions AML de l’usuari que depenen de les dades del document.

Referència de configuració de les funcionalitats

Cada element de features[] té aquesta estructura:
L’objecte config exacte depèn de la funcionalitat. Revisa la llista completa de camps, els valors per defecte, la configuració obligatòria, els intervals de valors i els exemples a Configuració de les funcionalitats del flux de treball. Per a OCR, omet config.documents_allowed, envia null o envia {} per permetre tots els tipus de document compatibles. Inclou-lo només si vols restringir el flux de treball a països o tipus de document concrets. Per a QUESTIONNAIRE, config.questionnaire_uuid és obligatori.

Configuració opcional del flux de treball

Pots incloure qualsevol d’aquests camps de nivell superior en crear un flux de treball per controlar el comportament de la sessió. Tots són opcionals i, si s’ommeten, es fan servir els valors per defecte del flux de treball.

Branques i fluxos de treball basats en nodes (graf)

Una llista lineal features no pot expressar “si X, aleshores Y”. Per a la branca condicional (rebutjar segons un estat, encaminar segons un camp extret o condicionar un pas a una coincidència), un pas de sol·licitud de Document AI o els nodes terminals de rebuig/decisió, els fluxos de Didit fan servir un graf de nodes, la mateixa estructura que produeix el constructor visual de la consola.
La manera més senzilla de crear un flux de treball de graf és el MCP de Didit: demana a un agent en llenguatge natural (“després de la verificació d’identitat, si la professió és ≈ ‘Software Engineer’, afegeix un pas de comprovant de fons”) i ell construirà, validarà i desarà el graf per tu. L’estructura que hi ha a continuació és la que produeixen aquestes eines (i la consola).

Estructura del graf

Un graf és { start_node, nodes }. nodes és un mapa d’id de node a node. Les arestes són implícites: cada node apunta cap endavant mitjançant next (incondicional) i/o branches[].goto (condicional). start_node ha de ser un node de tipus feature. Les branques s’avaluen en ordre, guanya la primera que coincideixi; un rules: [] buit és la branca general “else” (manté-la al final). session_status: "Determine" decideix automàticament a partir dels resultats combinats de les funcionalitats.
Tots els nodes de branca han de tenir una branca else explícita: una branca amb rules: [] que encamini les sessions que no coincideixin amb cap de les condicions. No confiïs en el next del node de branca com a alternativa: un next per si sol es mostra com una aresta ambigua al constructor i és fàcil d’ometre. Quan envies un node de branca amb next i sense branca else, l’API converteix aquest next en una branca else explícita per a tu (així, { …, "branches": [<conditions>], "next": "liveness" } es desa com a branches: [<conditions>, { "id": "else", "rules": [], "goto": "liveness" }]). Crea tu la branca else per ser explícit; la conversió és una xarxa de seguretat, no un substitut.

Regles de branca i operadors

Cada regla compara un camp amb un valor mitjançant un operador:
  • Camps: nomenen un resultat de funcionalitat (kyc.status, aml.status, document_ai.status, face_match.score, …) o un valor extret (kyc.full_name, kyc.age, kyc.nationality, kyc.extra_fields.profession, un camp de Document AI document_ai.<key>, expected_details.*). Una branca només pot llegir un camp la funcionalitat del qual s’hagi executat en tots els camins que hi arriben.
  • Operadors: equals, not_equals, greater_than(_or_equals), less_than(_or_equals), contains, not_contains, in, not_in, is_empty, is_not_empty, regex i fuzzy_match (només per a camps de text; requereix un score de 0 a 100, un llindar de similitud, per exemple, professió amb una similitud ≥ 80 % amb “Software Engineer”).

Branca segons per què no s’ha executat NFC

Després d’un node NFC, fes servir nfc.skip_reason amb equals o in per encaminar les sessions segons el motiu pel qual no s’ha llegit el xip. El camp té aquests set valors estables:
  • USER_SKIPPED
  • DOCUMENT_WITHOUT_CHIP
  • CHIP_CERTIFICATE_UNAVAILABLE
  • DEVICE_WITHOUT_NFC
  • INTEGRATION_WITHOUT_NFC_ACCESS
  • MRZ_KEY_UNAVAILABLE
  • JPKI_UNAVAILABLE
Consulta Motius d’omissió de NFC per saber què significa cada valor. Quan NFC es completa correctament, nfc.skip_reason és null, de manera que ni una regla equals ni una in per a un motiu d’omissió coincideixen. El camp també es resol per als nodes NFC omesos per una porta de control. Això inclou els casos en què no existeix cap informe ni advertència de NFC, i els casos en què allow_nfc_skip és false però la porta del document o del dispositiu impedeix que NFC s’executi. Per tant, pots encaminar aquestes sessions sense dependre d’una entrada de nfc_verifications[].
Les sessions desades abans que la capacitat NFC passés a tenir tres estats poden tenir has_device_nfc_support: false. Una sessió web antiga pot, per tant, resoldre’s com a DEVICE_WITHOUT_NFC en lloc de INTEGRATION_WITHOUT_NFC_ACCESS.
Aquest graf fa servir equals per a una omissió per part de l’usuari, in per a omissions per porta de control o per capacitat, i una branca else explícita per a NFC correcte. La branca va després del node NFC, i tots els destins apunten cap endavant, a nodes terminals:
Per expressar “NFC no s’ha realitzat per cap motiu conegut”, fes servir in amb els set valors. Mantén una branca else explícita per a NFC correcte (nfc.skip_reason: null) i per a qualsevol valor futur que el teu graf encara no reconegui.

Document AI (per exemple, comprovant de fons)

Un node de funcionalitat DOCUMENT_AI sol·licita un o diversos documents i extreu camps amb nom:
Cada camp configurat es converteix en un valor document_ai.<key> que es pot utilitzar en una branca, i el resultat del pas és document_ai.status. Estableix "is_full_name": true al camp que conté el nom complet del titular del document. El seu valor extret es compara amb el nom complet de la identitat verificada (el nom obtingut per OCR o en la verificació d’identitat, o les dades esperades de la sessió), i document_ai_name_mismatch_action decideix què passa en cas de discrepància per sota de document_ai_name_match_score_threshold. La marca és opcional: un document pot no marcar cap camp, però com a màxim un camp per document pot activar-la. Consulta Configuracions de funcionalitats del flux de treball → Document AI per veure tots els camps de configuració de Document AI.

Endpoints i cicle de vida de l’esborrany

L’edició del graf es fa per aplicació i utilitza els endpoints de la consola i de gestió (Bearer d’usuari + read:workflows/write:workflows). Un graf només es pot editar en una versió esborrany, així que el cicle de vida és crear esborrany → definir graf → publicar:

Advertències de validació

L’endpoint de validació respon amb { "is_valid": true, "graph": …, "warnings": [] }. Una advertència és orientativa: el graf és vàlid, es desa i es publica amb advertències. Cada entrada indica el node de branca i el braç al qual fa referència, perquè el creador del flux pugui assenyalar la condició exacta:
Un graf no vàlid respon amb 400 i amb errors i una llista de warnings tan completa com sigui possible. Només errors bloquegen un desament.

Exemple pràctic: dirigeix els enginyers de programari cap al comprovant de fons

Després de la verificació d’identitat: si ha estat rebutjada, rebutja la sessió; si la professió del titular ≈ “Software Engineer” (≥80% de similitud), sol·licita un document de comprovant de fons; després pren una decisió final.
El node final usa session_status: "Determine", que decideix automàticament (aprovar / rebutjar / en revisió) a partir de les funcionalitats que s’hagin executat realment a la sessió. Així, tant el camí del comprovant de fons com el camí else es resolen correctament sense cap branca que llegeixi document_ai.status (que no existeix en el camí que omet Document AI). Recorda: una branca només pot llegir un camp la funcionalitat del qual s’hagi executat en tots els camins que hi arriben. Envia’l com a { "graph": <above> } a l’endpoint …/workflow-graph/ (valida-ho primer). Per crear un flux nou des de zero, usa didit_workflow_set_graph del MCP; per modificar un flux existent, usa didit_workflow_edit_graph (operacions petites, conserva els nodes existents i les llistes de permesos). Consulta Didit MCP.

Autoritzacions

x-api-key
string
header
requerit

La clau d'API de la teva aplicació, des de Developers -> API keys a la Business Console. La clau primària té accés complet. Una clau amb nom pot tenir l'abast limitat: cap, lectura o escriptura per recurs, limitada a determinats fluxos de treball o a sessions aprovades, a una llista d'adreces IP i a una data de caducitat. 401 significa que la clau és incorrecta, revocada o caducada; 403 significa que no s'ha enviat cap clau, que la clau no té accés a aquest recurs o acció, o que la sol·licitud prové d'una adreça fora de la seva llista d'IP; 404 en una ruta de sessió significa que la sessió està fora dels fluxos de treball o estats de la clau. Una clau sense accés a fitxers multimèdia rep els URL d'imatge, vídeo i PDF com a null, i una clau sense permís d'escriptura de sessions rep els enllaços de sessió i els tokens com a null. Consulta https://docs.didit.me/console/api-keys.

Cos

application/json

Crea un flux de treball lineal simple. L'API converteix internament aquesta llista de funcionalitats en un graf de flux basat en nodes. Llista blanca de camps ESTRICTA: qualsevol clau no indicada aquí (incloent-hi workflow_type) es rebutja amb un 400.

features
object[]
requerit

Funcionalitats de verificació en ordre d'execució. L'API enllaça cada element amb el següent i afegeix un node d'estat final automàticament.

Minimum array length: 1
workflow_label
string
predeterminat:ID Verification

Nom visible per al flux de treball (màxim 50 caràcters). El valor per defecte és "ID Verification" quan s'omet — defineix-lo sempre perquè els fluxos de treball es puguin distingir.

Maximum string length: 50
Exemple:

"Standard KYC"

is_default
boolean

Estableix aquest flux de treball com a predeterminat per a les noves sessions.

status
enum<string>

Omet aquest camp per crear un flux de treball publicat a punt per a sessions. Utilitza draft només quan vulguis desar sense publicar.

Opcions disponibles:
draft,
published
is_white_label_enabled
boolean
predeterminat:false

Habilita la personalització de marca blanca per a les sessions creades amb aquest flux de treball.

is_desktop_allowed
boolean
predeterminat:false

Permet que el flux de verificació s'executi en navegadors d'escriptori.

max_retry_attempts
integer
predeterminat:3

Nombre màxim d'intents de reintent permesos després d'una verificació rebutjada. 0 bloqueja l'usuari després del primer rebuig.

Rang requerit: 0 <= x <= 10
retry_window_days
integer | null
predeterminat:7

Finestra mòbil en dies utilitzada per comptar els reintents. null aplica un límit per a tot l'historial.

Rang requerit: 1 <= x <= 365
face_liveness_max_attempts
integer
predeterminat:3

Nombre màxim d'enviaments de prova de vida per sessió. Per defecte 3: un intent inicial més dos reintents. Aquest valor també es copia als nodes generats del flux de treball de prova de vida i estimació d'edat tret que la configuració a nivell de funcionalitat el sobreescrigui.

Rang requerit: 1 <= x <= 3
face_match_max_attempts
integer
predeterminat:3

Nombre màxim d'enviaments de coincidència facial per sessió. Per defecte 3: un intent inicial més dos reintents. Aquest valor també es copia als nodes generats del flux de treball de coincidència facial tret que la configuració a nivell de funcionalitat el sobreescrigui.

Rang requerit: 1 <= x <= 3
session_expiration_time
integer
predeterminat:604800

Segons abans que caduqui una sessió no finalitzada. Mínim 1 hora (3600), màxim 4 setmanes (2419200).

Rang requerit: 3600 <= x <= 2419200

Resposta

Flux de treball creat. El cos de la resposta és la configuració COMPLETA del flux de treball (la mateixa serialització sense processar de VerificationSettings que retorna GET /v3/workflows/{settings_uuid}/, ~190 camps: cada commutador de funcionalitat, llindar, acció i el workflow_graph generat), no l'element de llista compacte. Guarda l'uuid (també exposat com a workflow_id) per poder fer-hi referència en futures crides de creació de sessions. Nota: features és una cadena unida per " + " i els preus són números JSON.

Els camps següents estan tipats; l'objecte també conté la resta de columnes de la configuració del flux de treball (commutadors de funcionalitats, llindars, accions d'advertència, documents permesos, callbacks) com a propietats addicionals. Els camps que no s'apliquen al workflow_type són null.

uuid
string<uuid>

Identificador per versió (settings_uuid). Cada versió d'un flux de treball té el seu propi identificador.

workflow_id
string<uuid>

Identificador estable compartit per totes les versions del flux de treball. Les sessions creades amb aquest identificador utilitzen l'última versió publicada.

workflow_label
string

Nom visible del flux de treball.

workflow_type
enum<string> | null

Plantilla de flux de treball. null per a fluxos de treball basats en grafs creats sense plantilla.

Opcions disponibles:
kyc,
kyb,
adaptive_age_verification,
biometric_authentication,
address_verification,
questionnaire_verification,
email_verification,
phone_verification,
null
is_default
boolean

Si aquest és el flux de treball per defecte de l'aplicació.

is_archived
boolean

Els fluxos de treball arxivats no poden iniciar noves sessions.

version
integer

Número de versió dins del flux de treball.

status
enum<string>

Les versions en esborrany són editables; les versions publicades són immutables i s'utilitzen per a noves sessions.

Opcions disponibles:
draft,
published
published_at
string<date-time> | null

Quan es va publicar aquesta versió. null per a esborranys.

is_simple_workflow
boolean

true quan el flux de treball no té cap workflow_graph personalitzat.

is_editable
boolean

true només per a versions draft.

workflow_url
string<uri>

URL pública que inicia una sessió amb aquest flux de treball.

workflow_graph
object | null

Estructura del graf del flux de treball (nodes i arestes). null per a fluxos de treball simples.

features
string

Funcionalitats habilitades unides amb " + ", per exemple "OCR + LIVENESS".

total_price
number | null

Preu per sessió; per als fluxos de treball amb graf, el camí més car.

min_price
number | null

Preu del camí més econòmic a través del flux de treball.

max_price
number | null

Preu del camí més car a través del flux de treball.

special_add_on_prices
object | null

Preus de complements específics de l'organització, o null si no n'hi ha cap de definit.

max_retry_attempts
integer

Reintents permesos després d'una verificació rebutjada.

retry_window_days
integer | null

Dies durant els quals es permeten els reintents.

session_expiration_time
integer

Segons abans que caduqui una sessió no finalitzada.

questionnaire
object | null

El qüestionari adjunt al flux de treball, o null.

kyb_role_settings
object[]

Configuració de verificació per rol per a persones clau de KYB.

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

Quins nivells de signatura electrònica poden signar ara mateix. Comprova-ho abans d'establir signature_level. Es retorna en fluxos de treball kyc, kyb i de graf.

is_bank_verification_enabled
boolean

Indica si un flux de treball senzill de KYC o KYB executa la verificació bancària. S'executa després dels passos de contacte (i la verificació d'ubicació) i abans de la validació en bases de dades, l'anàlisi AML i l'anàlisi d'IP. La verificació bancària encara no està disponible de manera general: activar-la es rebutjarà allà on no estigui habilitada.

bank_verification_config
object

Configuració de verificació bancària d'un flux de treball simple, amb les mateixes claus que accepta un node BANK_VERIFICATION (per exemple bank_countries i bank_method_order). Les claus desconegudes es descarten. Cada clau és opcional i una clau absent manté el seu valor per defecte, de manera que {} indica tots els valors per defecte. Consulta Configuració de verificació bancària.

Exemple:
is_geolocation_enabled
boolean

Indica si un flux de treball senzill de KYC executa la verificació d'ubicació. S'executa després dels passos de contacte i abans de la verificació bancària i la validació en bases de dades. Els fluxos de treball d'empreses (KYB) no la poden executar.

geolocation_config
object

Configuració de verificació d'ubicació d'un flux de treball simple, amb les mateixes claus que accepta un node GEOLOCATION (per exemple, is_geolocation_geofencing_enabled i geolocation_max_attempts). S'ometen les claus desconegudes. Totes les claus són opcionals i una clau absent manté el seu valor per defecte, de manera que {} implica tots els valors per defecte.

Exemple:
Darrera modificació el 7 de novembre del 2026