update_media_buy
Update campaign and package settings. This task supports partial updates and handles any required approvals. Response Time: Instant to days (returnscompleted, working < 120s, or submitted for hours/days)
Request Schema: https://adcontextprotocol.org/schemas/v1/media-buy/update-media-buy-request.json
Response Schema: https://adcontextprotocol.org/schemas/v1/media-buy/update-media-buy-response.json
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
media_buy_id | string | No* | Publisher’s ID of the media buy to update |
buyer_ref | string | No* | Buyer’s reference for the media buy to update |
active | boolean | No | Pause/resume the entire media buy |
start_time | string | No | New campaign start time: "asap" to start as soon as possible, or ISO 8601 date-time for scheduled start |
end_time | string | No | New end date/time in ISO 8601 format (UTC unless timezone specified) |
packages | PackageUpdate[] | No | Package-specific updates (see Package Update Object below) |
push_notification_config | PushNotificationConfig | No | Optional webhook for async update notifications (see Webhook Configuration below) |
media_buy_id or buyer_ref must be provided
Package Update Object
| Parameter | Type | Required | Description |
|---|---|---|---|
package_id | string | No* | Publisher’s ID of package to update |
buyer_ref | string | No* | Buyer’s reference for the package to update |
budget | number | No | Updated budget allocation for this package in the currency specified by the pricing option |
pacing | string | No | Pacing strategy: "even", "asap", or "front_loaded" |
bid_price | number | No | Updated bid price for auction-based pricing options (only applies to auction packages) |
active | boolean | No | Pause/resume specific package |
targeting_overlay | TargetingOverlay | No | Update targeting for this package (see Targeting Overlay Object in create_media_buy) |
creative_ids | string[] | No | Update creative assignments |
package_id or buyer_ref must be provided
Webhook Configuration (Task-Specific)
For long-running updates (typically requiring approval workflows), you can provide a task-specific webhook to be notified when the update completes:- Update requires manual approval (status:
submitted→completed) - Update takes longer than ~120 seconds (status:
working→completed)
- Protocol fields at top-level (operation_id, task_type, status, etc.)
resultcontains update_media_buy payload, including media_buy_id, affected_packages, implementation_date
Response (Message)
The response includes a human-readable message that:- Confirms what changes were made and their impact
- Explains approval requirements if applicable
- Provides context on budget and pacing changes
- Describes when changes take effect
- MCP: Returned as a
messagefield in the JSON response - A2A: Returned as a text part in the artifact
Response (Payload)
Field Descriptions
- media_buy_id: Publisher’s identifier for the media buy
- buyer_ref: Buyer’s reference identifier for the media buy
- implementation_date: ISO 8601 timestamp when changes take effect
- affected_packages: Array of packages that were modified
- package_id: Publisher’s package identifier
- buyer_ref: Buyer’s reference for the package
Protocol-Specific Examples
The AdCP payload is identical across protocols. Only the request/response wrapper differs.MCP Request
MCP Response (Synchronous)
MCP Response (Asynchronous)
A2A Request
Natural Language Invocation
Explicit Skill Invocation
A2A Response (Synchronous)
A2A returns results as artifacts:A2A Response (Asynchronous with SSE)
Key Differences
- MCP: Direct tool call with arguments, returns flat JSON response
- A2A: Skill invocation with input, returns artifacts with text and data parts
- Payload: The
inputfield in A2A contains the exact same structure as MCP’sarguments
Scenarios
Example 1: Campaign Pause
Request
Response
Message: “Campaign paused successfully. All 2 packages have stopped delivering impressions. You’ve spent 50,000 budget (33.8%). Campaign can be resumed at any time to continue delivery.” Payload:Example 2: Complex Update
Request
Response - Immediate Update
Message: “Campaign updated successfully. CTV package budget increased to $45,000 and switched to front-loaded pacing to allocate more remaining budget earlier in the remaining campaign period. Audio package has been paused. Campaign extended through February 28. Changes take effect immediately.” Payload:Example 3: Update Requiring Approval
Request
Response - Pending Approval
Message: “CTV package budget increase to $150,000 requires manual approval due to the significant change (+400%). This typically takes 2-4 hours during business hours. Your campaign continues to deliver at the current budget until approved. I’ll notify you once the increase is approved.” Payload:PATCH Semantics
This tool follows PATCH update semantics:- Only included fields are modified - Omitted fields remain unchanged
- Null values clear/reset fields - Where applicable
- Packages not mentioned remain unchanged - Only listed packages are updated
Asynchronous Updates
Both MCP and A2A support asynchronous updates for operations that may take time or require approval:MCP Asynchronous Flow
- Initial request returns immediately with task_id and status “working”
- Client polls using update_media_buy_status with the task_id
- Final status includes the complete update results
A2A Asynchronous Flow
- Initial request returns task_id with SSE URL or webhook configuration
- Updates stream via SSE or push to webhooks
- Final event includes complete artifacts with update results
Human-in-the-Loop Scenarios
When updates require approval:- Notify the responsible party
- Maintain current campaign settings
- Apply changes only after approval
- Send status updates throughout the process
Campaign-Level vs Package-Level Updates
Theupdate_media_buy tool provides a unified interface that supports both campaign-level and package-level updates in a single call:
Campaign-Level Updates
active: Pause/resume entire campaignbudget: Adjust overall budget configurationstart_time: Change campaign start date/timeend_time: Extend or shorten campaigntargeting_overlay: Update global targetingpacing: Change delivery strategy
Package-Level Updates
- Apply different changes to multiple packages in one call
- Each package can have different update parameters
- Update multiple packages in one call
- Each package update is processed independently
- Returns immediately on first error
Status Checking
MCP Status Checking
For MCP implementations, use theupdate_media_buy_status endpoint to check the status of an asynchronous media buy update.
Request
Response Examples
Processing:A2A Status Checking
For A2A implementations, task status is delivered via:- Polling: Client can poll using the task_id
- Server-Sent Events (SSE): Real-time updates via the
updatesURL - Webhooks: Push notifications to registered endpoints
Usage Notes
- Updates typically take effect immediately unless approval is required
- Budget increases may require approval based on publisher policies
- Pausing a campaign preserves all settings and can be resumed anytime
- Package-level updates override campaign-level settings
- Some updates may affect how remaining budget is allocated over remaining time
Platform Implementation
How updates map to different platforms:- GAM: Maps to Order and LineItem updates
- Kevel: Maps to Campaign and Flight updates
- Triton: Maps to Campaign and Flight updates
Error Handling
All update operations return a standardized response:Task States
Updates follow standard A2A task states: Normal Flow States:working: Update is being processedinput-required: Awaiting approval or additional informationcompleted: Update successfully applied
failed: Update could not be completedrejected: Update was rejected by approvercancelled: Update was cancelled before completion
Usage Notes
- Updates may require platform approval depending on the changes
- Budget increases typically process immediately
- Budget decreases may have restrictions based on delivered spend
- Pausing takes effect at the next delivery opportunity
- Campaign extensions require sufficient remaining budget
- Creative updates only affect future impressions
- Some platforms may limit which fields can be updated after activation
- When updating budgets, the system automatically recalculates impression goals based on the package’s CPM rate