Ads and Commerce

Content Delivery Reports API

Updated: Jun 30, 2026
Copy for LLM
Ads in WhatsApp Status are available via the Marketing API. Learn more about ads in WhatsApp Status.

Content Delivery Reports API

Delivery reports provide approximate impressions information at the content level. Delivery reports give greater transparency into where advertisers’ ads appeared.
While Meta applies brand suitability controls, Meta can’t guarantee that all content will be compliant or aligned with advertisers’ unique brand suitability standards.
You can see what Meta content an advertiser’s ads appeared next to or within by downloading content delivery reports, either for all publishers in a placement or specific publishers. Meta provides an IDs report that you can use to see the content.
The following documentation is available for you to review or share with advertisers. Differences are to be expected as this content-delivery-report page is curated for Meta business partners.

Permissions

  • The app requires the brand_safety_third_party_partners capability grant.

Get a content delivery report

Get the available date range for the report

The returned date times do not necessarily mean a specific ad campaign has data available for every hour in that range. The returned date ranges are based on global availability.
Sample Request
GET /content_delivery_report_date_ranges
?platform=facebook
&position=instream_video
&fields=earliest_datetime,latest_datetime
Sample Response
{
  "data": [
    {
      "earliest_datetime": "2025-04-07T00:00",
      "latest_datetime": "2025-04-21T23:00"
    }
  ]
}

Get an ad set-level content delivery report

This API requires “read” (that is, “View Performance”) permission on the ad account.

Purpose

Fetch all ad impressions on a content level for an ad set per hour. The lookback period is 15 days. Each result will contain a list of objects with metadata for the content. Note that the API returns only public content.

Parameters

Fields Type Required Default Description
platform
enum
Y
Ads reporting platform type. Accepted values are: Facebook.
position
enum
Y
Ads reporting platform position type. Accepted values are: instream_video, facebook_reels_overlay.
datetime
datetime
N
Latest available datetime
Datetime of the report in format: [YYYY]-[MM]-[DD]T[HH]:00.
limit
integer
N
25
Controls the number of results returned. The range is [25, 5000].

Fields

The data body returns a List<ContentDeliveryReportNode>. The node structs and fields are defined below.
Field Type Default Description
content_id
fbid
Y
Unique ID of the content (for example, video, app, and so on)
creator_id
fbid
Y
The Unique ID of the creator or FB page
estimated_impressions*
integer
Y
The sum of the ad impressions served on the content
*Estimated_impressions is listed as an “estimated” number of impressions, due to Meta’s backend calculating this number in semi-real time. The estimated impressions number matches what Meta shows in Meta’s own reporting and ads billing.

Summary

Always returned by default. Set the summary field to false (summary=false) to not receive the summary node.
Field Type Default Description
earliest_datetime
datetime
Y
Earliest datetime with data available for the requested campaign.
latest_datetime
datetime
Y
Latest datetime with data available for the requested campaign.
total_count
integer
Y
Total number of rows in the report.

Permissions

Requires “View Performance” access to the ad account.
Get an ad set level content delivery report for a specific placement and datetime. Replace ad_set_id with the ad set ID for the report. And ensure the datetime is within the available date range returned from the date ranges API:
Sample Request - Facebook In-stream Video
GET /{ad_set_id}/content_delivery_report
?platform=facebook
&position=instream_video
&datetime=2025-04-21T23:00
&fields=content_id,creator_id,estimated_impressions
&summary=true
Sample Response
{
  "data": [
    {
      "content_id": "<CONTENT_ID>",
      "creator_id": "<CREATOR_ID>",
      "estimated_impressions": 13443
    },
    {
      "content_id": "<CONTENT_ID_2>",
      "creator_id": "<CREATOR_ID>",
      "estimated_impressions": 13391
    }
    ...
  ],
  ...
  "summary": {
    "total_count": 5168,
    "earliest_datetime": "2025-04-07T00:00",
    "latest_datetime": "2025-04-21T23:00"
  }
}
Sample Request - Facebook Ads on Reels
GET /{ad_set_id}/content_delivery_report
?platform=facebook
&position=facebook_reels_overlay
&datetime=2025-04-21T23:00
&fields=content_id,creator_id,estimated_impressions
&summary=true
Sample Response
{
  "data": [
    {
      "content_id": "<CONTENT_ID>",
      "creator_id": "<CREATOR_ID>",
      "estimated_impressions": 13443
    },
    {
      "content_id": "<CONTENT_ID_2>",
      "creator_id": "<FB_CREATOR_ID>",
      "estimated_impressions": 13391
    }
    ...
  ],
  ...
  "summary": {
    "total_count": 5168,
    "earliest_datetime": "2025-04-07T00:00",
    "latest_datetime": "2025-04-21T23:00"
  }
}

Error codes

Code Subcode Description
100
Invalid Parameter
2349019
Invalid Platform And Position Parameter Combination.
2349048
Date out of Range.
2349049
Invalid Cursor.
200
Permissions error.
80011
There have been too many calls to Brand Safety APIs. Wait a bit and try again.
fbtrace_id: Internal support identifier. When reporting a bug related to a Graph API call, include the fbtrace_id to help Meta find log data for debugging

Limits

Placement Default Page Size Maximum Page Size
instream_video facebook_reels_overlay
100
Not configurable.
The following rate limits apply at the product-level, meaning all Publisher List endpoints collectively. Relative quota usage per resource is returned in the x-business-use-case-usage response header for every request.
  • Maximum call count per hour: 144K calls.

Facebook Video and Page APIs

Video API

Purpose
Fetch metadata and downloadable source file for an individual video on Facebook. Pass the content_id returned by the Content Delivery Report API to the Video API.
Sample Request
GET /{video_id}
?fields=permalink_url,source,created_time,updated_time,from,description,picture
Sample Response
{
  "permalink_url": "/brookselitelandscapes/videos/773275220658768/",
  "source": "https://video-sjc3-1.xx.fbcdn.net/v/t39.25447-2/296672208_3302846743372673_5139359605630684497_n.mp4?_nc_cat=102&vs=16d3a1916d225711&_nc_vs=HBksFQAYJEdORGJyaEdCNF9MdTY3c0xBRkhObS1KVXJGSkhibWRqQUFBRhUAAsgBABUAGCRHTWREcWhGdTM0WUhPNkVBQUo2S25RNlNqWlVwYnJGcUFBQUYVAgLIAQBLBogScHJvZ3Jlc3NpdmVfcmVjaXBlATENc3Vic2FtcGxlX2ZwcwAQdm1hZl9lbmFibGVfbnN1YgAgbWVhc3VyZV9vcmlnaW5hbF9yZXNvbHV0aW9uX3NzaW0AKGNvbXB1dGVfc3NpbV9vbmx5X2F0X29yaWdpbmFsX3Jlc29sdXRpb24AEWRpc2FibGVfcG9zdF9wdnFzABUAJQAcAAAmlqmRwqfdzQMVAigKc2FuZGNhc3RsZRgLdnRzX3ByZXZpZXccF0BdEQYk3S8bGClkYXNoX2k0bGl0ZWJhc2ljXzVzZWNnb3BfaHEyX2ZyYWdfMl92aWRlbxIAGBh2aWRlb3MudnRzLmNhbGxiYWNrLnByb2Q4ElZJREVPX1ZJRVdfUkVRVUVTVBsKiBVvZW1fdGFyZ2V0X2VuY29kZV90YWcGb2VwX2hkE29lbV9yZXF1ZXN0X3RpbWVfbXMBMAxvZW1fY2ZnX3J1bGUHdW5tdXRlZBNvZW1fcm9pX3JlYWNoX2NvdW50BDMxOTERb2VtX2lzX2V4cGVyaW1lbnQADG9lbV92aWRlb19pZA83NzMyNzUyMjA2NTg3NjgSb2VtX3ZpZGVvX2Fzc2V0X2lkEDUyMjg2MjA5NTcxNzU0NDEVb2VtX3ZpZGVvX3Jlc291cmNlX2lkEDEwMTUzNTI3NTI0ODI4OTEcb2VtX3NvdXJjZV92aWRlb19lbmNvZGluZ19pZBAxMzc4NTMyODI1OTY4OTUxDnZ0c19yZXF1ZXN0X2lkACUCHAAlxAEbB4gBcwQ3OTA1AmNkCjIwMjItMDctMjgDcmNiBDMxMDADYXBwE0ZhY2Vib29rIGZvciBpUGhvbmUCY3QZQ09OVEFJTkVEX1BPU1RfQVRUQUNITUVOVBNvcmlnaW5hbF9kdXJhdGlvbl9zBzExNi4zMDkCdHMVcHJvZ3Jlc3NpdmVfZW5jb2RpbmdzAA%3D%3D&ccb=1-7&_nc_sid=41a7d5&efg=eyJ2ZW5jb2RlX3RhZyI6Im9lcF9oZCJ9&_nc_ohc=czalgyZgc1YAX9VjHuC&_nc_ht=video-sjc3-1.xx&oh=00_AT--2EefgQ54VCSNMmiSpC2I3rLV5IWuHQBWZv63sB-qKw&oe=62F039D4&_nc_rid=401297287969366",
  "created_time": "2022-07-28T23:29:13+0000",
  "updated_time": "2022-08-02T22:34:22+0000",
  "from": {
    "name": "Brooks Elite Landscapes",
    "id": "332104164111679"
  },
  "description": "👋 Welcome to our next job site in Mechanicsville!",
  "picture": "https://scontent-sjc3-1.xx.fbcdn.net/v/t15.5256-10/296266458_3171248163095396_202928376065076133_n.jpg?stp=dst-jpg_s160x160&_nc_cat=101&ccb=1-7&_nc_sid=08861d&_nc_ohc=XcFNSij3VIUAX-WxgHV&_nc_ht=scontent-sjc3-1.xx&oh=00_AT-mZFUSES-e5dX0AKzhKZUuebsrTgilMYBWPSubpe_2SQ&oe=62F03711",
  "id": "773275220658768"
}

Page API

This API requires the Page Public Content Access app review permission.
Purpose
Fetch detailed information about a page on Facebook.
Sample Request
GET /{page_id}
?fields=name,about,business,category,link
Sample Response
{
  "name": "Capital T Industries",
  "about": "We own the earth.",
  "business": {
    "id": "981914045859716",
    "name": "Capital T Industries"
  },
  "category": "Computer Company",
  "link": "https://www.facebook.com/1955398231373718",
  "id": "1955398231373718"
}

Additional useful documentation

For a user-friendly, interactive UI, try out Meta’s Graph API Explorer

FAQ

Q: How do you get a list of ad accounts for a business?
Q: How do you get a list of campaigns for an ad account?
Q: How do you get a list of adsets for a campaign?
Q: Does the Content Delivery report (CDR) API contain an advertiser_time_zone field like in Adjacent CDR?
A: No, Meta expects partners to choose the correct date time according to their advertiser’s time zone. The datetimes entered into the CDR API should be in Pacific Time (PT).
Q: How do you link data across various datasets (marketing API, to ad impressions and campaign information, to content)?
A: Content can be connected by content_id and/or content_owner_id between the Brand Safety Content Delivery Report (CDR) API and the respective Video and Page APIs. There are also Ads APIs that are connected by the ad object (adaccount_id, adset_id, and so on).
Q: Is each line a unique piece of content? Do you need to deduplicate any data/rows?
A: Each row is a unique piece of Facebook content represented by its unique content_id.
Q: What parameters are needed for the API?
A: The two required parameters are platform and position. The date field is optional and will use the most recent data available if omitted.
Q: How can an advertiser grant “read” (that is, “View Performance”) access to an ad account?
A: An advertiser can grant READ access to a partner for their ad account using the “Assign Partners” button in Business Setting.