Skip to main content

Overview

A Package is the delivery unit beneath a Media Buy: one package per product, multiplied by the number of pacing periods. Packages are created when a media buy executes — like media buys, they are not directly creatable. Each package carries its own budget, pacing strategy, bid price, and optimization goals, and reports its own delivery metrics.
Packages are spawned at execution. A product selected on a DRAFT campaign becomes one package per pacing period once the campaign executes and the media buy submits to ADCP.

Where a package sits in the hierarchy

Campaign
└── Media Buy        (one per sales agent)
    └── Package      (one per product per pacing period)
        └── Delivery (impressions, spend, clicks)

Per-package fields

FieldTypeNotes
packageIdstringStable package identifier
budgetnumberBudget allocated to this package
pacingenumPacing strategy: even, asap, front_loaded
bid pricenumberPer-package bid
optimizationGoalsarrayInherited from the media buy at execution (event- or metric-based)

Pacing strategies

StrategyBehavior
evenSpread spend evenly across the package window
asapSpend as fast as inventory allows
front_loadedWeight spend toward the start of the window

Delivery metrics

Delivery metrics roll up per package:
  • impressions
  • spend
  • clicks

How pacing periods create packages

Each product becomes one package per pacing period. The campaign’s pacingPeriods defines time-windowed spend intensity within the flight, in one of two modes:
  • weight — relative weights (e.g. 3.0 = 3x normal); budget is distributed proportionally across periods.
  • budget — an explicit dollar amount per period.
On execute, each product is split into one package per period, with budget set proportionally (weight mode) or explicitly (budget mode). Gaps between periods are treated as pauses — no spend, and no package covers the gap.
Pacing periods can only be modified on DRAFT campaigns. After execution, the package split is locked in. See the Pacing periods guide for mode-by-mode examples.

Example: three periods → three packages per product

{
  "pacingPeriods": {
    "mode": "weight",
    "periods": [
      { "label": "Pre-Black Friday", "start": "2026-11-01T00:00:00Z", "end": "2026-11-26T23:59:59Z", "weight": 1.0 },
      { "label": "Black Friday / Cyber Monday", "start": "2026-11-27T00:00:00Z", "end": "2026-12-02T23:59:59Z", "weight": 3.0 },
      { "label": "Holiday push", "start": "2026-12-03T00:00:00Z", "end": "2026-12-31T23:59:59Z", "weight": 1.5 }
    ]
  }
}
With this configuration, every selected product produces three packages — one per period — each weighted for proportional budget.

Cancel a single package

To cancel one package without touching the rest of its media buy, pass packageIds on a mediaBuys[] entry in PUT /api/v2/buyer/campaigns/:id:
{
  "mediaBuys": [
    {
      "action": "cancel",
      "mediaBuyId": "mb_abc123",
      "packageIds": ["pkg_2"],
      "reason": "format not supported on this device mix"
    }
  ]
}
You can also update a package’s budget and pacing in place by passing it in the packages[] array with action: "update":
{
  "mediaBuys": [
    {
      "action": "update",
      "mediaBuyId": "mb_abc123",
      "packages": [
        { "packageId": "pkg_1", "budget": 15000, "pacing": "even" }
      ]
    }
  ]
}

Media Buy

The parent ADCP transaction that spawns packages

Pacing periods

Time-windowed spend intensity that multiplies products into packages

Campaign

The parent media plan