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

# Campaign Targeting

> Attach structured targeting intent to a campaign through the V3 MCP surface

## Overview

You can attach structured **targeting intent** to a campaign when creating or updating it through the V3 MCP surface (`save_campaign` on `/mcp/v3`). Targeting records what the campaign *intends* to reach — geography, language, device type, daypart, and demographic dimensions — and persists that intent with the campaign object.

<Note>
  Targeting intent is stored and returned on the campaign workspace but is **not yet enforced at delivery**. Delivery enforcement is tracked separately and will be announced when active.
</Note>

## Passing targeting to save\_campaign

The `targeting` parameter is optional. Omit it to leave targeting unset; include it to attach one or more dimensions:

```json theme={null}
{
  "targeting": {
    "geo": [
      {
        "requirementId": "geo-us-only",
        "strength": "required",
        "include": ["US"]
      }
    ],
    "device": [
      {
        "requirementId": "ctv-preferred",
        "strength": "preferred",
        "include": ["ctv"]
      }
    ],
    "language": [
      {
        "requirementId": "en-only",
        "strength": "required",
        "include": ["en"]
      }
    ]
  }
}
```

Each dimension is an array of **requirement entries**. A requirement entry has:

| Field           | Type                          | Description                                                                                        |
| --------------- | ----------------------------- | -------------------------------------------------------------------------------------------------- |
| `requirementId` | string                        | A stable, caller-assigned ID for this requirement. Use it to identify the entry in future updates. |
| `strength`      | `"required"` \| `"preferred"` | Whether the dimension is a hard constraint or a preference.                                        |
| `include`       | string\[]                     | Values to target (must include at least one).                                                      |
| `exclude`       | string\[]                     | Values to exclude (optional).                                                                      |

## Supported dimensions

| Dimension      | Values                                                               |
| -------------- | -------------------------------------------------------------------- |
| `geo`          | ISO 3166-1 alpha-2 country codes (e.g. `"US"`, `"CA"`) and DMA codes |
| `language`     | BCP-47 language tags (e.g. `"en"`, `"fr"`)                           |
| `device`       | `"ctv"`, `"mobile"`, `"desktop"`                                     |
| `dayparts`     | Day-of-week and hour-of-day slots                                    |
| `demographics` | Demographic segment identifiers                                      |

## Reading targeting back

After save, `targeting` appears on the campaign workspace returned by `save_campaign` and by `get(kind: "campaign")`. Existing campaigns with no targeting set omit the field entirely.

## Updating targeting

Pass `targeting` in a `save_campaign` update to replace the stored targeting intent. Partial dimension updates replace the entire `targeting` object — each call is the full desired state, not a patch.

## Backward compatibility

The `targeting` parameter is optional. Existing calls that do not include it continue to work without change. Existing campaigns are not affected.
