/schemas/3.3.0-beta.0/media-buy/sync-event-sources-request.json
Response Schema: /schemas/3.3.0-beta.0/media-buy/sync-event-sources-response.json
Quick Start
Configure an event source for purchase tracking:Request Parameters
Event Source Object
Response
Success Response:event_sources- Results for each event source, including both synced and seller-managed sources on the account
errors- Array of operation-level errors (auth failure, account not found)
- All request fields
platform_id- ID assigned to this event source by the seller’s ad platform (optional; new in AdCP 3.3)seller_id- Deprecated compatibility alias forplatform_idaction- What happened:created,updated,unchanged,deleted,archived,failedarchived-truewhen the source is archived. Archived sources are included in every response, discovery-only calls includedaction_source- Type of event source (website pixel, app SDK, etc.)surface- Structured surface this source represents, when the flataction_sourceis too coarsemanaged_by- Who manages this source:buyerorsellersetup- Implementation details (snippet, instructions)health- Event source health assessment (when seller supports health scoring)errors- Per-source errors (only whenaction: "failed")ext- Per-source extension metadata, such as platform-native conversion IDs, attribution-window handles, or raw origin strings
Platform identifier migration (AdCP 3.3)
platform_id identifies the event source in the seller’s ad platform. Continue using event_source_id in AdCP requests, including log_event; the platform ID is for cross-referencing the platform’s object.
When reporting a platform identifier in 3.3 and later 3.x responses, sellers MUST emit both platform_id and the deprecated seller_id alias with identical values, including in discovery-only responses and for seller-managed sources. Both fields remain optional when no platform identifier is available. Buyers MUST prefer platform_id and fall back to seller_id only when platform_id is absent. A response containing only the legacy alias remains schema-valid for compatibility with older sellers.
The alias remains functional throughout 3.x. Removal is no earlier than AdCP 4.0 and follows the six-month deprecation policy. At this location, seller_id continues to mean the event source’s platform ID; it MUST NOT be repurposed to identify the seller.
Event Source Health
Sellers that evaluate event source quality include ahealth object on each source in the response. This is analogous to Snap’s Event Quality Score or Meta’s Event Match Quality — it tells the buyer whether their event integration is working well enough for optimization.
test=false
status, not detail.score. The four-tier status is comparable across all sellers — a buyer agent writes one rule (“require good or better for DR products”) that works everywhere. The detail object is for human dashboards or advanced diagnostics.
Buyer agents can use health data to:
- Gate product selection on event quality (e.g., require
goodor better for DR products) - Surface setup issues to the buyer before campaign launch
- Prioritize which event sources to fix first
Common Scenarios
Discovery Only
Discover all event sources on an account (including seller-managed sources) without making changes. Useful for platform-managed conversion tracking where the seller provides always-on attribution:Multiple Event Sources
Configure separate sources for website and app:Discovering Seller-Managed Sources
Sellers may provide always-on event sources (e.g. Amazon sales attribution). These appear in the response withmanaged_by: "seller" alongside your buyer-managed sources:
conversion_tracking.platform_managed: true indicate the seller provides these sources.
Creator and Owned-Property Sources
Seller-managed creator or owned-property sources use the sameevent_sources array, with a flat action_source for compatibility and surface for structured context:
follow for free durable opt-ins to a channel, profile, feed, list, or podcast. Use subscribe only for paid subscriptions or paid memberships.
Clean Sync with delete_missing
Replace all buyer-managed event sources on the account:Archiving an event source
delete_missing is the only way to remove sources in bulk, and it cannot be undone. To take one source out of use and keep its configuration, send archived: true on that item. To bring it back, send archived: false.
test=false
action: "archived" and echoes archived: true. This and the request above are illustrative fragments, so both fences are test=false:
test=false
- Only change. When
archivedis present on an item, every other field exceptevent_source_idis ignored, the same waysync_audiencestreatsdelete: true. To change both, make two separate calls. Buyers SHOULD omitarchivedunless changing archive state, because a seller ignores the rest of an item that carries it,archived: falseincluded. - While archived. The source keeps its configuration and seller-side identity. It stops accepting events from
log_eventand stops resolving for new optimization goals. - Reversal. Undoing an archive reports
updated, since it changes one field of the source. - Idempotent. Archiving an archived source, or undoing an archive on an active one, reports
unchanged. - Discovery. Archived sources stay in every response, flagged
archived: true, so buyers auditing an account can find and restore them and pagination stays stable. A source this call did not change reportsunchanged. Filter onarchivedclient-side. delete_missing. Archived sources are not removed bydelete_missing, so a buyer that leaves an archived source out of its desired set does not lose the configuration it can restore.- Capability gate. Sellers declare
media_buy.event_source_archive: trueinget_adcp_capabilities. A seller without it MUST reject the whole request with an operation-levelUNSUPPORTED_FEATUREerror and apply none of its items, so a buyer never mistakes an ignored field for an archive. Sellers returnaction: "archived"only to callers that sentarchived, which keeps clients that validateactionstrictly against the older enum working. A seller that predates this field may ignore it and reportupdatedorunchanged, so buyers check the capability first and confirm the echoedarchived: true.
Setup Instructions
The response includes setup details for each event source. Thesetup object tells you how to activate the source:
Error Handling
Best Practices
-
Sync before logging - Always configure event sources before sending events via
log_event. Events sent to unconfigured sources will be rejected. -
Use descriptive IDs - Choose
event_source_idvalues that are meaningful (e.g.web_pixel,app_sdk,crm_import) rather than opaque identifiers. - Specify event_types - Restrict each source to relevant event types for better validation and debugging.
-
Check seller capabilities - Use
get_adcp_capabilitiesto discover supported event types, UID types, and action sources before configuring event sources. -
Install setup snippets - When the response includes
setupinstructions, install the provided snippet before logging events. Server-only sources (snippet_type: "server_only") skip this step. -
Handle seller-managed sources - The response may include sources with
managed_by: "seller"that you didn’t configure. These are always-on and provide additional attribution data.
Next Steps
- Conversion Tracking - Data model, optimization goals, and the end-to-end flow
- log_event - Send marketing events to configured event sources
- create_media_buy - Set optimization goals on packages referencing event sources
- get_media_buy_delivery - Monitor conversion metrics in delivery reports