{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://adcontextprotocol.org/schemas/3.2.0-beta.7/core/audience-activation-method.json",
  "title": "Audience Activation Method",
  "x-status": "experimental",
  "description": "One way buyer audience data can reach a seller for targeting. The pattern field discriminates the entry; each pattern carries only its own fields. Two patterns are AdCP-canonical (sync_audiences, tmp_identity_match); the rest describe integration paths that move data outside the protocol while remaining discoverable through it. Vendor identity is a BrandRef domain so new platforms declare a domain rather than waiting on an enum change. Experimental (x-status: experimental): the audience-activation surface — this schema, product.audience_activation, audience_targeting.supported_activation_methods, and the audience_activation_methods product filter — is new and not yet field-tested across parties. Sellers that implement it MUST list media_buy.audience_activation in experimental_features. Per docs/reference/experimental-status, it MAY change between 3.x releases with notice.",
  "type": "object",
  "oneOf": [
    {
      "title": "AdCP audience sync",
      "description": "The seller accepts inline audience member pushes via the AdCP sync_audiences task. Any AdCP-speaking buyer can use this path with no additional integration. This pattern declares inline push only; grant- and distribution-based paths carry their own declarations.",
      "type": "object",
      "properties": {
        "pattern": {
          "type": "string",
          "const": "sync_audiences"
        }
      },
      "required": [
        "pattern"
      ],
      "additionalProperties": false
    },
    {
      "title": "TMP identity match",
      "description": "The seller has configured Trusted Match Protocol identity-match calls to a specific buyer agent. Declarations are per buyer agent because the integration is not generic. Entries MUST be consistent with trusted_match.providers[] where both are present on the product.",
      "type": "object",
      "properties": {
        "pattern": {
          "type": "string",
          "const": "tmp_identity_match"
        },
        "buyer_agent": {
          "type": "object",
          "properties": {
            "agent_url": {
              "type": "string",
              "format": "uri",
              "description": "Buyer agent's registered agent URL. Canonical identifier, mirroring trusted_match.providers[].agent_url."
            }
          },
          "required": [
            "agent_url"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "pattern",
        "buyer_agent"
      ],
      "additionalProperties": false
    },
    {
      "title": "File transfer",
      "description": "Bucket-addressed file exchange over a cloud storage protocol. The buyer moves the bytes; direction declares who hosts the bucket.",
      "type": "object",
      "properties": {
        "pattern": {
          "type": "string",
          "const": "file_transfer"
        },
        "transport": {
          "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.7/enums/cloud-storage-protocol.json",
          "description": "Storage protocol for the exchange."
        },
        "directions": {
          "type": "array",
          "description": "Supported transfer directions. buyer_to_seller: buyer writes to a seller-hosted bucket. seller_to_buyer: seller reads from a buyer-hosted bucket. Absent means unspecified (resolve during account setup), not neither.",
          "items": {
            "type": "string",
            "enum": [
              "buyer_to_seller",
              "seller_to_buyer"
            ]
          },
          "minItems": 1,
          "uniqueItems": true
        },
        "vendor": {
          "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.7/core/brand-ref.json",
          "description": "Platform providing the storage primitive (e.g., the cloud provider's domain)."
        }
      },
      "required": [
        "pattern",
        "transport",
        "vendor"
      ],
      "additionalProperties": false
    },
    {
      "title": "Dataset query",
      "description": "Vendor-mediated query access: the seller reads a dataset the buyer shares through the vendor's grantee-identified sharing mechanism (e.g., Snowflake Secure Data Sharing, Databricks Delta Sharing, BigQuery authorized views). Admissible only when the grant names a principal and no secret is conveyed; token-bearer flows remain out-of-band.",
      "type": "object",
      "properties": {
        "pattern": {
          "type": "string",
          "const": "dataset_query"
        },
        "vendor": {
          "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.7/core/brand-ref.json",
          "description": "Data-sharing platform the seller can consume from."
        },
        "consumer_identities": {
          "type": "array",
          "description": "Principals the buyer grants access to in the vendor's system. identity is always required. cloud and region are optional, paired deployment metadata: omit both for global principals (for example, an IAM principal or federated identity). Their operational meaning is vendor-specific — they may constrain direct-share reachability or select a fulfillment route, or may be routing and cost hints only. They are not compliance boundaries; data-transfer assessments key on the recipient entity's jurisdiction, not the grantee account's region. Optional: sellers MAY instead communicate identities during account setup.",
          "items": {
            "type": "object",
            "properties": {
              "cloud": {
                "type": "string",
                "enum": [
                  "aws",
                  "azure",
                  "gcp"
                ],
                "description": "Cloud family hosting this identity's account."
              },
              "region": {
                "type": "string",
                "description": "Vendor/cloud region identifier. Format follows the cloud family's region naming; not constrained by this schema."
              },
              "identity": {
                "type": "string",
                "minLength": 1,
                "description": "Principal to grant, interpreted relative to the enclosing entry's vendor.domain. Format is vendor-specific and opaque — Snowflake: orgname.accountname; Databricks: sharing recipient identifier; BigQuery: IAM principal."
              }
            },
            "required": [
              "identity"
            ],
            "dependencies": {
              "cloud": [
                "region"
              ],
              "region": [
                "cloud"
              ]
            },
            "additionalProperties": false
          },
          "minItems": 1
        }
      },
      "required": [
        "pattern",
        "vendor"
      ],
      "additionalProperties": false
    },
    {
      "title": "Clean room",
      "description": "Privacy-preserving match in the named vendor's clean room; neither party sees the other's raw rows. A seller MUST declare this audience-activation pattern only when the collaboration can produce an audience targetable on this product; analytics-only or measurement-only room access does not qualify. The declaration does not imply that output is portable. Room setup is bilateral onboarding. Platform-native or partner-distributed output pairs with platform_distribution; queryable output pairs with dataset_query. The resulting audience binds through a dataset or platform_segment source reference on sync_audiences (core/audience-source.json).",
      "type": "object",
      "properties": {
        "pattern": {
          "type": "string",
          "const": "clean_room"
        },
        "vendor": {
          "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.7/core/brand-ref.json",
          "description": "Clean-room product's operating domain."
        }
      },
      "required": [
        "pattern",
        "vendor"
      ],
      "additionalProperties": false
    },
    {
      "title": "Platform distribution",
      "description": "The vendor's rails deliver segments to the seller's destination; the buyer initiates distribution in the vendor's system and binds the arriving segment with a platform_segment source reference on sync_audiences (core/audience-source.json). destination_ref is optional because many vendors create or reveal the account-scoped destination only during bilateral account setup.",
      "type": "object",
      "properties": {
        "pattern": {
          "type": "string",
          "const": "platform_distribution"
        },
        "vendor": {
          "$ref": "https://adcontextprotocol.org/schemas/3.2.0-beta.7/core/brand-ref.json",
          "description": "Distribution platform's operating domain."
        },
        "destination_ref": {
          "type": "string",
          "minLength": 1,
          "maxLength": 256,
          "description": "Opaque, account-scoped destination or seat reference in the vendor's system, as the buyer needs it to initiate distribution. A seller-declared configuration reference, not a buyer-invoked key or secret. Sellers MUST NOT publish one global reference when the vendor configuration is buyer- or account-specific. Omit until account setup has established the destination."
        },
        "bind_expiry_days": {
          "type": "integer",
          "minimum": 1,
          "description": "Window after which the seller MAY expire an unfulfilled platform_segment bind (per-audience action: failed on sync_audiences). Initial vendor distribution is days-scale; windows shorter than the vendor's documented distribution latency are non-conformant."
        }
      },
      "required": [
        "pattern",
        "vendor"
      ],
      "additionalProperties": false
    }
  ],
  "examples": [
    {
      "pattern": "sync_audiences"
    },
    {
      "pattern": "tmp_identity_match",
      "buyer_agent": {
        "agent_url": "https://buyer.example-agent.com"
      }
    },
    {
      "pattern": "file_transfer",
      "transport": "s3",
      "directions": [
        "buyer_to_seller"
      ],
      "vendor": {
        "domain": "object-store.example"
      }
    },
    {
      "pattern": "dataset_query",
      "vendor": {
        "domain": "data-cloud.example"
      },
      "consumer_identities": [
        {
          "cloud": "aws",
          "region": "us-east-1",
          "identity": "SELLERORG.ADCP_INGEST"
        },
        {
          "identity": "serviceAccount:adcp-ingest@publisher.example"
        }
      ]
    },
    {
      "pattern": "clean_room",
      "vendor": {
        "domain": "collaboration-room.example"
      }
    },
    {
      "pattern": "platform_distribution",
      "vendor": {
        "domain": "activation-hub.example"
      },
      "destination_ref": "dest_12345",
      "bind_expiry_days": 14
    }
  ]
}
