> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Build a KYC Workflow With No Code

> Video transcript: building a KYC verification workflow visually - checks, branching logic, risk rules, testing, and publishing to production.

export const VideoEmbed = ({src, title = "Video", type = "iframe"}) => <div className={type === "iframe" ? "didit-video-embed" : "didit-video-embed didit-video-native"}>
    {type === "iframe" ? <iframe src={src} title={title} style={{
  width: "100%",
  height: "100%",
  border: 0,
  borderRadius: "12px"
}} allow="accelerometer; autoplay; clipboard-write; compute-pressure; encrypted-media; gyroscope; picture-in-picture" allowFullScreen /> : <video controls autoPlay muted loop playsInline src={src} title={title} style={{
  width: "100%",
  height: "auto",
  display: "block",
  borderRadius: "12px"
}} />}
  </div>;

<VideoEmbed src="https://www.youtube.com/embed/7-nJ3JE20i4" title="Build a KYC Verification Workflow With No Code (Full Tutorial)" />

Full transcript of **Build a KYC Verification Workflow With No Code (Full Tutorial)** - Didit Academy video 3 of 10, 18:54. [Watch on YouTube](https://www.youtube.com/watch?v=7-nJ3JE20i4). Each paragraph links to the exact moment in the video.

## What a workflow is

[00:03](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=3s) In this video, we're going to be building a complete verification flow from scratch, and you won't need to write a single line of code. A workflow is really just a recipe for a verification, which checks to run and in what order. Normally, that kind of thing lives with your engineers. But in Didit, you build it yourself visually. You watch the price update as you go, and you push it live whenever you're ready.

[00:28](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=28s) If you want to build one yourself, you can head over to didit.me, sign up for free, and put your first workflow together in just a few minutes. All right, so let's start where every verification flow lives, and that's in

## The workflow list and workflow IDs

[00:39](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=39s) the workflow list underneath the configure tab here. So all of the workflows that we've currently got in this account, you can see the type. We've got KYC and KYB. We've got simple and graph, and we could see all of the different checks and features inside of each workflow. We could see the price spread. So this basically shows the price from somebody who goes through and does one check and doesn't complete versus somebody who completes the entire flow. We have a a link for the workflow.

[01:09](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=69s) We can add a new session manually. We can copy the workflow ID. We can duplicate, rename, archive, all of your usual stuff. And this is your workflow ID here. So multiple versions of the same workflow is just going to run off the same ID. So if you do update the workflow, you don't need to change anything inside of your code or your app. So the simplest way to think about a workflow is that this is just a recipe for a verification. So which checks to run in what order and what rules to follow. So there's two different

## Simple vs graph workflows

[01:40](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=100s) structures like I mentioned. There's simple and there's graph. So a simple flow is just one check or a few checks with no branching at all. No conditional logic. It's quick to set up and it covers most cases. So you pick your modules and you're done. So I mean if we take a look at this example workflow, you can see we can select the modules here over on the left and it's going to sequence them all in order. Now for a

## A graph workflow with branching

[02:05](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=125s) graph-based workflow, if we click into here, we could see there is some branching at the end. So we can get a little bit more granular with where we direct the user through this verification flow. So you can see in this workflow for example there is multiple different branching points. We can include webhook calls as well. Um and in general we can just add a little bit more complexity in here when needed.

[02:30](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=150s) So you just note here as well the KYB workflows look exactly the same but we just have different checks. Okay. So if we want to add a check we can pop in here. We can grab one of the user actions or set up some background checks. These are the ones that the user doesn't see on the front end. So, all

## Creating a new workflow from a template

[02:51](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=171s) you need to do is hit new workflow. Got a couple of options here. KYC, KYB. Let's hit KYC. And we've got simple versus advanced like I showed you earlier. And I'll show you options for both. If we click simple, we have a ton of different templates here for all sorts of different industries. And we can see the cost for each of these templates. We've got age gates. We've got email verification.

[03:19](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=199s) We've got biometric authentication, insurance, healthcare, all of this stuff. Now, for example, if we use a business verification, and we use the advanced version, which is the graph, again, we've got a bunch of different templates or recipes if you want to call them that. So, we could set up high-risk country KYB and boom. You don't even have to click and drag and drop anything in here. It's already built. So every

## Picking a check on each node

[03:48](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=228s) node here has a dropdown. So you can just pick the check that you want. You can change it like here or we can put the registry check. Whatever you want. ID verification, livveness, face match, AML, proof of address. All of the checks that Didit can offer for KYB and KYC are available inside of these nodes right here. So, if I wanted to add an additional check into here, for example, let's say I wanted to do a AML screening, then I can add that into here. We'll get into the rules and these tabs in in just a moment, but you could see in this workflow, I've added that in to this workflow here. So, if you go into a KYC graph workflow here, most of these workflows are going to start with ID verification. It's the most common

## Inside the ID Verification node

[04:33](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=273s) check. And you can see here, this is the ID verification node. We got 500 free checks per month and the same for the livveness and same for the face match. Now, this ID verification does way more than just read text off a card. It proves the document is genuine. checking the security features, looking for tampering, reading the fonts and the layouts, and then it extracts every field, the name, the date of birth, the document number, the expiry, all by OCR in any language across all 14,000 plus supported document types. So, this is never just text. It's an authenticity check first and then data second. So, let's configure one of these modules.

## Liveness modes and what each costs

[05:15](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=315s) Let's I mean, if we head over to the livveness module, you can see we've got a few different livveness modes. We've got passive, which detects livveness using a selfie. We've got flashing, so we confirm the livveness using dynamic light patterns to detect real user faces. Then we've got a 3D action. So, it's going to confirm the lighting with some kind of action, whether it's a blinking of the eyes or a turning of the head. Now you can see for the passive livveness check, we do get 500 free credits a month and then 10 cents per check while the flashing and the 3D action is 15 cents per check. And we don't get any free checks included in our free account. So in the rules tab,

## Rules: thresholds, duplicate faces, multiple faces

[05:56](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=356s) this is how we decide whether the module is required or optional. So if we head over to the rules tab, we can see there's a few different options here. So this allows us to configure the sensitivity of the testing. So we can set a tolerance level. If somebody has a livveness score of less than 70, then it's going to send them to in review. And we can we can change that if we want. And it's the same for decline. We can also have a setting for a duplicated face. So when a user's face matches one from a previously approved session, how do we proceed? So approve, review, or decline. And then we can customize the similarity threshold by ethnicity. So we can set the duplicate detection sensitivity depending on their ethnicity. And then finally we can define the action to take when multiple faces are detected in the livveness image. The the largest face will always be used for livveness scoring. So uh that's an option that we can set here. If we head into the

## Advanced settings and quality thresholds

[06:56](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=416s) advanced tab, we have a few different options here. Here we've got the face privacy mode, maximum livveness attempt, so how many times a user can reattempt the livveness check within a single verification session, the face quality threshold. So, so if you are ever unsure of what these settings actually do, we can hover over this information button here. We can see face quality measures image clarity, resolution, sharpness.

[07:20](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=440s) Low quality images may result from blur, pixelation, or poor lighting conditions. So we can set the threshold here based on the face quality score. We have a luminescence threshold. So we can set the acceptable luminescence range and then if the luminescence is below that range, we can obviously send them to review or decline. And finally, we can set up our own custom rules if none of these match the

## Return data and GDPR

[07:47](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=467s) settings that we want. So in the return data tab we can select the data points that we would like to exclude from the verification results for GDPR etc. Now for each of these modules we can see the price of the check and then at the top

## How workflow pricing adds up

[08:00](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=480s) here we could see a total price. So let me just sort of walk you through this because each node has its own price and each workflow is probably going to be slightly different in terms of the total cost. So you only pay for the steps that actually run. So each step is charged on its own. So if the applicant stops partway through the check, only those first few checks that they've gone through only going to be charged. So that's why you see at the bottom a range from 20 cents to 43 cents. That is the range. If somebody is going to go through the workflow, if they go through the first step and they exit, then it's only going to cost you 20 cents. If they fully complete the verification workflow, it's going to cost 43. And as you can see in the middle, these are all of the modules that are inside of this particular workflow. We can see how many credits we've got per month. Once those free credits are used up, once those 500 checks are done, then you will start getting build for them. So, one of the most powerful modules you can add isn't actually a camera check at all. It's

## Database validation against government registries

[09:05](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=545s) database verification. So, let's just add this in. This is a background check. And we're going to take a look at what this actually does because this database validation check connects to official government registries and databases all over the world. So what it does is cross-check the users data against those official sources and then enrich it with extra fields the registry holds. So you can choose which registries and sources to run as you can see here for each country. And each service lists its own price. So you can see down here we've got different services inside of Canada for example and there's obviously different pricing for different registries. So if you wanted to see a specific country like Germany for example, we could see the checks that are available in Germany and we can select these based on our needs.

[09:59](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=599s) And this database validation is not just something that you can run here in the dashboard is callable directly through the Didit API from your own backend too. And again, like with all of these modules, we've got rules, we've got advanced, and we've got return data. So again, you could set your rules here. And if we click here on partial match, we could see what a full match looks like. Full name and ID number, if that matches in the registry, for example, and a partial match maybe is just an ID number. And then we can decide what that partial match means inside of your workflow. Do we put it to review? Do we decline? Do we approve? So we have some branching inside of this workflow. We

## AML branching and conditional logic

[10:36](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=636s) have AML branching depending on the AML risk score. AML is just anti-moneyaundering. But we can see down at the bottom we already have branching configured for this AML risk score. So we can see if the risk score is over 70, we can just decline and we can click into here. We can see the conditional logic. Right? So this is something that we can set up however we want. So we've got branch one, we've got branch two and then all other cases which means the session is going to be approved. So for example, if somebody is in this group here, they get sent to branch two. We could ask them for uh more information, right? We could ask them for proof of address, for example. So that way if somebody is a little bit risky, we can ask them for for more information that will help us decide whether this person should be approved or declined. So, one of the other nodes that we've got here is we've got status, and we've already been added here, but you can add those at the end of your workflow to determine what the outcome's going to be. So, another one of the

## The webhook node

[11:40](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=700s) nodes that we can include in the workflow is the webhook node. So, the flow can also reach out to your own systems in the middle of a verification, and that's what this node is for. It can call an endpoint and pull data back. And so it's going to wait for that webhook to respond. You can see here we've got a post webhook. We've got a JSON payload which can be changed. Also, we can also send different payloads. So these are the key value pairs that maps your session fields into the request that you send out. And the fields that come back become variables for the next branch to test. So you're combining digits checks with your own risk data all inside a single flow. And one final thing we we can include the headers down here at the bottom. Some more key pairs. We got basic authentication here. All of the stuff that you would expect uh from a webhook call. Didit validates the

## Graph validation and errors

[12:28](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=748s) graph the whole time you're building. So if a node is misconfigured or a path is broken, it's going to tell you exactly where. Right? So we click down here in the bottom. We see flow has two errors. And we can see branch one has incomplete rules. And it's going to tell you what needs fixing inside of your workflow. And we're not going to be able to publish this until these errors are fixed. So if I had a brand new workflow for example and there was an error then I wouldn't be able to publish that workflow. So beyond the individual nodes

## Workflow settings: retries, expiry, callback URL

[12:58](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=778s) in the workflow we have the settings tab in the top here that we could see these settings apply to the whole workflow rather than a single check. We've got a workflow name of course we've got a call back URL which is the address Didit redirects the user to once the flow finishes. We can allow desktop access if you want to allow them to continue on desktop. We've got the retry attempts so you can change that. So, the amount of times a user can reattempt document capture within a single verification session. If a previous attempt fails, we've got the session expiration, so how long an unfinished session stays valid before it automatically expires. And this is going to apply to newly created sessions. And we've got the retry window, so the number of days within which retries are allowed. So from

## White-labelling the flow

[13:43](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=823s) inside of this workflow, we can actually head over to the customizations tab by clicking this button up here. So white labeling is wired straight into the flow itself. So you can jump into this tab here and you could start tweaking how this verification flow looks, the colors, the branding, the email, the domain, all of that good stuff. And in the mockup here, you could see how it's going to look on mobile and also how it's going to look on desktop as well.

[14:13](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=853s) You can also test it out in different languages. So if we put this into French, you could see every check is now written in the French language. And if you want to turn on, you know, you can switch on your branding here. Boom. You could turn it to what we set in the customization tab or we can turn that off. And we can actually see what happens if we choose a different path here and we can see what gets sent to the user. Now, obviously the user is not going to see the the pick a path module, but this is just to help us visualize what's going to happen on the next step, right? So, if they declined, we're going to see verification declined, verification in review, or that they've been verified. We do have the copy link

## The shareable link, and when not to use it

[14:58](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=898s) at the top here. So, if we copy that, open a new tab, we can come through to the the link here, and we're going to be able to see what the user is going to see. And sometimes you just want to hand someone the flow without wiring any code at all. And this copy link does exactly that. It copies a ready to share hosted URL for this workflow. Now, this is handy for a quick test or a manual send, but it's not the recommended way to integrate this. For production, you can create a session per user through the SDK or the API carrying the vendor data and that's how you get real-time results back through webhooks and the SDK. So the copy link is great for tests and events and a proper session is what you're going to ship in production. So

## Version history and rollback

[15:41](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=941s) at the top here we've got the version history. So we could see the different versions and we can restore or we can view the previous versions. And if we were to be editing this workflow, then those edits would sit as a draft um above the published history in here. And the cool thing is that every new version that you publish, it keeps the same workflow ID. So your backend keeps calling that one ID and it's going to get silently forwarded to the newest workflow that you've created cuz that history is tracked and you can iterate with confidence and roll back to previous versions whenever necessary. So for example, in this workflow here, this is a brand new one. You can see it's in draft mode. If we make any changes to the workflow, it's going to be in draft and we'll need to publish it. So, we can

## Publishing your workflow

[16:24](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=984s) hit publish. This workflow is only going to go live when it's published. Uh, it's going to validate the graph to make sure there's no errors. And boom, we can grab the link and now this workflow is live and ready to go. Uh, let's take a look

## Integrating: SDK, API key and the setup prompt

[16:37](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=997s) at the integration. So, there are multiple ways to integrate this. We can grab our target SDK. So whether we want React Native, iOS, React Next.js, we can select the workflow and in this case we got the high-risk country of review. We can select the API key. So we can have different API keys for different workflows or different integrations, whatever you want. Or you can select a webhook. So if you want to get notified of decisions, you can pop that into there. Now the easiest way to integrate this is we just copy a prompt and we can just slap that into claw code or codeex.

[17:12](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=1032s) And that prompt is going to integrate this workflow. So even if you don't have didit integrated into your app yet, this prompt will give you everything that you need to have this workflow up and running into your app. Now you don't even need to do that. You could just

## Building workflows with the MCP server

[17:27](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=1047s) install a Didit MCP server. Just describe the flow in plain language and it will create the workflow for you and automatically integrate it into your app. Tell it what to do and it will go ahead and do it. Now, we are going to get into how to set up the MCP in another video, but MCP is essentially model context protocol that allows you to build. with Didit using natural language in tools like Claude Code, Cursor, Codex, and all the rest. So, we can jump into customization real quick.

[17:57](https://www.youtube.com/watch?v=7-nJ3JE20i4\&t=1077s) We'd add in the public name, privacy policy, URL. We've got the branding where we can change the colors. You can also pull your logos and colors automatically from your website, which could be super useful and easy to do. We can upload your logos down here. And you can see I've already set these colors. And to to test how it would look with those colors, if we just flick this switch here, we could see our white label branding getting implemented here on the verification flow. I'm just going to toggle it off for now. You can set a personalized email. You will need to fill out these details. And then when you continue to verification, you can just get the DNS information and hook that up with your domain. And the same here if you want to put a subdomain. So that this whole workflow is fully hosted using your own branding, your own domain. So this really is a seamless process for your users to go through the verification.
