Documentation Index
Fetch the complete documentation index at: https://agenticadvertisingorg-changeset-release-main.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Collection list management
Collection lists are managed, cacheable artifacts that express βthese collections, filtered by these criteria.β They parallel property lists but operate on content programs (shows, series, podcasts) rather than technical surfaces (domains, apps).Architecture
Tasks overview
| Task | Purpose | Response time |
|---|---|---|
create_collection_list | Create a new collection list | Seconds |
get_collection_list | Fetch list with resolved collections | Seconds (cached) |
update_collection_list | Modify base collections or filters | Seconds |
list_collection_lists | List collection lists for an account | Seconds |
delete_collection_list | Remove a collection list | Seconds |
Base collection sources
Collection lists start with a base set of collections selected through three patterns:distribution_ids
Select collections by platform-independent identifiers. The primary mechanism for cross-publisher exclusion β an IMDb ID identifies a program regardless of which CTV platform carries it.publisher_collections
Select specific collections within a publisherβsadagents.json by collection ID. Use when the publisherβs internal identifiers are known.
publisher_genres
Select all collections from a publisher matching genre criteria. Use when excluding entire content categories from a specific publisher.base_collections is omitted, the list applies filters against the governance agentβs entire collection database.
Filters
Filters narrow the resolved list after base collection selection:| Filter | Type | Logic | Description |
|---|---|---|---|
content_ratings_exclude | ContentRating[] | OR | Exclude collections with any of these ratings |
content_ratings_include | ContentRating[] | OR | Include only collections with these ratings |
genres_exclude | string[] | OR | Exclude collections tagged with any genre |
genres_include | string[] | OR | Include only collections with any genre |
genre_taxonomy | string | β | Taxonomy for genre filter values |
kinds | string[] | OR | Filter to collection kinds (series, publication, event_series, rotation) |
exclude_distribution_ids | DistributionId[] | OR | Always exclude these specific collections |
production_quality | string[] | OR | Filter by production quality tier |
genres_include: ["drama", "comedy"] and genres_exclude: ["crime"] first includes only drama and comedy collections, then removes any tagged as crime. A collection tagged ["drama", "crime"] is excluded β the exclude filter wins. A collection tagged ["sports"] is excluded by the include filter (not in the allowed set).
Content ratings are metadata filters, not content evaluation. content_ratings_exclude: [{ system: "tv_parental", rating: "TV-MA" }] excludes all collections declared as TV-MA. It doesnβt evaluate individual episodes β thatβs content standards.
Genre taxonomy normalizes genre matching between buyers and sellers. Supported taxonomies: iab_content_3.0, iab_content_2.2, gracenote, eidr, apple_genres, google_genres, roku, amazon_genres, custom. The custom value is an escape hatch for publisher-defined taxonomies β buyer and seller negotiate the vocabulary out of band.
create_collection_list
Create a new collection list on a governance agent. Request:auth_token is only returned at creation time. Store it β it authorizes sellers to fetch this list.
get_collection_list
Retrieve a collection list with resolved collections. Sellers call this to fetch and cache the list. Request:tt9999905 was included but has no genre metadata β the governance agent couldnβt confirm it matches the genre filter.
Caching: sellers should cache the resolved collections and re-fetch after cache_valid_until. The default cache duration is 168 hours (one week) because collection metadata changes less frequently than property metadata.
update_collection_list
Modify an existing collection list.base_collections and filters are complete replacements, not patches.
list_collection_lists
List collection lists for an account. Returns metadata only, not resolved collections.delete_collection_list
Remove a collection list. Sellers with cached copies will stop receiving webhook updates.Webhooks
When a collection listβs resolved collections change (new programs matched, ratings updated, programs removed), the governance agent sends a webhook notification:get_collection_list for the updated entries. Recipients MUST verify the signature before processing and MUST dedupe by idempotency_key so retried deliveries of the same change event are ignored.
Live sports
Live sports is one of the largest CTV brand safety concerns. Collection lists handle it through theevent_series kind:
event_series kind filter ensures the list targets live event programming, not documentary series about sports.
Security considerations
Collection lists gate delivery decisions, so theauth_token and webhook callbacks need explicit lifecycle rules. General controls in Security apply; the collection-list-specific rules:
auth_token scope, revocation, and log hygiene. Each token authorizes exactly one list_id; do not reuse a token across lists. Governance agents MUST issue a distinct token per seller that receives the list β shared tokens cannot be revoked per relationship and make list-wide rotation the only response to a single compromise. Tokens MUST NOT be written to logs, cache keys, or metric labels, and error responses from get_collection_list MUST NOT echo the presented token.
delete_collection_list and per-seller revocation differ:
- Normal deletion or end-of-relationship: the token MUST fail subsequent
get_collection_listcalls immediately, but sellers with a cached resolution MAY continue serving from cache untilcache_valid_until. A natural relationship end is not a compromise. - Compromise-driven revocation: the governance agent MUST signal cache invalidation. Either return a reduced
cache_valid_until(at or beforenow) on the next poll that the seller still has access to complete, or emit acollection_list_changedwebhook whosechange_summaryconveys that the list version has been invalidated so cached copies are discarded. Leaving compromised content in seller caches until the scheduled TTL is not acceptable.
webhook_url on update_collection_list is SSRF-equivalent to any other buyer-provided callback URL. Apply the canonical Webhook URL validation (SSRF) rules β HTTPS only, validated IP ranges (IPv4 and IPv6 including ::ffff:0:0/96), connection pinning (not just DNS re-resolution), no redirect following, size and timeout caps.
Webhook signature algorithm. The webhook signature MUST follow the standard webhook signing rules. By default, the RFC 9421 webhook callbacks profile applies: the governance agent signs with its adcp_use: "webhook-signing" key published at the jwks_uri of its agents[] entry in its own brand.json; the subscribing seller verifies covered components @method, @target-uri, @authority, content-type, content-digest, with tag="adcp/webhook-signing/v1". The deprecated HMAC-SHA256 fallback applies only when the subscribing seller populates authentication.credentials on the webhook registration; that path follows the Legacy HMAC-SHA256 fallback rules, and any body signature field under that path is a convenience copy β recipients MUST verify against the headers and MUST NOT trust the body value.
Distribution-ID inputs. Governance agents SHOULD validate identifier format before persisting (IMDb: ^tt\d+$, EIDR: 10.5240/..., Gracenote: vendor-prefixed) and SHOULD enforce per-account rate limits on list mutations to prevent list-bloat DoS. Surface unresolved identifiers in coverage_gaps rather than silently dropping them.
Sharing collection lists with sellers
The pattern matches property list sharing:- Create the collection list on a governance agent
- Store the
auth_tokenfrom the creation response - Pass
collection_listorcollection_list_excludein targeting overlays - Sellers fetch and cache the resolved list using the auth token
- Webhooks notify sellers when the list changes