---
title: "Set a frequency cap on a Meta reach ad set"
method: POST
path: "/api/v1/tools/meta_set_frequency_cap/execute"
tags: ["Meta Ads"]
---

# Set a frequency cap on a Meta reach ad set

`POST /api/v1/tools/meta_set_frequency_cap/execute`

## Request

- Base URL: `https://adako.ai`
- URL: `https://adako.ai/api/v1/tools/meta_set_frequency_cap/execute`
- Auth: HTTP bearer

Limits how often one person may see the ads in a reach-optimised ad set: at most max_frequency impressions every interval_days.
Use when: the ad set optimises for reach (or ad recall) and frequency is climbing — the usual first response to creative fatigue on a brand campaign.
Do not use on a conversion, traffic or engagement ad set. Meta only honours a frequency cap on reach buying, and setting it elsewhere either fails or does nothing; the preview refuses rather than pretending.
Do not set an aggressive cap on a small audience: Meta simply stops delivering once the cap binds, and the budget goes unspent.
Returns the ad set read back from Meta with the cap that is actually in force.
If the user wants "less repetition" on a conversion campaign, the honest answer is to refresh the creative or widen the audience, not to cap frequency.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `arguments` object, required
    - `ad_account_id` string: Meta ad account id such as act_1234567890. Omit it to use the primary account; if several accounts are active and none is primary the call fails and lists the valid ids.
    - `ad_set_id` string, required: The reach-optimised ad set to cap, from meta_list_ad_sets.
    - `max_frequency` integer, required: Maximum impressions one person may receive inside the interval.
    - `interval_days` integer, required: Length of the window in days, e.g. 7 for "twice a week" with max_frequency 2.
    - `idempotency_key` string: Optional caller-supplied key; identical keys never execute twice.
    - `raw_data` boolean: Return compact JSON only (no markdown). Use when you will compute on the result.

## Response `200`

The tool ran. A write returns proposal_id and approve_url while the change waits for approval.

- SuccessEnvelope
  - `success` unknown, required
  - `tool` string, required
  - `data` object, required: Machine-readable result.
  - `markdown` string, required: The same result written for a person or a model.
  - `quota` Quota: Task usage for the current billing period.
    - `plan` string
    - `used` integer
    - `limit` integer
    - `period_end` string
    - `upgrade_url` string
  - `proposal_id` string: Present for writes. Nothing changes on the ad platform until it is approved.
  - `approve_url` string: Where a person approves the proposal.
  - `request_id` string, required

## Other responses

- `400`: Invalid arguments, or the ad account could not be resolved.
- `401`: Missing, invalid, revoked or expired API key.
- `402`: Monthly task quota used up, or the plan does not include this tool.
- `403`: The connected ad account lacks the access level this tool needs.
- `404`: Unknown tool name.
- `409`: Not connected, reconnect needed, confirmation required, a proposal already pending or no longer pending, an identical create that failed earlier today (proposal_failed_before), a create that duplicates an approved one (duplicate_create), the ad-account limit of the plan reached (account_limit), or an Idempotency-Key reused with different arguments.
- `429`: Rate limited by Adako or by the ad platform. See Retry-After.
- `500`: Unexpected error inside Adako.
- `502`: The ad platform returned an error.

---

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