---
title: Prompt stage
slug: prompt-stage
description: Learn about different prompt types and their attributes for application development. Explore options like text, password, dropdown, and more. Understand the essential prompt attributes such as field_key, label, and required. Discover how to use policies f
docTags: 
createdAt: 2023-07-19T12:45:55.996Z
---

## Prompt types and attributes

The prompt can be any of the following types:

| **Type**                | **Description**                                                                            |
| ----------------------- | ------------------------------------------------------------------------------------------ |
| `Text`                  | Arbitrary text. No client-side validation is done.                                         |
| `Text (Read only)`      | Same as above, but cannot be edited.                                                       |
| `Text Area`             | Arbitrary multiline text. No client-side validation is done.                               |
| `Text Area (Read only)` | Same as above, but cannot be edited.                                                       |
| `Username`              | Same as text, except the username is validated to be unique.                               |
| `Email`                 | Text input, ensures the value is an email address (validation is only done client-side).   |
| `Password`              | Same as text, shown as a password field client-side, and custom validation (see below).    |
| `Number`                | Numerical textbox.                                                                         |
| `Checkbox`              | Simple checkbox.                                                                           |
| `Radio Button Group`    | Similar to checkboxes, but allows selecting a value from a set of predefined values.       |
| `Dropdwon`              | A simple dropdown menu filled with predefined values.                                      |
| `Date`                  | Same as text, except the client renders a date-picker                                      |
| `Date-time`             | Same as text, except the client renders a date-time-picker                                 |
| `File`                  | Allow users to upload a file, which will be available as base64-encoded data in the flow . |
| `Separator`             | Passive element to group surrounding elements                                              |
| `Hidden`                | Hidden input field. Allows for the pre-setting of default values.                          |
| `Static`                | Display arbitrary value as is                                                              |
| `authentik: Locale`     | Display a list of all locales authentik supports.                                          |

The prompt has the following attributes:

| **Attribute**   | **Description**                                                                                                  |
| --------------- | ---------------------------------------------------------------------------------------------------------------- |
| `field_key`     | The field name used for the prompt                                                                               |
| `label`         | The label used to describe the field                                                                             |
| `required`      | A flag which decides whether or not this field is required                                                       |
| `placeholder`   | A field placeholder shown with the input field                                                                   |
| `initial_value` | The prompt's initial value. It can also be left empty, in which case the field will not have a pre-filled value. |
| `order`         | The numerical index of the prompt. This applies to all stages which this prompt is a part of.                    |

## Validation

Policies can be used to perform further validation. As an example, to validate that two password fields are identical, you can create the following expression policy:

```yaml
if request.context.get('prompt_data').get('password') == request.context.get('prompt_data').get('password_repeat'):
    return True

ak_message("Passwords don't match.")
return Falsel
```

