Rich text block
Fields
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of block. For a rich text block, type is always rich_text. | Required |
elements | Object[] | An array of rich text objects - rich_text_section, rich_text_list, rich_text_preformatted, and rich_text_quote. See your specific desired element below for more details. | Required |
block_id | String | A unique identifier for a block. If not specified, one will be generated. Maximum length for this field is 255 characters. block_id should be unique for each message or view and each iteration of a message or view. If a message or view is updated, use a new block_id. | Optional |
Usage info
It is also the output of the Slack client's WYSIWYG message composer, so all messages sent by end-users will have this format. Use this block to include user-defined formatted text in your Block Kit payload. While it is possible to format text with mrkdwn, rich_text is strongly preferred and allows greater flexibility.
You might encounter a rich_text block in a message payload, as a built-in type in apps created with the Deno Slack SDK, or as output of the rich_text_input block element.
Rich text blocks can be deeply nested. For instance: a rich_text_list can contain a rich_text_section which can contain bold style text. More details on how that works is shown in the examples.
Sub-elements are what comprise the elements array in a rich text block. There are four available rich text object sub-elements.: rich_text_section, rich_text_list, rich_text_preformatted, and rich_text_quote. Because many of the elements include a section block, the details of that element are listed first, followed by the others.
Section element: rich_text_section
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of sub-element; in this case, rich_text_section. | Required |
elements | Object [] | An array of rich text elements. | Required |
rich_text_section example

{
"type": "rich_text",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Hello there, I am a basic rich text block!"
}
]
}
]
},
{
"type": "rich_text",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Hello there, "
},
{
"type": "text",
"text": "I am a bold rich text block!",
"style": {
"bold": true
}
}
]
}
]
},
{
"type": "rich_text",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Hello there, "
},
{
"type": "text",
"text": "I am an italic rich text block!",
"style": {
"italic": true
}
}
]
}
]
},
{
"type": "rich_text",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Hello there, "
},
{
"type": "text",
"text": "I am a strikethrough rich text block!",
"style": {
"strike": true
}
}
]
}
]
}
List element: rich_text_list
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of sub-element; in this case, rich_text_list. | Required |
style | String | Either bullet or ordered, the latter meaning a numbered list. | Required |
elements | Object [] | An array of rich_text_section objects containing two properties: type, which is "rich_text_section", and elements, which is an array of rich text element objects. | Required |
indent | Number | Number of pixels to indent the list. | Optional |
offset | Number | Number to offset the first number in the list. For example, if the offset = 4, the first number in the ordered list would be 5. | Optional |
border | Number | Number of pixels of border thickness. | Optional |
rich_text_list example

{
"type": "rich_text",
"block_id": "block1",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "My favorite Slack features (in no particular order):"
}
]
},
{
"type": "rich_text_list",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Huddles"
}
]
},
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Canvas"
}
]
},
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Developing with Block Kit"
}
]
}
],
"style": "bullet",
"indent": 0,
"border": 1
},
],
}
Let's say we want to create a nested list, for example something that looks like this:
Breakfast foods I enjoy:
- Hashbrowns
- Eggs
- Scrambled
- Over easy
- Pancakes, extra syrup
To create that in rich text, create three instances of rich_text_list, the middle one using the indent property to indent the types of eggs into that sub-list.
{
"type": "rich_text",
"block_id": "block1",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Breakfast foods I enjoy:"
}
]
},
{
"type": "rich_text_list",
"style": "bullet",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Hashbrowns"
}
]
},
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Eggs"
}
]
}
]
},
{
"type": "rich_text_list",
"style": "bullet",
"indent": 1,
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Scrambled"
}
]
},
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Over easy"
}
]
}
]
},
{
"type": "rich_text_list",
"style": "bullet",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Pancakes, extra syrup"
}
]
}
]
}
]
}
Preformatted code block element: rich_text_preformatted
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of the sub-element; in this case, rich_text_preformatted. | Required |
elements | Object [] | An array of rich text elements. | Required |
border | Number | Number of pixels of border thickness. | Optional |
rich_text_preformatted example
Quote element: rich_text_quote
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of the sub-element; in this case, rich_text_quote. | Required |
elements | Object [] | An array of rich text elements. | Required |
border | Number | Number of pixels of border thickness. | Optional |
rich_text_quote example

{
"type": "rich_text",
"block_id": "Vrzsu",
"elements": [
{
"type": "rich_text_quote",
"elements": [
{
"type": "text",
"text": "What we need is good examples in our documentation."
}
]
},
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "Yes - I completely agree, Luke!"
}
]
}
]
}
Rich text element types
For the rich text elements that have a field of elements, the following types are possible.
broadcast
The following are the properties of the broadcast object type in the elements array.
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of object; in this case, "broadcast". | Required |
range | String | The range of the broadcast; value can be here, channel, or everyone. Using here notifies only the active members of a channel; channel notifies all members of a channel; everyone notifies every person in the #general channel. | Required |
broadcast example
color
The following are the properties of the color object type in the elements array.
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of object; in this case, "color". | Required |
value | String | The hex value for the color. | Required |
color example
channel
The following are the properties of the channel object type in the elements array.
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of object; in this case, "channel". | Required |
channel_id | String | The ID of the channel to be mentioned. | Required |
style | Object | An object of six optional boolean properties that dictate style: bold, italic, strike, highlight, client_highlight, and unlink. | Optional |
channel example
date
The following are the properties of the date object type in the elements array.
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of object; in this case "date". | Required |
timestamp | Number | A Unix timestamp for the date to be displayed in seconds. | Required |
format | String | A template string containing curly-brace-enclosed tokens to substitute your provided timestamp. See details below. | Required |
url | String | URL to link the entire format string to. | Optional |
fallback | String | Text to display in place of the date should parsing, formatting or displaying fail. | Optional |
Date format strings
The following are the template strings allowed by the format property of the date element type.
{day_divider_pretty}: Showstoday,yesterdayortomorrowif applicable. Otherwise, if the date is in current year, uses the{date_long}format without the year. Otherwise, falls back to using the{date_long}format.{date_num}: Shows date as YYYY-MM-DD.{date_slash}: Shows date as DD/MM/YYYY (subject to locale preferences).{date_long}: Shows date as a long-form sentence including day-of-week, e.g.Monday, December 23rd, 2013.{date_long_full}: Shows date as a long-form sentence without day-of-week, e.g.August 9, 2020.{date_long_pretty}: Showsyesterday,todayortomorrow, otherwise uses the{date_long}format.{date}: Same as{date_long_full}but without the year.{date_pretty}: Showstoday,yesterdayortomorrowif applicable, otherwise uses the{date}format.{date_short}: Shows date using short month names without day-of-week, e.g.Aug 9, 2020.{date_short_pretty}: Showstoday,yesterdayortomorrowif applicable, otherwise uses the{date_short}format.{time}: Depending on user preferences, shows just the time-of-day portion of the timestamp using either 12 or 24 hour clock formats, e.g.2:34 PMor14:34.{time_secs}: Depending on user preferences, shows just the time-of-day portion of the timestamp using either 12 or 24 hour clock formats, including seconds, e.g.2:34:56 PMor14:34:56.{ago}: A human-readable period of time, e.g.3 minutes ago,4 hours ago,2 days ago.
date example
emoji
The following are the properties of the emoji object type in the elements array.
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of object; in this case, "emoji". | Required |
name | String | The name of the emoji; i.e. "wave" or "wave::skin-tone-2". | Required |
unicode | String | Represents the unicode code point of the emoji, where applicable. | Optional |
emoji example
link
The following are the properties of the link object type in the elements array.
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of object; in this case "link". | Required |
url | String | The link's url. | Required |
text | String | The text shown to the user (instead of the url). If no text is provided, the url is used. | Optional |
unsafe | Boolean | Indicates whether the link is safe. | Optional |
style | Object | An object containing four boolean properties: bold, italic, strike, and code. | Optional |
link example
text
The following are the properties of the text object type in the elements array.
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of object; in this case, "text". | Required |
text | String | The text shown to the user. | Required |
style | Object | An object containing four boolean fields, none of which are required: bold, italic, strike, and code. | Optional |
text example
user
The following are the properties of the user object type in the elements array.
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of object; in this case, "user". | Required |
user_id | String | The ID of the user to be mentioned. | Required |
style | Object | An object of six optional boolean properties that dictate style: bold, italic, strike, highlight, client_highlight, and unlink. | Optional |
user example
usergroup
The following ar the properties of the usergroup object type in the elements array.
| Field | Type | Description | Required? |
|---|---|---|---|
type | String | The type of object; in this case "usergroup". | Required |
usergroup_id | String | The ID of the user group to be mentioned. | Required |
style | Object | An object of six optional boolean properties that dictate style: bold, italic, strike, highlight, client_highlight, and unlink. | Optional |
