---
title: "Submit async insights report"
method: POST
path: "/v1/ads/insights/reports"
tags: ["Ad Insights"]
---

# Submit async insights report

`POST /v1/ads/insights/reports`

Submits an asynchronous Meta insights report. Same query surface as GET /v1/ads/insights, but
in the JSON body; Meta processes the report server-side, which is the right choice for long
ranges or large accounts where the sync query is slow or rate-limited. Returns a `reportRunId`
to poll via GET /v1/ads/insights/reports/{reportRunId}.

## Request body

- object
  - `accountId` string, required — Zernio SocialAccount id (posting or ads variant).
  - `objectId` string, required — Meta insights node: act_<n>, campaign id, ad set id or ad id.
  - `level` 'ad' | 'adset' | 'campaign' | 'account'
  - `fields` string — Comma-separated Graph insights fields.
  - `breakdowns` string — Comma-separated Graph breakdowns.
  - `actionBreakdowns` string — Comma-separated Graph action breakdowns (e.g. action_type,action_destination).
  - `actionAttributionWindows` string[] — Meta attribution windows (e.g. ["7d_click", "1d_view"]). Action values are returned keyed per window.
  - `actionReportTime` string — When actions are counted: impression, conversion or mixed.
  - `useUnifiedAttributionSetting` boolean — Use the ad sets' own attribution settings for action counting.
  - `filtering` object[] — Meta filter objects, applied server-side.
    - `field` string, required
    - `operator` string, required
    - `value` unknown
  - `datePreset` string — Mutually exclusive with fromDate/toDate.
  - `fromDate` string, date
  - `toDate` string, date
  - `timeIncrement` union
    - integer
    - 'monthly' | 'all_days'

## Response `202`

Report run submitted

- object
  - `reportRunId` string
  - `status` string

## Other responses

- `400` — Invalid input, or Meta rejected the report parameters
- `401` — Unauthorized
- `404` — The account or requested resource was not found or is not accessible. An account ID may have been disconnected and removed. Read GET /v1/accounts for current account IDs.
- `409` — The account exists but is inactive or needs reconnection. Reconnect it, then read GET /v1/accounts for its current account ID before retrying. Code: ads_connection_required.
- `429` — Meta rate limit reached
- `501` — Only supported on Meta (facebook/instagram)

## Changes

- **2026-09-16** `3e6ddf2a99ea` — 2 info
  - added the optional property `details/budgetScope` to the response with the `404` status
  - added the optional property `details/budgetScope` to the response with the `409` status
- **2026-09-15** `0dba7d004d75` — 4 info
  - added the optional property `details/quotaExhausted` to the response with the `404` status
  - added the optional property `details/quotaExhausted` to the response with the `409` status
  - added the optional property `details/quotaScope` to the response with the `404` status
  - added the optional property `details/quotaScope` to the response with the `409` status
- **2026-09-10** `e70ed06e7150` — 2 info
  - added the non-success response with the status `404`
  - added the non-success response with the status `409`

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/insights/reports/post.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/be448f13ecdc?raw)
