---
title: "List value rule sets"
method: GET
path: "/v1/ads/value-rule-sets"
tags: ["Ad Accounts"]
---

# List value rule sets

`GET /v1/ads/value-rule-sets`

Lists the ad account's value rule sets (Meta's `/act_X/value_rule_set`). A value rule
set adjusts the auction bid up or down for audience segments you value differently;
attach one to an ad set with `valueRuleSetId` on `POST /v1/ads/create` or
`PUT /v1/ads/ad-sets/{adSetId}`.

Rows are returned in the same camelCase shape the `PUT` body takes, ids included, so a
set round-trips 1:1: **the update is a full replace, not a patch**, so you GET, mutate
and send the whole thing back.

Limits: 6 rule sets per ad account, 10 rules per set, 4 criteria per rule.

**Rule order is semantic.** Rules are evaluated in array order and only the FIRST
matching rule adjusts the bid for an overlapping audience. The order you send is the
order that is stored and returned.

Eligibility: value rule sets apply only to ad sets on the `LOWEST_COST_WITHOUT_CAP`
(auto-bid) or `COST_CAP` bid strategies. Meta rejects the rest server-side.

## Query parameters

- `accountId` string, required
- `adAccountId` string, required
- `limit` integer
- `after` string

## Response `200`

Value rule sets

- object
  - `adAccountId` string
  - `data` ValueRuleSet[]
    - `id` string, required — Platform value rule set id.
    - `name` string, required
    - `rules` ValueRule[], required — Evaluated in order; the first matching rule wins.
      - `id` string — Platform rule id. Echo it on `PUT` to KEEP this rule, omit it to CREATE a new one. A rule left out of the array entirely is DELETED.
      - `name` string, required
      - `adjustSign` 'INCREASE' | 'DECREASE', required — Direction of the adjustment. There is no signed value field.
      - `adjustValue` integer, required — Unsigned percentage magnitude. `INCREASE` accepts 1-1000, `DECREASE` accepts 1-90. 0 is out of range on both.
      - `status` string — Meta returns `ACTIVE` here but documents no enum for the field. Treat it as a passthrough: echo whatever the `GET` returned, and do not synthesize values.
      - `criteria` ValueRuleCriterion[], required — All criteria on a rule must match for the rule to fire.
        - `id` string — Platform criterion id. Echo it on `PUT` to KEEP this criterion, omit it to CREATE a new one. A criterion left out of the array entirely is DELETED.
        - `criteriaType` 'AGE' | 'GENDER' | 'OS_TYPE' | 'DEVICE_PLATFORM' | 'LOCATION' | 'PLACEMENT' | 'OMNI_CHANNEL' | 'AUDIENCE_LABEL', required — The dimension being matched. `OMNI_CHANNEL` (conversion location: APP, INSTANT_FORM, PHONE_CALL, WEBSITE) is accepted even though Meta's own enum table omits it.
        - `operator` 'CONTAINS', required — Required on every criterion. `CONTAINS` is currently the only value Meta supports.
        - `criteriaValues` string[], required — The values to match. `AGE` takes ranges such as `18-24`, `18+` or a custom `18-26`; a range whose upper bound is 65 is NOT allowed (use `18+` instead of `18-65`). `LOCATION` takes Targeting-Search keys: a two-letter country code for `LOCATION_COUNTRY`, a numeric key for region / city / comScore market. `AUDIENCE_LABEL` takes labels such as `HIGH_VALUE`, which are applied to a Custom Audience in Ads Manager: there is no API to provision them, so they are passed through unvalidated.
        - `criteriaValueTypes` string[], required — One entry per `criteriaValues` entry, in the same order. The literal `"NONE"` for every criteriaType except `LOCATION`, which uses `LOCATION_COUNTRY`, `LOCATION_REGION`, `LOCATION_CITY` or `LOCATION_COMSCORE_MARKET` and MAY mix them within one criterion. `LOCATION_DMA` was replaced by `LOCATION_COMSCORE_MARKET` on 2026-06-22 and is rejected by this API.
  - `paging` object
    - `after` string, nullable — Cursor for the next page; null when exhausted or when Meta omits paging.

## Other responses

- `400` — Invalid input, or Meta rejected the query. Meta answers a bad rule-set id with GraphMethodException code 100 / subcode 33, which is indistinguishable between not-found, no-permission, and account-not-enabled.
- `401` — Unauthorized
- `501` — Only supported on Meta (facebook/instagram)

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/versions/f81ca70ea6b9/schema)
