Marketing Creative Optimizations

Configure Meta's automatic creative optimizations on MM API marketing templates: creative_features_spec at template and WABA level, opt-in/opt-out per key.

What Creative Optimizations Do

Marketing Messages API for WhatsApp can automatically apply visual and textual enhancements to marketing template messages to increase engagement. They are inspired by Meta's Advantage+ creative tooling for ads.

Meta reports an average +13.9% click-through rate lift from the optimizations active as of January 2026 (A/B test on 50M+ messages from ~200 advertisers, December 1, 2025 – January 7, 2026, statistically significant at 95% confidence).

These optimizations introduce creative variability — the same template can render differently across messages because Meta is testing variants and selecting the highest-performing one over time. They are exclusive to MM API; Cloud API marketing sends never have them applied.

Active Optimizations

KeyWhat it does
image_brightness_and_contrastApply effective brightness/contrast filters to header images
image_touchupsGeneral visual quality enhancements
image_animationConvert header images to animated GIFs (in testing, may not always run)
image_background_genGenerate alternative image backgrounds
image_bannerApply colorful padding to transform image creative to optimal aspect ratio
text_extraction_for_headlineExtract keywords/phrases from your message to create a headline highlighting key info
text_extraction_for_tap_targetExtract keywords/phrases to create a title for the tap-target area
text_formatting_optimizationAdjust text formatting (remove excess whitespace, bold key phrases). No content change
auto_promotion_tagExtract promotional phrases like "30% off" or "Free shipping" into a visual promotion tag on the image
product_extensionsFor single-image creatives, append related catalog products users are likely to engage with
Dynamic CTATailor CTA text to match the message or URL's value proposition
Hyperlink formattingConvert promotional keyphrases into hyperlinks mapped to the CTA, or shorten / format URL links in the message body

Paused or Deprecated

These have been paused and should not be expected to apply to current sends, even if the keys appear in older configs:

  • add_text_overlay — was: add a text overlay onto your image using the message content
  • Image cropping (no key) — was: auto-crop header images to optimal dimensions
  • Original image_animation was paused but is now back in testing under the same key

Meta will update its documentation if any of these restart.

Text Truncation (Always Applied)

Independent of creative_features_spec, all MM API sends have automatic text truncation applied based on message shape. The truncated content stays accessible behind a "Read more" toggle.

Message shapeTruncated to
No CTA but link in body5 lines
Media header (image, video, document, location, GIF)3 lines
No header (text-only)4 lines

This rule cannot be opted out of.

Where They Apply

  • Template-level config wins. If a template has its own creative_features_spec, that overrides the WABA-level default for messages sent with that template.
  • Default state at template level: enabled. New templates have all optimizations on unless you explicitly opt out per key.
  • Default state at WABA level: disabled. WABA-level config requires explicit OPT_IN per key to apply.
  • Both default behaviors are intentional — templates lean into optimization out of the box, while account-wide opt-in stays a deliberate choice.

Configure at the Template Level

Set creative_features_spec inside degrees_of_freedom_spec when creating or updating the template:

POST /<WABA_ID>/message_templates
{
  "name": "<TEMPLATE_NAME>",
  "language": "<TEMPLATE_LANGUAGE_AND_LOCALE_CODE>",
  "components": [/* ... */],
  "degrees_of_freedom_spec": {
    "creative_features_spec": {
      "image_brightness_and_contrast": { "enroll_status": "OPT_OUT" },
      "image_touchups":                 { "enroll_status": "OPT_IN"  },
      "image_animation":                { "enroll_status": "OPT_IN"  },
      "image_background_gen":           { "enroll_status": "OPT_IN"  },
      "auto_promotion_tag":             { "enroll_status": "OPT_IN"  },
      "text_extraction_for_headline":   { "enroll_status": "OPT_IN"  },
      "text_extraction_for_tap_target": { "enroll_status": "OPT_IN"  },
      "product_extensions":             { "enroll_status": "OPT_OUT" },
      "text_formatting_optimization":   { "enroll_status": "OPT_OUT" }
    }
  }
}

Each key takes either OPT_IN or OPT_OUT. Keys you omit fall back to the template default (enabled).

Configure at the WABA Level

Apply a default across every marketing template under a WABA:

POST /<WABA_ID>
{
  "degrees_of_freedom_spec": {
    "creative_features_spec": {
      "image_touchups":                 { "enroll_status": "OPT_IN" },
      "image_animation":                { "enroll_status": "OPT_IN" },
      "image_brightness_and_contrast":  { "enroll_status": "OPT_IN" },
      "image_background_gen":           { "enroll_status": "OPT_IN" },
      "auto_promotion_tag":             { "enroll_status": "OPT_IN" },
      "text_extraction_for_headline":   { "enroll_status": "OPT_IN" },
      "text_extraction_for_tap_target": { "enroll_status": "OPT_IN" },
      "product_extensions":             { "enroll_status": "OPT_IN" },
      "text_formatting_optimization":   { "enroll_status": "OPT_OUT" }
    }
  }
}

WABA-level keys you omit stay at the WABA default (disabled). A template that explicitly sets a key still wins over the WABA default.

Retrieve Current Config

Template:

GET /<TEMPLATE_ID>?fields=degrees_of_freedom_spec
{
  "degrees_of_freedom_spec": {
    "creative_features_spec": [
      { "key": "IMAGE_BRIGHTNESS_AND_CONTRAST", "value": { "enroll_status": "OPT_OUT" } },
      { "key": "IMAGE_TOUCHUPS",                "value": { "enroll_status": "OPT_OUT" } },
      { "key": "TEXT_EXTRACTION_FOR_HEADLINE",  "value": { "enroll_status": "OPT_OUT" } },
      { "key": "PRODUCT_EXTENSIONS",            "value": { "enroll_status": "OPT_IN"  } },
      { "key": "TEXT_FORMATTING_OPTIMIZATION",  "value": { "enroll_status": "OPT_IN"  } }
    ]
  },
  "id": "123456789"
}

Note the read shape uses upper-case keys and an array of {key, value} objects, while the write shape uses lower-case keys and an object map.

WABA:

GET /<WABA_ID>?fields=degrees_of_freedom_spec
{
  "degrees_of_freedom_spec": {
    "data": [
      {
        "creative_features_spec": [
          {
            "image_brightness_and_contrast": "OPT_IN",
            "image_touchups": "OPT_IN",
            "image_animation": "OPT_IN",
            "image_background_gen": "OPT_IN",
            "auto_promotion_tag": "OPT_IN",
            "text_extraction_for_headline": "OPT_IN",
            "product_extensions": "OPT_IN",
            "text_extraction_for_tap_target": "OPT_IN",
            "text_formatting_optimization": "OPT_IN"
          }
        ]
      }
    ]
  },
  "id": "1234567890"
}

The WABA read shape is yet another variant — flat key/value pairs inside creative_features_spec[0]. Plan your client code accordingly.

Operational Notes

  • Meta is continuously adding new optimizations. New keys may be applied automatically to opted-in templates without explicit migration. Audit your degrees_of_freedom_spec periodically if you care about deterministic rendering.
  • Optimizations only apply on MM API sends. The same template sent through Cloud API /messages will render verbatim with no enhancements.
  • The same template can render differently across messages — this is the design, not a bug. If your QA process expects pixel-identical sends, MM API is the wrong send path.
  • All optimizations preserve message content. Text formatting and truncation re-flow but do not alter the words.

Related

  • Marketing Messages API for WhatsAppMM API for WhatsApp: the /marketing_messages endpoint, feature comparison vs Cloud API, status webhook shape, fallback behavior, and the disable-marketing-on-Cloud-API toggle.
  • Marketing MessagesMarketing template messaging hub: send paths (Cloud API and MM API), specialty template types, opt-out handling, billing, quality, and compliance.
  • TemplatesTemplate lifecycle, categories, and management through Dualhook and Meta Graph API.
Browse more docsStart Free Trial