Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion en/asgardeo/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ mkdocs-exclude==1.0.2
markdown-include==0.8.1
jinja2==3.1.6
mkdocs-glightbox==0.3.4
mkdocs-include-markdown-plugin==6.0.0
mkdocs-include-markdown-plugin>=6.0.0
mkdocs-macros-plugin==1.2.0
mkdocs-exclude==1.0.2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{% include "../../../../../includes/guides/flows/flow-execution-api.md" %}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{% include "../../../../../includes/guides/flows/flow-execution-components.md" %}
2 changes: 2 additions & 0 deletions en/identity-server/next/mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,8 @@ nav:
- Self Registration: guides/flows/self-registration.md
- Password Recovery: guides/flows/password-recovery.md
- Invited User Registration: guides/flows/invited-user-registration.md
- Use the Flow Execution API: guides/flows/flow-execution-api.md
- Understand Flow Execution components: guides/flows/flow-execution-components.md
- Troubleshooting: guides/flows/troubleshooting.md
- User self-service:
- User self-service: guides/user-self-service/index.md
Expand Down
2 changes: 1 addition & 1 deletion en/identity-server/next/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ mkdocs-exclude==1.0.2
markdown-include==0.8.1
jinja2==3.1.6
mkdocs-glightbox==0.3.4
mkdocs-include-markdown-plugin==6.0.0
mkdocs-include-markdown-plugin>=6.0.0
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify version compatibility for mkdocs-include-markdown-plugin.

Relaxing the constraint from ==6.0.0 to >=6.0.0 allows any version at 6.0.0 or later. Without an upper bound, this could introduce incompatibilities if future versions introduce breaking changes. The new documentation files depend on this plugin's include functionality.


🌐 Web query:

What are the latest versions of mkdocs-include-markdown-plugin and their release notes?

💡 Result:

Latest release: v7.2.0 — released Sep 28, 2025. Change summary: "Add new argument order to sort multiple inclusions." [1][2]

Previous notable release: v7.1.8 — released Sep 26, 2025. Change summary: "Escape substitution placeholders to prevent malformed output in edge cases" (security/bug fix). [1][3]

Sources:

  • GitHub releases (mondeja/mkdocs-include-markdown-plugin). [1]
  • PyPI release page for mkdocs-include-markdown-plugin (shows uploaded files). [2]

References:
[1] https://github.com/mondeja/mkdocs-include-markdown-plugin/releases (v7.2.0, v7.1.8).
[2] https://pypi.org/project/mkdocs-include-markdown-plugin/ (release files).
[3] GHSA/CVE advisory and release note on GitHub (v7.1.8 fix).


I need to verify whether there are breaking changes between v6.0.0 and v7.x.x, since the major version bump suggests potential incompatibilities.


🏁 Script executed:

#!/bin/bash
# Check GitHub API for release notes between v6.0.0 and v7.2.0
curl -s 'https://api.github.com/repos/mondeja/mkdocs-include-markdown-plugin/releases?per_page=50' | \
  python3 -c "
import json, sys
data = json.load(sys.stdin)
print('Recent releases:')
for release in data[:20]:
    print(f\"  {release['tag_name']}: {release['name'] or release['body'][:100]}\")
" 2>/dev/null || echo "API query completed"

Length of output: 356


🏁 Script executed:

#!/bin/bash
# Get full release notes for v7.0.0 to check for breaking changes
curl -s 'https://api.github.com/repos/mondeja/mkdocs-include-markdown-plugin/releases/tags/v7.0.0' | \
  python3 -c "
import json, sys
data = json.load(sys.stdin)
print('v7.0.0 Release Notes:')
print(data.get('body', 'No release notes available'))
" 2>/dev/null

Length of output: 1241


Specify an upper version bound for mkdocs-include-markdown-plugin to prevent breaking changes.

v7.0.0 introduced breaking changes including comments turned off by default (previously true) and indented code block formatting requirements that must conform to CommonMark specification. The relaxed constraint >=6.0.0 allows installation of v7.x.x, which could break documentation builds if those features are relied upon.

Recommend either:

  • Change constraint to >=6.0.0,<7.0.0 to pin to v6.x releases, or
  • Verify the new documentation is compatible with v7.x and update the constraint accordingly
🤖 Prompt for AI Agents
In en/identity-server/next/requirements.txt at line 14, the dependency
mkdocs-include-markdown-plugin is allowed as ">=6.0.0" which permits v7.x and
its breaking changes; restrict the version range to prevent accidental upgrade
to v7 (e.g., change to ">=6.0.0,<7.0.0") unless you've audited and updated docs
to be compatible with v7, in which case explicitly set the tested v7 constraint
or keep a tighter pinned range.

222 changes: 222 additions & 0 deletions en/includes/guides/flows/flow-execution-api.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
# Use the Flow Execution API

Check warning on line 1 in en/includes/guides/flows/flow-execution-api.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [WSO2-IAM.SentenceStyleTitles] 'Use the Flow Execution API' should use sentence-style capitalization. Raw Output: {"message": "[WSO2-IAM.SentenceStyleTitles] 'Use the Flow Execution API' should use sentence-style capitalization.", "location": {"path": "en/includes/guides/flows/flow-execution-api.md", "range": {"start": {"line": 1, "column": 3}}}, "severity": "INFO"}

Use the Flow Execution API to run user journeys that you design in the Flow Builder of {{product_name}} directly from your client application. The API returns every step in the flow so that you can render the right experience without embedding the hosted Flow Runner UI.
Copy link

Copilot AI Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The first sentence exceeds the 20-25 word guideline. Consider splitting it: 'Use the Flow Execution API to run user journeys that you design in the Flow Builder. The API lets you execute flows directly from your client application.'

Copilot generated this review using guidance from repository custom instructions.

!!! info
The Flow Execution API is exposed at `{{base_path}}/api/server/v1/flow/execute`. This endpoint is open and does not require an authorization header. Always call it over HTTPS to safeguard the flow data exchanged.

Check failure on line 6 in en/includes/guides/flows/flow-execution-api.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [Microsoft.Contractions] Use 'doesn't' instead of 'does not'. Raw Output: {"message": "[Microsoft.Contractions] Use 'doesn't' instead of 'does not'.", "location": {"path": "en/includes/guides/flows/flow-execution-api.md", "range": {"start": {"line": 6, "column": 112}}}, "severity": "ERROR"}

Check warning on line 6 in en/includes/guides/flows/flow-execution-api.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [Microsoft.Passive] 'is exposed' looks like passive voice. Raw Output: {"message": "[Microsoft.Passive] 'is exposed' looks like passive voice.", "location": {"path": "en/includes/guides/flows/flow-execution-api.md", "range": {"start": {"line": 6, "column": 28}}}, "severity": "INFO"}

Check warning on line 6 in en/includes/guides/flows/flow-execution-api.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [write-good.Passive] 'is exposed' may be passive voice. Use active voice if you can. Raw Output: {"message": "[write-good.Passive] 'is exposed' may be passive voice. Use active voice if you can.", "location": {"path": "en/includes/guides/flows/flow-execution-api.md", "range": {"start": {"line": 6, "column": 28}}}, "severity": "WARNING"}

Check warning on line 6 in en/includes/guides/flows/flow-execution-api.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [write-good.E-Prime] Try to avoid using 'is'. Raw Output: {"message": "[write-good.E-Prime] Try to avoid using 'is'.", "location": {"path": "en/includes/guides/flows/flow-execution-api.md", "range": {"start": {"line": 6, "column": 28}}}, "severity": "INFO"}

The API drives the flow in a loop:

1. Start the flow by creating a new execution instance.
2. Interpret the `type` in each response and guide the user through the required step.
3. Post the user input or action result back to the same endpoint until the server returns `flowStatus: COMPLETE`.

## Before you begin

- [Build and enable the flow]({{base_path}}/guides/flows/build-a-flow/) that you want to expose through your app.
- Decide how your client persists the `flowId` between requests. Treat it as sensitive data because anyone with the `flowId` can continue the flow.
Copy link

Copilot AI Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This sentence exceeds the 20-25 word guideline. Split into two sentences: 'Decide how your client persists the flowId between requests. Treat it as sensitive data. Anyone with the flowId can continue the flow.'

Copilot generated this review using guidance from repository custom instructions.

## Start a flow execution

Call `POST /flow/execute` with the `flowType` of the flow that should be executed.

=== "Sample request"

```bash
curl --location '{{api_base_path}}/flow/execute' \
--header 'Content-Type: application/json' \
--data '{
"flowType": "<Flow Type>"
}'
```

=== "Example request"

```bash
curl --location 'https://localhost:9443/api/server/v1/flow/execute' \
--header 'Content-Type: application/json' \
--data '{
"flowType": "REGISTRATION"
}'
```

The value for `flowType` must match a flow that is enabled in your tenant.

Check failure on line 43 in en/includes/guides/flows/flow-execution-api.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [Microsoft.Contractions] Use 'that's' instead of 'that is'. Raw Output: {"message": "[Microsoft.Contractions] Use 'that's' instead of 'that is'.", "location": {"path": "en/includes/guides/flows/flow-execution-api.md", "range": {"start": {"line": 43, "column": 44}}}, "severity": "ERROR"}

| `flowType` value | Description |
|------------------|-------------|
| `REGISTRATION` | Self-registration flow. |
| `PASSWORD_RECOVERY` | Password recovery flow. |
| `INVITED_USER_REGISTRATION` | Invite user to register flow. |

=== "Example response"

```json
{
"flowId": "c8e06de8-7123-44ac-8209-02be5b55387e",
"flowType": "REGISTRATION",
"flowStatus": "INCOMPLETE",
"type": "VIEW",
"data": {
"components": [
{
"id": "form_1",
"type": "FORM",
"components": [
{
"id": "email",
"type": "INPUT",
"variant": "EMAIL",
"config": {
"identifier": "email",
"label": "Email",
"required": true
}
},
{
"id": "password",
"type": "INPUT",
"variant": "PASSWORD",
"config": {
"identifier": "password",
"label": "Password",
"required": true
}
},
{
"id": "submit",
"type": "BUTTON",
"actionId": "submit-registration",
"variant": "PRIMARY",
"config": {
"text": "Continue"
}
}
]
}
],
"requiredParams": [
"email",
"password"
]
}
}
```

- `flowId` uniquely identifies the execution instance. Persist it securely and include it in every subsequent call to the API.
Copy link

Copilot AI Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This sentence exceeds the 20-25 word guideline. Split into two sentences: 'flowId uniquely identifies the execution instance. Persist it securely. Include it in every subsequent call to the API.'

Copilot generated this review using guidance from repository custom instructions.
- `flowStatus` indicates the current status of the flow. Valid values are `INCOMPLETE` and `COMPLETE`.
- `type` determines how your client should proceed. The `data` object contains the payload that is specific to the `type`.

Check failure on line 107 in en/includes/guides/flows/flow-execution-api.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [Microsoft.Contractions] Use 'that's' instead of 'that is'. Raw Output: {"message": "[Microsoft.Contractions] Use 'that's' instead of 'that is'.", "location": {"path": "en/includes/guides/flows/flow-execution-api.md", "range": {"start": {"line": 107, "column": 92}}}, "severity": "ERROR"}
- `components` describe the UI blueprint for the step. See [Understand Flow Execution components]({{base_path}}/guides/flows/flow-execution-components/) for details.
Copy link

Copilot AI Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoid using passive verb 'describe'. Rewrite as: 'components provide the UI blueprint for the step.'

Copilot generated this review using guidance from repository custom instructions.

### Response types

| `type` | When you receive it | Expected client action | Typical data fields |
|--------|---------------------|------------------------|---------------------|
| `VIEW` | The server needs the user to interact with a UI form, list, or confirmation step. | Render the view described in `data.components`, capture user input, and send it back with the provided action identifier. | `components`, `requiredParams` |
| `REDIRECTION` | A third-party system must complete part of the flow (for example, identity verification or payment). | Redirect the browser or web view to `data.url` and resume the flow from your callback endpoint. | `url` |
| `WEBAUTHN` | The user must complete a WebAuthn ceremony. | Call `navigator.credentials.{create|get}` with the information in `data.publicKeyCredentialCreation` or `data.publicKeyCredentialRequest`, then submit the encoded response. | `publicKeyCredentialCreation` |

Check failure on line 116 in en/includes/guides/flows/flow-execution-api.md

View workflow job for this annotation

GitHub Actions / lint

Table column count

en/includes/guides/flows/flow-execution-api.md:116:235 MD056/table-column-count Table column count [Expected: 4; Actual: 5; Too many cells, extra data will be missing] https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md056.md
| `INTERNAL_PROMPT` | The client app, not the end user, must respond. | Call the API with the requested parameters. | `requiredParams` |
Comment on lines +112 to +117
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

BLOCKER: Fix markdown lint error MD056 - table column count mismatch.

The pipeline reports that line 116 has 5 cells but only 4 columns are defined in the header. The table appears to have 4 columns visually, but the linter is detecting a mismatch. This must be resolved before merge.

Verify the table format and ensure all row cells match the header column count:

| `type` | When you receive it | Expected client action | Typical data fields |
|--------|---------------------|------------------------|---------------------|
| `VIEW` | ... | ... | ... |
| `REDIRECTION` | ... | ... | ... |
| `WEBAUTHN` | ... | ... | ... |
| `INTERNAL_PROMPT` | ... | ... | ... |

Ensure there are exactly 4 pipe-separated cells in each row.

🧰 Tools
🪛 GitHub Actions: Markdown Lint

[error] 116-116: markdownlint MD056: Table column count [Expected: 4; Actual: 5; Too many cells, extra data will be missing] in en/includes/guides/flows/flow-execution api.md:116

🪛 GitHub Check: lint

[failure] 116-116: Table column count
en/includes/guides/flows/flow-execution-api.md:116:235 MD056/table-column-count Table column count [Expected: 4; Actual: 5; Too many cells, extra data will be missing] https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md056.md

🤖 Prompt for AI Agents
en/includes/guides/flows/flow-execution-api.md lines 112-117: the WEBAUTHN table
row is being parsed as 5 cells because the code span
navigator.credentials.{create|get} contains an unescaped pipe; fix the row so
each row has exactly four pipe-separated cells by removing or escaping the pipe
inside the code span (e.g., use "create or get" or replace '|' with &#124; or
otherwise ensure the code cell contains no unescaped '|'), then verify all other
rows have exactly four cells.


## Continue a flow execution

After executing the user action, call the same endpoint with the `flowId` and the data that corresponds to the step you just completed.

### Submit a view

When the response `type` is `VIEW`, locate the component that exposes an `actionId` (for example, the primary button) and use that identifier when you submit the user's input.

```bash
curl --location '{{api_base_path}}/flow/execute' \
--header 'Content-Type: application/json' \
--data '{
"flowId": "c8e06de8-7123-44ac-8209-02be5b55387e",
"actionId": "submit-registration",
"params": {
"email": "[email protected]",
"password": "MyP@ssw0rd!"
}
}'
```

- If the API returns validation `messages`, render them in your UI and prompt the user to correct the input before resubmitting.

### Resume after a redirect

When you receive `type: "REDIRECTION"`:

1. Redirect the user agent to `data.url`.
2. Handle the callback at the `returnUrl` that you registered in Flow Builder. The callback contains the `flowId` (and any provider-specific data such as `code` or `state`).
Copy link

Copilot AI Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This sentence exceeds the 20-25 word guideline. Split into two sentences: 'Handle the callback at the returnUrl that you registered in Flow Builder. The callback contains the flowId and any provider-specific data such as code or state.'

Copilot generated this review using guidance from repository custom instructions.
3. Call `/flow/execute` with the same `flowId`, the proper `actionId`, and the callback parameters in the `params` payload.

```json
{
"flowId": "5f31ce20-872d-4334-8f9f-3572710dbc57",
"actionId": "federation-complete",
"params": {
"code": "4/0AfJohX...",
"state": "g5kZMl"
}
}
```

### Complete a WebAuthn ceremony

For `type: "WEBAUTHN"`:

1. Extract `data.publicKeyCredentialCreation`.
2. Call the WebAuthn browser APIs.
3. Base64url-encode the resulting credential and post it back in the `params` object under the key listed in `requiredParams`.

```json
{
"flowId": "5f31ce20-872d-4334-8f9f-3572710dbc57",
"actionId": "passkey-finish",
"params": {
"tokenResponse": "eyJpZCI6IjR..."
}
}
```

### Handle internal prompts

For `type: "INTERNAL_PROMPT"`, inspect `data.requiredParams` to determine the values you must provide. This type is typically used for steps such as sending a magic link or triggering an action.
Copy link

Copilot AI Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The second sentence exceeds the 20-25 word guideline. Rewrite more concisely: 'This type handles steps such as sending a magic link or triggering an action.'

Copilot generated this review using guidance from repository custom instructions.

```json
{
"flowId": "5f31ce20-872d-4334-8f9f-3572710dbc57",
"actionId": "send-notification",
"params": {
"origin": "mobile-app",
"deviceId": "3e83f937-4ad0-4a67-a920-7e5af338c9ed"
}
}
```

## Complete a flow

The API signals the outcome in `flowStatus`.

- `COMPLETE`: The flow finished successfully. The `data` object contains the outcome of the flow (for example, a `userId` or `resetTicket`). Use it to move the application forward.
Copy link

Copilot AI Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This contains multiple sentences that together exceed the guideline. Break into separate bullet points or shorter sentences for better scannability.

Copilot generated this review using guidance from repository custom instructions.
- `INCOMPLETE`: More steps remain. Continue looping.

```json
{
"flowId": "5f31ce20-872d-4334-8f9f-3572710dbc57",
"flowStatus": "COMPLETE",
"flowType": "REGISTRATION",
"data": {
"userId": "00d9b675-9da3-4fa6-9ef4-1a61ac6e9788"
}
}
```

## Error handling and resilience

- Always guard the `flowId` and never log it in plain text.
- Use exponential backoff for transient network errors. Do not retry requests that returned validation errors.

Check failure on line 215 in en/includes/guides/flows/flow-execution-api.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [Microsoft.Contractions] Use 'don't' instead of 'Do not'. Raw Output: {"message": "[Microsoft.Contractions] Use 'don't' instead of 'Do not'.", "location": {"path": "en/includes/guides/flows/flow-execution-api.md", "range": {"start": {"line": 215, "column": 57}}}, "severity": "ERROR"}
- Capture the `messages` array and present it to the user for troubleshooting.

## Next steps

- Review the flow-specific guides for additional design examples: [Self-registration]({{base_path}}/guides/flows/self-registration/), [Password recovery]({{base_path}}/guides/flows/password-recovery/), and [Invited user registration]({{base_path}}/guides/flows/invited-user-registration/).
- Dive deeper into the response schema in [Understand Flow Execution components]({{base_path}}/guides/flows/flow-execution-components/).
- If you need to embed the hosted UI instead of building your own components, see [Build a flow]({{base_path}}/guides/flows/build-a-flow/).
67 changes: 67 additions & 0 deletions en/includes/guides/flows/flow-execution-components.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Understand Flow Execution components

Check warning on line 1 in en/includes/guides/flows/flow-execution-components.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [WSO2-IAM.SentenceStyleTitles] 'Understand Flow Execution components' should use sentence-style capitalization. Raw Output: {"message": "[WSO2-IAM.SentenceStyleTitles] 'Understand Flow Execution components' should use sentence-style capitalization.", "location": {"path": "en/includes/guides/flows/flow-execution-components.md", "range": {"start": {"line": 1, "column": 3}}}, "severity": "INFO"}

When the Flow Execution API returns `type: "VIEW"`, the response includes a `data.components` array. Each entry describes how your client should render the current step in the flow.

## Component structure

Every component shares the following core properties:

| Field | Description |
|-------|-------------|
| `id` | Stable identifier of the component within the current step. |
| `type` | The UI element category (for example, `FORM`, `INPUT`, `BUTTON`, `TYPOGRAPHY`, or `RICH_TEXT`). |
| `variant` | Optional modifier that distinguishes subtypes (for example, `EMAIL` or `PASSWORD` for inputs). |
| `config` | A map of properties specific to the component type, such as labels, placeholders, validation rules, or button text. |
| `components` | (For container types such as `FORM` or `SECTION`) Children that should be rendered inside the container. |

Check warning on line 15 in en/includes/guides/flows/flow-execution-components.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [write-good.E-Prime] Try to avoid using 'be'. Raw Output: {"message": "[write-good.E-Prime] Try to avoid using 'be'.", "location": {"path": "en/includes/guides/flows/flow-execution-components.md", "range": {"start": {"line": 15, "column": 89}}}, "severity": "INFO"}

Check warning on line 15 in en/includes/guides/flows/flow-execution-components.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [Microsoft.Passive] 'be rendered' looks like passive voice. Raw Output: {"message": "[Microsoft.Passive] 'be rendered' looks like passive voice.", "location": {"path": "en/includes/guides/flows/flow-execution-components.md", "range": {"start": {"line": 15, "column": 89}}}, "severity": "INFO"}

Check warning on line 15 in en/includes/guides/flows/flow-execution-components.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [write-good.Passive] 'be rendered' may be passive voice. Use active voice if you can. Raw Output: {"message": "[write-good.Passive] 'be rendered' may be passive voice. Use active voice if you can.", "location": {"path": "en/includes/guides/flows/flow-execution-components.md", "range": {"start": {"line": 15, "column": 89}}}, "severity": "WARNING"}

## Inputs and identifiers

Input components expose an `identifier` in `config`. Use this value as the key when you send user data back to `/flow/execute`. The server lists the expected keys under `data.requiredParams`.

```json
{
"id": "email",
"type": "INPUT",
"variant": "EMAIL",
"config": {
"identifier": "email",
"label": "Email",
"required": true
}
}
```

## Actions and `actionId`

Interactive components, such as primary buttons, provide an `actionId`. Echo this value in the `actionId` field when you continue the flow.

```json
{
"id": "submit",
"type": "BUTTON",
"actionId": "submit-registration",
"variant": "PRIMARY",
"config": {
"text": "Continue"
}
}
```

If multiple actions are available, the response can contain more than one component with an `actionId`. Present them to the user and pass the matching identifier depending on the option selected.

Check warning on line 50 in en/includes/guides/flows/flow-execution-components.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [write-good.E-Prime] Try to avoid using 'are'. Raw Output: {"message": "[write-good.E-Prime] Try to avoid using 'are'.", "location": {"path": "en/includes/guides/flows/flow-execution-components.md", "range": {"start": {"line": 50, "column": 21}}}, "severity": "INFO"}

Check warning on line 50 in en/includes/guides/flows/flow-execution-components.md

View workflow job for this annotation

GitHub Actions / Vale style check

[vale] reported by reviewdog 🐶 [write-good.TooWordy] 'multiple' is too wordy. Raw Output: {"message": "[write-good.TooWordy] 'multiple' is too wordy.", "location": {"path": "en/includes/guides/flows/flow-execution-components.md", "range": {"start": {"line": 50, "column": 4}}}, "severity": "WARNING"}

## Validation rules

Some inputs include a `validations` array within `config`. Each entry describes a rule the client can use to provide early feedback before calling the API.

```json
{
"type": "RULE",
"name": "LengthValidator",
"conditions": [
{ "key": "min.length", "value": "8" },
{ "key": "max.length", "value": "64" }
]
}
```

Your client can choose to enforce these rules locally or rely on server-side validation. Regardless of local handling, always submit the user input back to the Flow Execution API to progress the flow.
1 change: 1 addition & 0 deletions en/includes/guides/flows/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@

Building with starter templates, widgets, and other components provides complete control over how users interact with the application, all without writing complex code.

## Start building flows

Check failure on line 15 in en/includes/guides/flows/index.md

View workflow job for this annotation

GitHub Actions / lint

Headings should be surrounded by blank lines

en/includes/guides/flows/index.md:15 MD022/blanks-around-headings Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Start building flows"] https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md022.md
For specific examples of building flows, refer to [Self-registration]({{base_path}}/guides/flows/self-registration/), [Password recovery]({{base_path}}/guides/flows/password-recovery/), and [Invited user registration]({{base_path}}/guides/flows/invited-user-registration/). To execute the flows from a custom client application, see [Use the Flow Execution API]({{base_path}}/guides/flows/flow-execution-api/) and explore the view schema in [Understand Flow Execution components]({{base_path}}/guides/flows/flow-execution-components/).
Copy link

Copilot AI Nov 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This sentence exceeds the 20-25 word guideline and is difficult to scan. Split into two separate sentences or use a bulleted list to improve readability.

Copilot generated this review using guidance from repository custom instructions.

- To learn the fundamentals of building a flow, refer to the [get started]({{base_path}}/guides/flows/build-a-flow/) guide.
- For detailed examples of specific use cases, see the guides on [Self registration]({{base_path}}/guides/flows/self-registration/), [Password recovery]({{base_path}}/guides/flows/password-recovery/) and [Invited user registration]({{base_path}}/guides/flows/invited-user-registration/).
Expand Down
Loading