> ## Documentation Index
> Fetch the complete documentation index at: https://agenticadvertisingorg-snap-format-preview-links.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrating attribution windows

> Migrate AdCP attribution windows from v2 to v3. Replaces integer day counts with structured Duration objects and adds required attribution model field.

# Migrating attribution windows

AdCP 3.0 renames attribution window fields and replaces integer day counts with structured `Duration` objects. An attribution `model` field is now required.

## What changed

| v2 field                      | v3 field                | Change type            |
| ----------------------------- | ----------------------- | ---------------------- |
| `click_window_days` (integer) | `post_click` (Duration) | Renamed + type changed |
| `view_window_days` (integer)  | `post_view` (Duration)  | Renamed + type changed |
| `model` (required)            | `model` (required)      | Unchanged              |

***

## Attribution window object

### Before (v2)

```json theme={null}
{
  "attribution_window": {
    "click_window_days": 7,
    "view_window_days": 1,
    "model": "last_touch"
  }
}
```

### After (v3)

```json theme={null}
{
  "$schema": "https://adcontextprotocol.org/schemas/3.0.19/core/attribution-window.json",
  "post_click": {
    "interval": 7,
    "unit": "days"
  },
  "post_view": {
    "interval": 1,
    "unit": "days"
  },
  "model": "last_touch"
}
```

Key differences:

* **Field renames** — `click_window_days` → `post_click`, `view_window_days` → `post_view`. The new names describe the user action that starts the lookback window.
* **Structured Duration** — Time windows are `{ interval, unit }` objects instead of integer day counts. This enables sub-day granularity (`minutes`, `hours`) and campaign-scoped windows.
* **Attribution model** — Required in both v2 and v3. No change needed.

***

## Duration object

The `Duration` type is shared across frequency caps, attribution windows, and other time-based settings.

```json theme={null}
{
  "interval": 30,
  "unit": "minutes"
}
```

| Unit       | Meaning                                     |
| ---------- | ------------------------------------------- |
| `minutes`  | Clock minutes                               |
| `hours`    | Clock hours                                 |
| `days`     | Calendar days                               |
| `campaign` | Full campaign flight (interval must be `1`) |

***

## Migration steps

<Steps>
  <Step title="Rename attribution fields">
    Replace `click_window_days` with `post_click` and `view_window_days` with `post_view` in all attribution window objects.
  </Step>

  <Step title="Convert integer days to Duration objects">
    Replace integer day counts (e.g., `7`) with structured Duration objects (e.g., `{ "interval": 7, "unit": "days" }`).
  </Step>

  <Step title="Update frequency cap windows">
    Frequency caps have a similar migration. v2 used `suppress_minutes` (integer). v3 uses `suppress` (Duration object) and adds `max_impressions` with a `window` (Duration). Convert `suppress_minutes: 30` to `suppress: { "interval": 30, "unit": "minutes" }`.
  </Step>

  <Step title="Validate against v3 schemas">
    Ensure attribution window objects validate against the `attribution-window.json` schema.
  </Step>
</Steps>

<Card title="Conversion tracking & optimization goals" icon="arrow-right" href="/dist/docs/3.0.19/media-buy/conversion-tracking/index">
  Configure event sources, send conversion events, and set attribution windows.
</Card>

***

**Related:** [Channels](/dist/docs/3.0.19/reference/migration/channels) | [Pricing](/dist/docs/3.0.19/reference/migration/pricing) | [Geo targeting](/dist/docs/3.0.19/reference/migration/geo-targeting) | [Creatives](/dist/docs/3.0.19/reference/migration/creatives) | [Catalogs](/dist/docs/3.0.19/reference/migration/catalogs) | [AdCP 3.0 overview](/dist/docs/3.0.19/reference/whats-new-in-v3)
