Marketing Messages API for WhatsApp

MM 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.

What MM API for WhatsApp Is

Marketing Messages API for WhatsApp (formerly "Marketing Messages Lite API", now generally available) is Meta's optimized send path for marketing template messages. It uses the same templates, the same phone numbers, and the same per-message billing as Cloud API — but routes sends through a parallel /marketing_messages endpoint that adds delivery and creative optimizations.

MM API is send-only. To receive incoming messages, status webhooks for non-marketing traffic, or send anything other than marketing templates, you continue to use Cloud API in parallel on the same phone number.

Feature Comparison vs Cloud API

CapabilityCloud APIMM API for WhatsApp
Send marketing templatesYesYes
Send authentication / utility / service templatesYesNo
Send freeform (text, image, etc.)Yes (inside CSW)No
Receive incoming messages and statusesYesNo
Quality-based delivery optimizationNoYes — up to ~9% higher delivery for high-engagement messages
Automatic creative optimizationsNoYes
Animated image (GIF) headerNoYes
Android app deep links on URL buttonsNoYes
Customizable TTL on marketing templatesNoYes (12 hours – 30 days)
TTL on auth/utility templatesYesN/A
Performance benchmarks vs similar businessesNoYes
Tailored creative recommendationsNoYes
Conversion metrics (Web/App)NoYes
Cost metrics (spend per template, per click, per delivery)YesYes
Basic metrics (sent, delivered, read, clicked, errors)YesYes
Local Storage supportYesYes
Compliance certifications (GDPR, LGPD, SOC, ISO 27001)YesYes
Max-price (beta)NoYes
OnboardingEmbedded SignupEmbedded Signup, Intent API, Intent UI

The /marketing_messages Endpoint

POST https://graph.facebook.com/<GRAPH_VERSION>/<PHONE_NUMBER_ID>/marketing_messages

The send payload is identical to Cloud API's /messages payload for template messages, with two MM-specific optional fields:

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "<WHATSAPP_USER_PHONE_NUMBER>",
  "type": "template",
  "template": {
    "name": "<TEMPLATE_NAME>",
    "language": { "code": "<LANGUAGE_AND_LOCALE_CODE>" },
    "components": [ /* same shape as Cloud API */ ]
  },
  "product_policy": "CLOUD_API_FALLBACK",
  "message_activity_sharing": true
}
FieldDefaultPurpose
product_policyCLOUD_API_FALLBACKIf the WABA hasn't completed MM API onboarding, the message is automatically sent through Cloud API instead. Set to STRICT to disable this fallback (the call fails instead of falling back).
message_activity_sharingWABA-level defaultPer-message override of whether read/click events from this send are shared with Meta to improve optimization. Boolean.

Authentication is the same access token you use for Cloud API — whatsapp_business_messaging permission is required. See WhatsApp Business API Permissions.

Fallback Behavior to Cloud API

By default (product_policy omitted or set to CLOUD_API_FALLBACK), MM API will silently route a marketing template send through Cloud API if the WABA has not yet completed MM API onboarding. This makes MM API safe to wire up before the customer has signed the ToS.

Two important caveats:

  • If you have set disable_marketing_messages_on_cloud_api: true on the WABA (see below), the fallback is rejected with error 131063 because Cloud API marketing is disabled.
  • If you set product_policy: STRICT on the call, no fallback is attempted regardless of the disable flag.

Disable Marketing on Cloud API

Once a WABA has fully onboarded to MM API, you can require all marketing traffic to go through MM API by setting:

POST /<WABA_ID>
{ "disable_marketing_messages_on_cloud_api": true }

When this is true, attempting to send a MARKETING category template through /messages returns:

{
  "error": {
    "code": 131063,
    "message": "(#131063) Marketing templates disabled for Cloud API",
    "error_data": {
      "details": "Your template is categorized as Marketing, but marketing templates are currently disabled for your Cloud API configuration. To send this template, use the Marketing Messages API for WhatsApp or enable marketing templates on Cloud API by turning off disable_marketing_messages_on_cloud_api."
    }
  }
}

This setting only takes effect on WABAs that have fully onboarded (ToS signed). Setting it on a partially-onboarded WABA can produce blocked sends without a working fallback path. To check the current value:

GET /<WABA_ID>?fields=disable_marketing_messages_on_cloud_api

To re-enable Cloud API marketing, set the field back to false.

Geographic Availability

RegionMM API behavior
EEA, UK, Japan, South KoreaSends work, but no delivery optimizations, no click/conversion reporting, no per-user marketing limits. Metrics available only via Business Management API and WhatsApp Manager (not Ads Manager / Insights API).
United StatesMarketing messages to US recipients are blocked by Meta with error 131049 since April 1, 2025 — applies to both Cloud API and MM API. US-based business numbers can still send to non-US recipients.
RussiaMM API works since June 20, 2025, but with no delivery optimization or click/conversion reporting for sends from Russian business profiles or Russian payment methods.
Cuba, Iran, North Korea, Syria, Crimea, Donetsk, LuhanskCannot onboard, cannot send. Applies platform-wide.
Everywhere elseFull feature set.

Status Webhooks

MM API sends emit the same sent / delivered / read status webhooks as Cloud API, but the pricing object distinguishes them:

"conversation": {
  "id": "<CONVERSATION_ID>",
  "origin": { "type": "marketing_lite" }
},
"pricing": {
  "billable": true,
  "pricing_model": "PMP",
  "category": "marketing_lite"
}

For Cloud API marketing sends, pricing.category is marketing and conversation.origin.type is marketing. For MM API sends, both fields use marketing_lite.

If you want to attribute outgoing message IDs back to their send path (e.g. for billing reconciliation), log which endpoint each wamid was returned from at send time and join against the webhook's id field.

Incoming Messages (Send-Only)

MM API does not deliver incoming messages. The messages field in webhooks for inbound user messages always comes through Cloud API's webhook subscription. In Dualhook setups, this is delivered directly to your endpoint via Webhook Override — there is no separate MM API inbound channel to subscribe to.

Errors Specific to MM API

CodeMeaningFix
131049Marketing messages cannot be delivered to US recipientsSuppress US wa_ids before sending
131063Marketing templates disabled for Cloud APIEither send via /marketing_messages or set disable_marketing_messages_on_cloud_api: false
131061Templates with bid_spec (max-price) cannot be sent via Cloud APISend via /marketing_messages instead
131050Recipient stopped marketing messages from your businessSuppress the recipient and respect the user_preferences webhook

Dualhook's Stance

Dualhook does not currently call /marketing_messages on your behalf — outbound message sends, marketing or otherwise, originate from your backend. What Dualhook does:

  • Issues an access token via Embedded Signup that has whatsapp_business_messaging permission, which is sufficient for both /messages and /marketing_messages.
  • Syncs and manages your marketing templates — the same templates can be sent through either endpoint.
  • Forwards account_update management webhooks (including MM API onboarding events — see MM API Onboarding).

If you want Dualhook to surface MM API onboarding status, eligibility, or the marketing_lite pricing breakdown in the dashboard, that's a feature request — open it through the in-app support chat.

Related

  • Marketing MessagesMarketing template messaging hub: send paths (Cloud API and MM API), specialty template types, opt-out handling, billing, quality, and compliance.
  • MM API OnboardingOnboarding a WABA to MM API for WhatsApp: eligibility check (marketing_messages_onboarding_status), Terms of Service, Embedded Signup with marketing_messages_lite, and the MM_LITE_TERMS_SIGNED webhook.
  • Marketing Conversion TrackingMeasure conversions from marketing messages with Meta Pixel, Conversions API, and the Meta SDK. Includes fbclid handling, the click-event webhook, and Android deep-link attribution.
  • Marketing Creative OptimizationsConfigure Meta's automatic creative optimizations on MM API marketing templates: creative_features_spec at template and WABA level, opt-in/opt-out per key.
  • Marketing Max-Price (Beta)Set a maximum price per marketing message delivery on MM API for WhatsApp using bid_spec. Includes per-message multiplier, reach estimation, and rollout phases.
  • PricingDualhook subscription plans, what is included, and how pricing relates to Meta messaging fees.
Browse more docsStart Free Trial