﻿![]()

#### 

Sitecore Send keeps improving and adding new features to enhance the Send experience. Their latest addition extends Transactional Campaigns: now, [Iterations](https://doc.sitecore.com/send/en/developers/api-documentation/dynamic-templates-for-transactional-campaign.html) can be used in Transactional Campaigns.

#### Iterations

Initially, only a simple string key-value structure was allowed in the `Substitutions` body. Now, you can pass **complex data objects** in the [API payload](https://doc.sitecore.com/send/en/developers/api-documentation/manage-a-transactional-campaign.html):

```
{
    ...
    "Personalizations": [
        {
            "To": ...,
            "Substitutions": {
                "complexObject": {
                    "list": [
                        {
                            "name": "List Item 1",
                            "review": {
                                "rating": 5,
                                "amountOfReviews": 193
                            },
                            "tags": [
                                "sitecore",
                                "send",
                                "transactional"
                            ]
                        },
                        ...
                    ]
                }
            }
        }
    ]
}
```

And use the following syntax to iterate through complex data objects:

```
{{#each complexObject.list}}
{{this.name}} : (Rating: {{this.review.rating}})
<ul>
    {{#each this.tags}}
    <li>{{this}}</li>
    {{/each this.tags}}
</ul>
{{/each complexObject.list}}
```

**⚠️ Note:** It’s important to include the full path in the closing tag — `{{/each this.tags}}` — to avoid rendering issues. Omitting `this.tags` in the closing tag may result in unexpected behavior.

#### Example

To generate an email like this:

![Transactional Email example with iterations.](https://www.brimit.com/-/media/images/blog/sitecore-send/transactional-campaigns-iterations/final-email.png)

The Transactional Email design looks like this:

![Transactional Campaign with iterations campaign editor](https://www.brimit.com/-/media/images/blog/sitecore-send/transactional-campaigns-iterations/campaign-editor.png)

And the code for Iterations is inserted into the *HTML Item*:

![Html Iteration Section](https://www.brimit.com/-/media/images/blog/sitecore-send/transactional-campaigns-iterations/html-section.png)

As you can see, the iteration token can be combined with standard string token syntax.

The HTML code used for **Iteration**:

```
<div class="container">
    <div>
        {{#each content.articles}}
            <a href="{{this.href}}">
                <img src="{{this.image}}" alt="{{this.title}}" style="float: left;width: 50px;margin-right: 15px;border-radius: 50%;">
                <h2>{{this.title}}</h2>
            </a>
            <p style="margin-bottom: 10px">{{this.description}}</p>
            {{#each this.tags}}
                <span style="background-color: lightblue; padding: 2px 5px; margin-right: 5px;">{{this}}</span>
            {{/each this.tags}}
            <hr style="margin-bottom: 10px;"/>
        {{/each content.articles}}
    </div>
</div>
```

See the full code and example here: [Gist](https://gist.github.com/izharikov/6914a9daa42c161db321baf1f6e19cfc). Use this link to get the campaign JSON file (which can be imported) and to see the full request body.

#### Use in Code

Use the latest [SitecoreSend.SDK](https://www.nuget.org/packages/SitecoreSend.SDK/0.1.12) NuGet package (v0.1.12). Then, in your code:

```
var request = EmailRequestBuilder.Start(campaign)
    .AddPersonalization(new Personalization(testEmail, "Igor Zharikov")
    {
        Substitutions = new Dictionary<string, object>()
        {
            {"orderNumber", "123456"},
            {"paymentMethod", "PayTest"},
            {"total", "123.00 USD"},
            {"complex", new
            {
                items = new List<string>() {"item1", "item2"},
            }},
        },
    })
    ...
    .Build();

var result = await _send.Transactional.Send(request);
```

#### Conclusion

It’s great to see continuous updates and new features in Sitecore Send. The support for complex data structures in transactional emails opens the door to highly dynamic and personalized email experiences.

If you have any questions or suggestions, feel free to reach out to me.

###### More From Author

[##### Sitecore Marketplace SDK Integration with Vercel AI SDK
February 25, 2026](https://www.brimit.com/blog/sitecore-marketplace-sdl-integration-with-vercel-ai-sdk)[##### Sitecore Marketplace Updates (December 2025)
December 16, 2025](https://www.brimit.com/blog/sitecoreai-marketplace-december-updates)[##### SitecoreAI, Marketer MCP, Agents API, Marketplace — Sitecore Symposium 2025 Recap
November 11, 2025](https://www.brimit.com/blog/sitecoreai-mcp-marketplace-symposium2025-recap)

###### Author

[!\[Igor Zharikov - Senior Sitecore Developer, Sitecore MVP\](https://www.brimit.com/-/jssmedia/feature/blogs/authors/igor-zharikov-2.jpg?h=700&amp;iar=0&amp;w=700&amp;hash=292A84E8CB3E5CE57CA743385CFB1464)
Igor Zharikov
Sitecore MVP / Senior Sitecore Developer](https://www.brimit.com/blog/author?authors=Igor%20Zharikov)

#### More on Sitecore

[!\[How Vercel Will Help You Save Effort When Deploying Sophisticated Sitecore Projects\](https://www.brimit.com/-/jssmedia/project/brimit/blog/2024/vercel_cover-image.png)
#Guides#How-toDXPE-commerce
##### How Vercel Will Help You Save Effort When Deploying Sophisticated Sitecore Projects
Optimize and accelerate the development and deployment of complex multisite Sitecore projects.
Alexei Vershalovich on July 17, 2024](https://www.brimit.com/blog/how-vercel-will-help-you-save-effort-when-deploying-sophisticated-sitecore-projects)

[!\[Training Up Tomorrow's Sitecore MVPs: a Mentoring Success Story\](https://www.brimit.com/-/jssmedia/project/brimit/blog/2023/sitecore-mentoring---cover-image.png)
#How-toDXP
##### Training Up Tomorrow's Sitecore MVPs: a Mentoring Success Story
How to participate in the Sitecore Mentor program and help younger colleagues jump-start a career in Sitecore development.
Sergey Baranov on October 2, 2023](https://www.brimit.com/blog/training-up-tomorrows-sitecore-mvps)

[!\[Going Headless. Part 2: When a Headless CMS Is Your Best Bet (if you have Sitecore)\](https://www.brimit.com/-/jssmedia/project/brimit/blog/2022/headless/adobestock_456986731.jpg)
#How-toDXPE-commerce
##### Going Headless. Part 2: When a Headless CMS Is Your Best Bet (if you have Sitecore)
Discover how a headless CMS can benefit organizations that use Sitecore.
Daniil Raschupkin, Palina Trokhautsava on September 15, 2022](https://www.brimit.com/blog/going-headless-part-2-when-a-headless-cms-is-your-best-bet-if-you-have-sitecore)

![](https://bat.bing.net/action/0?ti=187017043&amp;tm=gtm002&amp;Ver=2&amp;mid=507cf3d5-ea47-4798-96d4-ba3db3fb12ae&amp;bo=2&amp;gtm_tag_source=1&amp;pi=0&amp;lg=en-US&amp;sw=800&amp;sh=600&amp;sc=24&amp;nwd=1&amp;tl=Sitecore%20Send%20Iterations%3A%20Complex%20Data%20Structures%20in%20Transactional%20Emails&amp;kw=Sitecore%20Send,%20Transactional%20Emails,%20Iterations,%20SitecoreSend.SDK,%20dynamic%20templates,%20email%20personalization,%20transactional%20campaigns,%20complex%20data%20in%20emails,%20Sitecore%20email%20API,%20email%20templating,%20Sitecore%20developer,%20Sitecore%20Send%20tutorial&amp;p=https%3A%2F%2Fwww.brimit.com%2Fblog%2Fsitecore-send-transactional-emails-payload&amp;r=&amp;lt=306&amp;evt=pageLoad&amp;sv=2&amp;asc=D&amp;cdb=AQAY&amp;rn=834533)