List per-day insights for all campaigns in a window
Per-day insights for **every** marketing message campaign in the ad account that delivered inside the `startDate`..`endDate` window — no campaign ids needed. The one-call alternative to collecting ids and calling `GET /campaigns/{campaignId}/daily-insights` per campaign: each `days` row is identical to what that endpoint returns for the same campaign and window. Cursor-paginated over the account's campaigns — echo `nextCursor` back as `after` until `mayHaveMore` is `false`. A page may legitimately return **0 items with `mayHaveMore: true`** (a stretch of campaigns with no delivery in the window) — keep paging. Campaigns with **no delivery** in the window are omitted, as are campaigns created before **2026-03-01** — Meta has no daily message metrics for them (the same cutoff the per-campaign endpoint enforces, silently here instead of a `400`). Wide windows are served in smaller pages (Meta limits how much insight data one query may cover), so a long window takes more pages for the same account; if Meta refuses even the smallest page, the response is a `400` asking to narrow the window. Daily polling with a 1–2 day window is the sweet spot.
/ad-accounts/{adAccountId}/campaigns/daily-insightsBeta
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
Path Parameters
The Meta ad account id.
Query Parameters
Window start — a bare calendar date (YYYY-MM-DD; a datetime is rejected), inclusive.
Window end — a bare calendar date (YYYY-MM-DD; a datetime is rejected), inclusive. Must be on or after startDate; the window may span at most 93 days.
Opaque Meta page cursor — a previous response's nextCursor.
Response Body
application/json
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.
Path
Query
Enter your key and secret to send.
curl -X GET "https://example.com/ad-accounts/act_1234567890/campaigns/daily-insights?startDate=2026-08-04&endDate=2026-08-04"{ "items": [ { "campaignId": "120212345678901234", "campaignName": "Summer push", "createdTime": "2026-07-30T19:44:37+0300", "days": [ { "marketing_messages_spend": "12.34", "marketing_messages_delivered": "1180", "marketing_messages_read_rate": "87.2", "marketing_messages_link_btn_click": "96", "marketing_messages_link_btn_click_rate": "8.13", "marketing_messages_cost_per_delivered": "0.0104", "marketing_messages_cost_per_link_btn_click": "0.1285", "campaign_name": "Summer push", "campaign_id": "120212345678901234", "date_start": "2026-08-04", "date_stop": "2026-08-04" } ] } ], "returned": 1, "mayHaveMore": false, "nextCursor": null}{ "message": "string"}{ "message": "string"}{ "message": "string"}{ "error": [ { "message": "string", "path": [ "string" ], "type": "string", "context": {} } ]}List marketing message campaigns in an ad account
Marketing message campaigns in one ad account, cursor-paginated — echo a response's `nextCursor` back as `after` for the next page. Returns `400` if the org isn't connected to Meta Ads.
List an ad account's pixels
The ad account's Meta (Facebook) pixels — for discovering the optional `pixelId` a campaign create can attach. Read-only by design: pixels are created and managed in Meta, not through this API.