Skip to main content
A placeholder inserts a value from the data supplied when you preview, compile, or send a template. Use {{path.to.value}} in a text field.

Basic example

With this data:
This Section text:
renders as:
Paths are case-sensitive. Use dots for object properties and numeric array positions. Bracket notation such as items[0].name is not supported.

Missing values and types

An unresolved text placeholder alone does not fail compilation. A missing array for an each directive, an invalid block, or an invalid Slack field can still cause validation errors. Preview with representative data and inspect unresolved text before sending. There is no general expression language: arithmetic, date formatting, fallbacks, and arbitrary function calls should be calculated by your application. Pass values such as formatted_total or display_date ready to display. The loop-index shortcut below is a specific exception.

Repeating content

Add a Directive block, select each, and set its array path to items. Add a Section inside it:
The container repeats its child blocks. Do not place inline {{#each}} or {{/each}} markers in text; those markers do not create loops. Within a loop, this is the current item, this.name selects a property, and @index + 1 gives a one-based display number. Root data remains available, so a child can also reference {{user.name}}. See Directives for configuration and conditions.

Formatting and mentions

Placeholder replacement does not escape untrusted content for Slack formatting. Treat user-supplied text carefully when inserting it into a mrkdwn field; use plain-text fields when formatting is unnecessary. Format dates, currency, and links before supplying data. To mention a person by email, use the dedicated email mention syntax. An email address in an ordinary placeholder is only text.

Verify the data contract

Keep sample data representative of the values sent by your integration. Test missing optional fields, empty arrays, long text, and nulls. An integration can read GET /v1/templates/{id}/input-schema to discover the template’s expected data shape. Manage sample data · Use directives · Send with the API