Workflows: Configuration modal views

Configuration modals are used in Workflow Builder during the addition of steps from apps

To define these modals, apps create view objects β€” packages of information that describe layout, interactivity, and other useful metadata.

Configuration view objects are used within the following Web API methods:

Configuration modals are used just like regular modals, with a few differences.

Below is a reference of all the possible fields within a configuration view object:


Field Type Required? Description
type String Yes The type of view. Always set to workflow_step
blocks Array Yes An array of blocks that defines the content of the view. Max of 100 blocks.
private_metadata String No An optional string that will be sent to your app in view_submission and block_actions events. Max length of 3000 characters.
callback_id String No An identifier to recognize interactions and submissions of this particular view. Don't use this to store sensitive information (use private_metadata instead). Max length of 255 characters.
submit_disabled Boolean No When set to true, disables the submit button until the user has completed one or more inputs.
external_id or view_id string Yes A unique identifier of the view set by the developer. Must be unique for all views on a team. Max length of 255 characters. Note: only one of either view_id or external_id is required.

If you use non-standard characters (including characters with diacritics), please be aware that these are converted and sent in unicode format when you receive the view callback payloads.


A configuration modal view:

  "type": "workflow_step",
  "blocks": [
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "It's Block Kit...but _in a modal_"
      "block_id": "section1",
      "accessory": {
        "type": "button",
        "text": {
          "type": "plain_text",
          "text": "Click me"
        "action_id": "button_abc",
        "value": "Button value",
        "style": "danger"
      "type": "input",
      "label": {
        "type": "plain_text",
        "text": "Input label"
      "element": {
        "type": "plain_text_input",
        "action_id": "input1",
        "placeholder": {
          "type": "plain_text",
          "text": "Type in here"
        "multiline": false
      "optional": false
  "private_metadata": "Shhhhhhhh",
  "callback_id": "view_identifier_12"

Was this page helpful?