MAPbrazeliquidconnected-contentmarketing-automation

How to use Draftship with Braze

Braze emails use Liquid for personalization and Connected Content for live API calls at send time. Drop a Draftship export into a Templates & Media block, wire Liquid against your user attributes, and ship.

HTML import path
template upload
Merge syntax
{{${first_name}}} (Liquid with $ prefix)
Image hosting
platform CDN
Best for
Mobile-first product teams running cross-channel campaigns from a single platform.
Watch out for
Braze's Liquid uses a $ prefix on user attributes that breaks if you copy from generic Liquid docs.

Braze is the platform engineers actually like working with. It treats email as one channel among many (push, in-app, SMS, content cards), every template is fully Liquid-templated, and Connected Content lets you make live API calls inside the email at send time. The handoff from Draftship is clean as long as you remember Braze's quirky Liquid prefix syntax.

Where Braze accepts pasted HTML

Go to Templates & Media → Email Templates → Create Template. You'll see a code editor with HTML and Plaintext panes. Paste your full Draftship export into HTML. Click Add Plaintext Version and let Braze auto-generate the text version, or paste your own.

STEP 1Design inDraftshipBlock editorSTEP 2ExportOutlook-safe HTMLCmd+ESTEP 3Braze EmailTemplateTemplates & MediaSTEP 4Wire Liquidpersonalization{{${user_attribute}}}STEP 5Use in Campaign orCanvasSendBraze handoff
Draftship to Braze email template handoff

Braze Liquid syntax (the $ prefix matters)

Braze's Liquid implementation requires a $ prefix on user attribute references. It looks like this: {{${first_name}}}. The double-curly is Liquid; the inner ${...} is Braze's variable accessor. Forget the dollar sign and you'll see the literal token in inbox.

DraftshipBraze Liquid
{{ first_name }}{{${first_name}}}
{{ last_name }}{{${last_name}}}
{{ email }}{{${email_address}}}
{{ company }}{{custom_attribute.${company}}}
Unsubscribe link{{${unsubscribe_url}}}
View online{{${view_in_browser_url}}}

For default values, use Liquid's default filter: {{${first_name} | default: "there"}}. The filter syntax is standard Liquid; the variable accessor is what's Braze-specific.

Connected Content for live data at send

Braze's killer feature: you can make an HTTP call from inside the email and use the response in the body. Useful for live inventory, dynamic offers, or A/B test variants from an external tool.

liquid
{% connected_content https://api.example.com/offer?user={{${external_id}}} :save offer %} <h2>Your offer: {{offer.title}}</h2> <p>{{offer.description}}</p>

If the API errors, Braze caches the last successful response per send. Don't put Connected Content inside a transactional template that absolutely must render; the fallback path is silent.

What Braze does to your HTML

Braze's email pipeline is one of the lightest-touch on this list:

  • Doesn't strip <style> blocks.
  • Preserves Outlook conditional comments.
  • Doesn't auto-inject unsubscribe footers; you must include the unsubscribe Liquid token yourself.
  • Auto-tracks links by wrapping them at send time. The wrap is conservative and rarely breaks UTMs.

Sending: Campaign vs Canvas

Braze separates one-shot sends (Campaigns) from multi-step orchestration (Canvas). Both reference the same Email Template.

  • Campaign: pick a segment, schedule, send. Best for newsletters and one-time announcements.
  • Canvas: a flow with branching, delays, and triggers. Best for nurture, onboarding, win-back.

The email template is the same artifact either way. Build once in Draftship, reuse across both.

Test send checklist

  • Use Send Test with a specific user ID to validate Liquid resolution.
  • Open inspector on the test email and confirm Connected Content rendered actual JSON, not the loading placeholder.
  • Run the final HTML through the size checker.
  • Verify Braze's link wrapper preserved your UTMs by clicking and inspecting the resolved URL.

When to use Braze's drag-drop builder

Braze's drag-drop is functional but feature-light compared to its Liquid engine. For complex layouts, the code path here is faster. For marketers building simple promo emails repeatedly, the drag-drop has a place.

For Liquid filter syntax and edge cases, see Email merge tag fallbacks.

FAQ

Frequently asked questions

Why does Braze Liquid use a dollar sign prefix?
Braze separates user attributes (with the $ prefix) from custom event properties and Connected Content variables (without). The prefix is a namespace. Outside Braze, generic Liquid never uses it.
Can I use Connected Content for personalization without a CDP?
Yes. Any reachable HTTPS endpoint that returns JSON works. Common patterns: pulling product feeds, inventory, or A/B variant assignments at send time.
Does Braze support AMPHTML email?
Yes, with caveats. AMP requires registered senders with AMP-enabled domains and signed HTML. Most Braze customers ship the regular HTML version and skip AMP.
How do I localize a Draftship-built email in Braze?
Use Liquid's case statement against {{${language}}} or a custom locale attribute. Wrap each translation block in {% case %}/{% when %}. Draftship's HTML body becomes the default branch.
Where does the unsubscribe link come from in Braze?
From the {{${unsubscribe_url}}} Liquid token. Braze generates a per-recipient unsubscribe URL at send. If you forget it, the send still works but recipients have no way to opt out, which is a CAN-SPAM violation.
Try it yourself

Design in Draftship. Paste into Braze.