# Attributes

> Attributes are data fields that hold information about a ticket created by a Conclude app.

Canonical HTML page: https://conclude.io/doc/developer/yaml-attributes/
Last updated: 2025-06-18

---

An attribute is a data field that holds information about a ticket, for example a
subject headline (title), and a conclusion text. An app may have up to 32 attributes.

An attribute always has a name, type and label, plus a number of option fields.
The mandatory title attribute typically looks like this:

```yaml
attributes:
  - name: title
    type: string
    label: Subject
    placeholder: Enter subject here
    mandatory: true
```

### Attribute types

The attribute type must be one of the following:

- **string**: A single line text up to 3000 characters.
- **text**: A multi-line text area up to 3000 characters.
- **select**: A select dropdown with up to 100 choices, see [select attribute](https://conclude.io/doc/developer/yaml-attributes-select/).
- **button**: A button that can be clicked to invoke a [trigger](https://conclude.io/doc/developer/triggers/).
- **user**: A special select dropdown to select a Slack user.
- **link**: A special single line text to store a URL.
- **tag**: A tag is used to create an information tag for a ticket, see [custom display settings](https://conclude.io/doc/developer/yaml-attributes-display/).

### Predefined attributes

There are 5 predefined attributes with their types:
- **title** (*string*): The main subject/headline.
- **body** (*text*): A general purpose multi-line text.
- **conclusion** (*text*): Should contain a closing summary of the ticket.
- **deadline** (*text*): Ticket deadline (implicit attribute)
- **severity** (*select*): Ticket severity (implicit attribute).

The **title** and **conclusion** attributes must always be present in an app.
The title is a single line of text, while the conclusion is a multi-line text field.

You may change the label and other properties of a predefined attribute, but you
cannot change its name or type.

**deadline** and **severity** are implicit attributes, i.e. they are not part of
the attribute list.  They are not present by default, but you can enable them in the
[app settings](https://conclude.io/doc/developer/app-settings/) by setting *enable_deadline* or
*enable_severity* to *true*.

Set a **deadline** to create urgency. An automated notification will be sent to the team
when the countdown timer is 20% from reaching zero, but at most 24 hours before the
deadline. For example, if you set a deadline in 10 hours, you'll get a reminder in
8 hours. If you set a deadline in a week you'll get the notification exactly 24 hours
before the deadline expires.

The **severity** describes the severity level of a ticket, and is mainly used for
managing incidents. You may repurpose the severity attribute to be used in other areas by
renaming its label and option labels. The 'bug report' app uses this technique.

### Attribute properties
An attribute has three mandatory properties and several optional properties.

#### Mandatory properties

- **name**: The attribute's name, consisting of lower case letters, numbers and underscores.
- **type**: The attribute type, explained below.
- **label**: A visible label displayed with the attribute.

#### Optional properties

- **placeholder**: A text displayed inside the input field before the user starts typing.
- **hint**: A contextual hint about the format etc. of the attribute.
- **defaultValue**: The default/initial value of an attribute.
- **display**: Customize how an attribute is displayed, see [custom display settings](https://conclude.io/doc/developer/yaml-attributes-display/).
- **visible**: Controls when the attribute should be displayed (see below).
- **mandatory** (boolean): Set *mandatory* to *true* if the attribute cannot have
an empty value. The built-in *title* attribute is a mandatory attribute.
- **important** (boolean): Setting *important* to *true* is a hint that the attribute
should be displayed whenever possible. For example, important attributes will be
 displayed in _Conclude Home > Tickets_.
- **readonly** (boolean): Set *readonly* to *true* if the user should not be able to
change its value after it has been set once.
- **postmortem** (boolean): Set to *true* to allow the user to edit the
attribute after the ticket has been closed.
- **multiSelect** (boolean): Set to *true* to allow the user to select multiple options.
- **style**: For buttons only. The button style can be set to *primary* or *danger*.
- **editors**: Setting *editors* restricts wgi can modify an attribute.
You may specify a list of users, channels and user groups, just like
the member setting, however, it's a good convention to set it to ${superusers} to make
the app source easier to read and maintain.

The **visible** setting can be:
- Not set (default): The attribute will be visible at all times.
- **create**: The attribute will be visible when creating a new ticket.
- **edit**: The attribute will be visible in the ticket channel.
- **conclude**: The attribute will be visible when concluding the ticket.

This example shows how you can make an attribute visible to the members of the
ticket, but hide it from the user who submitted the ticket:
```yaml
  - name: notes
    type: string
    label: Internal notes
    placeholder: Internal investigation notes
    visible: edit,conclude
}
```

