Skip to main content
Upload and manage creative assets for media buys. Supports bulk uploads, upsert semantics, and generative creatives. Response Time: Instant to days (returns 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:
Note: When creatives require approval, the response returns status: "submitted" with a task_id. See Async Approval Workflow for handling these cases.

Request Parameters

Creative Object

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)
Error Response:
  • errors - Array of operation-level errors (auth failure, service unavailable)
Note: Responses use discriminated unions - you get either success fields OR errors, never both. Per-creative errors appear in the errors array of individual creative objects when action: "failed". Each creative in success response includes:
  • All request fields
  • platform_id - Platform’s internal ID (when action is not failed)
  • action - What happened: created, updated, unchanged, failed, deleted
  • errors - Array of error messages (only when action: "failed")
  • warnings - Array of non-fatal warnings (optional)
See schema for complete field list: sync-creatives-response.json

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:
Why use creative_ids filter:
  • 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 is status: "submitted". Use webhooks or polling to get the outcome. Final response has status: "completed" with per-creative results:
  • Approved creatives: action: "created" with platform_id
  • Rejected creatives: action: "failed" with error details in errors array
The operation status (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_ids filter 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

Best Practices

  1. Use upsert semantics - Same creative_id updates existing creative rather than creating duplicates. This allows iterative creative development.
  2. Validate first - Use dry_run: true to catch errors before actual upload. This saves bandwidth and processing time.
  3. Batch assignments - Include all package assignments in single sync call to avoid race conditions between updates.
  4. CDN-hosted assets - Use publicly accessible CDN URLs for faster processing. Platforms can fetch assets directly without proxy delays.
  5. Brand manifests - For generative creatives, validate manifest schema before syncing to avoid processing failures.
  6. Check format support - Use list_creative_formats to verify product supports your creative formats before uploading.

Next Steps