Skip to main content

Send WhatsApp marketing templates through Meta MM Lite

Meta’s Marketing Messages API (MM Lite) is a dedicated send endpoint for MARKETING-category WhatsApp templates that applies Meta-side send-time and creative optimization to every send. Orbit exposes it as POST /api/v1/whatsapp/marketing-messages/send. This guide covers when to use it instead of the standard send path, your first send, reconciling outcomes back to the campaign, measuring the lift, and handling errors.

1. What MM Lite is and how it differs from the standard send path

  • Same template body, dedicated endpoint. The request carries the same template name, language, and component parameters as a standard template send; Orbit forwards it to Meta’s /{phone_number_id}/marketing_messages endpoint instead of /messages.
  • Meta-side optimization. Sends through MM Lite are eligible for send-time optimization (Meta shifts delivery toward the moment each recipient is most likely to engage) and creative optimization across your approved marketing creative, improving marketing deliverability and click-through versus the standard path.
  • No new integration to provision. MM Lite reuses your organization’s existing connected WABA access token and phone number id. If you can send WhatsApp today, you can send through MM Lite today.
  • Marketing category only. The endpoint accepts MARKETING templates exclusively; every other category stays on the standard path (section 2).

2. Before you send: the template must be MARKETING

MM Lite accepts exactly one template category: MARKETING. Utility, authentication, and service templates are rejected by Meta on this endpoint and surface to you as a 422 provider error; keep those on the standard send path, which remains the right route for anything that is not a marketing campaign. Before your first send:
  1. Confirm the template’s category is MARKETING and its status is approved, under Channels → WhatsApp → Templates or via the WhatsApp templates API. Category is set when the template is created; see the template authoring guide.
  2. Confirm each recipient is opted in and not suppressed. Consent, opt-out handling, and quiet hours are tenant-owned controls in Orbit and apply to MM Lite sends exactly as they apply to the standard path; see opt-out rules for WhatsApp and RCS.
  3. Remember the 24-hour window rule is unchanged: marketing templates are how you reach recipients outside an open service window, and MM Lite does not alter that (24-hour window guide).

3. Your first MM Lite send

A successful send returns the Meta message id and a sent status in the standard envelope:
Set tracking_id on all campaign traffic: it is the correlation key for section 4 and costs nothing. Test mode. With a test-prefixed API key (dv_test_sk_*) or the dashboard test-mode toggle, the endpoint returns a synthetic sent response without dispatching a real message and without deducting credits, so you can wire the integration end to end before a live send; meta.test_mode: true marks those responses. See the sandbox test-mode guide. Multi-WABA organizations. Pass phone_number_id to choose the sending WABA; omit it to use your organization’s connected WABA (adding a WABA).

4. Reconcile delivery, read, and CTR webhooks with tracking_id

Every send emits the same per-message webhooks as the standard path: message.sent, message.delivered, message.read, and message.failed (webhook events catalog). Your tracking_id travels with the message (as Meta’s biz_opaque_callback_data) and returns on the status callbacks, so your pipeline can group delivered, read, and click outcomes by campaign or journey without keeping a send-time join table of its own. A minimal reconciliation loop:
  1. Persist data.messageId and tracking_id from the send response.
  2. On message.delivered and message.read, upsert by message id and bucket by tracking_id.
  3. For CTR, tracked links in the template produce short_link.click events (link tracking and analytics); attribute them with the same campaign id you stamped at send time.

5. Measure the lift: a standard-path holdout

MM Lite changes when Meta delivers, so measure it the way you would measure any delivery treatment: hold a slice of the audience back on the standard path.
  1. Split the audience, e.g. 90/10, drawing the holdout at random so both legs have matching engagement profiles.
  2. Send the treatment through /whatsapp/marketing-messages/send and the holdout through the standard send path, with a distinct tracking_id per leg (cmp_x_mmlite vs cmp_x_standard).
  3. After the read window closes (48 to 72 hours for most lists), compare delivered rate, read rate, and link CTR per leg using the two tracking_id values.
The holdout uplift guide covers split sizing and significance for campaign sends; the same math applies here with tracking_id as the leg key. If the lift is immaterial for a given list or market, that traffic is fine on the standard path; MM Lite earns its keep on large marketing blasts, not on every template.

6. Error handling and when to fall back to the standard path

Fall back to the standard path for non-marketing categories, for a one-off urgent send where send-time optimization would only add latency, and on sustained Meta-side errors on the marketing endpoint (retry first, then fall back). The request body is identical apart from the endpoint, so a fallback is a URL change, not a rewrite.

7. Pricing

MM Lite does not change how WhatsApp conversations bill: a marketing template send opens a marketing conversation at the same rate as the standard path, and Meta’s per-recipient marketing frequency caps apply either way. Throughput is governed by your messaging-limit tier and WABA quality rating exactly as on the standard path, and sends count toward your organization’s daily spend limit if one is set. See the WhatsApp pricing guide.

Troubleshooting

  • 422 on a first send with a template that works on the standard path. Almost always the category: the template is UTILITY or AUTHENTICATION. MM Lite is marketing-only; route that send back to the standard path or create a MARKETING variant.
  • Sends succeed but no webhook reconciles to the campaign. Check that tracking_id was set at send time and that your endpoint subscribes to the message status events; the tracking id only reconciles what you stamp.
  • Delivered rate looks lower than the standard path right after launch. Send-time optimization can hold sends inside the optimization window; compare over a full read window (48 to 72 hours) before drawing a conclusion.
For the raw request and response schema, see the WhatsApp API reference. For the campaign-level flow around these sends, see the WhatsApp campaign launch playbook.