Set up MoEngage messages for Jacquard

Prev Next

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

jq.content.fragments.subject_line

Preheader

jq.content.fragments.preheader

Other parts (headline, CTA, body)

jq.content.fragments.field_key, key from the Connect tab

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 default copy 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.