List marketing messages
List Meta (paid) **marketing messages** — metadata only; insight numbers live on the per-message `/insights` endpoint. Newest created first (stable — ties break on id). The optional `startDate`/`endDate` window (both together) matches the date `dateField` selects — send dates by default, or the **next scheduled send** (`dateField=scheduled`) to cover a future range. Page past the `limit` cap with `offset`.
/marketing-messagesBeta
Authorization
x-api-key x-date x-signature x-api-version Your API key (the ApiKeys document id).
In: header
Current timestamp as an IMF-fixdate string (GMT, US locale) "EEE, dd MMM yyyy HH:mm:ss z", e.g. "Sun, 06 Dec 2020 12:59:11 GMT". 30-second TTL.
In: header
HMAC-SHA256 of the x-date string keyed by your secret, lowercase hex.
In: header
API version you're coding against — currently 1. Required; a missing or unsupported value returns 400 with Missing or unsupported x-api-version header. Supported versions: 1.
In: header
Query Parameters
Scope to one workspace (any type — from GET /workspaces). Omit to span every workspace in the org.
Filter to a single broadcast type.
When true, also include archived (non-visible) messages.
Window start (ISO date/datetime). When set, only messages that match [startDate, endDate] on the date selected by dateField (default: send/execution dates, not creation) are returned. Must be supplied together with endDate.
Window end (ISO date/datetime, inclusive). Must be supplied together with startDate.
Which date the startDate/endDate window matches. sent (default): messages that sent at least once in the window (execution dates). scheduled: messages whose next scheduled send falls in the window — the only way to cover a future range; it matches the single next occurrence, so a recurring message whose next fire precedes the window start won't match. any: either. Requires the window — dateField without startDate/endDate is rejected.
Skip this many results (after the newest-first sort) — raise by limit to page past the cap.
Max messages per page.
Response Body
application/json
application/json
application/json
application/json
Try it
read-onlyKept in this tab only and signed in your browser — your secret never leaves your device.
Query
Enter your key and secret to send.
curl -X GET "https://example.com/marketing-messages"[ { "id": "string", "name": "string", "type": "SINGLE", "target": "string", "active": true, "isMM": true, "workspaceId": "string", "mediumId": "string", "mediumName": "string", "scheduled": true, "scheduledFor": "string", "frequency": "string", "lastSentAt": "string", "nextSendAt": "string", "lastExecutionId": "string", "metaMessageCampaignName": "string", "createdAt": "string" }]{ "message": "string"}{ "message": "string"}{ "error": [ { "message": "string", "path": [ "string" ], "type": "string", "context": {} } ]}Get per-day campaign insights
Per-day (`time_increment=1`) insights time series for one marketing message campaign, returned **in full** for any window length. Optional `startDate` / `endDate` window (both or neither, `YYYY-MM-DD`) — without them the series covers the campaign's **full flight**. Daily insights are only available for campaigns created on or after 2026-03-01; older campaigns return `400`, as does an org not connected to Meta Ads.
Get (a single) marketing message metadata
One marketing message's metadata (no insight numbers) **plus** `messages` — its **current** message creative, one entry per variant (most have one). For the per-send delivery funnel, call `GET /marketing-messages/{broadcastId}/insights`.