For MoEngage marketers. Call the Jacquard Content API in each email field, add fallbacks, then throttle and schedule the send.
Placeholders: example values (for example names in code) and values in angle brackets are account-specific. Your Jacquard contact provides them.
Existing customers: don’t change existing campaigns. Use this guide for new touchpoints only.
Message setup
For the team that builds MoEngage campaigns and flows.
1. Jacquard | Before you start
1.1 Prerequisites
Technical setup complete, including the Content API.
Touchpoint created and content approved in Jacquard.
1.2 Get the details
From the touchpoint’s Connect tab: touchpoint ID and field keys, for example subject_line, preheader.
2. MoEngage | Emails
Part | Reference |
|---|---|
Subject line |
|
Preheader |
|
Other parts (headline, CTA, body) |
|
2.1 Subject line
Paste into the subject line. Replace the touchpoint ID and control copy.
{% set jq = ContentApi.jacquardContentAPI({({"params":{"touchpoint_id":"TOUCHPOINT_ID","recipient_id":"{{UserAttribute['ID']}}","delivery_id":"{{CampaignAttribute['_id']}}"},"static_params":{},"dynamic_params":{},"request_body":{}})}) %}{{jq.content.fragments.subject_line|default("YOUR CONTROL COPY")}}2.2 Preheader
Paste into the preheader:
{% set jq = ContentApi.jacquardContentAPI({({"params":{"touchpoint_id":"TOUCHPOINT_ID","recipient_id":"{{UserAttribute['ID']}}","delivery_id":"{{CampaignAttribute['_id']}}"},"static_params":{},"dynamic_params":{},"request_body":{}})}) %}{{jq.content.fragments.preheader|default("YOUR CONTROL COPY")}}2.3 Body
Paste the Content API call once at the top of the email HTML:
{% set jq = ContentApi.jacquardContentAPI({({"params":{"touchpoint_id":"TOUCHPOINT_ID","recipient_id":"{{UserAttribute['ID']}}","delivery_id":"{{CampaignAttribute['_id']}}"},"static_params":{},"dynamic_params":{},"request_body":{}})}) %}Then use fields anywhere in the body, for example:
{{jq.content.fragments.headline|default("YOUR CONTROL COPY")}}2.4 Fallback
The
defaultcopy is used if Jacquard returns no content for that part.Use your control copy from Jacquard.
2.5 Personalisation
Jacquard copy can contain merge tags, for example
{{first_name}}.Check they render in a test send.
2.6 Save snippets
Snippets only change by touchpoint ID, field key and control copy. Save them in your code library.
Engagement data: Opens, clicks and other engagement data come from the S3 export in the technical setup guide.
3. MoEngage | Push messages
Skip if Jacquard only optimises email.
3.1 Add the snippet
Use the same call and field pattern in each Jacquard-controlled push field.
3.2 Test
Send to a test device. Check nothing is truncated.
4. MoEngage and Jacquard | Schedule and go live
Required for broadcast Dynamic Optimisation.
4.1 Set a request limit
In Delivery Controls, set Request Limit.
Formula: audience ÷ hours ÷ 60 = requests per minute.
Example: 1,000,000 over 6 hours = 2,778 per minute.
Maximum: 60,000 per minute.
Longer send windows give Jacquard more time to optimise.
4.2 Start time
The Jacquard optimisation start must be at least 30 minutes before the MoEngage send.
4.3 Activate in Jacquard
Approve the experiment plan and activate the touchpoint.
4.4 Publish
Schedule and publish the campaign.
Reference
Response and troubleshooting
Example Content API response. Message copy is under content.fragments.
{
"touchpoint_id": "1cd96c96-…",
"is_control_group": false,
"content": {
"channel": "email",
"fragments": {
"subject_line": "{{first_name}}, take 50% off all cycling products",
"preheader": "Bring more energy to your rides without paying full price."
}
},
"tracking": { "request_id": "33fec309-…" }
}Troubleshooting
Fallback copy is sent
Check the touchpoint ID, the field key, and that the path starts jq.content.fragments. Check the touchpoint is active in Jacquard.
Body field is empty
The Content API call must be in the body above the field.
Merge tag shows as text
For example {{first_name}}. Report to your Jacquard contact.