Skip to main content
An element is one piece of content you want optimized, named by you in the element field: welcome_email_subject, pricing_hero, paywall. Every decide and declare call names exactly one element, and every decision is made for one.

One element or two

The element is the unit of optimization: Curious chooses one arm for it, holistically. If an email’s subject and body should be optimized together, that is one element whose content has two fields, and every variant is a subject and a body that belong together. If they should be optimized independently, they are two elements, each with its own experiment.
Composition lives in the content’s shape, not in a hierarchy of elements: an email series or a carousel is one element whose format has an array field. There are no sub-elements.

Naming

Names are strings of your choosing, matched exactly. Name the surface, not the experiment: pricing_hero, not pricing_hero_test_2. The name is how your code and the dashboard refer to the same thing for as long as the content exists, across every experiment Curious runs on it.

element_type

An optional element_type tells Curious what kind of content it is writing, so it brings the right craft knowledge to variant generation: what a push notification can carry, how an email subject earns an open, what a paywall must say. The values are: push_notification, email_subject, email_preview, email_body, email, button_cta, hero, landing_page, blog_post, paywall Case does not matter on input. Any other value is a 400 naming the allowed set. The type never constrains the content’s shape; a provided control is the ground truth about what your renderer displays. Changing the type updates the element in place and shapes future variants without restarting anything.

Elements and experiments

An element outlives its experiments. The first declaration creates an experiment; a later declaration that changes what the variants were generated against concludes it and starts a successor on the same element, and the dashboard shows the chain. You never manage experiments by id. See Declarations and The experiment lifecycle.