Skip to main content
Modify an existing media buy using PATCH semantics. Supports campaign-level and package-level updates. Response Time: Instant to days (status: completed, working < 120s, or submitted for manual review)

Scope

update_media_buy operates on any media_buy_id returned by get_media_buys, not just buys created via create_media_buy. Sales agents MUST NOT refuse updates on the basis that a buy was originally created outside AdCP (direct ad-server entry, legacy APIs, manual trafficking). Creation surface is not a supported axis of authorization; account ownership is. When a specific action is unsupported for a given buy for business reasons (contractual obligations, platform constraints, policy), the seller MUST omit only that action from valid_actions on the buy rather than silently rejecting the corresponding update. Creation surface is not a business reason. Sellers MUST NOT return INVALID_STATE on an otherwise-valid update against a non-AdCP-created buy, and MUST NOT return a buy with systematically empty valid_actions simply because it was booked outside AdCP — that pattern is indistinguishable from hiding the buy and violates the Account Ownership vs. Creation Surface rule. PATCH Semantics: Only specified fields are updated; omitted fields remain unchanged. Request Schema: /schemas/3.0.19/media-buy/update-media-buy-request.json Response Schema: /schemas/3.0.19/media-buy/update-media-buy-response.json

Quick Start

Create a media buy, then pause it:

Request Parameters

account and media_buy_id are always required.

Reporting Webhook Object

Configure automated delivery reporting for this media buy: Note: reporting_webhook configures ongoing campaign reporting. push_notification_config is for async operation notifications (e.g., “notify me when this update completes”).

Package Update Object

package_id is required to identify the package to update.

Response

Success Response

Error Response

Note: Responses use discriminated unions - you get either success fields OR errors, never both. Always check for errors before accessing success fields.

Common Scenarios

Update Package Budget

Increase budget for a specific package:

Change Campaign Dates

Extend campaign end date:

Update Targeting

Add or modify geographic restrictions:

Replace Creatives

Swap out creative assignments for a package:

Multiple Package Updates

Update multiple packages in one call:

Cancel a Media Buy

Cancel an entire media buy:
Success response:
NOT_CANCELLABLE error response:
INVALID_STATE error response (e.g., trying to update a completed media buy):
REQUOTE_REQUIRED error response (update changes the parameter envelope the quote was priced against):

Cancel a Package

Cancel a single package while the media buy remains active:

What Can Be Updated

Campaign-Level Updates

Can update:
  • Start/end times (subject to seller approval)
  • Campaign status (active/paused/canceled)
  • Reporting webhook configuration (URL, frequency, metrics)
Cannot update:
  • Media buy ID
  • Brand reference
  • Original package product IDs

Package-Level Updates

Can update:
  • Budget allocation
  • Pacing strategy
  • Bid prices (auction products)
  • Optimization goal (event source, event type, target ROAS/CPA)
  • Targeting overlays
  • Creative assignments
  • Package status (active/paused/canceled)
  • Catalog reference (replace the catalog a catalog-driven package promotes)
  • Creative assignments (before the package’s creative_deadline)
Cannot update:
  • Package ID
  • Product ID
  • Pricing option ID
  • Format IDs (creatives must match existing formats)

Error Handling

Common errors and resolutions: Example error response:

Update Approval

Some updates require seller approval and return pending status:
  • Significant budget increases (threshold varies by seller)
  • Date range changes affecting inventory availability
  • Targeting changes that alter campaign scope
  • Creative changes requiring policy review
When approval is needed, implementation_date will be null and affected_packages contains the proposed state of each package that would be modified:

PATCH Semantics

Only specified fields are updated - omitted fields remain unchanged:
Array replacement: When updating arrays (like creative_assignments), provide the complete new array:

Asynchronous Operations

Updates may be asynchronous, especially with seller approval.

Response Patterns

Synchronous (completed immediately) — campaign-level update (e.g., paused: true):
Synchronous (completed immediately) — package-level update:
Asynchronous (processing):
Poll for completion or use webhooks/streaming. Manual Approval Required:
Will take hours to days.

Protocol-Specific Handling

AdCP tasks work across multiple protocols (MCP, A2A, REST). Each protocol handles async operations differently:
  • Status checking: Polling, webhooks, or streaming
  • Updates: Protocol-specific mechanisms
  • Long-running tasks: Different timeout and notification patterns
See Async Operations for protocol-specific async patterns and examples.

Best Practices

1. Use Precise Updates Update only what needs to change - don’t resend unchanged values. 2. Budget Increases Small incremental increases are more likely to be auto-approved than large jumps. 3. Pause Before Major Changes Pause campaigns before making significant targeting or creative changes to avoid delivery issues. 4. Test with Small Changes Test update workflows with minor changes before critical campaign modifications. 5. Monitor Status Always check response status and implementation_date for approval requirements. 6. Validate Package State Check affected_packages in response to confirm changes were applied correctly.

Usage Notes

  • Updates are atomic - either all changes apply or none do
  • Both media buys and packages can be referenced by publisher IDs
  • Pending states (working, submitted) are normal, not errors
  • Orchestrators MUST handle pending states as part of normal workflow
  • implementation_date indicates when changes take effect (null if pending approval)
  • Inline creatives: The creatives array creates NEW creatives only. To update existing creatives, use sync_creatives. To assign existing library creatives, use creative_assignments in the Package Update object.
Campaign Governance — Modification PhaseWhen a buyer’s account has governance agents configured, sellers MUST call check_governance with media_buy_id, planned_delivery, and phase: "modification" before confirming an update. The governance agent validates change magnitude, budget reallocation, and new parameters against the campaign plan.See the seller integration guide for the full execution check workflow and code example.

Next Steps

After updating a media buy:
  1. Verify Changes: Use get_media_buy_delivery to confirm updates
  2. Upload New Creatives: Use sync_creatives if creative assignments changed
  3. Monitor Performance: Track impact of changes on campaign metrics
  4. Optimize Further: Use provide_performance_feedback for ongoing optimization

Learn More