completed, or submitted for review that takes hours/days)
Request Schema: /schemas/v2/media-buy/sync-creatives-request.json
Response Schema: /schemas/v2/media-buy/sync-creatives-response.json
Quick Start
Upload creative assets:status: "submitted" with a task_id. See Async Approval Workflow for handling these cases.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
creatives | Creative[] | Yes | Creative assets to upload/update (max 100) |
creative_ids | string[] | No | Optional filter to limit sync scope to specific creative IDs. Only these creatives are affected, others remain untouched. Useful for partial updates and error recovery. |
assignments | object | No | Map of creative_id to array of package_ids for bulk assignment |
dry_run | boolean | No | When true, preview changes without applying them (default: false) |
validation_mode | string | No | Validation strictness: "strict" (default) or "lenient" |
delete_missing | boolean | No | When true, creatives not in this sync are archived (default: false) |
Creative Object
| Field | Type | Required | Description |
|---|---|---|---|
creative_id | string | Yes | Unique identifier for this creative |
name | string | Yes | Human-readable name |
format_id | FormatId | Yes | Format specification (structured object with agent_url and id) |
assets | object | Yes | Assets keyed by role (e.g., {video: {...}, thumbnail: {...}}) |
tags | string[] | No | Searchable tags for creative organization |
Asset Structure
Assets are keyed by role name. Each role contains the asset details:test=false
Assignments Structure
Assignments are at the request level, mapping creative IDs to package IDs:test=false
Response
Success Response:creatives- Results for each creative processed (includes both successful and failed items)dry_run- Boolean indicating if this was a dry run (optional)
errors- Array of operation-level errors (auth failure, service unavailable)
errors array of individual creative objects when action: "failed".
Each creative in success response includes:
- All request fields
platform_id- Platform’s internal ID (whenactionis notfailed)action- What happened:created,updated,unchanged,failed,deletederrors- Array of error messages (only whenaction: "failed")warnings- Array of non-fatal warnings (optional)
Common Scenarios
Bulk Upload
Upload multiple creatives in one call:Generative Creatives
Use the creative agent to generate creatives from a brand manifest. See the Generative Creatives guide for complete workflow details.Dry Run Validation
Validate creative configuration without uploading:Scoped Update with creative_ids Filter
Update only specific creatives from a large library without affecting others:- Scoped updates: Only specified creatives modified, even with 100+ in library
- Error recovery: Retry only failed creatives after bulk sync validation failures
- Performance: Publisher can optimize processing when scope is known upfront
- Safety: Explicit targeting reduces risk of unintended changes
Async Approval Workflow
When creatives require review (brand safety, policy compliance), the initial response isstatus: "submitted". Use webhooks or polling to get the outcome.
Final response has status: "completed" with per-creative results:
- Approved creatives:
action: "created"withplatform_id - Rejected creatives:
action: "failed"with error details inerrorsarray
completed) means the review process finished. Individual creative outcomes are in the action field.
Operation-level failures (auth error, service unavailable) return status: "failed" with no creatives array.
See: Task Management - Async Operations for webhook configuration.
Sync Modes
Upsert (default)
- Creates new creatives or updates existing by
creative_id - Merges package assignments (additive)
- Updates provided fields, leaves others unchanged
- Use
creative_idsfilter to limit scope to specific creatives
Dry Run
- Validates request without making changes
- Returns errors and warnings
- Does not process assets or create creatives
- Use for pre-flight validation checks
Error Handling
| Error Code | Description | Resolution |
|---|---|---|
INVALID_FORMAT | Format not supported by product | Check product’s supported formats via list_creative_formats |
ASSET_PROCESSING_FAILED | Asset file corrupt or invalid | Verify asset meets format requirements (codec, dimensions, duration) |
PACKAGE_NOT_FOUND | Package ID doesn’t exist in media buy | Verify package_id from create_media_buy response |
BRAND_SAFETY_VIOLATION | Creative failed brand safety scan | Review content against publisher’s brand safety guidelines |
FORMAT_MISMATCH | Assets don’t match format requirements | Verify asset types and specifications match format definition |
DUPLICATE_CREATIVE_ID | Creative ID already exists in different media buy | Use unique creative_id or sync to correct media buy |
Best Practices
-
Use upsert semantics - Same
creative_idupdates existing creative rather than creating duplicates. This allows iterative creative development. -
Validate first - Use
dry_run: trueto catch errors before actual upload. This saves bandwidth and processing time. - Batch assignments - Include all package assignments in single sync call to avoid race conditions between updates.
- CDN-hosted assets - Use publicly accessible CDN URLs for faster processing. Platforms can fetch assets directly without proxy delays.
- Brand manifests - For generative creatives, validate manifest schema before syncing to avoid processing failures.
-
Check format support - Use
list_creative_formatsto verify product supports your creative formats before uploading.
Next Steps
- list_creative_formats - Check supported formats before upload
- Generative Creatives Guide - Generate creatives from brand manifests
- get_media_buy_delivery - Monitor creative performance
- Creative Asset Types - Technical requirements for assets