> ## Documentation Index
> Fetch the complete documentation index at: https://developer.cloakup.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Campaign create

> Defaults, business rules, and minimal example

Omitted fields are filled server-side. **Do not copy the full `filters` object from GET responses** — only send what you need.

## Create defaults

| Field                                                                                                                                               | Default when omitted               |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- |
| `active`                                                                                                                                            | `true`                             |
| `filters.facebook`, `google`, `tiktok`, `kwai`, `taboola`, `pinterest`, `yandex`, `mgid`, `outbrain`, `sms`, `revcontent`, `adskeeper`, `newsbreak` | `false`                            |
| `filters.adspy`, `bots`, `proxy`, `cloakup_ai`                                                                                                      | `true`                             |
| `filters.deny_always`                                                                                                                               | `false`                            |
| `filters.state`                                                                                                                                     | `{ "allow": true, "states": [] }`  |
| `filters.city`                                                                                                                                      | `{ "allow": true, "cities": [] }`  |
| `filters.network_type`                                                                                                                              | `{ "allow": true, "types": [] }`   |
| `filters.device`                                                                                                                                    | `{ "allow": true, "devices": [] }` |
| `filters.geolocation.allow`                                                                                                                         | `true`                             |
| `filters.referer.allow`                                                                                                                             | `true`                             |
| `filters.query.allow`                                                                                                                               | `true`                             |
| `filters.query.remove_params`                                                                                                                       | `false`                            |
| `filters.domain.allow`, `browser.allow`, `browser_language.allow`, `isp.allow`, `os.allow`, `user_agent.allow`                                      | `true`                             |

**Still required** (no default for the key itself): `name`, `mode`, `pages`, `domain`, `alias`, and in `filters`: `geolocation`, `referer`, `query`, `domain`, `browser`, `browser_language`, `isp`, `os`, `user_agent`, `blacklist`.

Inside required objects you may omit nested defaults (e.g. send `"domain": {}`, `"referer": { "block_null": true, "domains": [] }`).

To target a single ad network, send only that network as `true` (e.g. `"facebook": true`). All other networks default to `false`.

## Pages / offers business rules

Returns `422` if violated:

| Rule               | Detail                                                                                                                                                                       |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Offer `share`      | Within each segmentation group, `share` values must sum to **exactly 100**. Group key = sorted `segmentation.country` join, or `"fallback"` when country list empty/missing. |
| Fallback offer     | At least **one** offer must have no country segmentation (empty/missing `segmentation.country`).                                                                             |
| `mode: "basic"`    | Exactly **one** ad-network flag `true`, and `filters.device.devices` must have **≥ 1** entry.                                                                                |
| `mode: "advanced"` | Zero or one ad network; empty `device.devices` allowed.                                                                                                                      |

## Minimal example

Production-safe body with only non-default values:

```json theme={null}
{
  "name": "My Campaign",
  "mode": "advanced",
  "domain": null,
  "alias": null,
  "pages": {
    "white": { "type": "content", "content": "safe.html" },
    "offers": [{ "type": "content", "content": "offer.html", "share": 100 }]
  },
  "filters": {
    "facebook": true,
    "geolocation": { "countries": ["BR"] },
    "referer": { "block_null": true, "domains": [] },
    "query": { "condition": "some", "params": {}, "rules": {} },
    "domain": {},
    "browser": {},
    "browser_language": { "languages": ["pt-br"] },
    "isp": {},
    "os": {},
    "user_agent": {},
    "blacklist": []
  }
}
```

Omitted here (defaults apply): `active`, all other ad networks, `deny_always` (`false`), `bots`, `proxy`, `adspy`, `cloakup_ai`, `state`, `city`, `network_type`, `device`, and every `allow` / `remove_params` flag.

<Warning>
  For test/review mode only, set `"deny_always": true`. See [Production safety](/guides/production-safety).
</Warning>

## Update (PUT)

`PUT /v1/campaigns/:id` uses the same full body as create. This is **not** a partial PATCH — send the complete `CampaignBody`.
