Dynamic content blocks extend Kit’s standard content block plugins to support subscriber-personalized email content. Rather than returning final, static HTML at design time, your server returns a Liquid-templated HTML response that Kit renders individually for each subscriber at send time.Documentation Index
Fetch the complete documentation index at: https://developers.kit.com/llms.txt
Use this file to discover all available pages before exploring further.
How dynamic blocks differ from standard blocks
With a standard content block, Kit calls your endpoint whenever a creator configures or refreshes the block in the email editor. Your server returns HTML that is stored as-is and delivered identically to every recipient. With a dynamic content block, Kit still calls your endpoint at design time—but the HTML you return contains Liquid template variables. Kit stores this template and renders it per subscriber at send time, substituting real data from the chosen data source.| Standard content blocks | Dynamic content blocks | |
|---|---|---|
| HTML generated | Once, at design time | Template at design time; rendered per subscriber at send time |
| Content | Identical for all recipients | Personalized per subscriber |
| Works in | Any email type | Any email type; event node data source requires a Visual Automation sequence email |
| Requires | Content block plugin | Content block plugin; automation event plugin required only for event node data source |
Data sources
Dynamic content blocks support two data sources:- Automation event node — An automation node plugin that fires when a subscriber triggers an event (such as abandoning a cart). The event plugin stores subscriber-specific data in Kit’s automation context, and your Liquid template references it via
automation.{app_identifier}.{event_node_identifier}.*, whereevent_node_identifieris the linked event node’sidentifier. Requires a Visual Automation sequence email. - Subscriber custom fields — Subscriber data stored directly on the Kit subscriber record and accessible via
{{ subscriber.field_name }}in your template. Works in any email type.
When to use dynamic blocks
Dynamic content blocks are the right choice when:- Content must reflect data specific to each subscriber at the moment the email is sent
- The underlying data changes between when the email is designed and when it is delivered
- The block depends on an event a subscriber triggered inside a Visual Automation workflow
- You want to personalize content using data already stored on the subscriber record
- Abandoned cart recovery — Show each subscriber the actual items they left in their cart
- Personalized product recommendations — Surface items relevant to a specific subscriber’s history
- Event-triggered summaries — Display real-time order, booking, or activity details
- Subscriber-specific content — Greet subscribers by name, reference their plan, or display content based on custom field values
Prerequisites
To build a dynamic content block you need a dynamic content block plugin—a content block plugin configured withdynamic: true and the additional fields described in plugin configuration.
If your block uses an automation event node as its data source, you also need an automation node plugin in the same Kit app that captures subscriber-specific data and stores it in Kit’s automation context. See plugin flow for a step-by-step walkthrough of this setup.