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 asPOST /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_messagesendpoint 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:
- Confirm the template’s category is
MARKETINGand 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. - 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.
- 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
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:
- Persist
data.messageIdandtracking_idfrom the send response. - On
message.deliveredandmessage.read, upsert by message id and bucket bytracking_id. - For CTR, tracked links in the template produce
short_link.clickevents (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.- Split the audience, e.g. 90/10, drawing the holdout at random so both legs have matching engagement profiles.
- Send the treatment through
/whatsapp/marketing-messages/sendand the holdout through the standard send path, with a distincttracking_idper leg (cmp_x_mmlitevscmp_x_standard). - 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_idvalues.
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_idwas 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.