MCP

Spintax (message variations)

Spintax makes every recipient's copy slightly different, which is a deliverability practice: many identical messages look like bulk mail, varied ones don't. It is supported in the subject and the body, on campaigns and follow-ups alike. (Whether to run on reusable copy at all — and when a template is safe versus a framework — is craft, not mechanics: see the playbook's Templates vs frameworks.)

Syntax

Wrap the alternatives in curly braces, separated by pipes:

{|Hi|Hello|Hey|} {{FIRST_NAME}},

One option is chosen per message. Leading and trailing pipes are optional — {|Hi|Hello|} and {Hi|Hello} behave identically, and an unbalanced pair ({|Hi|Hello}) is accepted too. Prefer the {|…|} form: it is the form the app's own editor writes, and the outer pipes make the group obvious next to ordinary prose.

Nesting works, and options may contain anything — including personalization variables:

{|Hi {{FIRST_NAME}}|Hello {{FIRST_NAME}}|}, {|I noticed {{COMPANY}} is {|hiring|growing|}|Quick question about {{COMPANY}}|}

Every group is spun independently. The same group written three times will not produce the same choice three times — repeat a group deliberately only when you want the variation.

The one trap: braces are consumed even without pipes

A brace pair with no pipe is still treated as a spin group with a single option, so the braces are removed and the text inside is kept:

You write Recipient sees
price is {not a spin} today price is not a spin today
{ literal c } literal c

So you cannot write a literal { or } as itself in a subject or body. A backslash does not help — \{literal\} arrives as \literal\, keeping the backslashes and still losing the braces.

To show a real curly brace, use HTML entities{ for { and } for }. These pass through untouched and render as braces in the delivered mail:

Use {{FIRST_NAME}} to personalize.

This matters whenever the copy quotes code, JSON, template syntax, or a price format containing braces.

What blocks a send

Content is validated when the campaign starts (campaign/start_by_id), and two spintax-adjacent mistakes fail it there rather than silently mailing something wrong:

  • {} brackets not matching — an opening brace with no closing one (or vice versa) anywhere in the subject or body. Count your braces; the error does not say which line.
  • Wrong placeholder: {{…}} — double braces are strictly the variable syntax, so {{anything}} must be a real variable name from the closed list in personalization-variables. Use single braces for spin options and {{…}} to display a variable name rather than substitute it.

Both are start-time failures, so a campaign with broken spintax stays in Draft rather than sending malformed copy — fix the content and start again.