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.
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.
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.
| Draftship | Braze 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.