Adding a list block
- In Design Studio, select a channel.
- Add a List block from the block sidebar, toolbar, or slash menu.
- Choose Ordered (numbered) or Unordered (bulleted) from the settings panel.
- Add list items and use variables for dynamic content.

List settings
Select a List block to open the settings panel:- Type — toggle between Unordered (bulleted) and Ordered (numbered)
- Padding — horizontal and vertical padding in pixels
- Loop on — repeat the list for each item in a data array (see below)

Looping over data
The Loop on toggle repeats the list for each item in a data array you pass via the Send API. This is the primary way to iterate over dynamic collections (order line items, product lists, notification summaries, etc.) in Design Studio. To set up a loop:- Select the List block and open the settings panel.
- Enable the Loop on toggle.
- Enter a Data path that points to an array in your
datapayload (e.g.data.order_items). - Inside list item text, reference fields on the current item with
$.item(e.g.$.item.name,$.item.price).
data.order_items, then use $.item.name, $.item.quantity, and $.item.price in your list item text. Courier expands the list at send time, producing one list item per array entry.

The data path must start with
data. and point to an array. The designer validates the path against your test event data so you can catch mismatches before sending.Workaround: Handlebars loops in HTML blocks
If you need loop logic that goes beyond what the List block supports (nested loops, conditional items within each iteration, or custom HTML structure), you can use an HTML block with raw Handlebars:What’s Next
HTML Blocks
Raw Handlebars loops and custom markup
Elemental Loops
Loop control flow in the Elemental JSON format
Variables
Insert dynamic content from your data payload
Column Blocks
Side-by-side layouts for product cards and grids