Update ad account settings
Sets the default DSA beneficiary and payor on a Meta ad account (EU DSA, Article 26).
Set them once and every EU-targeted call to /v1/ads/create, /v1/ads/boost and
/v1/ads/ctwa on that ad account can omit dsaBeneficiary/dsaPayor: Meta applies
the defaults automatically.
The values are written to the ad account on Meta, the same setting Ads Manager edits.
Nothing is stored in Zernio, and defaults already set in Ads Manager work identically.
Zernio never guesses these values for you. Beneficiary and payor are legal disclosures
shown to EU users, so you must provide the entity names explicitly. Use
GET /v1/ads/dsa-recommendations to offer suggestions in your UI.
If defaultDsaPayor is omitted, the beneficiary is also set as the payor, which
covers the common case where the same entity benefits from and pays for the ads.
Read the current values back with GET /v1/ads/dsa-defaults.
Currently supported for Meta accounts only; other platforms return 400.
API key authentication - use your Zernio API key as a Bearer token
In: header
Social account ID (metaads, or a facebook/instagram posting account)
Meta ad account ID (act_...)
Legal entity benefiting from ads on this ad account
length <= 100Legal entity paying for ads on this ad account. Defaults to defaultDsaBeneficiary when omitted.
length <= 100Response Body
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.adaccounts.updateAdAccount({ body: { accountId: 'account_abc123', adAccountId: 'adaccount_abc123', defaultDsaBeneficiary: 'string', },});console.log(data);{
"adAccountId": "string",
"dsaDefaults": {
"beneficiary": "string",
"payor": "string"
}
}{
"error": "Unauthorized"
}Read a value rule set GET
Reads one value rule set including every nested rule id and criterion id. This is step one of any edit: `PUT` is a full replace, so you need the ids before you can keep the objects you are not changing. Meta's own read returns `GENDER` values lowercase (`"male"`) while writes require `"MALE"`. Values are passed through untouched, so never case-compare a stored rule against a fetched one.
Replace a value rule set PUT
**THIS IS A FULL REPLACE, NOT A PATCH.** Meta's update is declarative: the body you send becomes the rule set. - `GET /v1/ads/value-rule-sets/{valueRuleSetId}` FIRST. - Keep a rule or criterion by echoing its `id`. - Create one by including the object WITHOUT an `id`. - Delete one by OMITTING it from the array. There is no warning and no undo. `name` and `rules` are both required for exactly this reason: a partial body would silently destroy every rule left out. **Rule order is semantic**: the array order you send is the evaluation order, and only the first matching rule adjusts the bid for an overlapping audience. Existing rule sets created elsewhere may contain `LOCATION_DMA` criteria. Those went inert on 2026-06-22 and are rejected here; migrate them to `LOCATION_COMSCORE_MARKET`.