# Automating Journeys with Flows

### About this export

| Field | Value |
| --- | --- |
| **content_type** | course |
| **platform** | contentstack-academy |
| **source_url** | https://www.contentstack.com/academy/courses/data-insights-automating-journeys-with-flows |
| **language** | en |
| **product_area** | Contentstack Academy |
| **learning_path** | data-and-insights-practitioner-certification |
| **course_id** | data-insights-automating-journeys-with-flows |
| **slug** | data-insights-automating-journeys-with-flows |
| **version** | 2026-03-01 |
| **last_updated** | 2026-06-08 |
| **status** | published |
| **keywords** | ["Contentstack Academy"] |
| **summary_one_line** | This course provides comprehensive training on Lytics' visual workflow system for managing complex customer journeys. You'll learn to orchestrate multi-step marketing processes with conditional logic, timing controls, an… |
| **total_duration_minutes** | 36 |
| **lessons_count** | 12 |
| **video_lessons_count** | 11 |
| **text_lessons_count** | 1 |
| **linked_learning_path** | data-and-insights-practitioner-certification |
| **linked_assessment_ref** | LMS_UNCONFIGURED_COURSE_ASSESSMENT |
| **markdown_file_url** | /academy/md/courses/data-insights-automating-journeys-with-flows.md |
| **generated_at** | 2026-06-08T14:32:02.435Z |
| **intended_audience** | [] |
| **prerequisites** | [] |
| **related_courses** | [] |

> **Academy MD v3** — companion `.md` for Ask AI. Quizzes and graded assessments are **LMS-only**; this file never contains answer keys.

## Course Overview

| Metadata | Value |
| --- | --- |
| Catalog duration | 36m 25s |
| Released (if known) | 2026-03-01 |
| Product area | Contentstack Academy |

### Description

_This course provides comprehensive training on Lytics' visual workflow system for managing complex customer journeys. You'll learn to orchestrate multi-step marketing processes with conditional logic, timing controls, and cross-channel activation._

### Overview

### What You'll Learn

This session teaches you to design and implement sophisticated customer journey workflows using Flows. You'll master the visual workflow system to create automated, personalized experiences that guide customers through complex multi-step processes.

### What We'll Cover

We'll begin with Flow fundamentals, showing how they unify segmentation, triggers, and channel activation into a single visual canvas. You'll learn to create Flows from templates or build custom workflows from scratch, starting with trigger step configuration including audience-based entry conditions and reentry settings. We'll cover wait and personalize steps for time-based delays and real-time personalization, conditional split steps for branching logic based on user attributes, and export steps for activating audiences across hundreds of marketing platforms. You'll master the Flow publishing process, including validation and activation, and learn version control and state management for running Flows. Finally, we'll explore creating custom templates for repeatable marketing processes and campaign orchestration.

### Learning objectives

1. Follow each lesson in order.
2. Practice in a training stack using placeholders **YOUR_STACK_API_KEY** and **YOUR_DELIVERY_TOKEN** in local `.env` files only.
3. Validate API responses against the official documentation.

### Topics covered

Contentstack Academy

## Course structure

```text
data-insights-automating-journeys-with-flows/
├── 01-data-insights-course-5--what-is-a-flow · video · 94s
├── 02-data-insights-course-5--flows-course-overview · video · 64s
├── 03-data-insights-course-5--example-end-to-end-with-flows · video · 522s
├── 04-data-insights-course-5--creating-a-flow · video · 85s
├── 05-data-insights-course-5--flow-anatomy-trigger-step · video · 304s
├── 06-data-insights-course-5--flow-anatomy-wait-personalize-step · video · 271s
├── 07-data-insights-course-5--flow-anatomy-conditional-split-step · video · 83s
├── 08-data-insights-course-5--flow-anatomy-export-step · video · 176s
├── 09-data-insights-course-5--publishing-a-flow · video · 191s
├── 10-data-insights-course-5--flow-versions-state-management · video · 301s
├── 11-data-insights-course-5--creating-custom-templates · video · 94s
├── 12-data-insights-course-5--quiz · quiz (LMS only) · 3 min
```

## Lessons

### Lesson 01 — What is a Flow?

<!-- ai_metadata: {"lesson_id":"01","type":"video","duration_seconds":94,"video_url":"https://cdn.jwplayer.com/previews/RARB2o9U","thumbnail_url":"https://cdn.jwplayer.com/v2/media/RARB2o9U/poster.jpg?width=720","topics":["What","Flow"]} -->

#### Video details

#### At a glance

- **Title:** 33-data-insights-what-is-a-flow
- **Duration:** 1m 34s
- **Media link:** https://cdn.jwplayer.com/previews/RARB2o9U
- **Publish date (unix):** 1752897043

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113609 kbps
- video/mp4 · 180p · 180p · 135885 kbps
- video/mp4 · 270p · 270p · 148672 kbps
- video/mp4 · 360p · 360p · 151545 kbps
- video/mp4 · 406p · 406p · 156482 kbps
- video/mp4 · 540p · 540p · 175255 kbps
- video/mp4 · 720p · 720p · 207508 kbps
- video/mp4 · 1080p · 1080p · 289307 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/RARB2o9U-120.vtt`

#### Video transcript

Welcome to the Flows Deep Dive. We walk through all of the different aspects of Flows, the different configuration options. First and foremost, Flows for those that don't know, is a new product release for Lytx. It's a way to visualize and manage all of the inner workings of Lytx, essentially data as it's coming in, as you create audiences, and then ultimately as you export that audience data, that profile data to external systems. A lot of the functionality under the hood has existed for a long, long time, but it was pretty clunky to work with. You had to build custom audiences, one-off. You then had to set up additional exports, one-off, and just understanding the relationship between all those things was very, very challenging. Likewise, some of the common points of pain around weights and personalization and that kind of stuff have been worked into the final solution. And then this canvas that we'll walk you through becomes a jumping-off point to a bunch of other iterations and improvements, really making Flows, in a lot of ways, the heart and soul of the Lytx and now ContentStack product experience as you work with your data.

#### Key takeaways

- Connect **What is a Flow?** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 02 — Flows Course Overview

<!-- ai_metadata: {"lesson_id":"02","type":"video","duration_seconds":64,"video_url":"https://cdn.jwplayer.com/previews/nlzD4kMz","thumbnail_url":"https://cdn.jwplayer.com/v2/media/nlzD4kMz/poster.jpg?width=720","topics":["Flows","Course","Overview"]} -->

#### Video details

#### At a glance

- **Title:** 34-data-insights-course-summary
- **Duration:** 1m 4s
- **Media link:** https://cdn.jwplayer.com/previews/nlzD4kMz
- **Publish date (unix):** 1752897051

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 115319 kbps
- video/mp4 · 180p · 180p · 140849 kbps
- video/mp4 · 270p · 270p · 155889 kbps
- video/mp4 · 360p · 360p · 154892 kbps
- video/mp4 · 406p · 406p · 160245 kbps
- video/mp4 · 540p · 540p · 179513 kbps
- video/mp4 · 720p · 720p · 210931 kbps
- video/mp4 · 1080p · 1080p · 295609 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/nlzD4kMz-120.vtt`

#### Video transcript

Once it's enabled in your account, you'll see it on the left-hand sidebar under Using Profiles, so you'll just see the Flows tab. Clicking on that will take you to a list of flows. Obviously, in this demo account, we have a couple of flows already set up that we can walk you through, but most folks will come in with a blank canvas, and you'll hit Create New to create your own flow. For this demonstration, I think what we'll do is we'll walk through an existing flow, kind of end-to-end, show how it works, show it actually working, how it can generate some emails as this one-off example, show what it's doing to the profile, and kind of do the end-to-end experience, and then we'll double back and walk through all of the individual mechanics and configuration options, sort of start to finish, that flows can do. Thanks for watching, and I'll see you next time.

#### Key takeaways

- Connect **Flows Course Overview** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 03 — Example: End-to-end w/ Flows

<!-- ai_metadata: {"lesson_id":"03","type":"video","duration_seconds":522,"video_url":"https://cdn.jwplayer.com/previews/adRsOgB6","thumbnail_url":"https://cdn.jwplayer.com/v2/media/adRsOgB6/poster.jpg?width=720","topics":["Example","End","end","Flows"]} -->

#### Video details

#### At a glance

- **Title:** 36-data-insights-flows-end-to-end
- **Duration:** 8m 42s
- **Media link:** https://cdn.jwplayer.com/previews/adRsOgB6
- **Publish date (unix):** 1752897067

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113579 kbps
- video/mp4 · 180p · 180p · 134956 kbps
- video/mp4 · 270p · 270p · 148015 kbps
- video/mp4 · 360p · 360p · 158901 kbps
- video/mp4 · 406p · 406p · 166770 kbps
- video/mp4 · 540p · 540p · 190494 kbps
- video/mp4 · 720p · 720p · 229306 kbps
- video/mp4 · 1080p · 1080p · 328591 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/adRsOgB6-120.vtt`

#### Video transcript

For our initial demonstration, we've already set up a welcome series. Probably worth noting that this is a use case, but likely not the primary use case for a couple of reasons. One being basically every customer's already going to have their own kind of welcome series set up. We don't want to create confusion on what flows can and can't do. That said, a welcome series is a really good way to demonstrate the capabilities from a sort of like enter into the audience or enter into the flow, set up some weights, set up some exports and be able to see things happening in real time. Lots of different use cases that we can go over. So if I go into this existing flow, just to sort of walk through the mechanics of how it works, it's currently in a running state. So for flows that have been published and are running, which is represented by the green bar at the top, you'll first and foremost see all of the different steps that have been configured. Again, we'll walk through exactly how to configure those and the different options. In this case, though, there's what we call the trigger step. It's always at the top. You can't delete the trigger step. This is the entry point into the flow. In this case, anytime that the user transitions from an unknown status to a known status, meaning they have an email address, they're going to get automatically entered into this flow. And then the first thing that will happen as soon as that trigger occurs is they're going to hit this export step. Our export steps have been set up in this case to leverage SendGrid. So it's going to actually deploy in this welcome series example, basically, I fill out a form on the site. As soon as that gets processed, I'm going to get a welcome email and say, welcome to Petsy. And then it's going to go into this state of wait for our demo. It's a five minute wait. Obviously, in real cases, it would be like a one day or a seven day wait or something like that in kind of a traditional drip campaign. From there, you'll get another follow up email, which I believe is like a 20 percent off. It's going to wait five minutes and it'll send you one more follow up to donate. And then it's going to go into a final wait state and then exit the canvas. So lots of different ways you can configure this. But at the end of the day, it's organizing the different steps and interactions to take somebody through a full end to end use case. For running flows while we're in here, there's a variety of metrics that we provide. First at the canvas level, you can extend down and see how many users, how many end users or visitors have actually entered into this flow ever. How many have completed the flow? So we've gone all the way through it. And then ultimately, how many are currently in the flow. So as you can see in this one, there's been 15 people to go through it. 14 have gone all the way through it. There's still one somewhere in here on a wait state. And then to understand kind of where they are, you can expand the metrics here at the top, and it'll break down each individual steps metric. So the trigger is obviously the entries. It's going to mimic kind of what's on the canvas. And then if there were somebody waiting or processed along this way, you'd be able to see that. Ultimately, in this example, there is somebody already waiting on that last step. So you can see there's one kind of waiting and pending for that one day wait just to sort of visualize what can happen, they'll exit, then they'll leave the flow. In addition to the step level metrics, you can access by clicking one of the different steps. And then there's a metrics tab for each of these steps, which will give you an additional breakdown more granular of the way people have entered and exited this particular flow. So for the trigger step, it'll show on the 8th of April, we started testing this flow. Obviously, there's lots of people to enter and then kind of as a demo, there's been additional people to trickle in. You can change the cadence to a month to break it down and change it and show it differently. Similarly, if you go into one of the wait nodes, you'll see a breakdown over time for that particular wait state, how many users have been paused. One thing to note about all of the metrics is as of right now, they're calculated once every 24 hours. So you're not going to see real time counts on the flow canvas, you will see them sort of update on the daily basis. Just one thing to note as you're kind of like playing and testing on things. The only other things to note kind of at a high level on the canvas is at the top and we'll walk through this in more detail. You'll see where you can manage the different versions. We'll talk about versions and states here shortly. There's a toggle to sort of minify the view, which just gives you a little bit more area, especially if you compress the metrics as well as the details. Clicking again just expands it and then up in the right hand side is what we call the action menu. So this is where you're going to create new versions, it's where you're going to save and publish and all that stuff, which we'll again walk through in details. And the final thing to kind of mention about the canvas is there is a more details panel, which is just going to bring up things like the status, the ID of your flow, if you ever need that, the version that you're currently on, and so on and so forth. And then finally, there is a little action menu in the name or the label bar. This is where you can delete a version or delete the entire flow, which again, we'll demonstrate here momentarily. So in this flow, it's already running. Basically it's set up against our petsy.lytics.com sandbox site. So over on the right hand side, I have an incognito window set up and I'll just go to petsy.lytics.com. And we use our path for a personalization to surface a modal that comes up if you are an unknown user, unrelated to the flow. This is before they've actually entered in, but in this case, I'm going to just say mark.hayden plus demo live 123 content stack.com. So I'm going to submit this data to Lytics. We're going to collect it with our JavaScript tag with path for our personalization library. And that's going to ultimately make it into my CDP Lytics account. And then so what that means, I'm going to enter this flow and then as soon as it processes, it's going to hit this export node. That export node is configured to actually send a signal to SendGrid. We can walk through some of the details on exactly how that works here in a moment. But as a result, what you'll see is I get the first step of the welcome series here in my email, which is just a simple mock up of, hey, thanks for signing up. Start shopping. I'll leave this window open. So every five minutes or so, you'll get another kind of follow up to just demonstrate the drip. Definitely will not sit here for five minutes and wait, but just as they pop up, I'll kind of call them out. And then the other thing to know about a live running flow is that now if I refresh with this user so that they would come back to the site, if I access the profile, which there are a number of ways to do this. Oops, typo, of course. So this is just the profile that's coming back from our JavaScript tag into the console. Same thing as the Chrome extension, same thing as you'll see in the Red Panda demo for ContentCon. But it's going to return a few different things that show the flow state on that profile. So you'll get all the things like audience membership and the stuff that you probably see in previous demos. But specifically, it's going to come back with this flow steps slug array. So it shows you where you are across all of the different flows in this case. So there's this weight and personalized step. We've configured the key, which will double back to show you how to configure the key and kind of the importance in there. But we've named it drip weight one. You can see for this particular user, we're saying that they're actually in this flow as well as another flow in a different test. But they're currently on this weight state. Likewise, real quick while we're in the browser, if I go into this step, and we'll cover this again, and I copy just an example of how to use it, I can just paste this in. And it's going to come back and just say user as a candidate. Ultimately, this is where you could do whatever you want to do with JavaScript. You can customize things, you can set variables, you can redirect sort of the world is your oyster on that front. But all of that to say that you're getting a real time update as to where they are in that flow as they progress through if I would or progress through, if I would come back and refresh, you'll see that state reflected. So lots of stuff that you can cover and do with flows from a use case standpoint. Just wanted to show one kind of working version end to end so you can understand.

#### Key takeaways

- Connect **Example: End-to-end w/ Flows** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 04 — Creating a Flow

<!-- ai_metadata: {"lesson_id":"04","type":"video","duration_seconds":85,"video_url":"https://cdn.jwplayer.com/previews/JrnTw0lK","thumbnail_url":"https://cdn.jwplayer.com/v2/media/JrnTw0lK/poster.jpg?width=720","topics":["Creating","Flow"]} -->

#### Video details

#### At a glance

- **Title:** 35-data-insights-creating-a-flow
- **Duration:** 1m 25s
- **Media link:** https://cdn.jwplayer.com/previews/JrnTw0lK
- **Publish date (unix):** 1752897057

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 114860 kbps
- video/mp4 · 180p · 180p · 139531 kbps
- video/mp4 · 270p · 270p · 153574 kbps
- video/mp4 · 360p · 360p · 156889 kbps
- video/mp4 · 406p · 406p · 163480 kbps
- video/mp4 · 540p · 540p · 185238 kbps
- video/mp4 · 720p · 720p · 218624 kbps
- video/mp4 · 1080p · 1080p · 310943 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/JrnTw0lK-120.vtt`

#### Video transcript

Generally, when you start a flow, you'll hit the Create New button, and it's going to take you to this screen. We'll ultimately build out more and more pre-built templates. That's what you'll see at the bottom. So if a user wants to go and create a lost lead retargeting kind of cart abandonment use case, you would click this open. It gives you a walkthrough on what it's going to do. You would be able to name it, and then it's going to pre-populate your flow canvas with that template. In our demo, we'll walk through a welcome series, but it's the same thing. And then the additional feature here is for a customer that wants to create their own templates. Say you have a particular kind of flow that you want to repeat for every annual campaign or seasonal campaign or whatever it may be, you can actually go through and we'll double back and do this, but you can go through and create your own template, which is stored and then unique to that particular account. So a couple of different ways to promote what you can do with flows, along with the ability to just start with a blank canvas, build your own from scratch, which is what we'll actually double back to and walk through the different pieces.

#### Key takeaways

- Connect **Creating a Flow** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 05 — Flow Anatomy - Trigger Step

<!-- ai_metadata: {"lesson_id":"05","type":"video","duration_seconds":304,"video_url":"https://cdn.jwplayer.com/previews/ZpRe4a8P","thumbnail_url":"https://cdn.jwplayer.com/v2/media/ZpRe4a8P/poster.jpg?width=720","topics":["Flow","Anatomy","Trigger","Step"]} -->

#### Video details

#### At a glance

- **Title:** 38-data-insights-flow-trigger-step
- **Duration:** 5m 4s
- **Media link:** https://cdn.jwplayer.com/previews/ZpRe4a8P
- **Publish date (unix):** 1752897121

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113459 kbps
- video/mp4 · 180p · 180p · 132863 kbps
- video/mp4 · 270p · 270p · 145680 kbps
- video/mp4 · 360p · 360p · 154732 kbps
- video/mp4 · 406p · 406p · 162077 kbps
- video/mp4 · 540p · 540p · 183954 kbps
- video/mp4 · 720p · 720p · 216877 kbps
- video/mp4 · 1080p · 1080p · 307132 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/ZpRe4a8P-120.vtt`

#### Video transcript

So, starting with Trigger, to configure Trigger, it's pretty easy, but there are lots of different options. So, clicking on the step will open the sidebar. The sidebar is where you manage all of the different options. When it comes to entering into a flow, it's always related to an audience, so you're going to build an audience prior to the flow setup, and then you're going to use that to trigger entries into it. But there's a couple of different options how we can interact with that audience. By default, it'll say when added to, so this means in the case of a welcome series, you're going to build an audience, like we already had, that's any user that has an email address. You don't want to backfill and add everybody that's currently in that audience when you turn this flow on. You only want new people that are added to the audience to be triggered and entered into this flow. So, added to only does the flow entry when that added trigger happens on a segment. So, if I were to go in here and I say, email, status is known, and leave it like this, it's going to say every time that they're added to this audience, as opposed to already existing in this audience or this segment, they're going to be entered into this flow. Likewise, we can switch it to member of. The difference here, and the description should walk through it as well, but the difference here is I have an existing segment, an existing audience of 10,000 people. I want to make sure that all 10,000 of those people enter into this flow immediately upon publishing, as well as new entries that happen in the future. So, this is, you know, equivalent of a backfill in our traditional sort of jobs and export works. So, very important kind of subtle difference there. You can also see roughly, actually, exactly five minutes after the first one went through, we got now the second email, which is just a 20% off coupon to Petsy, and the profile would be updated. So, back over to the trigger, so added to only new entries into the audience, member of, everybody that exists, as well as new entries. And then there's also the configuration option to handle reentries. So, in the case of, say, a cart abandonment use case, you're going to want users, folks to be able to go through that flow multiple times based on some cadence. So, if I abandon a cart today and next week, I want to go through that flow and get messages and communications to help prompt that purchase. So, if I turn on allow reentry, you're going to get prompted again with a few different options. So, similar to the original flow entry, you can choose when they reenter, if they enter the audience again, or if they're still in the audience. So, think about like an evergreen newsletter campaign where I never, you know, if I'm targeting anybody with an email address, there's never going to be a point in time where I have an email address and now I don't have an email address, and I have an email address again to cause me to enter back into that audience. So, in that case, you would probably want to do enters or remains in audience. So, it's going to allow me to reenter based on the delay, which we'll touch on here in a second, to reenter that flow after I've completed it if I'm still in the audience. For something like a cart abandonment where it's time-based, you're likely going to want to do something where it's just enters the audience again. So, in a cart abandonment use case, you would say has added an item to a cart in the last 24 hours, but hasn't made a purchase in the last 48 hours or something along those lines. And the way that you configure that logic will ultimately kick them out of that audience at some point in time, so the next time they abandon, they'll literally reenter the audience, which re-triggers this campaign or this flow. So, those are the sort of two nuances there. And then the reentry delay is defaulted to one hour. You can add additional time. This just adds an additional buffer to the reentry. Very important, actually required when you use the enters or remains in audience. If you didn't have that and you only had a flow that was like one step with a two-minute wait, you would just have an infinite loop to where they would go through that flow every two minutes. So, definitely important to think about how often you want users to reenter, if they should ever reenter at all, etc. So, in this case, just for our demonstration purposes, we'll just turn off reentry. We'll just say we want to target anybody that's been added to our email address or our email status known audience. Again, you'll have access to all of the different audiences in the account here. So, you can be filtered, searched, you have sizes, all that kind of stuff available in the sidebar. So, we'll save this. It will update the canvas. So, now it says we've configured our trigger.

#### Key takeaways

- Connect **Flow Anatomy - Trigger Step** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 06 — Flow Anatomy - Wait & Personalize Step

<!-- ai_metadata: {"lesson_id":"06","type":"video","duration_seconds":271,"video_url":"https://cdn.jwplayer.com/previews/RaIxRHG8","thumbnail_url":"https://cdn.jwplayer.com/v2/media/RaIxRHG8/poster.jpg?width=720","topics":["Flow","Anatomy","Wait","Personalize","Step"]} -->

#### Video details

#### At a glance

- **Title:** 39-data-insights-flow-wait-step
- **Duration:** 4m 31s
- **Media link:** https://cdn.jwplayer.com/previews/RaIxRHG8
- **Publish date (unix):** 1752897145

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113626 kbps
- video/mp4 · 180p · 180p · 136525 kbps
- video/mp4 · 270p · 270p · 150504 kbps
- video/mp4 · 360p · 360p · 162104 kbps
- video/mp4 · 406p · 406p · 170595 kbps
- video/mp4 · 540p · 540p · 196087 kbps
- video/mp4 · 720p · 720p · 235425 kbps
- video/mp4 · 1080p · 1080p · 337254 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/RaIxRHG8-120.vtt`

#### Video transcript

So, wait, in our welcome email example, it automatically waits for five minutes or however long you want once it's sent an email. Wait has a bunch of flexible options as well. One for all of the steps other than the trigger, you can name your step. This becomes important purely for the UI. It doesn't do anything on the back end necessarily, but it certainly helps the next person understand some of the intent. Any place that we surface the status of a user in a particular flow throughout the UI, we try to refer to the step name as well. So I'll just name this sample wait. And just for demo purposes, we'll save it. You can see it's updated here at the top. On the step cards, you have the type is always at the top. That's fixed. The icon just represents the step type, and then the title shows up below. This little action menu will allow you to delete the step if you wanted to. So if I want to just delete the step, I can select that. It's going to pop away. All of the changes to the flow canvas automatically save, as you've seen there at the top. I'll do it again just to showcase it. So I added one. It saved. If I do a hard refresh, all of my changes are there. So there's very little opportunity to kind of lose the work that you've been working on, which is super nice. So we'll go back into the wait step. We'll rename this because we deleted the one that we named. We'll just say sample wait. And then now you're prompt with, again, a number of options to sort of configure. So I can just wait for a set amount of time, maybe one day, one hour, one minute, whatever it may be. I could save that. It's automatically reflected. Likewise, you can wait until a condition is true. So this will actually bring up a rules engine to say that wait until maybe my momentum score is greater than 65 or 60, whatever. This rule engine will bring up sample values and have access to the full schema. It mimics the exact segment builder or the audience builder that you use throughout the UI. It should make it super easy to sort of configure. And if you want to hide some of this stuff just to confess it, you can click on the little magnifying glass. It'll save some space down there. You can also add rules. We won't go too much into sort of the audience builder rule configuration because it's consistent sort of throughout the UI, but I'll save this rule in this case. And then the final thing that you can actually configure, which is really important when it comes to personalization. This is also the values, some of the values that exist in addition to the audience membership that's pushed to the content stack edge API so that exists on that user so that you can build the content stack personalization rules and segmentation rules based on the value. In our example over here, this is where drip underscore wait underscore one is what we named this sort of personalization opportunity. What you do here though is you just hit enable personalization and then you can put in a unique key. So I'll just say content stack demo full wait one or whatever. Below that, you'll have an example of how you could use that key. This is one of the areas that we'll definitely look to expand to show some more opportunities. This is where we can also have contextual information about content stack and how the sync works and how you could link to some documentation to showcase how to use that inside of the sort of like core content stack app, which is super useful. So right now it's just a pure JavaScript example, but this is one of the areas that we'll definitely expand on that just basically says, you know, look on the user profile, see if that CS demo full wait one, our key exists in that array. And if it does return true, essentially, and you could do stuff. So, and that's really all there is to the wait and personalized configuration step. So we'll save this. It'll show the shorthand version of the condition that we configured. It'll show the personalization key and you can kind of go from there. So that is how you configure a wait.

#### Key takeaways

- Connect **Flow Anatomy - Wait & Personalize Step** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 07 — Flow Anatomy - Conditional Split Step

<!-- ai_metadata: {"lesson_id":"07","type":"video","duration_seconds":83,"video_url":"https://cdn.jwplayer.com/previews/NNt30s3E","thumbnail_url":"https://cdn.jwplayer.com/v2/media/NNt30s3E/poster.jpg?width=720","topics":["Flow","Anatomy","Conditional","Split","Step"]} -->

#### Video details

#### At a glance

- **Title:** 40-data-insights-flow-conditional-split-step
- **Duration:** 1m 23s
- **Media link:** https://cdn.jwplayer.com/previews/NNt30s3E
- **Publish date (unix):** 1752897181

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113821 kbps
- video/mp4 · 180p · 180p · 142668 kbps
- video/mp4 · 270p · 270p · 159687 kbps
- video/mp4 · 360p · 360p · 164809 kbps
- video/mp4 · 406p · 406p · 173808 kbps
- video/mp4 · 540p · 540p · 201149 kbps
- video/mp4 · 720p · 720p · 242535 kbps
- video/mp4 · 1080p · 1080p · 353887 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/NNt30s3E-120.vtt`

#### Video transcript

Conditional split will allow you to essentially set a condition to send people down to different paths. So very similar to how you set the condition in the wait and personalize, we'll open up split conditions, you can still label it, we'll leave it blank for now. But if I wanted to say, again, you know, like email address contains at contentstack.com, I will save that rule, and then save this rule. I guess one thing to note, you can add additional rules if you so choose, so you can link rules together, you can have ands and ors, and there's lots of flexibility there. In this case, though, we'll just say, anytime that a user has an email address that contains contentstack.com, we'll send them down one track, and anybody else, we'll send down another track. I save that, it's going to show the shorthand rule again, and then you have this yes edge and this no edge to say if I meet the condition, I'm going to go left, if I don't meet the condition, I'm going to go right.

#### Key takeaways

- Connect **Flow Anatomy - Conditional Split Step** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 08 — Flow Anatomy - Export Step

<!-- ai_metadata: {"lesson_id":"08","type":"video","duration_seconds":176,"video_url":"https://cdn.jwplayer.com/previews/U1b3oYqu","thumbnail_url":"https://cdn.jwplayer.com/v2/media/U1b3oYqu/poster.jpg?width=720","topics":["Flow","Anatomy","Export","Step"]} -->

#### Video details

#### At a glance

- **Title:** 41-data-insights-flow-export-step
- **Duration:** 2m 56s
- **Media link:** https://cdn.jwplayer.com/previews/U1b3oYqu
- **Publish date (unix):** 1752897190

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 114019 kbps
- video/mp4 · 180p · 180p · 145635 kbps
- video/mp4 · 270p · 270p · 165555 kbps
- video/mp4 · 360p · 360p · 181215 kbps
- video/mp4 · 406p · 406p · 197042 kbps
- video/mp4 · 540p · 540p · 239339 kbps
- video/mp4 · 720p · 720p · 310447 kbps
- video/mp4 · 1080p · 1080p · 515561 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/U1b3oYqu-120.vtt`

#### Video transcript

From there, we would set up any number of steps, but we'll show an export, which is the final type of step that we support for MVP. This gives you access to all of the different Lytx export types, so there's hundreds and hundreds of them all now available through flow exports as well as custom one-off configuration. Adding an export is pretty simple, you'll just hit export, it'll add our new step, and then we'll click to configure it, and then I'll just click to configure my export. This is going to then take us into the Lytx jobs wizard, which again gives you access to all of the different exports across the entire platform. Just to kind of show those real quick, in our example though, we'll set up just a webhook, it's the easiest one to sort of demonstrate, but it could be an export to your ESP, your email provider, you could do a one-off export to a content stack, you could send to your warehouse, all sorts of different things that you can do with the exports, but in our case we'll just search for webhook, we'll choose webhook, and we'll say we want to do an audience trigger webhook. You can configure your own authorization, we won't actually worry about sending this anywhere important, so we'll just say that the endpoint doesn't require authorization, we'll just call this test webhook, we'll send this to test.com slash test, we'll send a POST request. In our workflow configurations, you can configure any number of options, you can choose which profile attributes to send, all sorts of stuff that aren't specific to flows, but we can come back to at a later date, ultimately though, I'll say this is how I want to configure this particular export, I'll complete the configuration, and it's going to take me back to the canvas and put this export in a draft state. One thing to note for legacy Linux users that is a new feature, traditionally there was no draft state for our jobs, you had to go and set it up and create it and essentially turn it on all in the same motion. With flows, there's actually this new interim draft state, so I can go in here, create a work configuration, and don't have to automatically publish it, so if I wanted to go back in here and edit it, I can go back, edit my details, nothing is live, I can complete it and go back and be able to do that while I'm sort of configuring and figuring out my right particular flow.

#### Key takeaways

- Connect **Flow Anatomy - Export Step** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 09 — Publishing a Flow

<!-- ai_metadata: {"lesson_id":"09","type":"video","duration_seconds":191,"video_url":"https://cdn.jwplayer.com/previews/s7HwhRQ0","thumbnail_url":"https://cdn.jwplayer.com/v2/media/s7HwhRQ0/poster.jpg?width=720","topics":["Publishing","Flow"]} -->

#### Video details

#### At a glance

- **Title:** 42-data-insights-flow-publishing
- **Duration:** 3m 11s
- **Media link:** https://cdn.jwplayer.com/previews/s7HwhRQ0
- **Publish date (unix):** 1752897212

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 114010 kbps
- video/mp4 · 180p · 180p · 139308 kbps
- video/mp4 · 270p · 270p · 154973 kbps
- video/mp4 · 360p · 360p · 163200 kbps
- video/mp4 · 406p · 406p · 172260 kbps
- video/mp4 · 540p · 540p · 195739 kbps
- video/mp4 · 720p · 720p · 232708 kbps
- video/mp4 · 1080p · 1080p · 321582 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/s7HwhRQ0-120.vtt`

#### Video transcript

When, though, I am ready to publish my flow and activate my works or my jobs, there's a couple of different steps. It all starts in this top right corner, actually doubling back to the exports real quick just to not skip any details. You can edit the export configuration with the button in the top right, and then there's a details view that just shows the configuration for that particular job or export that you've configured. Other than that, everything should be pretty consistent throughout the UI. So yeah, so the next step is to ultimately, let's say this flow is perfect, I want to publish it and get it in front of some people. I'm going to go to the top right, which again is our action menu. The only action that I have access to is publish, so I'm going to hit publish. It's going to come through and then do a validation essentially on the flow to tell me things that I need to fix, things that need to be activated. Just for demonstration's sake, if I go in here, for instance, and add a wait condition that isn't configured yet, and then I go to publish, it's going to call out and give you some detail on what things need to be resolved. So in this case, wait and personalize, please provide a valid delay value or condition. As soon as I resolve that, this option goes away. So we'll just delete this real quick, and if I go back to publish now, so the only thing it's prompting me to do is, well, before we publish, we need to activate our jobs. So this is the thing that transitions from the draft state that is net new to an actual runnable state. When we activate it, it's not going to get users pushed to it yet until the flow actually goes live, but it's an interim step to make sure that all of the jobs that you have configured activate. There's not authorization issues, all the things that can come up. So in most cases, that's as simple as just hitting activate. It's going to go through, turn it on. You'll see that the status automatically upgraded to started. So now this job exists in Linux. This is a thing that can run. This is a thing that can accept users and push them downstream to whatever channel and configuration meets those needs. And now also in the top right corner, you'll see that there's no additional sort of configuration validation things to revisit. You did it. You're ready to publish. And publishing the flow to turn it to a running state is as simple as hitting publish. Your bar will turn green at the top to represent the state. The state turns into running. You'll get some confetti to celebrate. And now at this point, if a new email address gets entered, they'll automatically run through this flow or whatever the trigger audience is that you configured. They'll go through the weights, they'll wait for the conditions, and this flow is now totally and completely live. If we go back to the list view, you'll see it show up. So this is our demo walkthrough. So that's kind of all of the steps to creating your first flow end-to-end and all the different various configuration options.

#### Key takeaways

- Connect **Publishing a Flow** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 10 — Flow Versions & State Management

<!-- ai_metadata: {"lesson_id":"10","type":"video","duration_seconds":301,"video_url":"https://cdn.jwplayer.com/previews/ZNGBdHXm","thumbnail_url":"https://cdn.jwplayer.com/v2/media/ZNGBdHXm/poster.jpg?width=720","topics":["Flow","Versions","State","Management"]} -->

#### Video details

#### At a glance

- **Title:** 43-data-insights-flow-state-management
- **Duration:** 5m 1s
- **Media link:** https://cdn.jwplayer.com/previews/ZNGBdHXm
- **Publish date (unix):** 1752897232

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113654 kbps
- video/mp4 · 180p · 180p · 138333 kbps
- video/mp4 · 270p · 270p · 154228 kbps
- video/mp4 · 360p · 360p · 163504 kbps
- video/mp4 · 406p · 406p · 172762 kbps
- video/mp4 · 540p · 540p · 196706 kbps
- video/mp4 · 720p · 720p · 235705 kbps
- video/mp4 · 1080p · 1080p · 326528 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/ZNGBdHXm-120.vtt`

#### Video transcript

The only other things to know are versions become very important. So now that this flow is running, if I want to make a change, I can't actually change a running flow because there's any number of users in any number of states or stages within this particular flow. So at the top, you'll see that I have one version. If I try to make a change, it's going to actually prevent that. So what I'll need to do is I can again go to the action menu and I say, okay, I want to edit this flow. It's going to say, would you like to create a new version of the flow? This will copy all the configuration options and start a new draft. So I'm going to say, yes, I want to do that. It's going to replicate that flow within the same version or within the same sort of context, but it's going to create a new version. So you'll see a couple of different or a couple of important things to note. First at the top, we went back to a draft state. So now there's actually two versions. If I open the version switcher, there's still that first version, version zero that's running. I can switch back to it. I can see what's happening. I can still access my metrics just the way that I did before. Obviously metrics aren't populated until 24 hours. But then additionally, if I switch back to the draft for any exports that were configured, these go back to draft state. So we pull out any of the live configuration things, we put it back into a draft state so that you can go reconfigure and then ultimately republish the job. If I were to, for instance, say I want to add an additional wait node and I want to just say they're going to wait for a day and that's the only change that I wanted to make. Publishing this update is super simple. You just go through the same process. I'll go to publish. It'll say, OK, you still need to reactivate this work because we created it or this export. We created a new version, a new draft. So you still have to confirm that. We'll activate it just like we did the first one. That's the only thing that we have to do here. We'll hit publish. You'll get the confetti again. It'll switch the version. And then one thing to note is if you open the version switcher, you'll see that version zero, which previously was in a running state, transitions into a draining state. So the ways that flows work is there's three different statuses. There's draining, which means that users can no longer enter the flow. But for anybody that's already in the flow, they're going to continue their process through that flow until they complete. So for instance, if you had a wait stage here and there were 100 users that have already made it through here and got an export and hit that wait stage, then you created a new version. It's not going to kick them out mid flow. We don't want to make the experience that they get kind of clunky and start to resend messages. We want to let them complete that flow run and then exit. But we want to prevent anybody new from going into the old flow. They'll automatically start to go through the new version. As soon as everybody exits the draining flow, those ultimately get cleaned up over time. I think that is all there is on versions. If you want to create another draft, for instance, you'll see that now there's three versions. There's the 0.0 draining, 1.0 running, and 2.0 draft. From here, if I want to delete a specific version, for instance, this draft version, I can do so by just selecting delete version. Likewise, if I want to delete the entire flow, it's going to delete all three of those versions. Very important to know that you can't come back from that. There's no sort of recreate or pullback or undo or trash bin. Once you delete a flow, the flow is gone. The metrics and that kind of stuff still technically live in the metrics database, but accessing them is going to be very, very difficult. So you only want to delete a flow when you're totally certain that you want that flow to be gone forever. I think the only other thing that we didn't touch on is renaming the flow is also simple and available at the top. So you could just change the label up here, hit save. It's going to save that to the draft. You can zoom in and out with the canvas with the mouse wheel. You can just click and drag to reposition it. Anything that isn't allowed. So if you try to go and, for instance, delete a step that has other steps that are dependent, it's going to prompt you and say you're unable to delete that step. In order to do that, you have to delete the other steps. This is one of the things that we're looking to add in the semi-near term is the ability to insert a new step. So let's say I come back to this flow. I want to add an export between this weight and this conditional split. Not available today, but that's one of the things that we'll be working on is a little button that you can click to essentially insert a flow so that you don't have to delete a whole bunch of steps to re-add a step to then re-add all of those steps. That's a little bit clunky.

#### Key takeaways

- Connect **Flow Versions & State Management** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 11 — Creating Custom Templates

<!-- ai_metadata: {"lesson_id":"11","type":"video","duration_seconds":94,"video_url":"https://cdn.jwplayer.com/previews/E04KWtDw","thumbnail_url":"https://cdn.jwplayer.com/v2/media/E04KWtDw/poster.jpg?width=720","topics":["Creating","Custom","Templates"]} -->

#### Video details

#### At a glance

- **Title:** 44-data-insights-flow-templates
- **Duration:** 1m 34s
- **Media link:** https://cdn.jwplayer.com/previews/E04KWtDw
- **Publish date (unix):** 1752897269

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 114001 kbps
- video/mp4 · 180p · 180p · 141615 kbps
- video/mp4 · 270p · 270p · 158078 kbps
- video/mp4 · 360p · 360p · 163517 kbps
- video/mp4 · 406p · 406p · 173030 kbps
- video/mp4 · 540p · 540p · 199520 kbps
- video/mp4 · 720p · 720p · 241376 kbps
- video/mp4 · 1080p · 1080p · 348392 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/E04KWtDw-120.vtt`

#### Video transcript

If I hit create new from the flows list, this is where you'll see all of the pre-configured templates. Likewise, if you switch over to your templates, you'll see the templates that you've been stored that are account specific. So creating a template is super easy. You'll just hit create a template. You'll name your template, let's say demo one, this is a description. And then once you actually hit save and configure, it's just going to take you into the flow canvas where you can configure your template to say and do whatever you would like. And then it's going to automatically save just like a flow. The only difference is now when you come back here and you have my templates, you'll have demo one and then I'll be able to click this. It'll prompt me, show the description, show the name, but if I were to create a flow now with that template, we'll say create flow, it'll pre-populate with the configuration steps that we just configured. So super nice way for customers to build their own templates to their liking so that they can create repeatable processes around their audience or extrusion.

#### Key takeaways

- Connect **Creating Custom Templates** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 12 — Data Insights: Flows Quiz

<!-- ai_metadata: {"lesson_id":"12","type":"text","duration_minutes":1,"topics":["LMS","Knowledge check"]} -->

#### Lesson text

**This lesson is a knowledge check hosted in the Academy LMS.** This companion Markdown contains **no quiz questions, answers, scoring rules, or explanations**.

#### Key takeaways

- Connect **Data Insights: Flows Quiz** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

## Resources & references

| Page | Companion Markdown |
| --- | --- |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--what-is-a-flow | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--what-is-a-flow.md |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flows-course-overview | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flows-course-overview.md |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--example-end-to-end-with-flows | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--example-end-to-end-with-flows.md |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--creating-a-flow | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--creating-a-flow.md |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flow-anatomy-trigger-step | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flow-anatomy-trigger-step.md |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flow-anatomy-wait-personalize-step | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flow-anatomy-wait-personalize-step.md |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flow-anatomy-conditional-split-step | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flow-anatomy-conditional-split-step.md |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flow-anatomy-export-step | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flow-anatomy-export-step.md |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--publishing-a-flow | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--publishing-a-flow.md |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flow-versions-state-management | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--flow-versions-state-management.md |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--creating-custom-templates | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--creating-custom-templates.md |
| /courses/data-insights-automating-journeys-with-flows/data-insights-course-5--quiz | /academy/md/courses/data-insights-automating-journeys-with-flows/data-insights-course-5--quiz.md |

## Supplement for indexing

### Content summary

This course provides comprehensive training on Lytics' visual workflow system for managing complex customer journeys. You'll learn to orchestrate multi-step marketing processes with conditional logic, timing controls, an… This course provides comprehensive training on Lytics' visual workflow system for managing complex customer journeys. You'll learn to orchestrate multi-step marketing processes with conditional logic, timing controls, and cross-channel activation. What You'll Learn This session teaches you to design and implement sophisticated customer journey workflows using Flows. You'll master the visual workflow system to create automated, personalized experiences that guide customers through complex multi-step processes. What We'll Cover We'll begin with Flow fundamentals, showing how they unify segmentation, triggers, and channel activation into a single visual canvas. You'll learn to create Flows from templates or build custom workflows from scratch, starting with trigger step configuration including audience-based entry conditions and reentry se

### Retrieval tags

- Contentstack Academy
- data-insights-automating-journeys-with-flows
- What
- Flow
- Flows
- Course
- Overview
- Example
- End
- Creating
- Anatomy
- Trigger
- Step
- Wait

### Indexing notes

Chunk at each "### Lesson NN — Title" heading; copy lesson_id and topics from the preceding HTML comment into chunk metadata for RAG filters.
Course slug: data-insights-automating-journeys-with-flows. Union of lesson topic tokens: What, Flow, Flows, Course, Overview, Example, End, end, Creating, Anatomy, Trigger, Step, Wait, Personalize, Conditional, Split, Export, Publishing, Versions, State, Management, Custom, Templates, Data, Insights, Quiz.
Do not embed or retrieve LMS-only quiz items or mastery exam answer keys from this export.

### Asset references

| Label | URL |
| --- | --- |
| Video thumbnail: What is a Flow? | `https://cdn.jwplayer.com/v2/media/RARB2o9U/poster.jpg?width=720` |
| Video thumbnail: Flows Course Overview | `https://cdn.jwplayer.com/v2/media/nlzD4kMz/poster.jpg?width=720` |
| Video thumbnail: Example: End-to-end w/ Flows | `https://cdn.jwplayer.com/v2/media/adRsOgB6/poster.jpg?width=720` |
| Video thumbnail: Creating a Flow | `https://cdn.jwplayer.com/v2/media/JrnTw0lK/poster.jpg?width=720` |
| Video thumbnail: Flow Anatomy - Trigger Step | `https://cdn.jwplayer.com/v2/media/ZpRe4a8P/poster.jpg?width=720` |
| Video thumbnail: Flow Anatomy - Wait & Personalize Step | `https://cdn.jwplayer.com/v2/media/RaIxRHG8/poster.jpg?width=720` |
| Video thumbnail: Flow Anatomy - Conditional Split Step | `https://cdn.jwplayer.com/v2/media/NNt30s3E/poster.jpg?width=720` |
| Video thumbnail: Flow Anatomy - Export Step | `https://cdn.jwplayer.com/v2/media/U1b3oYqu/poster.jpg?width=720` |
| Video thumbnail: Publishing a Flow | `https://cdn.jwplayer.com/v2/media/s7HwhRQ0/poster.jpg?width=720` |
| Video thumbnail: Flow Versions & State Management | `https://cdn.jwplayer.com/v2/media/ZNGBdHXm/poster.jpg?width=720` |
| Video thumbnail: Creating Custom Templates | `https://cdn.jwplayer.com/v2/media/E04KWtDw/poster.jpg?width=720` |

### External links

| Label | URL |
| --- | --- |
| Contentstack Academy home | `https://www.contentstack.com/academy/` |
| Training instance setup | `https://www.contentstack.com/academy/training-instance` |
| Academy playground (GitHub) | `https://github.com/contentstack/contentstack-academy-playground` |
| Contentstack documentation | `https://www.contentstack.com/docs/` |
