adcp

package module
v0.0.0-...-61cb66a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 6, 2026 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Overview

Package adcp provides helpers for building AdCP MCP servers in Go.

Index

Constants

This section is empty.

Variables

View Source
var AnnexIIIPolicyIDs = []string{
	"eu_ai_act_annex_iii",
}

AnnexIIIPolicyIDs are policy IDs whose presence on a plan requires plan.human_review_required = true (EU AI Act Annex III high-risk categories).

View Source
var RegulatedHumanReviewCategories = []string{
	"fair_housing",
	"fair_lending",
	"fair_employment",
	"pharmaceutical_advertising",
}

RegulatedHumanReviewCategories are policy categories whose presence on a plan requires plan.human_review_required = true under the schema's if/then invariant. These regimes are governed by GDPR Art 22 and EU AI Act Annex III, which prohibit solely automated decisions affecting data subjects.

Functions

func ActivateSignalResponse

func ActivateSignalResponse(deployments []Deployment, sandbox bool) (*mcp.CallToolResult, any, error)

ActivateSignalResponse builds an activate_signal response.

func AddTool

func AddTool[In any](server *mcp.Server, name, description string, handler func(ctx context.Context, req *mcp.CallToolRequest, input In) (*mcp.CallToolResult, any, error))

AddTool registers an MCP tool with typed input and output, using a schema that allows additional properties. This is the recommended way to register AdCP tools — it gives you compile-time type safety on both input and output while accepting protocol-level fields (like adcp_major_version) that the storyboard runner sends.

Usage:

type GetProductsInput struct {
    Brief   string `json:"brief,omitempty"`
    Account any    `json:"account,omitempty"`
}

adcp.AddTool(server, "get_products", "Returns available products",
    func(ctx context.Context, req *mcp.CallToolRequest, input GetProductsInput) (*mcp.CallToolResult, any, error) {
        return adcp.ProductsResult(&adcp.ProductsData{Products: products, Sandbox: true})
    })

func BuildCreativeResponse

func BuildCreativeResponse(manifest map[string]any, sandbox bool) (*mcp.CallToolResult, any, error)

BuildCreativeResponse builds a build_creative response.

func CapabilitiesResponse

func CapabilitiesResponse(data *CapabilitiesData) (*mcp.CallToolResult, any, error)

CapabilitiesResponse builds a get_adcp_capabilities response.

func CreateCollectionListResponse

func CreateCollectionListResponse(list *CollectionList, authToken string) (*mcp.CallToolResult, any, error)

CreateCollectionListResponse builds a create_collection_list response.

func CreativeFormatsResponse

func CreativeFormatsResponse(formats []CreativeFormat, sandbox bool) (*mcp.CallToolResult, any, error)

CreativeFormatsResponse builds a list_creative_formats response.

func DeleteCollectionListResponse

func DeleteCollectionListResponse(listID string) (*mcp.CallToolResult, any, error)

DeleteCollectionListResponse builds a delete_collection_list response.

func DeliveryResponse

func DeliveryResponse(data *DeliveryData) (*mcp.CallToolResult, any, error)

DeliveryResponse builds a get_media_buy_delivery response.

func Error

func Error[T any](code string, opts ErrorOptions) (*mcp.CallToolResult, T, error)

Error builds an L3-compliant AdCP error response. Returns isError: true + structuredContent.adcp_error.

func Errorf

func Errorf(code string, opts ErrorOptions) (*mcp.CallToolResult, any, error)

Errorf is a convenience wrapper for Error that returns (*mcp.CallToolResult, any, error), matching the adcp.AddTool handler signature without requiring a type parameter.

func GetCollectionListResponse

func GetCollectionListResponse(list *CollectionList, collections []ResolvedCollection, pagination *PaginationResponse) (*mcp.CallToolResult, any, error)

GetCollectionListResponse builds a get_collection_list response.

func GovernanceResponse

func GovernanceResponse(accounts []GovernanceResult) (*mcp.CallToolResult, any, error)

GovernanceResponse builds a sync_governance response.

func ListCollectionListsResponse

func ListCollectionListsResponse(lists []CollectionList, pagination *PaginationResponse) (*mcp.CallToolResult, any, error)

ListCollectionListsResponse builds a list_collection_lists response.

func ListCreativesResponse

func ListCreativesResponse(creatives []map[string]any) (*mcp.CallToolResult, any, error)

ListCreativesResponse builds a list_creatives response with required query_summary and pagination fields.

func LogEventResponse

func LogEventResponse(received, processed int, matchQuality float64, sandbox bool) (*mcp.CallToolResult, any, error)

LogEventResponse builds a log_event response. matchQuality is the attribution match quality score (0.0-1.0). Use 0 to omit.

func MediaBuyResponse

func MediaBuyResponse(data *MediaBuyData) (*mcp.CallToolResult, any, error)

MediaBuyResponse builds a create_media_buy response.

func MediaBuysResponse

func MediaBuysResponse(mediaBuys []MediaBuyData, sandbox bool) (*mcp.CallToolResult, any, error)

MediaBuysResponse builds a get_media_buys response.

func NewError

func NewError(code string, opts ErrorOptions) error

NewError creates an error that Register handlers can return to produce a typed AdCP error response instead of a generic INTERNAL_ERROR.

Usage in a handler:

return nil, adcp.NewError("BUDGET_TOO_LOW", adcp.ErrorOptions{
    Message: "Budget $500 is below the $1,000 minimum for video",
    Field:   "budget",
})

func PerformanceFeedbackResponse

func PerformanceFeedbackResponse(sandbox bool) (*mcp.CallToolResult, any, error)

PerformanceFeedbackResponse builds a provide_performance_feedback response.

func PreviewCreativeResponse

func PreviewCreativeResponse(creativeID, name, previewURL string, width, height int) (*mcp.CallToolResult, any, error)

PreviewCreativeResponse builds a preview_creative response for a single creative.

func ProductsResponse

func ProductsResponse(data *ProductsData) (*mcp.CallToolResult, any, error)

ProductsResponse builds a get_products response.

func Register

func Register(server *mcp.Server, cfg Config)

Register wires AdCP tool handlers onto an MCP server. Only tools with registered handlers are exposed. supported_protocols is auto-detected.

IdempotencyReplayTTL is required (see Config docs). Register panics at startup if it is unset or out of range — AdCP 3.0 requires sellers to declare adcp.idempotency.replay_ttl_seconds in capabilities.

Account resolution: if ResolveAccount is set, handlers that accept an AccountReference receive the resolved account. If the account is not found, the SDK returns ACCOUNT_NOT_FOUND automatically.

Error handling: handlers can return adcp.NewError("CODE", opts) for typed AdCP errors. Plain errors become INTERNAL_ERROR.

Usage:

adcp.Register(server, adcp.Config{
    IdempotencyReplayTTL: 24 * time.Hour,
    ResolveAccount: func(ctx context.Context, ref adcp.AccountReference) (any, error) {
        return db.FindAccount(ref.Brand.Domain, ref.Operator)
    },
    GetProducts: func(ctx context.Context, acct any, req *adcp.GetProductsRequest) (*adcp.ProductsData, error) {
        return &adcp.ProductsData{Products: catalog.Query(req.Brief)}, nil
    },
    CreateMediaBuy: func(ctx context.Context, acct any, req *adcp.CreateMediaBuyRequest) (*adcp.MediaBuyData, error) {
        return oms.BookCampaign(req)
    },
})

func RegisterTestController

func RegisterTestController(server *mcp.Server, store *TestControllerStore)

RegisterTestController adds the comply_test_controller tool to an MCP server. This tool allows arbitrary state mutations for compliance testing and MUST NOT be registered in production. Gate registration on a sandbox flag in your agent.

func Result

func Result(data any, summary string) (*mcp.CallToolResult, any, error)

Result builds a generic tool response with StructuredContent. Returns 3 values for use with adcp.AddTool handlers.

func Serve

func Serve(createAgent func() *mcp.Server, opts ...ServeOption) error

Serve starts an HTTP server that serves an AdCP MCP agent.

createAgent is called to get the MCP server instance. The handler uses StreamableHTTPHandler from the Go MCP SDK.

server := mcp.NewServer(...)
// add tools...
adcp.Serve(func() *mcp.Server { return server })

func SignalsResponse

func SignalsResponse(signals []Signal, sandbox bool) (*mcp.CallToolResult, any, error)

SignalsResponse builds a get_signals response.

func SyncAccountsResponse

func SyncAccountsResponse(accounts []AccountResult, sandbox bool) (*mcp.CallToolResult, any, error)

SyncAccountsResponse builds a sync_accounts response.

func SyncCatalogsResponse

func SyncCatalogsResponse(catalogs []CatalogResult, sandbox bool) (*mcp.CallToolResult, any, error)

SyncCatalogsResponse builds a sync_catalogs response.

func SyncCreativesResponse

func SyncCreativesResponse(creatives []CreativeResult, sandbox bool) (*mcp.CallToolResult, any, error)

SyncCreativesResponse builds a sync_creatives response.

func SyncEventSourcesResponse

func SyncEventSourcesResponse(sources []EventSourceResult, sandbox bool) (*mcp.CallToolResult, any, error)

SyncEventSourcesResponse builds a sync_event_sources response.

func UpdateCollectionListResponse

func UpdateCollectionListResponse(list *CollectionList) (*mcp.CallToolResult, any, error)

UpdateCollectionListResponse builds an update_collection_list response.

Types

type ADCPVersion

type ADCPVersion struct {
	MajorVersions []int           `json:"major_versions"`
	Idempotency   IdempotencyCaps `json:"idempotency"`
}

type Account

type Account struct {
	AccountID        string          `json:"account_id"`                  // Unique identifier for this account
	Name             string          `json:"name"`                        // Human-readable account name (e.g., 'Acme', 'Acme c/o Pinnacle')
	Advertiser       string          `json:"advertiser,omitempty"`        // The advertiser whose rates apply to this account
	BillingProxy     string          `json:"billing_proxy,omitempty"`     // Optional intermediary who receives invoices on behalf of the advertiser (e.g., a
	Status           string          `json:"status"`                      // Account lifecycle status. See the Accounts Protocol overview for the operations
	Brand            *BrandReference `json:"brand,omitempty"`             // Brand reference identifying the advertiser
	Operator         string          `json:"operator,omitempty"`          // Domain of the entity operating this account. When the brand operates directly, t
	Billing          string          `json:"billing,omitempty"`           // Who is invoiced on this account. operator: seller invoices the operator (agency
	BillingEntity    any             `json:"billing_entity,omitempty"`    // Business entity details for the party responsible for payment. Contains the lega
	RateCard         string          `json:"rate_card,omitempty"`         // Identifier for the rate card applied to this account
	PaymentTerms     string          `json:"payment_terms,omitempty"`     // Payment terms agreed for this account. Binding for all invoices when the account
	CreditLimit      any             `json:"credit_limit,omitempty"`      // Maximum outstanding balance allowed
	Setup            any             `json:"setup,omitempty"`             // Present when status is 'pending_approval'. Contains next steps for completing ac
	AccountScope     string          `json:"account_scope,omitempty"`     // How the seller scoped this account. operator: shared across all brands for this
	GovernanceAgents []any           `json:"governance_agents,omitempty"` // Governance agent endpoints registered on this account. Authentication credential
	ReportingBucket  any             `json:"reporting_bucket,omitempty"`  // Cloud storage bucket where the seller delivers offline reporting files for this
	Sandbox          *bool           `json:"sandbox,omitempty"`           // When true, this is a sandbox account — no real platform calls, no real spend. Fo
	Ext              any             `json:"ext,omitempty"`
}

Account — A billing account representing the relationship between a buyer and seller. The account determines r

type AccountCapabilities

type AccountCapabilities struct {
	RequireOperatorAuth   *bool    `json:"require_operator_auth,omitempty"`
	AuthorizationEndpoint string   `json:"authorization_endpoint,omitempty"`
	SupportedBilling      []string `json:"supported_billing"`
	RequiredForProducts   *bool    `json:"required_for_products,omitempty"`
	AccountFinancials     *bool    `json:"account_financials,omitempty"`
	Sandbox               *bool    `json:"sandbox,omitempty"`
}

AccountCapabilities describes how accounts are established and billed. supported_billing is required when present.

type AccountInput

type AccountInput struct {
	Brand        *BrandReference `json:"brand,omitempty"`
	Operator     string          `json:"operator,omitempty"`
	Billing      string          `json:"billing,omitempty"`
	PaymentTerms string          `json:"payment_terms,omitempty"`
	AccountID    string          `json:"account_id,omitempty"`
	Sandbox      bool            `json:"sandbox,omitempty"`
}

AccountInput is a single account in a sync_accounts request.

type AccountReference

type AccountReference struct {
	AccountID string          `json:"account_id,omitempty"`
	Brand     *BrandReference `json:"brand,omitempty"`
	Operator  string          `json:"operator,omitempty"`
	Sandbox   bool            `json:"sandbox,omitempty"`
}

type AccountResult

type AccountResult struct {
	AccountID    string          `json:"account_id"`
	Brand        *BrandReference `json:"brand,omitempty"`
	Operator     string          `json:"operator,omitempty"`
	Action       string          `json:"action"`
	Status       string          `json:"status"`
	AccountScope string          `json:"account_scope,omitempty"`
	Setup        *AccountSetup   `json:"setup,omitempty"`
	PaymentTerms string          `json:"payment_terms,omitempty"`
	Billing      string          `json:"billing,omitempty"`
}

type AccountSetup

type AccountSetup struct {
	URL     string `json:"url,omitempty"`
	Message string `json:"message,omitempty"`
}

type AccountStatus

type AccountStatus = string

AccountStatus — Advertiser account status in the account lifecycle

const (
	AccountStatusActive          AccountStatus = "active"
	AccountStatusPendingApproval AccountStatus = "pending_approval"
	AccountStatusRejected        AccountStatus = "rejected"
	AccountStatusPaymentRequired AccountStatus = "payment_required"
	AccountStatusSuspended       AccountStatus = "suspended"
	AccountStatusClosed          AccountStatus = "closed"
)

type ActionSource

type ActionSource = string

ActionSource — Where the conversion event originated

const (
	ActionSourceWebsite         ActionSource = "website"
	ActionSourceApp             ActionSource = "app"
	ActionSourceOffline         ActionSource = "offline"
	ActionSourcePhoneCall       ActionSource = "phone_call"
	ActionSourceChat            ActionSource = "chat"
	ActionSourceEmail           ActionSource = "email"
	ActionSourceInStore         ActionSource = "in_store"
	ActionSourceSystemGenerated ActionSource = "system_generated"
	ActionSourceOther           ActionSource = "other"
)

type ActivateSignalRequest

type ActivateSignalRequest struct {
	AdcpMajorVersion     int                `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	Action               string             `json:"action,omitempty"`             // Whether to activate or deactivate the signal. Deactivating removes the segment f
	SignalAgentSegmentID string             `json:"signal_agent_segment_id"`      // The universal identifier for the signal to activate
	Destinations         []DestinationInput `json:"destinations"`                 // Target destination(s) for activation. If the authenticated caller matches one of
	PricingOptionID      string             `json:"pricing_option_id,omitempty"`  // The pricing option selected from the signal's pricing_options in the get_signals
	Account              *AccountReference  `json:"account,omitempty"`            // Account for this activation. Associates with a commercial relationship establish
	IdempotencyKey       string             `json:"idempotency_key"`              // Client-generated unique key for this request. Prevents duplicate activations on
	Context              any                `json:"context,omitempty"`
	Ext                  any                `json:"ext,omitempty"`
}

ActivateSignalRequest — Request parameters for activating or deactivating a signal on deployment targets

type ActivationKey

type ActivationKey struct {
	Type      string `json:"type"`
	SegmentID string `json:"segment_id,omitempty"`
	Key       string `json:"key,omitempty"`
	Value     string `json:"value,omitempty"`
}

type AdcpError

type AdcpError = map[string]any

Type aliases for $ref targets from schemas not directly generated.

type AdcpProtocol

type AdcpProtocol = string

AdcpProtocol — AdCP protocols for task categorization — referenced by tasks-list-request, webho

const (
	AdcpProtocolMediaBuy              AdcpProtocol = "media-buy"
	AdcpProtocolSignals               AdcpProtocol = "signals"
	AdcpProtocolGovernance            AdcpProtocol = "governance"
	AdcpProtocolCreative              AdcpProtocol = "creative"
	AdcpProtocolBrand                 AdcpProtocol = "brand"
	AdcpProtocolSponsoredIntelligence AdcpProtocol = "sponsored-intelligence"
)

type AdjustmentKind

type AdjustmentKind = string

AdjustmentKind — Categorizes how a price adjustment affects the transaction

const (
	AdjustmentKindFee        AdjustmentKind = "fee"
	AdjustmentKindDiscount   AdjustmentKind = "discount"
	AdjustmentKindCommission AdjustmentKind = "commission"
	AdjustmentKindSettlement AdjustmentKind = "settlement"
)

type AdvertiserIndustry

type AdvertiserIndustry = string

AdvertiserIndustry — Standardized advertiser industry classification. Top-level categories classify t

const (
	AdvertiserIndustryAutomotive                     AdvertiserIndustry = "automotive"
	AdvertiserIndustryAutomotiveElectricVehicles     AdvertiserIndustry = "automotive.electric_vehicles"
	AdvertiserIndustryAutomotivePartsAccessories     AdvertiserIndustry = "automotive.parts_accessories"
	AdvertiserIndustryAutomotiveLuxury               AdvertiserIndustry = "automotive.luxury"
	AdvertiserIndustryBeautyCosmetics                AdvertiserIndustry = "beauty_cosmetics"
	AdvertiserIndustryBeautyCosmeticsSkincare        AdvertiserIndustry = "beauty_cosmetics.skincare"
	AdvertiserIndustryBeautyCosmeticsFragrance       AdvertiserIndustry = "beauty_cosmetics.fragrance"
	AdvertiserIndustryBeautyCosmeticsHaircare        AdvertiserIndustry = "beauty_cosmetics.haircare"
	AdvertiserIndustryCannabis                       AdvertiserIndustry = "cannabis"
	AdvertiserIndustryCpg                            AdvertiserIndustry = "cpg"
	AdvertiserIndustryCpgPersonalCare                AdvertiserIndustry = "cpg.personal_care"
	AdvertiserIndustryCpgHousehold                   AdvertiserIndustry = "cpg.household"
	AdvertiserIndustryDating                         AdvertiserIndustry = "dating"
	AdvertiserIndustryEducation                      AdvertiserIndustry = "education"
	AdvertiserIndustryEducationHigherEducation       AdvertiserIndustry = "education.higher_education"
	AdvertiserIndustryEducationOnlineLearning        AdvertiserIndustry = "education.online_learning"
	AdvertiserIndustryEducationK12                   AdvertiserIndustry = "education.k12"
	AdvertiserIndustryEnergyUtilities                AdvertiserIndustry = "energy_utilities"
	AdvertiserIndustryEnergyUtilitiesRenewable       AdvertiserIndustry = "energy_utilities.renewable"
	AdvertiserIndustryFashionApparel                 AdvertiserIndustry = "fashion_apparel"
	AdvertiserIndustryFashionApparelLuxury           AdvertiserIndustry = "fashion_apparel.luxury"
	AdvertiserIndustryFashionApparelSportswear       AdvertiserIndustry = "fashion_apparel.sportswear"
	AdvertiserIndustryFinance                        AdvertiserIndustry = "finance"
	AdvertiserIndustryFinanceBanking                 AdvertiserIndustry = "finance.banking"
	AdvertiserIndustryFinanceInsurance               AdvertiserIndustry = "finance.insurance"
	AdvertiserIndustryFinanceInvestment              AdvertiserIndustry = "finance.investment"
	AdvertiserIndustryFinanceCryptocurrency          AdvertiserIndustry = "finance.cryptocurrency"
	AdvertiserIndustryFoodBeverage                   AdvertiserIndustry = "food_beverage"
	AdvertiserIndustryFoodBeverageAlcohol            AdvertiserIndustry = "food_beverage.alcohol"
	AdvertiserIndustryFoodBeverageRestaurants        AdvertiserIndustry = "food_beverage.restaurants"
	AdvertiserIndustryFoodBeveragePackagedGoods      AdvertiserIndustry = "food_beverage.packaged_goods"
	AdvertiserIndustryGamblingBetting                AdvertiserIndustry = "gambling_betting"
	AdvertiserIndustryGamblingBettingSportsBetting   AdvertiserIndustry = "gambling_betting.sports_betting"
	AdvertiserIndustryGamblingBettingCasino          AdvertiserIndustry = "gambling_betting.casino"
	AdvertiserIndustryGaming                         AdvertiserIndustry = "gaming"
	AdvertiserIndustryGamingMobile                   AdvertiserIndustry = "gaming.mobile"
	AdvertiserIndustryGamingConsolePc                AdvertiserIndustry = "gaming.console_pc"
	AdvertiserIndustryGamingEsports                  AdvertiserIndustry = "gaming.esports"
	AdvertiserIndustryGovernmentNonprofit            AdvertiserIndustry = "government_nonprofit"
	AdvertiserIndustryGovernmentNonprofitPolitical   AdvertiserIndustry = "government_nonprofit.political"
	AdvertiserIndustryGovernmentNonprofitCharity     AdvertiserIndustry = "government_nonprofit.charity"
	AdvertiserIndustryHealthcare                     AdvertiserIndustry = "healthcare"
	AdvertiserIndustryHealthcarePharmaceutical       AdvertiserIndustry = "healthcare.pharmaceutical"
	AdvertiserIndustryHealthcareMedicalDevices       AdvertiserIndustry = "healthcare.medical_devices"
	AdvertiserIndustryHealthcareWellness             AdvertiserIndustry = "healthcare.wellness"
	AdvertiserIndustryHomeGarden                     AdvertiserIndustry = "home_garden"
	AdvertiserIndustryHomeGardenFurniture            AdvertiserIndustry = "home_garden.furniture"
	AdvertiserIndustryHomeGardenHomeImprovement      AdvertiserIndustry = "home_garden.home_improvement"
	AdvertiserIndustryMediaEntertainment             AdvertiserIndustry = "media_entertainment"
	AdvertiserIndustryMediaEntertainmentPodcasts     AdvertiserIndustry = "media_entertainment.podcasts"
	AdvertiserIndustryMediaEntertainmentMusic        AdvertiserIndustry = "media_entertainment.music"
	AdvertiserIndustryMediaEntertainmentFilmTv       AdvertiserIndustry = "media_entertainment.film_tv"
	AdvertiserIndustryMediaEntertainmentPublishing   AdvertiserIndustry = "media_entertainment.publishing"
	AdvertiserIndustryMediaEntertainmentLiveEvents   AdvertiserIndustry = "media_entertainment.live_events"
	AdvertiserIndustryPets                           AdvertiserIndustry = "pets"
	AdvertiserIndustryProfessionalServices           AdvertiserIndustry = "professional_services"
	AdvertiserIndustryProfessionalServicesLegal      AdvertiserIndustry = "professional_services.legal"
	AdvertiserIndustryProfessionalServicesConsulting AdvertiserIndustry = "professional_services.consulting"
	AdvertiserIndustryRealEstate                     AdvertiserIndustry = "real_estate"
	AdvertiserIndustryRealEstateResidential          AdvertiserIndustry = "real_estate.residential"
	AdvertiserIndustryRealEstateCommercial           AdvertiserIndustry = "real_estate.commercial"
	AdvertiserIndustryRecruitmentHr                  AdvertiserIndustry = "recruitment_hr"
	AdvertiserIndustryRetail                         AdvertiserIndustry = "retail"
	AdvertiserIndustryRetailEcommerce                AdvertiserIndustry = "retail.ecommerce"
	AdvertiserIndustryRetailDepartmentStores         AdvertiserIndustry = "retail.department_stores"
	AdvertiserIndustrySportsFitness                  AdvertiserIndustry = "sports_fitness"
	AdvertiserIndustrySportsFitnessEquipment         AdvertiserIndustry = "sports_fitness.equipment"
	AdvertiserIndustrySportsFitnessTeamsLeagues      AdvertiserIndustry = "sports_fitness.teams_leagues"
	AdvertiserIndustryTechnology                     AdvertiserIndustry = "technology"
	AdvertiserIndustryTechnologySoftware             AdvertiserIndustry = "technology.software"
	AdvertiserIndustryTechnologyHardware             AdvertiserIndustry = "technology.hardware"
	AdvertiserIndustryTechnologyAiMl                 AdvertiserIndustry = "technology.ai_ml"
	AdvertiserIndustryTelecom                        AdvertiserIndustry = "telecom"
	AdvertiserIndustryTelecomMobileCarriers          AdvertiserIndustry = "telecom.mobile_carriers"
	AdvertiserIndustryTelecomInternetProviders       AdvertiserIndustry = "telecom.internet_providers"
	AdvertiserIndustryTransportationLogistics        AdvertiserIndustry = "transportation_logistics"
	AdvertiserIndustryTravelHospitality              AdvertiserIndustry = "travel_hospitality"
	AdvertiserIndustryTravelHospitalityAirlines      AdvertiserIndustry = "travel_hospitality.airlines"
	AdvertiserIndustryTravelHospitalityHotels        AdvertiserIndustry = "travel_hospitality.hotels"
	AdvertiserIndustryTravelHospitalityCruise        AdvertiserIndustry = "travel_hospitality.cruise"
	AdvertiserIndustryTravelHospitalityTourism       AdvertiserIndustry = "travel_hospitality.tourism"
)

type AgeRestrictionCaps

type AgeRestrictionCaps struct {
	Supported           *bool    `json:"supported,omitempty"`
	VerificationMethods []string `json:"verification_methods,omitempty"`
}

type AgeVerificationMethod

type AgeVerificationMethod = string

AgeVerificationMethod — Methods for verifying user age for compliance. Does not include 'inferred' as it

const (
	AgeVerificationMethodFacialAgeEstimation AgeVerificationMethod = "facial_age_estimation"
	AgeVerificationMethodIDDocument          AgeVerificationMethod = "id_document"
	AgeVerificationMethodDigitalID           AgeVerificationMethod = "digital_id"
	AgeVerificationMethodCreditCard          AgeVerificationMethod = "credit_card"
	AgeVerificationMethodWorldID             AgeVerificationMethod = "world_id"
)

type ArtifactWebhookPayload

type ArtifactWebhookPayload struct {
	IdempotencyKey string `json:"idempotency_key"`      // Sender-generated key stable across retries of the same webhook event. Sales agen
	MediaBuyID     string `json:"media_buy_id"`         // Media buy identifier these artifacts belong to
	BatchID        string `json:"batch_id"`             // Unique identifier for this batch of artifacts. Use for deduplication and acknowl
	Timestamp      string `json:"timestamp"`            // When this batch was generated (ISO 8601)
	Artifacts      []any  `json:"artifacts"`            // Content artifacts from delivered impressions
	Pagination     any    `json:"pagination,omitempty"` // Pagination info when batching large artifact sets
	Ext            any    `json:"ext,omitempty"`
}

ArtifactWebhookPayload — Payload sent by sales agents to orchestrators when pushing content artifacts for governance validati

func (*ArtifactWebhookPayload) IdempotencyKeyPtr

func (p *ArtifactWebhookPayload) IdempotencyKeyPtr() *string

type AssessmentStatus

type AssessmentStatus = string

AssessmentStatus — Standardized quality level for health and readiness assessments. Comparable acro

const (
	AssessmentStatusInsufficient AssessmentStatus = "insufficient"
	AssessmentStatusMinimum      AssessmentStatus = "minimum"
	AssessmentStatusGood         AssessmentStatus = "good"
	AssessmentStatusExcellent    AssessmentStatus = "excellent"
)

type AssetContentType

type AssetContentType = string

AssetContentType — Types of content that can be used as creative assets. Describes what KIND of con

const (
	AssetContentTypeImage      AssetContentType = "image"
	AssetContentTypeVideo      AssetContentType = "video"
	AssetContentTypeAudio      AssetContentType = "audio"
	AssetContentTypeText       AssetContentType = "text"
	AssetContentTypeMarkdown   AssetContentType = "markdown"
	AssetContentTypeHTML       AssetContentType = "html"
	AssetContentTypeCSS        AssetContentType = "css"
	AssetContentTypeJavascript AssetContentType = "javascript"
	AssetContentTypeVast       AssetContentType = "vast"
	AssetContentTypeDaast      AssetContentType = "daast"
	AssetContentTypeURL        AssetContentType = "url"
	AssetContentTypeWebhook    AssetContentType = "webhook"
	AssetContentTypeBrief      AssetContentType = "brief"
	AssetContentTypeCatalog    AssetContentType = "catalog"
)

type AssetSlot

type AssetSlot struct {
	ItemType           string   `json:"item_type"`
	AssetID            string   `json:"asset_id"`
	AssetType          string   `json:"asset_type"`
	Required           bool     `json:"required"`
	Description        string   `json:"description,omitempty"`
	AcceptedMediaTypes []string `json:"accepted_media_types,omitempty"`
}

type AttributionModel

type AttributionModel = string

AttributionModel — Attribution model used for conversion measurement

const (
	AttributionModelLastTouch  AttributionModel = "last_touch"
	AttributionModelFirstTouch AttributionModel = "first_touch"
	AttributionModelLinear     AttributionModel = "linear"
	AttributionModelTimeDecay  AttributionModel = "time_decay"
	AttributionModelDataDriven AttributionModel = "data_driven"
)

type AttributionWindow

type AttributionWindow struct {
	PostClick *Duration `json:"post_click,omitempty"`
	PostView  *Duration `json:"post_view,omitempty"`
	Model     string    `json:"model"`
}

AttributionWindow is the singular attribution config applied to a specific optimization goal or delivery response. Mirrors core/attribution-window.json and is distinct from AttributionWindowOption (plural capability options).

type AttributionWindowOption

type AttributionWindowOption struct {
	EventType string     `json:"event_type,omitempty"`
	PostClick []Duration `json:"post_click"`
	PostView  []Duration `json:"post_view,omitempty"`
}

AttributionWindowOption describes one attribution-window configuration a buyer can pick. post_click is required when present.

type AudienceConstraints

type AudienceConstraints struct {
	Include []any `json:"include,omitempty"` // Desired audience criteria. The seller's targeting should align with these. Each
	Exclude []any `json:"exclude,omitempty"` // Excluded audience criteria. The seller's targeting must not overlap with these.
}

AudienceConstraints — Buyer-defined audience targeting constraints for a campaign plan. Specifies who the campaign should

type AudienceSource

type AudienceSource = string

AudienceSource — Origin of an audience segment in delivery reporting breakdowns. Only 'synced' au

const (
	AudienceSourceSynced      AudienceSource = "synced"
	AudienceSourcePlatform    AudienceSource = "platform"
	AudienceSourceThirdParty  AudienceSource = "third_party"
	AudienceSourceLookalike   AudienceSource = "lookalike"
	AudienceSourceRetargeting AudienceSource = "retargeting"
	AudienceSourceUnknown     AudienceSource = "unknown"
)

type AudienceStatus

type AudienceStatus = string

AudienceStatus — Matching status of a synced audience on a seller platform. Present when the sync

const (
	AudienceStatusProcessing AudienceStatus = "processing"
	AudienceStatusReady      AudienceStatus = "ready"
	AudienceStatusTooSmall   AudienceStatus = "too_small"
)

type AudienceTargetingCaps

type AudienceTargetingCaps struct {
	SupportedIdentifierTypes   []string              `json:"supported_identifier_types"`
	SupportsPlatformCustomerID *bool                 `json:"supports_platform_customer_id,omitempty"`
	SupportedUIDTypes          []string              `json:"supported_uid_types,omitempty"`
	MinimumAudienceSize        int                   `json:"minimum_audience_size"`
	MatchingLatencyHours       *MatchingLatencyRange `json:"matching_latency_hours,omitempty"`
}

AudienceTargetingCaps describes audience matching capabilities. supported_identifier_types and minimum_audience_size are required when present.

type AuthScheme

type AuthScheme = string

AuthScheme — Authentication schemes for push notification endpoints

const (
	AuthSchemeBearer     AuthScheme = "Bearer"
	AuthSchemeHMACSHA256 AuthScheme = "HMAC-SHA256"
)

type AvailableMetric

type AvailableMetric = string

AvailableMetric — Standard delivery and performance metrics available for reporting

const (
	AvailableMetricImpressions        AvailableMetric = "impressions"
	AvailableMetricSpend              AvailableMetric = "spend"
	AvailableMetricClicks             AvailableMetric = "clicks"
	AvailableMetricCtr                AvailableMetric = "ctr"
	AvailableMetricVideoCompletions   AvailableMetric = "video_completions"
	AvailableMetricCompletionRate     AvailableMetric = "completion_rate"
	AvailableMetricConversions        AvailableMetric = "conversions"
	AvailableMetricConversionValue    AvailableMetric = "conversion_value"
	AvailableMetricRoas               AvailableMetric = "roas"
	AvailableMetricCostPerAcquisition AvailableMetric = "cost_per_acquisition"
	AvailableMetricNewToBrandRate     AvailableMetric = "new_to_brand_rate"
	AvailableMetricViewability        AvailableMetric = "viewability"
	AvailableMetricEngagementRate     AvailableMetric = "engagement_rate"
	AvailableMetricViews              AvailableMetric = "views"
	AvailableMetricCompletedViews     AvailableMetric = "completed_views"
	AvailableMetricLeads              AvailableMetric = "leads"
	AvailableMetricReach              AvailableMetric = "reach"
	AvailableMetricFrequency          AvailableMetric = "frequency"
	AvailableMetricGrps               AvailableMetric = "grps"
	AvailableMetricQuartileData       AvailableMetric = "quartile_data"
	AvailableMetricDoohMetrics        AvailableMetric = "dooh_metrics"
	AvailableMetricCostPerClick       AvailableMetric = "cost_per_click"
)

type BaseCollectionSource

type BaseCollectionSource struct {
	SelectionType   string           `json:"selection_type"`
	Identifiers     []DistributionID `json:"identifiers,omitempty"`
	PublisherDomain string           `json:"publisher_domain,omitempty"`
	CollectionIDs   []string         `json:"collection_ids,omitempty"`
	Genres          []string         `json:"genres,omitempty"`
	GenreTaxonomy   string           `json:"genre_taxonomy,omitempty"`
}

BaseCollectionSource selects collections for a collection list. Use one of the constructor functions: ByDistributionIDs, ByPublisherCollections, ByPublisherGenres.

func ByDistributionIDs

func ByDistributionIDs(ids []DistributionID) BaseCollectionSource

ByDistributionIDs creates a source that selects collections by platform-independent identifiers.

func ByPublisherCollections

func ByPublisherCollections(domain string, collectionIDs []string) BaseCollectionSource

ByPublisherCollections creates a source that selects specific collections within a publisher.

func ByPublisherGenres

func ByPublisherGenres(domain string, genres []string, taxonomy string) BaseCollectionSource

ByPublisherGenres creates a source that selects collections from a publisher by genre.

type BillingMeasurement

type BillingMeasurement struct {
	Vendor             *BrandReference `json:"vendor"`
	MaxVariancePercent float64         `json:"max_variance_percent,omitempty"`
	MeasurementWindow  string          `json:"measurement_window,omitempty"`
}

BillingMeasurement identifies the vendor whose measurement is authoritative for invoicing.

type BrandAgentType

type BrandAgentType = string

BrandAgentType — Functional roles for agents declared in brand.json. Each type represents a disti

const (
	BrandAgentTypeBrand       BrandAgentType = "brand"
	BrandAgentTypeRights      BrandAgentType = "rights"
	BrandAgentTypeMeasurement BrandAgentType = "measurement"
	BrandAgentTypeGovernance  BrandAgentType = "governance"
	BrandAgentTypeCreative    BrandAgentType = "creative"
	BrandAgentTypeSales       BrandAgentType = "sales"
	BrandAgentTypeBuying      BrandAgentType = "buying"
	BrandAgentTypeSignals     BrandAgentType = "signals"
)

type BrandCapabilities

type BrandCapabilities struct {
	Rights              *bool    `json:"rights,omitempty"`
	RightTypes          []string `json:"right_types,omitempty"`
	AvailableUses       []string `json:"available_uses,omitempty"`
	GenerationProviders []string `json:"generation_providers,omitempty"`
	Description         string   `json:"description,omitempty"`
}

BrandCapabilities is the brand protocol capability block.

type BrandReference

type BrandReference struct {
	Domain                  string                   `json:"domain"`
	BrandID                 string                   `json:"brand_id,omitempty"`
	Industries              []string                 `json:"industries,omitempty"`
	DataSubjectContestation *DataSubjectContestation `json:"data_subject_contestation,omitempty"`
}

BrandReference identifies a brand by domain, optionally scoped to a specific brand within a house portfolio. Industries and DataSubjectContestation are inline overrides for callers that cannot modify the brand's canonical brand.json — used by governance to resolve Annex III vertical detection and GDPR Art 22(3) contestation contacts when brand.json is out of reach.

type BuildCreativeRequest

type BuildCreativeRequest struct {
	AdcpMajorVersion    int               `json:"adcp_major_version,omitempty"`    // The AdCP major version the buyer's payloads conform to. Sellers validate against
	Message             string            `json:"message,omitempty"`               // Natural language instructions for the transformation or generation. For pure gen
	CreativeManifest    *CreativeManifest `json:"creative_manifest,omitempty"`     // Creative manifest to transform or generate from. For pure generation, this shoul
	CreativeID          string            `json:"creative_id,omitempty"`           // Reference to a creative in the agent's library. The creative agent resolves this
	ConceptID           string            `json:"concept_id,omitempty"`            // Creative concept containing the creative. Creative agents SHOULD assign globally
	MediaBuyID          string            `json:"media_buy_id,omitempty"`          // Media buy identifier for tag generation context. When the creative agent is also
	PackageID           string            `json:"package_id,omitempty"`            // Package identifier within the media buy. Used with media_buy_id when the creativ
	TargetFormatID      *FormatRef        `json:"target_format_id,omitempty"`      // Single format ID to generate. Mutually exclusive with target_format_ids. The for
	TargetFormatIDs     []FormatRef       `json:"target_format_ids,omitempty"`     // Array of format IDs to generate in a single call. Mutually exclusive with target
	Account             *AccountReference `json:"account,omitempty"`               // Account reference for pricing and billing. When present, the creative agent appl
	Brand               *BrandReference   `json:"brand,omitempty"`                 // Brand reference for creative generation. Resolved to full brand identity (colors
	Quality             string            `json:"quality,omitempty"`               // Quality tier for generation. 'draft' produces fast, lower-fidelity output for it
	ItemLimit           int               `json:"item_limit,omitempty"`            // Maximum number of catalog items to use when generating. When a catalog asset con
	IncludePreview      *bool             `json:"include_preview,omitempty"`       // When true, requests the creative agent to include preview renders in the respons
	PreviewInputs       []any             `json:"preview_inputs,omitempty"`        // Input sets for preview generation when include_preview is true. Each input set d
	PreviewQuality      string            `json:"preview_quality,omitempty"`       // Render quality for inline preview when include_preview is true. 'draft' produces
	PreviewOutputFormat string            `json:"preview_output_format,omitempty"` // Output format for preview renders when include_preview is true. 'url' returns pr
	MacroValues         map[string]string `json:"macro_values,omitempty"`          // Macro values to pre-substitute into the output manifest's assets. Keys are unive
	IdempotencyKey      string            `json:"idempotency_key"`                 // Client-generated unique key for this request. Prevents duplicate creative genera
	Context             any               `json:"context,omitempty"`
	Ext                 any               `json:"ext,omitempty"`
}

BuildCreativeRequest — Request to transform, generate, or retrieve a creative manifest. Supports three modes: (1) generatio

type BuildCreativeResult

type BuildCreativeResult struct {
	CreativeManifest map[string]any `json:"creative_manifest"`
	Sandbox          bool           `json:"sandbox,omitempty"`
}

type CanceledBy

type CanceledBy = string

CanceledBy — Identifies which party initiated a cancellation.

const (
	CanceledByBuyer  CanceledBy = "buyer"
	CanceledBySeller CanceledBy = "seller"
)

type CancellationFee

type CancellationFee struct {
	Type   string  `json:"type"` // "percent_remaining", "full_commitment", "fixed_fee", "none"
	Rate   float64 `json:"rate,omitempty"`
	Amount float64 `json:"amount,omitempty"`
}

CancellationFee describes the fee charged for insufficient cancellation notice.

type CancellationPolicy

type CancellationPolicy struct {
	NoticePeriod    Duration        `json:"notice_period"`
	CancellationFee CancellationFee `json:"cancellation_fee"`
}

CancellationPolicy declares cancellation terms for a product.

type CapabilitiesData

type CapabilitiesData struct {
	ADCP                  *ADCPVersion                   `json:"adcp"`
	SupportedProtocols    []string                       `json:"supported_protocols"`
	Account               *AccountCapabilities           `json:"account,omitempty"`
	MediaBuy              *MediaBuyCapabilities          `json:"media_buy,omitempty"`
	Signals               *SignalsCapabilities           `json:"signals,omitempty"`
	Governance            *GovernanceCapabilities        `json:"governance,omitempty"`
	SponsoredIntelligence *SICapabilities                `json:"sponsored_intelligence,omitempty"`
	Brand                 *BrandCapabilities             `json:"brand,omitempty"`
	Creative              *CreativeCapabilities          `json:"creative,omitempty"`
	RequestSigning        *RequestSigningCapabilities    `json:"request_signing,omitempty"`
	WebhookSigning        *WebhookSigningCapabilities    `json:"webhook_signing,omitempty"`
	Identity              *IdentityCapabilities          `json:"identity,omitempty"`
	ComplianceTesting     *ComplianceTestingCapabilities `json:"compliance_testing,omitempty"`
	Specialisms           []string                       `json:"specialisms,omitempty"`
	ExtensionsSupported   []string                       `json:"extensions_supported,omitempty"`
	LastUpdated           string                         `json:"last_updated,omitempty"`
	Errors                []AdcpError                    `json:"errors,omitempty"`
	Context               any                            `json:"context,omitempty"`
	Ext                   any                            `json:"ext,omitempty"`
}

CapabilitiesData is the typed get_adcp_capabilities response. Per the 3.0 schema, adcp (with idempotency) and supported_protocols are required; all other blocks are optional and set only when the relevant protocol is supported.

type Catalog

type Catalog struct {
	CatalogID         string           `json:"catalog_id,omitempty"`          // Buyer's identifier for this catalog. Required when syncing via sync_catalogs. Wh
	Name              string           `json:"name,omitempty"`                // Human-readable name for this catalog (e.g., 'Summer Products 2025', 'Amsterdam S
	Type              string           `json:"type"`                          // Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (e
	URL               string           `json:"url,omitempty"`                 // URL to an external catalog feed. The platform fetches and resolves items from th
	FeedFormat        string           `json:"feed_format,omitempty"`         // Format of the external feed at url. Required when url points to a non-AdCP feed
	UpdateFrequency   string           `json:"update_frequency,omitempty"`    // How often the platform should re-fetch the feed from url. Only applicable when u
	Items             []map[string]any `json:"items,omitempty"`               // Inline catalog data. The item schema depends on the catalog type: Offering objec
	IDs               []string         `json:"ids,omitempty"`                 // Filter catalog to specific item IDs. For offering-type catalogs, these are offer
	Gtins             []string         `json:"gtins,omitempty"`               // Filter product-type catalogs by GTIN identifiers for cross-retailer catalog matc
	Tags              []string         `json:"tags,omitempty"`                // Filter catalog to items with these tags. Tags are matched using OR logic — items
	Category          string           `json:"category,omitempty"`            // Filter catalog to items in this category (e.g., 'beverages/soft-drinks', 'chef-p
	Query             string           `json:"query,omitempty"`               // Natural language filter for catalog items (e.g., 'all pasta sauces under $5', 'a
	ConversionEvents  []string         `json:"conversion_events,omitempty"`   // Event types that represent conversions for items in this catalog. Declares what
	ContentIDType     string           `json:"content_id_type,omitempty"`     // Identifier type that the event's content_ids field should be matched against for
	FeedFieldMappings []any            `json:"feed_field_mappings,omitempty"` // Declarative normalization rules for external feeds. Maps non-standard feed field
}

Catalog — A typed data feed. Catalogs carry the items, locations, stock levels, or pricing that publishers use

type CatalogAction

type CatalogAction = string

CatalogAction — Action taken on a catalog during sync operation

const (
	CatalogActionCreated   CatalogAction = "created"
	CatalogActionUpdated   CatalogAction = "updated"
	CatalogActionUnchanged CatalogAction = "unchanged"
	CatalogActionFailed    CatalogAction = "failed"
	CatalogActionDeleted   CatalogAction = "deleted"
)

type CatalogInput

type CatalogInput struct {
	CatalogID string           `json:"catalog_id"`
	Items     []map[string]any `json:"items,omitempty"`
}

CatalogInput is a single catalog in a sync_catalogs request.

type CatalogItemStatus

type CatalogItemStatus = string

CatalogItemStatus — Approval status of an individual item within a synced catalog. Platforms review

const (
	CatalogItemStatusApproved CatalogItemStatus = "approved"
	CatalogItemStatusPending  CatalogItemStatus = "pending"
	CatalogItemStatusRejected CatalogItemStatus = "rejected"
	CatalogItemStatusWarning  CatalogItemStatus = "warning"
)

type CatalogResult

type CatalogResult struct {
	CatalogID     string `json:"catalog_id"`
	Action        string `json:"action"`
	ItemCount     int    `json:"item_count"`
	ItemsApproved int    `json:"items_approved"`
}

type CatalogType

type CatalogType = string

CatalogType — The type of catalog feed. Determines the item schema and how the platform resolv

const (
	CatalogTypeOffering    CatalogType = "offering"
	CatalogTypeProduct     CatalogType = "product"
	CatalogTypeInventory   CatalogType = "inventory"
	CatalogTypeStore       CatalogType = "store"
	CatalogTypePromotion   CatalogType = "promotion"
	CatalogTypeHotel       CatalogType = "hotel"
	CatalogTypeFlight      CatalogType = "flight"
	CatalogTypeJob         CatalogType = "job"
	CatalogTypeVehicle     CatalogType = "vehicle"
	CatalogTypeRealEstate  CatalogType = "real_estate"
	CatalogTypeEducation   CatalogType = "education"
	CatalogTypeDestination CatalogType = "destination"
	CatalogTypeApp         CatalogType = "app"
)

type Channels

type Channels = string

Channels — Standardized advertising media channels describing how buyers allocate budget. C

const (
	ChannelsDisplay               Channels = "display"
	ChannelsOlv                   Channels = "olv"
	ChannelsSocial                Channels = "social"
	ChannelsSearch                Channels = "search"
	ChannelsCtv                   Channels = "ctv"
	ChannelsLinearTv              Channels = "linear_tv"
	ChannelsRadio                 Channels = "radio"
	ChannelsStreamingAudio        Channels = "streaming_audio"
	ChannelsPodcast               Channels = "podcast"
	ChannelsDooh                  Channels = "dooh"
	ChannelsOoh                   Channels = "ooh"
	ChannelsPrint                 Channels = "print"
	ChannelsCinema                Channels = "cinema"
	ChannelsEmail                 Channels = "email"
	ChannelsGaming                Channels = "gaming"
	ChannelsRetailMedia           Channels = "retail_media"
	ChannelsInfluencer            Channels = "influencer"
	ChannelsAffiliate             Channels = "affiliate"
	ChannelsProductPlacement      Channels = "product_placement"
	ChannelsSponsoredIntelligence Channels = "sponsored_intelligence"
)

type CheckGovernanceRequest

type CheckGovernanceRequest struct {
	AdcpMajorVersion    int            `json:"adcp_major_version,omitempty"`   // The AdCP major version the buyer's payloads conform to. Sellers validate against
	PlanID              string         `json:"plan_id"`                        // Campaign governance plan identifier. The plan uniquely scopes the account and op
	Caller              string         `json:"caller"`                         // URL of the agent making the request.
	PurchaseType        string         `json:"purchase_type,omitempty"`        // The type of financial commitment being checked. Determines which budget allocati
	Tool                string         `json:"tool,omitempty"`                 // The AdCP tool being checked (e.g., 'create_media_buy', 'acquire_rights', 'activa
	Payload             map[string]any `json:"payload,omitempty"`              // The full tool arguments as they would be sent to the seller. Present on intent c
	GovernanceContext   string         `json:"governance_context,omitempty"`   // Governance context token from a prior check_governance response. Pass this on su
	Phase               string         `json:"phase,omitempty"`                // The phase of the governed action's lifecycle. 'purchase': initial commitment (cr
	PlannedDelivery     any            `json:"planned_delivery,omitempty"`     // What the seller will actually deliver. Present on execution checks.
	DeliveryMetrics     any            `json:"delivery_metrics,omitempty"`     // Actual delivery performance data. MUST be present for 'delivery' phase. The gove
	ModificationSummary string         `json:"modification_summary,omitempty"` // Human-readable summary of what changed. SHOULD be present for 'modification' pha
	InvoiceRecipient    any            `json:"invoice_recipient,omitempty"`    // Invoice recipient from the purchase request. MUST be present when the tool paylo
	Context             any            `json:"context,omitempty"`
	Ext                 any            `json:"ext,omitempty"`
}

CheckGovernanceRequest — Universal governance check for campaign actions. The governance agent infers the check type from the

type CheckGovernanceResponse

type CheckGovernanceResponse struct {
	CheckID             string   `json:"check_id"`                       // Unique identifier for this governance check record. Use in report_plan_outcome t
	Status              string   `json:"status"`                         // Governance decision. 'approved': proceed as planned. 'denied': do not proceed. '
	PlanID              string   `json:"plan_id"`                        // Echoed from request.
	Explanation         string   `json:"explanation"`                    // Human-readable explanation of the governance decision.
	Findings            []any    `json:"findings,omitempty"`             // Specific issues found during the governance check. Present when status is 'denie
	Conditions          []any    `json:"conditions,omitempty"`           // Present when status is 'conditions'. Specific adjustments the caller must make.
	ExpiresAt           string   `json:"expires_at,omitempty"`           // When this approval expires. Present when status is 'approved' or 'conditions'. T
	NextCheck           string   `json:"next_check,omitempty"`           // When the seller should next call check_governance with delivery metrics. Present
	CategoriesEvaluated []string `json:"categories_evaluated,omitempty"` // Governance categories evaluated during this check.
	PoliciesEvaluated   []string `json:"policies_evaluated,omitempty"`   // Registry policy IDs evaluated during this check.
	GovernanceContext   string   `json:"governance_context,omitempty"`   // Governance context token for this governed action. The buyer MUST attach this to
	Context             any      `json:"context,omitempty"`
	Ext                 any      `json:"ext,omitempty"`
}

CheckGovernanceResponse — Governance agent's response to a check request. Returns whether the action is approved under the gov

type CloudStorageProtocol

type CloudStorageProtocol = string

CloudStorageProtocol — Cloud storage protocols supported for offline file delivery

const (
	CloudStorageProtocolS3        CloudStorageProtocol = "s3"
	CloudStorageProtocolGcs       CloudStorageProtocol = "gcs"
	CloudStorageProtocolAzureBlob CloudStorageProtocol = "azure_blob"
)

type CoBrandingRequirement

type CoBrandingRequirement = string

CoBrandingRequirement — Co-branding policy for creatives (retailer/publisher brand inclusion)

const (
	CoBrandingRequirementRequired CoBrandingRequirement = "required"
	CoBrandingRequirementOptional CoBrandingRequirement = "optional"
	CoBrandingRequirementNone     CoBrandingRequirement = "none"
)

type CollectionCadence

type CollectionCadence = string

CollectionCadence — How frequently a collection releases new installments

const (
	CollectionCadenceDaily     CollectionCadence = "daily"
	CollectionCadenceWeekly    CollectionCadence = "weekly"
	CollectionCadenceMonthly   CollectionCadence = "monthly"
	CollectionCadenceSeasonal  CollectionCadence = "seasonal"
	CollectionCadenceEvent     CollectionCadence = "event"
	CollectionCadenceIrregular CollectionCadence = "irregular"
)

type CollectionList

type CollectionList struct {
	ListID             string                 `json:"list_id"`
	Name               string                 `json:"name"`
	Description        string                 `json:"description,omitempty"`
	Principal          string                 `json:"principal,omitempty"`
	BaseCollections    []BaseCollectionSource `json:"base_collections,omitempty"`
	Filters            *CollectionListFilters `json:"filters,omitempty"`
	Brand              *BrandReference        `json:"brand,omitempty"`
	WebhookURL         string                 `json:"webhook_url,omitempty"`
	CacheDurationHours int                    `json:"cache_duration_hours,omitempty"`
	CreatedAt          string                 `json:"created_at,omitempty"`
	UpdatedAt          string                 `json:"updated_at,omitempty"`
	CollectionCount    int                    `json:"collection_count,omitempty"`
}

CollectionList is a managed collection list with optional dynamic filters.

type CollectionListChangedWebhook

type CollectionListChangedWebhook struct {
	IdempotencyKey  string `json:"idempotency_key"`             // Sender-generated key stable across retries of the same webhook event. Governance
	Event           string `json:"event"`                       // The event type
	ListID          string `json:"list_id"`                     // ID of the collection list that changed
	ListName        string `json:"list_name,omitempty"`         // Name of the collection list
	ChangeSummary   any    `json:"change_summary,omitempty"`    // Summary of changes to the resolved list
	ResolvedAt      string `json:"resolved_at"`                 // When the list was re-resolved
	CacheValidUntil string `json:"cache_valid_until,omitempty"` // When the consumer should refresh from the governance agent
	Signature       string `json:"signature"`                   // HMAC-SHA256 webhook signature over {unix_timestamp}.{raw_http_body_bytes} using
	Ext             any    `json:"ext,omitempty"`
}

CollectionListChangedWebhook — Webhook notification sent when a collection list's resolved collections change. Contains a summary o

func (*CollectionListChangedWebhook) IdempotencyKeyPtr

func (p *CollectionListChangedWebhook) IdempotencyKeyPtr() *string

type CollectionListFilters

type CollectionListFilters struct {
	ContentRatingsExclude  []ContentRating  `json:"content_ratings_exclude,omitempty"`
	ContentRatingsInclude  []ContentRating  `json:"content_ratings_include,omitempty"`
	GenresExclude          []string         `json:"genres_exclude,omitempty"`
	GenresInclude          []string         `json:"genres_include,omitempty"`
	GenreTaxonomy          string           `json:"genre_taxonomy,omitempty"`
	Kinds                  []string         `json:"kinds,omitempty"`
	ExcludeDistributionIDs []DistributionID `json:"exclude_distribution_ids,omitempty"`
	ProductionQuality      []string         `json:"production_quality,omitempty"`
}

CollectionListFilters dynamically modify a collection list when resolved. Include filters are allowlists; exclude filters are blocklists. When both are present, include is applied first, then exclude narrows further.

type CollectionListRef

type CollectionListRef struct {
	AgentURL  string `json:"agent_url"`
	ListID    string `json:"list_id"`
	AuthToken string `json:"auth_token,omitempty"`
}

CollectionListRef references an externally managed collection list.

type CollectionPagination

type CollectionPagination struct {
	MaxResults int    `json:"max_results,omitempty"` // 1-10000, default 1000
	Cursor     string `json:"cursor,omitempty"`
}

CollectionPagination has higher limits than standard pagination because collection lists can contain thousands of entries.

type CollectionRelationship

type CollectionRelationship = string

CollectionRelationship — How two collections are related. References are scoped to the same get_products

const (
	CollectionRelationshipSpinoff   CollectionRelationship = "spinoff"
	CollectionRelationshipCompanion CollectionRelationship = "companion"
	CollectionRelationshipSequel    CollectionRelationship = "sequel"
	CollectionRelationshipPrequel   CollectionRelationship = "prequel"
	CollectionRelationshipCrossover CollectionRelationship = "crossover"
)

type CollectionStatus

type CollectionStatus = string

CollectionStatus — Lifecycle status of a collection

const (
	CollectionStatusActive   CollectionStatus = "active"
	CollectionStatusHiatus   CollectionStatus = "hiatus"
	CollectionStatusEnded    CollectionStatus = "ended"
	CollectionStatusUpcoming CollectionStatus = "upcoming"
)

type ComplianceTestingCapabilities

type ComplianceTestingCapabilities struct {
	Scenarios []string `json:"scenarios"`
}

ComplianceTestingCapabilities declares supported comply_test_controller scenarios. scenarios is required when the block is present.

type ComplyTestControllerRequest

type ComplyTestControllerRequest struct {
	Scenario string `json:"scenario"`         // Test scenario to execute. 'list_scenarios' discovers supported scenarios. 'force
	Params   any    `json:"params,omitempty"` // Scenario-specific parameters. Required for all scenarios except list_scenarios.
	Context  any    `json:"context,omitempty"`
	Ext      any    `json:"ext,omitempty"`
}

ComplyTestControllerRequest — Request payload for the comply_test_controller tool. Triggers seller-side state transitions for comp

type ComplyTestControllerResponse

type ComplyTestControllerResponse = any

ComplyTestControllerResponse is a discriminated union — use the appropriate variant type.

type Config

type Config struct {
	// Sandbox marks all responses as sandbox/test data.
	Sandbox bool

	// IdempotencyReplayTTL is how long this agent retains a canonical response
	// for an idempotency_key. Required by AdCP 3.0 — sellers MUST declare their
	// replay window. Must be in [1h, 7d]; 24h is recommended. Register panics
	// if this is zero or outside the valid range.
	IdempotencyReplayTTL time.Duration

	// Capabilities, if set, declares the full typed capabilities response.
	// supported_protocols and adcp.idempotency are filled in automatically if
	// left empty. Use this to declare account / media_buy / signals / etc.
	// blocks. If nil, a minimal response with just adcp + supported_protocols
	// is built from the registered handlers.
	Capabilities *CapabilitiesData

	// ResolveAccount converts an AccountReference (brand + operator) to your
	// internal account object. Called automatically before handlers that receive
	// an account field. Return nil for unknown accounts (SDK sends ACCOUNT_NOT_FOUND).
	ResolveAccount func(ctx context.Context, ref AccountReference) (any, error)

	// --- Media buy ---
	SyncAccounts   func(ctx context.Context, req *SyncAccountsRequest) ([]AccountResult, error)
	SyncGovernance func(ctx context.Context, req *SyncGovernanceRequest) ([]GovernanceResult, error)
	GetProducts    func(ctx context.Context, acct any, req *GetProductsRequest) (*ProductsData, error)
	CreateMediaBuy func(ctx context.Context, acct any, req *CreateMediaBuyRequest) (*MediaBuyData, error)
	GetMediaBuys   func(ctx context.Context, acct any, req *GetMediaBuysRequest) ([]MediaBuyData, error)
	GetDelivery    func(ctx context.Context, acct any, req *GetMediaBuyDeliveryRequest) (*DeliveryData, error)

	// --- Creative ---
	ListCreativeFormats func(ctx context.Context, req *ListCreativeFormatsRequest) ([]CreativeFormat, error)
	SyncCreatives       func(ctx context.Context, req *SyncCreativesRequest) ([]CreativeResult, error)

	// --- Signals ---
	GetSignals     func(ctx context.Context, req *GetSignalsRequest) ([]Signal, error)
	ActivateSignal func(ctx context.Context, req *ActivateSignalRequest) ([]Deployment, error)

	// --- Collection ---
	CreateCollectionList func(ctx context.Context, req *CreateCollectionListRequest) (*CreateCollectionListResult, error)
	GetCollectionList    func(ctx context.Context, req *GetCollectionListRequest) (*GetCollectionListResult, error)
	UpdateCollectionList func(ctx context.Context, req *UpdateCollectionListRequest) (*CollectionList, error)
	DeleteCollectionList func(ctx context.Context, req *DeleteCollectionListRequest) error
	ListCollectionLists  func(ctx context.Context, req *ListCollectionListsRequest) (*ListCollectionListsResult, error)
}

Config declares which AdCP tools your agent supports. Set only the handlers you implement — unset handlers mean the tool isn't registered.

Handlers can return adcp.NewError for typed AdCP errors, or plain errors (which become INTERNAL_ERROR).

type ConsentBasis

type ConsentBasis = string

ConsentBasis — Common GDPR lawful bases relevant to advertising. Covers the Article 6(1) bases

const (
	ConsentBasisConsent            ConsentBasis = "consent"
	ConsentBasisLegitimateInterest ConsentBasis = "legitimate_interest"
	ConsentBasisContract           ConsentBasis = "contract"
	ConsentBasisLegalObligation    ConsentBasis = "legal_obligation"
)

type ContentIDType

type ContentIDType = string

ContentIDType — Identifier type used in content_ids on conversion events to match back to catalo

const (
	ContentIDTypeSku           ContentIDType = "sku"
	ContentIDTypeGtin          ContentIDType = "gtin"
	ContentIDTypeOfferingID    ContentIDType = "offering_id"
	ContentIDTypeJobID         ContentIDType = "job_id"
	ContentIDTypeHotelID       ContentIDType = "hotel_id"
	ContentIDTypeFlightID      ContentIDType = "flight_id"
	ContentIDTypeVehicleID     ContentIDType = "vehicle_id"
	ContentIDTypeListingID     ContentIDType = "listing_id"
	ContentIDTypeStoreID       ContentIDType = "store_id"
	ContentIDTypeProgramID     ContentIDType = "program_id"
	ContentIDTypeDestinationID ContentIDType = "destination_id"
	ContentIDTypeAppID         ContentIDType = "app_id"
)

type ContentRating

type ContentRating struct {
	System string `json:"system"`
	Rating string `json:"rating"`
}

ContentRating is a content advisory rating using a specified rating system.

type ContentRatingSystem

type ContentRatingSystem = string

ContentRatingSystem — Rating systems for content advisory classifications

const (
	ContentRatingSystemTvParental ContentRatingSystem = "tv_parental"
	ContentRatingSystemMpaa       ContentRatingSystem = "mpaa"
	ContentRatingSystemPodcast    ContentRatingSystem = "podcast"
	ContentRatingSystemEsrb       ContentRatingSystem = "esrb"
	ContentRatingSystemBbfc       ContentRatingSystem = "bbfc"
	ContentRatingSystemFsk        ContentRatingSystem = "fsk"
	ContentRatingSystemAcb        ContentRatingSystem = "acb"
	ContentRatingSystemChvrs      ContentRatingSystem = "chvrs"
	ContentRatingSystemCsa        ContentRatingSystem = "csa"
	ContentRatingSystemPegi       ContentRatingSystem = "pegi"
	ContentRatingSystemCustom     ContentRatingSystem = "custom"
)

type ContentStandardsCaps

type ContentStandardsCaps struct {
	SupportsLocalEvaluation *bool    `json:"supports_local_evaluation,omitempty"`
	SupportedChannels       []string `json:"supported_channels,omitempty"`
	SupportsWebhookDelivery *bool    `json:"supports_webhook_delivery,omitempty"`
}

ContentStandardsCaps describes content-standards evaluation and delivery.

type ControllerError

type ControllerError struct {
	Success      bool   `json:"success"`
	Error        string `json:"error"`                   // Structured error code
	ErrorDetail  string `json:"error_detail,omitempty"`  // Human-readable explanation of the failure
	CurrentState any    `json:"current_state,omitempty"` // Current state of the entity, or null if not found
	Context      any    `json:"context,omitempty"`
	Ext          any    `json:"ext,omitempty"`
}

ControllerError — The scenario failed — invalid transition, unknown entity, unsupported scenario, or invalid params

type ConversionTrackingCaps

type ConversionTrackingCaps struct {
	MultiSourceEventDedup      *bool                     `json:"multi_source_event_dedup,omitempty"`
	SupportedEventTypes        []string                  `json:"supported_event_types,omitempty"`
	SupportedUIDTypes          []string                  `json:"supported_uid_types,omitempty"`
	SupportedHashedIdentifiers []string                  `json:"supported_hashed_identifiers,omitempty"`
	SupportedActionSources     []string                  `json:"supported_action_sources,omitempty"`
	AttributionWindows         []AttributionWindowOption `json:"attribution_windows,omitempty"`
}

ConversionTrackingCaps describes seller-level conversion event capabilities. AttributionWindows (plural) lists window options a buyer can choose from — distinct from the singular AttributionWindow in core/attribution-window.json used on an optimization goal.

type CreateCollectionListRequest

type CreateCollectionListRequest struct {
	AdcpMajorVersion int                    `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	Account          *AccountReference      `json:"account,omitempty"`            // Account that will own the list. Pass a natural key (brand, operator, optional sa
	Name             string                 `json:"name"`                         // Human-readable name for the list
	Description      string                 `json:"description,omitempty"`        // Description of the list's purpose
	BaseCollections  []BaseCollectionSource `json:"base_collections,omitempty"`   // Array of collection sources to evaluate. Each entry is a discriminated union: di
	Filters          *CollectionListFilters `json:"filters,omitempty"`            // Dynamic filters to apply when resolving the list
	Brand            *BrandReference        `json:"brand,omitempty"`              // Brand reference. When provided, the agent automatically applies appropriate rule
	IdempotencyKey   string                 `json:"idempotency_key"`              // Client-generated unique key for this request. Prevents duplicate collection list
	Context          any                    `json:"context,omitempty"`
	Ext              any                    `json:"ext,omitempty"`
}

CreateCollectionListRequest — Request parameters for creating a new collection list

type CreateCollectionListResult

type CreateCollectionListResult struct {
	List      *CollectionList
	AuthToken string
}

CreateCollectionListResult is the return type for Config.CreateCollectionList.

type CreateMediaBuyError

type CreateMediaBuyError struct {
	Errors  []AdcpError `json:"errors"` // Array of errors explaining why the operation failed
	Context any         `json:"context,omitempty"`
	Ext     any         `json:"ext,omitempty"`
}

CreateMediaBuyError — Error response - operation failed, no media buy created

type CreateMediaBuyRequest

type CreateMediaBuyRequest struct {
	AdcpMajorVersion       int              `json:"adcp_major_version,omitempty"`     // The AdCP major version the buyer's payloads conform to. Sellers validate against
	IdempotencyKey         string           `json:"idempotency_key"`                  // Client-generated unique key for this request. If a request with the same idempot
	PlanID                 string           `json:"plan_id,omitempty"`                // Campaign governance plan identifier. Required when the account has governance_ag
	Account                AccountReference `json:"account"`                          // Account to bill for this media buy. Pass a natural key (brand, operator, optiona
	ProposalID             string           `json:"proposal_id,omitempty"`            // ID of a proposal from get_products to execute. When provided with total_budget,
	TotalBudget            any              `json:"total_budget,omitempty"`           // Total budget for the media buy when executing a proposal. The publisher applies
	Packages               []PackageInput   `json:"packages,omitempty"`               // Array of package configurations. Required when not using proposal_id. When execu
	Brand                  BrandReference   `json:"brand"`                            // Brand reference for this media buy. Resolved to full brand identity at execution
	AdvertiserIndustry     string           `json:"advertiser_industry,omitempty"`    // Industry classification for this specific campaign. A brand may operate across m
	InvoiceRecipient       any              `json:"invoice_recipient,omitempty"`      // Override the account's default billing entity for this specific buy. When provid
	IoAcceptance           any              `json:"io_acceptance,omitempty"`          // Acceptance of an insertion order from a committed proposal. Required when the pr
	PoNumber               string           `json:"po_number,omitempty"`              // Purchase order number for tracking
	AgencyEstimateNumber   string           `json:"agency_estimate_number,omitempty"` // Agency estimate or authorization number. Primary financial reference for broadca
	StartTime              any              `json:"start_time"`
	EndTime                string           `json:"end_time"`                           // Campaign end date/time in ISO 8601 format
	PushNotificationConfig any              `json:"push_notification_config,omitempty"` // Optional webhook configuration for async task status notifications. Publisher wi
	ReportingWebhook       any              `json:"reporting_webhook,omitempty"`        // Optional webhook configuration for automated reporting delivery
	ArtifactWebhook        any              `json:"artifact_webhook,omitempty"`         // Optional webhook configuration for content artifact delivery. Used by governance
	Context                any              `json:"context,omitempty"`
	Ext                    any              `json:"ext,omitempty"`
}

CreateMediaBuyRequest — Request parameters for creating a media buy. Supports two modes: (1) Manual mode - provide packages

type CreateMediaBuyResponse

type CreateMediaBuyResponse = any

CreateMediaBuyResponse is a discriminated union — use the appropriate variant type.

type CreateMediaBuySubmitted

type CreateMediaBuySubmitted struct {
	Status  string      `json:"status"`            // Task-level status literal. Discriminates this async envelope from the synchronou
	TaskID  string      `json:"task_id"`           // Task handle the buyer uses with tasks/get, and that the seller references on pus
	Message string      `json:"message,omitempty"` // Optional human-readable explanation of why the task is submitted — e.g., 'Awaiti
	Errors  []AdcpError `json:"errors,omitempty"`  // Optional advisory errors accompanying the submitted envelope. Use only for non-b
	Context any         `json:"context,omitempty"`
	Ext     any         `json:"ext,omitempty"`
}

CreateMediaBuySubmitted — Async task envelope returned when the media buy cannot be confirmed before the response is emitted —

type CreateMediaBuySuccess

type CreateMediaBuySuccess struct {
	MediaBuyID       string    `json:"media_buy_id"`                // Seller's unique identifier for the created media buy
	Account          *Account  `json:"account,omitempty"`           // Account billed for this media buy. Includes advertiser, billing proxy (if any),
	InvoiceRecipient any       `json:"invoice_recipient,omitempty"` // Per-buy invoice recipient, echoed from the request when provided. Confirms the s
	Status           string    `json:"status,omitempty"`            // Initial media buy status. Either 'pending_creatives' (awaiting creative assets),
	ConfirmedAt      string    `json:"confirmed_at,omitempty"`      // ISO 8601 timestamp when this media buy was confirmed by the seller. A successful
	CreativeDeadline string    `json:"creative_deadline,omitempty"` // ISO 8601 timestamp for creative upload deadline
	Revision         int       `json:"revision,omitempty"`          // Initial revision number for this media buy. Use in subsequent update_media_buy r
	ValidActions     []string  `json:"valid_actions,omitempty"`     // Actions the buyer can perform on this media buy after creation. Saves a round-tr
	Packages         []Package `json:"packages"`                    // Array of created packages with complete state information
	PlannedDelivery  any       `json:"planned_delivery,omitempty"`  // The seller's interpreted delivery parameters. Describes what the seller will act
	Sandbox          *bool     `json:"sandbox,omitempty"`           // When true, this response contains simulated data from sandbox mode.
	Context          any       `json:"context,omitempty"`
	Ext              any       `json:"ext,omitempty"`
}

CreateMediaBuySuccess — Success response - media buy created successfully

type CreativeAction

type CreativeAction = string

CreativeAction — Action taken on a creative during sync operation

const (
	CreativeActionCreated   CreativeAction = "created"
	CreativeActionUpdated   CreativeAction = "updated"
	CreativeActionUnchanged CreativeAction = "unchanged"
	CreativeActionFailed    CreativeAction = "failed"
	CreativeActionDeleted   CreativeAction = "deleted"
)

type CreativeAgentCapability

type CreativeAgentCapability = string

CreativeAgentCapability — Capabilities supported by creative agents for format handling

const (
	CreativeAgentCapabilityValidation CreativeAgentCapability = "validation"
	CreativeAgentCapabilityAssembly   CreativeAgentCapability = "assembly"
	CreativeAgentCapabilityGeneration CreativeAgentCapability = "generation"
	CreativeAgentCapabilityPreview    CreativeAgentCapability = "preview"
	CreativeAgentCapabilityDelivery   CreativeAgentCapability = "delivery"
)

type CreativeApprovalStatus

type CreativeApprovalStatus = string

CreativeApprovalStatus — Approval state of a creative on a specific package

const (
	CreativeApprovalStatusPendingReview CreativeApprovalStatus = "pending_review"
	CreativeApprovalStatusApproved      CreativeApprovalStatus = "approved"
	CreativeApprovalStatusRejected      CreativeApprovalStatus = "rejected"
)

type CreativeAsset

type CreativeAsset struct {
	CreativeID          string               `json:"creative_id"`                    // Unique identifier for the creative
	Name                string               `json:"name"`                           // Human-readable creative name
	FormatID            FormatRef            `json:"format_id"`                      // Format identifier specifying which format this creative conforms to. Can be: (1)
	Assets              map[string]any       `json:"assets"`                         // Assets required by the format, keyed by asset_id. Each asset value carries an `a
	Inputs              []any                `json:"inputs,omitempty"`               // Preview contexts for generative formats - defines what scenarios to generate pre
	Tags                []string             `json:"tags,omitempty"`                 // User-defined tags for organization and searchability
	Status              string               `json:"status,omitempty"`               // For generative creatives: set to 'approved' to finalize, 'rejected' to request r
	Weight              float64              `json:"weight,omitempty"`               // Optional delivery weight for creative rotation when uploading via create_media_b
	PlacementIDs        []string             `json:"placement_ids,omitempty"`        // Optional array of placement IDs where this creative should run when uploading vi
	IndustryIdentifiers []IndustryIdentifier `json:"industry_identifiers,omitempty"` // Industry-standard identifiers for this creative (e.g., Ad-ID, ISCI, Clearcast cl
	Provenance          any                  `json:"provenance,omitempty"`           // Provenance metadata for this creative. Serves as the default provenance for all
}

CreativeAsset — Creative asset for upload to library - supports static assets, generative formats, and third-party s

type CreativeBrief

type CreativeBrief struct {
	Name            string `json:"name"`                       // Campaign or flight name for identification
	Objective       string `json:"objective,omitempty"`        // Campaign objective that guides creative tone and call-to-action strategy
	Tone            string `json:"tone,omitempty"`             // Desired tone for this campaign, modulating the brand's base tone (e.g., 'playful
	Audience        string `json:"audience,omitempty"`         // Target audience description for this campaign
	Territory       string `json:"territory,omitempty"`        // Creative territory or positioning the campaign should occupy
	Messaging       any    `json:"messaging,omitempty"`        // Messaging framework for the campaign
	ReferenceAssets []any  `json:"reference_assets,omitempty"` // Visual and strategic reference materials such as mood boards, product shots, exa
	Compliance      any    `json:"compliance,omitempty"`       // Regulatory and legal compliance requirements for this campaign. Campaign-specifi
}

CreativeBrief — Campaign-level creative context for AI-powered creative generation. Provides the layer between brand

type CreativeCapabilities

type CreativeCapabilities struct {
	SupportsCompliance     *bool `json:"supports_compliance,omitempty"`
	HasCreativeLibrary     *bool `json:"has_creative_library,omitempty"`
	SupportsGeneration     *bool `json:"supports_generation,omitempty"`
	SupportsTransformation *bool `json:"supports_transformation,omitempty"`
}

CreativeCapabilities is the creative protocol capability block.

type CreativeConsumption

type CreativeConsumption struct {
	Tokens          int     `json:"tokens,omitempty"`
	ImagesGenerated int     `json:"images_generated,omitempty"`
	Renders         int     `json:"renders,omitempty"`
	DurationSeconds float64 `json:"duration_seconds,omitempty"`
}

CreativeConsumption reports consumption metrics from paid creative generation.

type CreativeFilters

type CreativeFilters struct {
	FormatIDs []FormatRef `json:"format_ids,omitempty"`
}

CreativeFilters contains filters for list_creatives.

type CreativeFormat

type CreativeFormat struct {
	FormatID                     FormatRef             `json:"format_id"`                                // Structured format identifier with agent URL and format name
	Name                         string                `json:"name"`                                     // Human-readable format name
	Description                  string                `json:"description,omitempty"`                    // Plain text explanation of what this format does and what assets it requires
	ExampleURL                   string                `json:"example_url,omitempty"`                    // Optional URL to showcase page with examples and interactive demos of this format
	AcceptsParameters            []string              `json:"accepts_parameters,omitempty"`             // List of parameters this format accepts in format_id. Template formats define whi
	Renders                      []Render              `json:"renders,omitempty"`                        // Specification of rendered pieces for this format. Most formats produce a single
	Assets                       []AssetSlot           `json:"assets,omitempty"`                         // Array of all assets supported for this format. Each asset is identified by its a
	Delivery                     map[string]any        `json:"delivery,omitempty"`                       // Delivery method specifications (e.g., hosted, VAST, third-party tags)
	SupportedMacros              []any                 `json:"supported_macros,omitempty"`               // List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUST
	InputFormatIDs               []FormatRef           `json:"input_format_ids,omitempty"`               // Array of format IDs this format accepts as input creative manifests. When presen
	OutputFormatIDs              []FormatRef           `json:"output_format_ids,omitempty"`              // Array of format IDs that this format can produce as output. When present, indica
	FormatCard                   any                   `json:"format_card,omitempty"`                    // Optional standard visual card (300x400px) for displaying this format in user int
	Accessibility                any                   `json:"accessibility,omitempty"`                  // Accessibility posture of this format. Declares the WCAG conformance level that c
	SupportedDisclosurePositions []string              `json:"supported_disclosure_positions,omitempty"` // Disclosure positions this format can render. Buyers use this to determine whethe
	DisclosureCapabilities       []any                 `json:"disclosure_capabilities,omitempty"`        // Structured disclosure capabilities per position with persistence modes. Declares
	FormatCardDetailed           any                   `json:"format_card_detailed,omitempty"`           // Optional detailed card with carousel and full specifications. Provides rich form
	ReportedMetrics              []string              `json:"reported_metrics,omitempty"`               // Metrics this format can produce in delivery reporting. Buyers receive the inters
	PricingOptions               []VendorPricingOption `json:"pricing_options,omitempty"`                // Pricing options for this format. Used by transformation and generation agents th
}

CreativeFormat — Represents a creative format with its requirements

type CreativeIdentifierType

type CreativeIdentifierType = string

CreativeIdentifierType — Industry-standard identifier types for advertising creatives. These identifiers

const (
	CreativeIdentifierTypeAdID           CreativeIdentifierType = "ad_id"
	CreativeIdentifierTypeIsci           CreativeIdentifierType = "isci"
	CreativeIdentifierTypeClearcastClock CreativeIdentifierType = "clearcast_clock"
)

type CreativeInput

type CreativeInput struct {
	CreativeID string         `json:"creative_id"`
	FormatID   *FormatRef     `json:"format_id,omitempty"`
	Name       string         `json:"name,omitempty"`
	Assets     map[string]any `json:"assets,omitempty"`
}

CreativeInput is a single creative in a sync_creatives request.

type CreativeListItem

type CreativeListItem struct {
	CreativeID string    `json:"creative_id"`
	Name       string    `json:"name"`
	FormatID   FormatRef `json:"format_id"`
	Status     string    `json:"status"`
}

type CreativeManifest

type CreativeManifest struct {
	FormatID            FormatRef            `json:"format_id"`                      // Format identifier this manifest is for. Can be a template format (id only) or a
	Assets              map[string]any       `json:"assets"`                         // Map of asset IDs to actual asset content. Each key MUST match an asset_id from t
	Rights              []any                `json:"rights,omitempty"`               // Rights constraints attached to this creative. Each entry represents constraints
	IndustryIdentifiers []IndustryIdentifier `json:"industry_identifiers,omitempty"` // Industry-standard identifiers for this specific manifest (e.g., Ad-ID, ISCI, Cle
	Provenance          any                  `json:"provenance,omitempty"`           // Provenance metadata for this creative manifest. Serves as the default provenance
	Ext                 any                  `json:"ext,omitempty"`
}

CreativeManifest — Complete specification of a creative: format_id + assets. Everything the creative needs — images, te

type CreativeQuality

type CreativeQuality = string

CreativeQuality — Quality tier for creative generation, controlling the fidelity and cost tradeoff

const (
	CreativeQualityDraft      CreativeQuality = "draft"
	CreativeQualityProduction CreativeQuality = "production"
)

type CreativeResult

type CreativeResult struct {
	CreativeID      string   `json:"creative_id"`
	Action          string   `json:"action"`
	Status          string   `json:"status,omitempty"`
	RejectionReason string   `json:"rejection_reason,omitempty"`
	Errors          []string `json:"errors,omitempty"`
}

type CreativeSortField

type CreativeSortField = string

CreativeSortField — Fields available for sorting creative library listings

const (
	CreativeSortFieldCreatedDate     CreativeSortField = "created_date"
	CreativeSortFieldUpdatedDate     CreativeSortField = "updated_date"
	CreativeSortFieldName            CreativeSortField = "name"
	CreativeSortFieldStatus          CreativeSortField = "status"
	CreativeSortFieldAssignmentCount CreativeSortField = "assignment_count"
)

type CreativeSpecsCaps

type CreativeSpecsCaps struct {
	VASTVersions  []string `json:"vast_versions,omitempty"`
	MRAIDVersions []string `json:"mraid_versions,omitempty"`
	VPAID         *bool    `json:"vpaid,omitempty"`
	SIMID         *bool    `json:"simid,omitempty"`
}

type CreativeStatus

type CreativeStatus = string

CreativeStatus — Lifecycle status of a creative asset in a creative library. See the Creative Pro

const (
	CreativeStatusProcessing    CreativeStatus = "processing"
	CreativeStatusPendingReview CreativeStatus = "pending_review"
	CreativeStatusApproved      CreativeStatus = "approved"
	CreativeStatusRejected      CreativeStatus = "rejected"
	CreativeStatusArchived      CreativeStatus = "archived"
)

type DaastTrackingEvent

type DaastTrackingEvent = string

DaastTrackingEvent — Tracking events for audio ads. Includes DAAST-applicable events from IAB VAST/DA

const (
	DaastTrackingEventImpression           DaastTrackingEvent = "impression"
	DaastTrackingEventCreativeView         DaastTrackingEvent = "creativeView"
	DaastTrackingEventLoaded               DaastTrackingEvent = "loaded"
	DaastTrackingEventStart                DaastTrackingEvent = "start"
	DaastTrackingEventFirstQuartile        DaastTrackingEvent = "firstQuartile"
	DaastTrackingEventMidpoint             DaastTrackingEvent = "midpoint"
	DaastTrackingEventThirdQuartile        DaastTrackingEvent = "thirdQuartile"
	DaastTrackingEventComplete             DaastTrackingEvent = "complete"
	DaastTrackingEventMute                 DaastTrackingEvent = "mute"
	DaastTrackingEventUnmute               DaastTrackingEvent = "unmute"
	DaastTrackingEventPause                DaastTrackingEvent = "pause"
	DaastTrackingEventResume               DaastTrackingEvent = "resume"
	DaastTrackingEventSkip                 DaastTrackingEvent = "skip"
	DaastTrackingEventProgress             DaastTrackingEvent = "progress"
	DaastTrackingEventClickTracking        DaastTrackingEvent = "clickTracking"
	DaastTrackingEventCustomClick          DaastTrackingEvent = "customClick"
	DaastTrackingEventClose                DaastTrackingEvent = "close"
	DaastTrackingEventError                DaastTrackingEvent = "error"
	DaastTrackingEventViewable             DaastTrackingEvent = "viewable"
	DaastTrackingEventNotViewable          DaastTrackingEvent = "notViewable"
	DaastTrackingEventViewUndetermined     DaastTrackingEvent = "viewUndetermined"
	DaastTrackingEventMeasurableImpression DaastTrackingEvent = "measurableImpression"
	DaastTrackingEventViewableImpression   DaastTrackingEvent = "viewableImpression"
)

type DaastVersion

type DaastVersion = string

DaastVersion — Supported DAAST (Digital Audio Ad Serving Template) specification versions

const (
	DaastVersion10 DaastVersion = "1.0"
	DaastVersion11 DaastVersion = "1.1"
)

type DataSubjectContestation

type DataSubjectContestation struct {
	URL       string   `json:"url,omitempty"`
	Email     string   `json:"email,omitempty"`
	Languages []string `json:"languages,omitempty"`
}

DataSubjectContestation is a contestation contact point for data subjects (GDPR Art 22(3)). Either URL or Email is required.

type DayOfWeek

type DayOfWeek = string

DayOfWeek — Days of the week for daypart targeting

const (
	DayOfWeekMonday    DayOfWeek = "monday"
	DayOfWeekTuesday   DayOfWeek = "tuesday"
	DayOfWeekWednesday DayOfWeek = "wednesday"
	DayOfWeekThursday  DayOfWeek = "thursday"
	DayOfWeekFriday    DayOfWeek = "friday"
	DayOfWeekSaturday  DayOfWeek = "saturday"
	DayOfWeekSunday    DayOfWeek = "sunday"
)

type DelegationAuthority

type DelegationAuthority = string

DelegationAuthority — Authority level granted to a delegated agent operating against a campaign plan.

const (
	DelegationAuthorityFull        DelegationAuthority = "full"
	DelegationAuthorityExecuteOnly DelegationAuthority = "execute_only"
	DelegationAuthorityProposeOnly DelegationAuthority = "propose_only"
)

type DeleteCollectionListRequest

type DeleteCollectionListRequest struct {
	AdcpMajorVersion int               `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	ListID           string            `json:"list_id"`                      // ID of the collection list to delete
	Account          *AccountReference `json:"account,omitempty"`            // Account that owns the list. Required when the authenticated agent has access to
	Context          any               `json:"context,omitempty"`
	Ext              any               `json:"ext,omitempty"`
	IdempotencyKey   string            `json:"idempotency_key"` // Client-generated unique key for at-most-once execution. If a request with the sa
}

DeleteCollectionListRequest — Request parameters for deleting a collection list

type DeliveryData

type DeliveryData struct {
	ReportingPeriod    ReportingPeriod    `json:"reporting_period"`
	MediaBuyDeliveries []MediaBuyDelivery `json:"media_buy_deliveries"`
}

type DeliveryTotals

type DeliveryTotals struct {
	Impressions        float64 `json:"impressions,omitempty"`          // Impressions delivered
	Spend              float64 `json:"spend,omitempty"`                // Amount spent
	Clicks             float64 `json:"clicks,omitempty"`               // Total clicks
	Ctr                float64 `json:"ctr,omitempty"`                  // Click-through rate (clicks/impressions)
	Views              float64 `json:"views,omitempty"`                // Content engagements counted toward the billable view threshold. For video this i
	CompletedViews     float64 `json:"completed_views,omitempty"`      // Video/audio completions. When the package has a completed_views optimization goa
	CompletionRate     float64 `json:"completion_rate,omitempty"`      // Completion rate (completed_views/impressions)
	Conversions        float64 `json:"conversions,omitempty"`          // Total conversions attributed to this delivery. When by_event_type is present, th
	ConversionValue    float64 `json:"conversion_value,omitempty"`     // Total monetary value of attributed conversions (in the reporting currency)
	Roas               float64 `json:"roas,omitempty"`                 // Return on ad spend (conversion_value / spend)
	CostPerAcquisition float64 `json:"cost_per_acquisition,omitempty"` // Cost per conversion (spend / conversions)
	NewToBrandRate     float64 `json:"new_to_brand_rate,omitempty"`    // Fraction of conversions from first-time brand buyers (0 = none, 1 = all)
	Leads              float64 `json:"leads,omitempty"`                // Leads generated (convenience alias for by_event_type where event_type='lead')
	ByEventType        []any   `json:"by_event_type,omitempty"`        // Conversion metrics broken down by event type. Spend-derived metrics (ROAS, CPA)
	Grps               float64 `json:"grps,omitempty"`                 // Gross Rating Points delivered (for CPP)
	Reach              float64 `json:"reach,omitempty"`                // Unique reach in the units specified by reach_unit. When reach_unit is omitted, u
	ReachUnit          any     `json:"reach_unit,omitempty"`           // Unit of measurement for the reach field. Aligns with the reach_unit declared on
	Frequency          float64 `json:"frequency,omitempty"`            // Average frequency per reach unit (typically measured over campaign duration, but
	QuartileData       any     `json:"quartile_data,omitempty"`        // Audio/video quartile completion data
	DoohMetrics        any     `json:"dooh_metrics,omitempty"`         // DOOH-specific metrics (only included for DOOH campaigns)
	Viewability        any     `json:"viewability,omitempty"`          // Viewability metrics. Viewable rate should be calculated as viewable_impressions
	Engagements        float64 `json:"engagements,omitempty"`          // Total engagements — direct interactions with the ad beyond viewing. Includes soc
	Follows            float64 `json:"follows,omitempty"`              // New followers, page likes, artist/podcast/channel subscribes attributed to this
	Saves              float64 `json:"saves,omitempty"`                // Saves, bookmarks, playlist adds, pins attributed to this delivery.
	ProfileVisits      float64 `json:"profile_visits,omitempty"`       // Visits to the brand's in-platform page (profile, artist page, channel, or storef
	EngagementRate     float64 `json:"engagement_rate,omitempty"`      // Platform-specific engagement rate (0.0 to 1.0). Typically engagements/impression
	CostPerClick       float64 `json:"cost_per_click,omitempty"`       // Cost per click (spend / clicks)
	ByActionSource     []any   `json:"by_action_source,omitempty"`     // Conversion metrics broken down by action source (website, app, in_store, etc.).
}

DeliveryTotals — Standard delivery metrics that can be reported at media buy, package, or creative level

type DeliveryType

type DeliveryType = string

DeliveryType — Type of inventory delivery

const (
	DeliveryTypeGuaranteed    DeliveryType = "guaranteed"
	DeliveryTypeNonGuaranteed DeliveryType = "non_guaranteed"
)

type DemographicSystem

type DemographicSystem = string

DemographicSystem — Audience measurement systems for demographic notation in GRP forecasts and prici

const (
	DemographicSystemNielsen     DemographicSystem = "nielsen"
	DemographicSystemBarb        DemographicSystem = "barb"
	DemographicSystemAgf         DemographicSystem = "agf"
	DemographicSystemOztam       DemographicSystem = "oztam"
	DemographicSystemMediametrie DemographicSystem = "mediametrie"
	DemographicSystemCustom      DemographicSystem = "custom"
)

type Deployment

type Deployment struct {
	Type                               string         `json:"type"`
	Platform                           string         `json:"platform,omitempty"`
	AgentURL                           string         `json:"agent_url,omitempty"`
	Account                            string         `json:"account,omitempty"`
	IsLive                             bool           `json:"is_live"`
	ActivationKey                      *ActivationKey `json:"activation_key,omitempty"`
	DeployedAt                         string         `json:"deployed_at,omitempty"`
	EstimatedActivationDurationMinutes int            `json:"estimated_activation_duration_minutes,omitempty"`
}

Deployment is the flattened union of deployment.json's oneOf variants. Type is the discriminator:

"platform": set Platform (required), AgentURL, Account, ActivationKey.
"agent":    set AgentURL (required), ActivationKey.

All variants: IsLive, DeployedAt, EstimatedActivationDurationMinutes. Do not mix variant-specific fields — schema validators accept it because additionalProperties=true, but the result is semantically wrong.

type DerivativeType

type DerivativeType = string

DerivativeType — What kind of derivative content an installment represents relative to its source

const (
	DerivativeTypeClip      DerivativeType = "clip"
	DerivativeTypeHighlight DerivativeType = "highlight"
	DerivativeTypeRecap     DerivativeType = "recap"
	DerivativeTypeTrailer   DerivativeType = "trailer"
	DerivativeTypeBonus     DerivativeType = "bonus"
)

type DestinationInput

type DestinationInput struct {
	Type     string `json:"type"`
	Platform string `json:"platform,omitempty"`
	AgentURL string `json:"agent_url,omitempty"`
	Account  string `json:"account,omitempty"`
}

DestinationInput is a single destination in an activate_signal request.

type DevicePlatform

type DevicePlatform = string

DevicePlatform — Operating system platforms for device targeting. Browser values from Sec-CH-UA-P

const (
	DevicePlatformIos      DevicePlatform = "ios"
	DevicePlatformAndroid  DevicePlatform = "android"
	DevicePlatformWindows  DevicePlatform = "windows"
	DevicePlatformMacos    DevicePlatform = "macos"
	DevicePlatformLinux    DevicePlatform = "linux"
	DevicePlatformChromeos DevicePlatform = "chromeos"
	DevicePlatformTvos     DevicePlatform = "tvos"
	DevicePlatformTizen    DevicePlatform = "tizen"
	DevicePlatformWebos    DevicePlatform = "webos"
	DevicePlatformFireOs   DevicePlatform = "fire_os"
	DevicePlatformRokuOs   DevicePlatform = "roku_os"
	DevicePlatformUnknown  DevicePlatform = "unknown"
)

type DeviceType

type DeviceType = string

DeviceType — Device form factor categories for targeting and reporting. Complements device-pl

const (
	DeviceTypeDesktop DeviceType = "desktop"
	DeviceTypeMobile  DeviceType = "mobile"
	DeviceTypeTablet  DeviceType = "tablet"
	DeviceTypeCtv     DeviceType = "ctv"
	DeviceTypeDooh    DeviceType = "dooh"
	DeviceTypeUnknown DeviceType = "unknown"
)

type DigitalSourceType

type DigitalSourceType = string

DigitalSourceType — Classification of AI involvement in content creation, aligned with IPTC digitals

const (
	DigitalSourceTypeDigitalCapture                       DigitalSourceType = "digital_capture"
	DigitalSourceTypeDigitalCreation                      DigitalSourceType = "digital_creation"
	DigitalSourceTypeTrainedAlgorithmicMedia              DigitalSourceType = "trained_algorithmic_media"
	DigitalSourceTypeCompositeWithTrainedAlgorithmicMedia DigitalSourceType = "composite_with_trained_algorithmic_media"
	DigitalSourceTypeAlgorithmicMedia                     DigitalSourceType = "algorithmic_media"
	DigitalSourceTypeCompositeCapture                     DigitalSourceType = "composite_capture"
	DigitalSourceTypeCompositeSynthetic                   DigitalSourceType = "composite_synthetic"
	DigitalSourceTypeHumanEdits                           DigitalSourceType = "human_edits"
	DigitalSourceTypeDataDrivenMedia                      DigitalSourceType = "data_driven_media"
)

type DimensionUnit

type DimensionUnit = string

DimensionUnit — Units of measurement for creative format dimensions

const (
	DimensionUnitPx     DimensionUnit = "px"
	DimensionUnitDp     DimensionUnit = "dp"
	DimensionUnitInches DimensionUnit = "inches"
	DimensionUnitCm     DimensionUnit = "cm"
	DimensionUnitMm     DimensionUnit = "mm"
	DimensionUnitPt     DimensionUnit = "pt"
)

type DisclosurePersistence

type DisclosurePersistence = string

DisclosurePersistence — How long a disclosure must persist during content playback or display. Different

const (
	DisclosurePersistenceContinuous DisclosurePersistence = "continuous"
	DisclosurePersistenceInitial    DisclosurePersistence = "initial"
	DisclosurePersistenceFlexible   DisclosurePersistence = "flexible"
)

type DisclosurePosition

type DisclosurePosition = string

DisclosurePosition — Where a required disclosure should appear within a creative. Used by creative br

const (
	DisclosurePositionProminent DisclosurePosition = "prominent"
	DisclosurePositionFooter    DisclosurePosition = "footer"
	DisclosurePositionAudio     DisclosurePosition = "audio"
	DisclosurePositionSubtitle  DisclosurePosition = "subtitle"
	DisclosurePositionOverlay   DisclosurePosition = "overlay"
	DisclosurePositionEndCard   DisclosurePosition = "end_card"
	DisclosurePositionPreRoll   DisclosurePosition = "pre_roll"
	DisclosurePositionCompanion DisclosurePosition = "companion"
)

type DistanceUnit

type DistanceUnit = string

DistanceUnit — Units of distance measurement for radius-based catchment areas.

const (
	DistanceUnitKm DistanceUnit = "km"
	DistanceUnitMi DistanceUnit = "mi"
	DistanceUnitM  DistanceUnit = "m"
)

type DistributionID

type DistributionID struct {
	Type  string `json:"type"`
	Value string `json:"value"`
}

DistributionID is a platform-independent identifier for cross-publisher matching.

type DistributionIdentifierType

type DistributionIdentifierType = string

DistributionIdentifierType — Platform-specific identifier types for collection distribution. Maps a collectio

const (
	DistributionIdentifierTypeApplePodcastID      DistributionIdentifierType = "apple_podcast_id"
	DistributionIdentifierTypeSpotifyCollectionID DistributionIdentifierType = "spotify_collection_id"
	DistributionIdentifierTypeRssURL              DistributionIdentifierType = "rss_url"
	DistributionIdentifierTypePodcastGuid         DistributionIdentifierType = "podcast_guid"
	DistributionIdentifierTypeAmazonMusicID       DistributionIdentifierType = "amazon_music_id"
	DistributionIdentifierTypeIheartID            DistributionIdentifierType = "iheart_id"
	DistributionIdentifierTypePodcastIndexID      DistributionIdentifierType = "podcast_index_id"
	DistributionIdentifierTypeYoutubeChannelID    DistributionIdentifierType = "youtube_channel_id"
	DistributionIdentifierTypeYoutubePlaylistID   DistributionIdentifierType = "youtube_playlist_id"
	DistributionIdentifierTypeAmazonTitleID       DistributionIdentifierType = "amazon_title_id"
	DistributionIdentifierTypeRokuChannelID       DistributionIdentifierType = "roku_channel_id"
	DistributionIdentifierTypePlutoChannelID      DistributionIdentifierType = "pluto_channel_id"
	DistributionIdentifierTypeTubiID              DistributionIdentifierType = "tubi_id"
	DistributionIdentifierTypePeacockID           DistributionIdentifierType = "peacock_id"
	DistributionIdentifierTypeTiktokID            DistributionIdentifierType = "tiktok_id"
	DistributionIdentifierTypeTwitchChannel       DistributionIdentifierType = "twitch_channel"
	DistributionIdentifierTypeImdbID              DistributionIdentifierType = "imdb_id"
	DistributionIdentifierTypeGracenoteID         DistributionIdentifierType = "gracenote_id"
	DistributionIdentifierTypeEidrID              DistributionIdentifierType = "eidr_id"
	DistributionIdentifierTypeDomain              DistributionIdentifierType = "domain"
	DistributionIdentifierTypeSubstackID          DistributionIdentifierType = "substack_id"
)

type Duration

type Duration struct {
	Interval int    `json:"interval"`
	Unit     string `json:"unit"` // "seconds", "minutes", "hours", "days", "campaign"
}

Duration is a time duration expressed as an interval and unit.

type EmptyInput

type EmptyInput struct{}

EmptyInput is the input type for tools that accept no parameters (e.g. get_adcp_capabilities).

type ErrorCode

type ErrorCode = string

ErrorCode — Standard error code vocabulary for AdCP. Codes are machine-readable so agents ca

const (
	ErrorCodeINVALIDREQUEST           ErrorCode = "INVALID_REQUEST"
	ErrorCodeAUTHREQUIRED             ErrorCode = "AUTH_REQUIRED"
	ErrorCodeRATELIMITED              ErrorCode = "RATE_LIMITED"
	ErrorCodeSERVICEUNAVAILABLE       ErrorCode = "SERVICE_UNAVAILABLE"
	ErrorCodePOLICYVIOLATION          ErrorCode = "POLICY_VIOLATION"
	ErrorCodePRODUCTNOTFOUND          ErrorCode = "PRODUCT_NOT_FOUND"
	ErrorCodePRODUCTUNAVAILABLE       ErrorCode = "PRODUCT_UNAVAILABLE"
	ErrorCodePROPOSALEXPIRED          ErrorCode = "PROPOSAL_EXPIRED"
	ErrorCodeBUDGETTOOLOW             ErrorCode = "BUDGET_TOO_LOW"
	ErrorCodeCREATIVEREJECTED         ErrorCode = "CREATIVE_REJECTED"
	ErrorCodeUNSUPPORTEDFEATURE       ErrorCode = "UNSUPPORTED_FEATURE"
	ErrorCodeAUDIENCETOOSMALL         ErrorCode = "AUDIENCE_TOO_SMALL"
	ErrorCodeACCOUNTNOTFOUND          ErrorCode = "ACCOUNT_NOT_FOUND"
	ErrorCodeACCOUNTSETUPREQUIRED     ErrorCode = "ACCOUNT_SETUP_REQUIRED"
	ErrorCodeACCOUNTAMBIGUOUS         ErrorCode = "ACCOUNT_AMBIGUOUS"
	ErrorCodeACCOUNTPAYMENTREQUIRED   ErrorCode = "ACCOUNT_PAYMENT_REQUIRED"
	ErrorCodeACCOUNTSUSPENDED         ErrorCode = "ACCOUNT_SUSPENDED"
	ErrorCodeCOMPLIANCEUNSATISFIED    ErrorCode = "COMPLIANCE_UNSATISFIED"
	ErrorCodeGOVERNANCEDENIED         ErrorCode = "GOVERNANCE_DENIED"
	ErrorCodeBUDGETEXHAUSTED          ErrorCode = "BUDGET_EXHAUSTED"
	ErrorCodeBUDGETEXCEEDED           ErrorCode = "BUDGET_EXCEEDED"
	ErrorCodeCONFLICT                 ErrorCode = "CONFLICT"
	ErrorCodeIDEMPOTENCYCONFLICT      ErrorCode = "IDEMPOTENCY_CONFLICT"
	ErrorCodeIDEMPOTENCYEXPIRED       ErrorCode = "IDEMPOTENCY_EXPIRED"
	ErrorCodeCREATIVEDEADLINEEXCEEDED ErrorCode = "CREATIVE_DEADLINE_EXCEEDED"
	ErrorCodeINVALIDSTATE             ErrorCode = "INVALID_STATE"
	ErrorCodeMEDIABUYNOTFOUND         ErrorCode = "MEDIA_BUY_NOT_FOUND"
	ErrorCodeNOTCANCELLABLE           ErrorCode = "NOT_CANCELLABLE"
	ErrorCodePACKAGENOTFOUND          ErrorCode = "PACKAGE_NOT_FOUND"
	ErrorCodeCREATIVENOTFOUND         ErrorCode = "CREATIVE_NOT_FOUND"
	ErrorCodeSIGNALNOTFOUND           ErrorCode = "SIGNAL_NOT_FOUND"
	ErrorCodeSESSIONNOTFOUND          ErrorCode = "SESSION_NOT_FOUND"
	ErrorCodePLANNOTFOUND             ErrorCode = "PLAN_NOT_FOUND"
	ErrorCodeREFERENCENOTFOUND        ErrorCode = "REFERENCE_NOT_FOUND"
	ErrorCodeSESSIONTERMINATED        ErrorCode = "SESSION_TERMINATED"
	ErrorCodeVALIDATIONERROR          ErrorCode = "VALIDATION_ERROR"
	ErrorCodePRODUCTEXPIRED           ErrorCode = "PRODUCT_EXPIRED"
	ErrorCodePROPOSALNOTCOMMITTED     ErrorCode = "PROPOSAL_NOT_COMMITTED"
	ErrorCodeIOREQUIRED               ErrorCode = "IO_REQUIRED"
	ErrorCodeTERMSREJECTED            ErrorCode = "TERMS_REJECTED"
	ErrorCodeREQUOTEREQUIRED          ErrorCode = "REQUOTE_REQUIRED"
	ErrorCodeVERSIONUNSUPPORTED       ErrorCode = "VERSION_UNSUPPORTED"
	ErrorCodeCAMPAIGNSUSPENDED        ErrorCode = "CAMPAIGN_SUSPENDED"
	ErrorCodeGOVERNANCEUNAVAILABLE    ErrorCode = "GOVERNANCE_UNAVAILABLE"
	ErrorCodePERMISSIONDENIED         ErrorCode = "PERMISSION_DENIED"
)

type ErrorOptions

type ErrorOptions struct {
	Message    string
	Recovery   string // "retry", "revise", "contact_support", "terminal"
	Field      string
	Suggestion string
	RetryAfter int
	Details    map[string]any
}

ErrorOptions configures an AdCP error response.

type EscalationSeverity

type EscalationSeverity = string

EscalationSeverity — The severity level of a governance escalation.

const (
	EscalationSeverityInfo     EscalationSeverity = "info"
	EscalationSeverityWarning  EscalationSeverity = "warning"
	EscalationSeverityCritical EscalationSeverity = "critical"
)

type Event

type Event struct {
	EventID         string `json:"event_id"`                    // Unique identifier for deduplication (scoped to event_type + event_source_id)
	EventType       string `json:"event_type"`                  // Standard event type
	EventTime       string `json:"event_time"`                  // ISO 8601 timestamp when the event occurred
	UserMatch       any    `json:"user_match,omitempty"`        // User identifiers for attribution matching
	CustomData      any    `json:"custom_data,omitempty"`       // Event-specific data (value, currency, items, etc.)
	ActionSource    string `json:"action_source,omitempty"`     // Where the event originated
	EventSourceURL  string `json:"event_source_url,omitempty"`  // URL where the event occurred (required when action_source is 'website')
	CustomEventName string `json:"custom_event_name,omitempty"` // Name for custom events (used when event_type is 'custom')
	Ext             any    `json:"ext,omitempty"`
}

Event — A marketing event (conversion, engagement, or custom) for attribution and optimization

type EventSourceInput

type EventSourceInput struct {
	EventSourceID string `json:"event_source_id"`
}

EventSourceInput is a single event source.

type EventSourceResult

type EventSourceResult struct {
	EventSourceID string            `json:"event_source_id"`
	Action        string            `json:"action"`
	Setup         *EventSourceSetup `json:"setup,omitempty"`
}

type EventSourceSetup

type EventSourceSetup struct {
	Snippet     string `json:"snippet,omitempty"`
	Description string `json:"description,omitempty"`
}

EventSourceSetup provides integration instructions for an event source.

type EventType

type EventType = string

EventType — Standard marketing event types for event logging, aligned with IAB ECAPI

const (
	EventTypePageView             EventType = "page_view"
	EventTypeViewContent          EventType = "view_content"
	EventTypeSelectContent        EventType = "select_content"
	EventTypeSelectItem           EventType = "select_item"
	EventTypeSearch               EventType = "search"
	EventTypeShare                EventType = "share"
	EventTypeAddToCart            EventType = "add_to_cart"
	EventTypeRemoveFromCart       EventType = "remove_from_cart"
	EventTypeViewedCart           EventType = "viewed_cart"
	EventTypeAddToWishlist        EventType = "add_to_wishlist"
	EventTypeInitiateCheckout     EventType = "initiate_checkout"
	EventTypeAddPaymentInfo       EventType = "add_payment_info"
	EventTypePurchase             EventType = "purchase"
	EventTypeRefund               EventType = "refund"
	EventTypeLead                 EventType = "lead"
	EventTypeQualifyLead          EventType = "qualify_lead"
	EventTypeCloseConvertLead     EventType = "close_convert_lead"
	EventTypeDisqualifyLead       EventType = "disqualify_lead"
	EventTypeCompleteRegistration EventType = "complete_registration"
	EventTypeSubscribe            EventType = "subscribe"
	EventTypeStartTrial           EventType = "start_trial"
	EventTypeAppInstall           EventType = "app_install"
	EventTypeAppLaunch            EventType = "app_launch"
	EventTypeContact              EventType = "contact"
	EventTypeSchedule             EventType = "schedule"
	EventTypeDonate               EventType = "donate"
	EventTypeSubmitApplication    EventType = "submit_application"
	EventTypeCustom               EventType = "custom"
)

type Exclusivity

type Exclusivity = string

Exclusivity — Whether a product offers exclusive access to its inventory

const (
	ExclusivityNone      Exclusivity = "none"
	ExclusivityCategory  Exclusivity = "category"
	ExclusivityExclusive Exclusivity = "exclusive"
)

type FeatureRange

type FeatureRange struct {
	Min float64 `json:"min"`
	Max float64 `json:"max"`
}

type FeedFormat

type FeedFormat = string

FeedFormat — Catalog feed formats. Determines how the platform parses items from an external

const (
	FeedFormatGoogleMerchantCenter FeedFormat = "google_merchant_center"
	FeedFormatFacebookCatalog      FeedFormat = "facebook_catalog"
	FeedFormatShopify              FeedFormat = "shopify"
	FeedFormatLinkedinJobs         FeedFormat = "linkedin_jobs"
	FeedFormatCustom               FeedFormat = "custom"
)

type FeedbackSource

type FeedbackSource = string

FeedbackSource — Source of performance feedback data

const (
	FeedbackSourceBuyerAttribution      FeedbackSource = "buyer_attribution"
	FeedbackSourceThirdPartyMeasurement FeedbackSource = "third_party_measurement"
	FeedbackSourcePlatformAnalytics     FeedbackSource = "platform_analytics"
	FeedbackSourceVerificationPartner   FeedbackSource = "verification_partner"
)

type ForecastMethod

type ForecastMethod = string

ForecastMethod — Method used to produce a delivery forecast

const (
	ForecastMethodEstimate   ForecastMethod = "estimate"
	ForecastMethodModeled    ForecastMethod = "modeled"
	ForecastMethodGuaranteed ForecastMethod = "guaranteed"
)

type ForecastRangeUnit

type ForecastRangeUnit = string

ForecastRangeUnit — Describes how to interpret the points array in a DeliveryForecast — what axis th

const (
	ForecastRangeUnitSpend        ForecastRangeUnit = "spend"
	ForecastRangeUnitAvailability ForecastRangeUnit = "availability"
	ForecastRangeUnitReachFreq    ForecastRangeUnit = "reach_freq"
	ForecastRangeUnitWeekly       ForecastRangeUnit = "weekly"
	ForecastRangeUnitDaily        ForecastRangeUnit = "daily"
	ForecastRangeUnitClicks       ForecastRangeUnit = "clicks"
	ForecastRangeUnitConversions  ForecastRangeUnit = "conversions"
	ForecastRangeUnitPackage      ForecastRangeUnit = "package"
)

type ForecastableMetric

type ForecastableMetric = string

ForecastableMetric — Standard delivery and engagement metric names for forecasts. For outcome/convers

const (
	ForecastableMetricAudienceSize        ForecastableMetric = "audience_size"
	ForecastableMetricReach               ForecastableMetric = "reach"
	ForecastableMetricFrequency           ForecastableMetric = "frequency"
	ForecastableMetricImpressions         ForecastableMetric = "impressions"
	ForecastableMetricClicks              ForecastableMetric = "clicks"
	ForecastableMetricSpend               ForecastableMetric = "spend"
	ForecastableMetricViews               ForecastableMetric = "views"
	ForecastableMetricCompletedViews      ForecastableMetric = "completed_views"
	ForecastableMetricGrps                ForecastableMetric = "grps"
	ForecastableMetricEngagements         ForecastableMetric = "engagements"
	ForecastableMetricFollows             ForecastableMetric = "follows"
	ForecastableMetricSaves               ForecastableMetric = "saves"
	ForecastableMetricProfileVisits       ForecastableMetric = "profile_visits"
	ForecastableMetricMeasuredImpressions ForecastableMetric = "measured_impressions"
	ForecastableMetricDownloads           ForecastableMetric = "downloads"
	ForecastableMetricPlays               ForecastableMetric = "plays"
)

type FormatIDParameter

type FormatIDParameter = string

FormatIDParameter — Types of parameters that template formats accept in format_id objects to create

const (
	FormatIDParameterDimensions FormatIDParameter = "dimensions"
	FormatIDParameterDuration   FormatIDParameter = "duration"
)

type FormatRef

type FormatRef struct {
	AgentURL   string  `json:"agent_url"`             // URL of the agent that defines this format (e.g., 'https://creatives.adcontextpro
	ID         string  `json:"id"`                    // Format identifier within the agent's namespace (e.g., 'display_static', 'video_h
	Width      int     `json:"width,omitempty"`       // Width in pixels for visual formats. When specified, height must also be specifie
	Height     int     `json:"height,omitempty"`      // Height in pixels for visual formats. When specified, width must also be specifie
	DurationMs float64 `json:"duration_ms,omitempty"` // Duration in milliseconds for time-based formats (video, audio). When specified,
}

FormatRef — Structured format identifier with agent URL and format name. Can reference: (1) a concrete format wi

type FrequencyCapScope

type FrequencyCapScope = string

FrequencyCapScope — Scope for frequency cap application

const (
	FrequencyCapScopePackage FrequencyCapScope = "package"
)

type GenreTaxonomy

type GenreTaxonomy = string

GenreTaxonomy — Taxonomy systems for genre classification. When declared, genre values should be

const (
	GenreTaxonomyIabContent30 GenreTaxonomy = "iab_content_3.0"
	GenreTaxonomyIabContent22 GenreTaxonomy = "iab_content_2.2"
	GenreTaxonomyGracenote    GenreTaxonomy = "gracenote"
	GenreTaxonomyEidr         GenreTaxonomy = "eidr"
	GenreTaxonomyAppleGenres  GenreTaxonomy = "apple_genres"
	GenreTaxonomyGoogleGenres GenreTaxonomy = "google_genres"
	GenreTaxonomyRoku         GenreTaxonomy = "roku"
	GenreTaxonomyAmazonGenres GenreTaxonomy = "amazon_genres"
	GenreTaxonomyCustom       GenreTaxonomy = "custom"
)

type GeoLevel

type GeoLevel = string

GeoLevel — Geographic targeting granularity levels. Some levels (metro, postal_area) requir

const (
	GeoLevelCountry    GeoLevel = "country"
	GeoLevelRegion     GeoLevel = "region"
	GeoLevelMetro      GeoLevel = "metro"
	GeoLevelPostalArea GeoLevel = "postal_area"
)

type GeoMetrosCaps

type GeoMetrosCaps struct {
	NielsenDMA    *bool `json:"nielsen_dma,omitempty"`
	UKITL1        *bool `json:"uk_itl1,omitempty"`
	UKITL2        *bool `json:"uk_itl2,omitempty"`
	EurostatNUTS2 *bool `json:"eurostat_nuts2,omitempty"`
}

type GeoPostalAreasCaps

type GeoPostalAreasCaps struct {
	USZip         *bool `json:"us_zip,omitempty"`
	USZipPlusFour *bool `json:"us_zip_plus_four,omitempty"`
	GBOutward     *bool `json:"gb_outward,omitempty"`
	GBFull        *bool `json:"gb_full,omitempty"`
	CAFSA         *bool `json:"ca_fsa,omitempty"`
	CAFull        *bool `json:"ca_full,omitempty"`
	DEPLZ         *bool `json:"de_plz,omitempty"`
	FRCodePostal  *bool `json:"fr_code_postal,omitempty"`
	AUPostcode    *bool `json:"au_postcode,omitempty"`
	CHPLZ         *bool `json:"ch_plz,omitempty"`
	ATPLZ         *bool `json:"at_plz,omitempty"`
}

type GeoProximityCaps

type GeoProximityCaps struct {
	Radius         *bool    `json:"radius,omitempty"`
	TravelTime     *bool    `json:"travel_time,omitempty"`
	Geometry       *bool    `json:"geometry,omitempty"`
	TransportModes []string `json:"transport_modes,omitempty"`
}

type GetAdcpCapabilitiesRequest

type GetAdcpCapabilitiesRequest struct {
	AdcpMajorVersion int      `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. When provided, the selle
	Protocols        []string `json:"protocols,omitempty"`          // Specific protocols to query capabilities for. If omitted, returns capabilities f
	Context          any      `json:"context,omitempty"`
	Ext              any      `json:"ext,omitempty"`
}

GetAdcpCapabilitiesRequest — Request payload for get_adcp_capabilities task. Protocol-level capability discovery that works acros

type GetAdcpCapabilitiesResponse

type GetAdcpCapabilitiesResponse struct {
	Adcp                  any         `json:"adcp"`                             // Core AdCP protocol information
	SupportedProtocols    []string    `json:"supported_protocols"`              // AdCP protocols this agent supports. Each value both (a) declares which tools the
	Account               any         `json:"account,omitempty"`                // Account management capabilities. Describes how accounts are established, what bi
	MediaBuy              any         `json:"media_buy,omitempty"`              // Media-buy protocol capabilities. Expected when media_buy is in supported_protoco
	Signals               any         `json:"signals,omitempty"`                // Signals protocol capabilities. Only present if signals is in supported_protocols
	Governance            any         `json:"governance,omitempty"`             // Governance protocol capabilities. Only present if governance is in supported_pro
	SponsoredIntelligence any         `json:"sponsored_intelligence,omitempty"` // Sponsored Intelligence protocol capabilities. Only present if sponsored_intellig
	Brand                 any         `json:"brand,omitempty"`                  // Brand protocol capabilities. Only present if brand is in supported_protocols. Br
	Creative              any         `json:"creative,omitempty"`               // Creative protocol capabilities. Only present if creative is in supported_protoco
	RequestSigning        any         `json:"request_signing,omitempty"`        // RFC 9421 HTTP Signatures support for incoming requests. Optional in 3.0 — capabi
	WebhookSigning        any         `json:"webhook_signing,omitempty"`        // RFC 9421 webhook-signature support for outbound webhook callbacks (top-level pee
	Identity              any         `json:"identity,omitempty"`               // Operator identity posture — key-scoping and compromise-response controls the age
	ComplianceTesting     any         `json:"compliance_testing,omitempty"`     // Compliance testing capabilities. The presence of this block declares that the ag
	Specialisms           []string    `json:"specialisms,omitempty"`            // Optional — specialized compliance claims this agent supports. Omitting the field
	ExtensionsSupported   []string    `json:"extensions_supported,omitempty"`   // Extension namespaces this agent supports. Buyers can expect meaningful data in e
	ExperimentalFeatures  []string    `json:"experimental_features,omitempty"`  // Experimental AdCP surfaces this agent implements. A surface is experimental when
	LastUpdated           string      `json:"last_updated,omitempty"`           // ISO 8601 timestamp of when capabilities were last updated. Buyers can use this f
	Errors                []AdcpError `json:"errors,omitempty"`                 // Task-specific errors and warnings
	Context               any         `json:"context,omitempty"`
	Ext                   any         `json:"ext,omitempty"`
}

GetAdcpCapabilitiesResponse — Response payload for get_adcp_capabilities task. Protocol-level capability discovery across all AdCP

type GetCollectionListRequest

type GetCollectionListRequest struct {
	AdcpMajorVersion int               `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	ListID           string            `json:"list_id"`                      // ID of the collection list to retrieve
	Account          *AccountReference `json:"account,omitempty"`            // Account that owns the list. Required when the authenticated agent has access to
	Resolve          *bool             `json:"resolve,omitempty"`            // Whether to apply filters and return resolved collections (default: true)
	Pagination       any               `json:"pagination,omitempty"`         // Pagination parameters. Uses higher limits than standard pagination because colle
	Context          any               `json:"context,omitempty"`
	Ext              any               `json:"ext,omitempty"`
}

GetCollectionListRequest — Request parameters for retrieving a collection list with resolved collections

type GetCollectionListResult

type GetCollectionListResult struct {
	List        *CollectionList
	Collections []ResolvedCollection
	Pagination  *PaginationResponse
}

GetCollectionListResult is the return type for Config.GetCollectionList.

type GetMediaBuyDeliveryRequest

type GetMediaBuyDeliveryRequest struct {
	AdcpMajorVersion             int               `json:"adcp_major_version,omitempty"`              // The AdCP major version the buyer's payloads conform to. Sellers validate against
	Account                      *AccountReference `json:"account,omitempty"`                         // Filter delivery data to a specific account. When omitted, returns data across al
	MediaBuyIDs                  []string          `json:"media_buy_ids,omitempty"`                   // Array of media buy IDs to get delivery data for
	StatusFilter                 any               `json:"status_filter,omitempty"`                   // Filter by status. Can be a single status or array of statuses
	StartDate                    string            `json:"start_date,omitempty"`                      // Start date for reporting period (YYYY-MM-DD). When omitted along with end_date,
	EndDate                      string            `json:"end_date,omitempty"`                        // End date for reporting period (YYYY-MM-DD). When omitted along with start_date,
	IncludePackageDailyBreakdown *bool             `json:"include_package_daily_breakdown,omitempty"` // When true, include daily_breakdown arrays within each package in by_package. Use
	AttributionWindow            any               `json:"attribution_window,omitempty"`              // Attribution window to apply for conversion metrics. When provided, the seller re
	ReportingDimensions          any               `json:"reporting_dimensions,omitempty"`            // Request dimensional breakdowns in delivery reporting. Each key enables a specifi
	Context                      any               `json:"context,omitempty"`
	Ext                          any               `json:"ext,omitempty"`
}

GetMediaBuyDeliveryRequest — Request parameters for retrieving comprehensive delivery metrics

type GetMediaBuyDeliveryResponse

type GetMediaBuyDeliveryResponse struct {
	NotificationType   string             `json:"notification_type,omitempty"`  // Type of webhook notification (only present in webhook deliveries): scheduled = r
	PartialData        *bool              `json:"partial_data,omitempty"`       // Indicates if any media buys in this webhook have missing/delayed data (only pres
	UnavailableCount   int                `json:"unavailable_count,omitempty"`  // Number of media buys with reporting_delayed or failed status (only present in we
	SequenceNumber     int                `json:"sequence_number,omitempty"`    // Sequential notification number (only present in webhook deliveries, starts at 1)
	NextExpectedAt     string             `json:"next_expected_at,omitempty"`   // ISO 8601 timestamp for next expected notification (only present in webhook deliv
	ReportingPeriod    any                `json:"reporting_period"`             // Date range for the report. All periods use UTC timezone.
	Currency           string             `json:"currency"`                     // ISO 4217 currency code
	AttributionWindow  *AttributionWindow `json:"attribution_window,omitempty"` // Attribution methodology and lookback windows used for conversion metrics in this
	AggregatedTotals   any                `json:"aggregated_totals,omitempty"`  // Combined metrics across all returned media buys. Only included in API responses
	MediaBuyDeliveries []any              `json:"media_buy_deliveries"`         // Array of delivery data for media buys. When used in webhook notifications, may c
	Errors             []AdcpError        `json:"errors,omitempty"`             // Task-specific errors and warnings (e.g., missing delivery data, reporting platfo
	Sandbox            *bool              `json:"sandbox,omitempty"`            // When true, this response contains simulated data from sandbox mode.
	Context            any                `json:"context,omitempty"`
	Ext                any                `json:"ext,omitempty"`
}

GetMediaBuyDeliveryResponse — Response payload for get_media_buy_delivery task

type GetMediaBuysRequest

type GetMediaBuysRequest struct {
	AdcpMajorVersion int                `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	Account          *AccountReference  `json:"account,omitempty"`            // Account to retrieve media buys for. When omitted, returns data across all access
	MediaBuyIDs      []string           `json:"media_buy_ids,omitempty"`      // Array of media buy IDs to retrieve. When omitted, returns a paginated set of acc
	StatusFilter     any                `json:"status_filter,omitempty"`      // Filter by status. Can be a single status or array of statuses. Defaults to ["act
	IncludeSnapshot  *bool              `json:"include_snapshot,omitempty"`   // When true, include a near-real-time delivery snapshot for each package. Snapshot
	IncludeHistory   int                `json:"include_history,omitempty"`    // When present, include the last N revision history entries for each media buy (re
	Pagination       *PaginationRequest `json:"pagination,omitempty"`         // Cursor-based pagination controls. Strongly recommended when querying broad scope
	Context          any                `json:"context,omitempty"`
	Ext              any                `json:"ext,omitempty"`
}

GetMediaBuysRequest — Request parameters for retrieving media buy status, creative approval state, and optional delivery s

type GetMediaBuysResponse

type GetMediaBuysResponse struct {
	MediaBuys  []any               `json:"media_buys"`           // Array of media buys with status, creative approval state, and optional delivery
	Errors     []AdcpError         `json:"errors,omitempty"`     // Task-specific errors (e.g., media buy not found)
	Pagination *PaginationResponse `json:"pagination,omitempty"` // Pagination metadata for the media_buys array.
	Sandbox    *bool               `json:"sandbox,omitempty"`    // When true, this response contains simulated data from sandbox mode.
	Context    any                 `json:"context,omitempty"`
	Ext        any                 `json:"ext,omitempty"`
}

GetMediaBuysResponse — Response payload for get_media_buys task. Returns media buy configuration, creative approval state,

type GetPlanAuditLogsRequest

type GetPlanAuditLogsRequest struct {
	AdcpMajorVersion   int      `json:"adcp_major_version,omitempty"`  // The AdCP major version the buyer's payloads conform to. Sellers validate against
	PlanIDs            []string `json:"plan_ids,omitempty"`            // Plan IDs to retrieve. For a single plan, pass a one-element array. Plans uniquel
	PortfolioPlanIDs   []string `json:"portfolio_plan_ids,omitempty"`  // Portfolio plan IDs. The governance agent expands each to its member_plan_ids and
	GovernanceContexts []string `json:"governance_contexts,omitempty"` // Filter audit entries by governance context. Returns only checks and outcomes tha
	PurchaseTypes      []string `json:"purchase_types,omitempty"`      // Filter audit entries by purchase type. Returns only checks and outcomes matching
	IncludeEntries     *bool    `json:"include_entries,omitempty"`     // Include the full audit trail. Default: false.
	Context            any      `json:"context,omitempty"`
	Ext                any      `json:"ext,omitempty"`
}

GetPlanAuditLogsRequest — Retrieve governance state and audit trail for one or more plans.

type GetPlanAuditLogsResponse

type GetPlanAuditLogsResponse struct {
	Plans   []any `json:"plans"` // Audit data for each requested plan.
	Context any   `json:"context,omitempty"`
	Ext     any   `json:"ext,omitempty"`
}

GetPlanAuditLogsResponse — Governance state and audit trail for one or more plans.

type GetProductsRequest

type GetProductsRequest struct {
	AdcpMajorVersion       int                `json:"adcp_major_version,omitempty"`       // The AdCP major version the buyer's payloads conform to. Sellers validate against
	BuyingMode             string             `json:"buying_mode"`                        // Declares buyer intent for this request. 'brief': publisher curates product recom
	Brief                  string             `json:"brief,omitempty"`                    // Natural language description of campaign requirements. Required when buying_mode
	Refine                 []map[string]any   `json:"refine,omitempty"`                   // Array of change requests for iterating on products and proposals from a previous
	Brand                  *BrandReference    `json:"brand,omitempty"`                    // Brand reference for product discovery context. Resolved to full brand identity a
	Catalog                *Catalog           `json:"catalog,omitempty"`                  // Catalog of items the buyer wants to promote. The seller matches catalog items ag
	Account                *AccountReference  `json:"account,omitempty"`                  // Account for product lookup. Returns products with pricing specific to this accou
	PreferredDeliveryTypes []string           `json:"preferred_delivery_types,omitempty"` // Delivery types the buyer prefers, in priority order. Unlike filters.delivery_typ
	Filters                any                `json:"filters,omitempty"`
	PropertyList           any                `json:"property_list,omitempty"` // [AdCP 3.0] Reference to an externally managed property list. When provided, the
	Fields                 []string           `json:"fields,omitempty"`        // Specific product fields to include in the response. When omitted, all fields are
	TimeBudget             any                `json:"time_budget,omitempty"`   // Maximum time the buyer will commit to this request. The seller returns the best
	Pagination             *PaginationRequest `json:"pagination,omitempty"`
	Context                any                `json:"context,omitempty"`
	RequiredPolicies       []string           `json:"required_policies,omitempty"` // Registry policy IDs that the buyer requires to be enforced for products in this
	Ext                    any                `json:"ext,omitempty"`
}

GetProductsRequest — Request parameters for discovering or refining advertising products. buying_mode declares the buyer'

type GetProductsResponse

type GetProductsResponse struct {
	Products            []Product           `json:"products"`                        // Array of matching products
	Proposals           []any               `json:"proposals,omitempty"`             // Optional array of proposed media plans with budget allocations across products.
	Errors              []AdcpError         `json:"errors,omitempty"`                // Task-specific errors and warnings (e.g., product filtering issues)
	PropertyListApplied *bool               `json:"property_list_applied,omitempty"` // [AdCP 3.0] Indicates whether property_list filtering was applied. True if the ag
	CatalogApplied      *bool               `json:"catalog_applied,omitempty"`       // Whether the seller filtered results based on the provided catalog. True if the s
	RefinementApplied   []map[string]any    `json:"refinement_applied,omitempty"`    // Seller's response to each change request in the refine array, matched by positio
	Incomplete          []any               `json:"incomplete,omitempty"`            // Declares what the seller could not finish within the buyer's time_budget or due
	Pagination          *PaginationResponse `json:"pagination,omitempty"`
	Sandbox             *bool               `json:"sandbox,omitempty"` // When true, this response contains simulated data from sandbox mode.
	Context             any                 `json:"context,omitempty"`
	Ext                 any                 `json:"ext,omitempty"`
}

GetProductsResponse — Response payload for get_products task

type GetSignalsRequest

type GetSignalsRequest struct {
	AdcpMajorVersion int                `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	Account          *AccountReference  `json:"account,omitempty"`            // Account for this request. When provided, the signals agent returns per-account p
	SignalSpec       string             `json:"signal_spec,omitempty"`        // Natural language description of the desired signals. When used alone, enables se
	SignalIDs        []SignalID         `json:"signal_ids,omitempty"`         // Specific signals to look up by data provider and ID. Returns exact matches from
	Destinations     []any              `json:"destinations,omitempty"`       // Filter signals to those activatable on specific agents/platforms. When omitted,
	Countries        []string           `json:"countries,omitempty"`          // Countries where signals will be used (ISO 3166-1 alpha-2 codes). When omitted, n
	Filters          *SignalFilters     `json:"filters,omitempty"`
	MaxResults       int                `json:"max_results,omitempty"` // Maximum number of results to return
	Pagination       *PaginationRequest `json:"pagination,omitempty"`
	Context          any                `json:"context,omitempty"`
	Ext              any                `json:"ext,omitempty"`
}

GetSignalsRequest — Request parameters for discovering and refining signals. Use signal_spec for natural language discov

type GetSignalsResponse

type GetSignalsResponse struct {
	Signals    []any               `json:"signals"`          // Array of matching signals
	Errors     []AdcpError         `json:"errors,omitempty"` // Task-specific errors and warnings (e.g., signal discovery or pricing issues)
	Pagination *PaginationResponse `json:"pagination,omitempty"`
	Sandbox    *bool               `json:"sandbox,omitempty"` // When true, this response contains simulated data from sandbox mode.
	Context    any                 `json:"context,omitempty"`
	Ext        any                 `json:"ext,omitempty"`
}

GetSignalsResponse — Response payload for get_signals task

type GovernanceAccount

type GovernanceAccount struct {
	Brand    *BrandReference `json:"brand,omitempty"`
	Operator string          `json:"operator,omitempty"`
}

type GovernanceAccountInput

type GovernanceAccountInput struct {
	Account          *GovernanceAccount `json:"account,omitempty"`
	Brand            *BrandReference    `json:"brand,omitempty"`
	Operator         string             `json:"operator,omitempty"`
	GovernanceAgents []GovernanceAgent  `json:"governance_agents,omitempty"`
}

GovernanceAccountInput is a single account in a sync_governance request.

type GovernanceAgent

type GovernanceAgent struct {
	URL        string   `json:"url"`
	Categories []string `json:"categories,omitempty"`
}

type GovernanceCapabilities

type GovernanceCapabilities struct {
	PropertyFeatures []GovernanceFeature `json:"property_features,omitempty"`
	CreativeFeatures []GovernanceFeature `json:"creative_features,omitempty"`
}

GovernanceCapabilities is the governance protocol capability block.

type GovernanceDomain

type GovernanceDomain = string

GovernanceDomain — Governance sub-domains that a registry policy applies to. Used to indicate which

const (
	GovernanceDomainCampaign         GovernanceDomain = "campaign"
	GovernanceDomainProperty         GovernanceDomain = "property"
	GovernanceDomainCreative         GovernanceDomain = "creative"
	GovernanceDomainContentStandards GovernanceDomain = "content_standards"
)

type GovernanceFeature

type GovernanceFeature struct {
	FeatureID      string        `json:"feature_id"`
	Type           string        `json:"type"`
	Range          *FeatureRange `json:"range,omitempty"`
	Categories     []string      `json:"categories,omitempty"`
	Description    string        `json:"description,omitempty"`
	MethodologyURL string        `json:"methodology_url,omitempty"`
}

GovernanceFeature describes a score/rating/certification the agent provides.

type GovernanceMode

type GovernanceMode = string

GovernanceMode — Operating mode for a governance agent. Controls whether findings block execution

const (
	GovernanceModeAudit    GovernanceMode = "audit"
	GovernanceModeAdvisory GovernanceMode = "advisory"
	GovernanceModeEnforce  GovernanceMode = "enforce"
)

type GovernancePhase

type GovernancePhase = string

GovernancePhase — The phase of the governed action's lifecycle that triggered the governance check

const (
	GovernancePhasePurchase     GovernancePhase = "purchase"
	GovernancePhaseModification GovernancePhase = "modification"
	GovernancePhaseDelivery     GovernancePhase = "delivery"
)

type GovernanceResult

type GovernanceResult struct {
	Account          *GovernanceAccount `json:"account"`
	Status           string             `json:"status"`
	GovernanceAgents []GovernanceAgent  `json:"governance_agents"`
}

type HTTPMethod

type HTTPMethod = string

HTTPMethod — HTTP methods supported for webhook requests

const (
	HTTPMethodGET  HTTPMethod = "GET"
	HTTPMethodPOST HTTPMethod = "POST"
)

type HistoryEntryType

type HistoryEntryType = string

HistoryEntryType — Type of entry in task execution history

const (
	HistoryEntryTypeRequest  HistoryEntryType = "request"
	HistoryEntryTypeResponse HistoryEntryType = "response"
)

type HumanOverride

type HumanOverride struct {
	Reason     string `json:"reason"`
	Approver   string `json:"approver"`
	ApprovedAt string `json:"approved_at,omitempty"`
}

HumanOverride records the human approval that downgrades a plan's human_review_required from true to false on re-sync. Required as an artifact under GDPR Art 22 / EU AI Act Annex III when an override is applied.

type IdempotencyCaps

type IdempotencyCaps struct {
	ReplayTTLSeconds int `json:"replay_ttl_seconds"`
}

IdempotencyCaps declares the seller's replay window for idempotency_key. Minimum 3600 (1h); recommended 86400 (24h); maximum 604800 (7d).

type IdentifierTypes

type IdentifierTypes = string

IdentifierTypes — Valid identifier types for property identification across different media types

const (
	IdentifierTypesDomain              IdentifierTypes = "domain"
	IdentifierTypesSubdomain           IdentifierTypes = "subdomain"
	IdentifierTypesNetworkID           IdentifierTypes = "network_id"
	IdentifierTypesIosBundle           IdentifierTypes = "ios_bundle"
	IdentifierTypesAndroidPackage      IdentifierTypes = "android_package"
	IdentifierTypesAppleAppStoreID     IdentifierTypes = "apple_app_store_id"
	IdentifierTypesGooglePlayID        IdentifierTypes = "google_play_id"
	IdentifierTypesRokuStoreID         IdentifierTypes = "roku_store_id"
	IdentifierTypesFireTvAsin          IdentifierTypes = "fire_tv_asin"
	IdentifierTypesSamsungAppID        IdentifierTypes = "samsung_app_id"
	IdentifierTypesAppleTvBundle       IdentifierTypes = "apple_tv_bundle"
	IdentifierTypesBundleID            IdentifierTypes = "bundle_id"
	IdentifierTypesVenueID             IdentifierTypes = "venue_id"
	IdentifierTypesScreenID            IdentifierTypes = "screen_id"
	IdentifierTypesOpenoohVenueType    IdentifierTypes = "openooh_venue_type"
	IdentifierTypesRssURL              IdentifierTypes = "rss_url"
	IdentifierTypesApplePodcastID      IdentifierTypes = "apple_podcast_id"
	IdentifierTypesSpotifyCollectionID IdentifierTypes = "spotify_collection_id"
	IdentifierTypesPodcastGuid         IdentifierTypes = "podcast_guid"
	IdentifierTypesStationID           IdentifierTypes = "station_id"
	IdentifierTypesFacilityID          IdentifierTypes = "facility_id"
)

type IdentityCapabilities

type IdentityCapabilities struct {
	PerPrincipalKeyIsolation bool                            `json:"per_principal_key_isolation,omitempty"`
	KeyOrigins               *IdentityKeyOrigins             `json:"key_origins,omitempty"`
	CompromiseNotification   *IdentityCompromiseNotification `json:"compromise_notification,omitempty"`
}

IdentityCapabilities declares operator identity posture — key-scoping and compromise-response controls. All fields advisory in 3.x; receivers use them to reason about blast radius and revocation latency at onboarding.

type IdentityCompromiseNotification

type IdentityCompromiseNotification struct {
	Emits   bool `json:"emits,omitempty"`
	Accepts bool `json:"accepts,omitempty"`
}

IdentityCompromiseNotification declares whether this agent emits and/or subscribes to the identity.compromise_notification webhook event on key revocation due to known or suspected compromise.

type IdentityKeyOrigins

type IdentityKeyOrigins struct {
	GovernanceSigning string `json:"governance_signing,omitempty"`
	RequestSigning    string `json:"request_signing,omitempty"`
	WebhookSigning    string `json:"webhook_signing,omitempty"`
	TMPSigning        string `json:"tmp_signing,omitempty"`
}

IdentityKeyOrigins maps signing-key purpose → publishing origin so counterparties can verify origin separation at onboarding.

type IndustryIdentifier

type IndustryIdentifier struct {
	Type  string `json:"type"`
	Value string `json:"value"`
}

IndustryIdentifier is an industry-standard creative identifier (Ad-ID, ISCI, etc.).

type InstallmentStatus

type InstallmentStatus = string

InstallmentStatus — Lifecycle status of an installment

const (
	InstallmentStatusScheduled InstallmentStatus = "scheduled"
	InstallmentStatusTentative InstallmentStatus = "tentative"
	InstallmentStatusLive      InstallmentStatus = "live"
	InstallmentStatusPostponed InstallmentStatus = "postponed"
	InstallmentStatusCancelled InstallmentStatus = "cancelled"
	InstallmentStatusAired     InstallmentStatus = "aired"
	InstallmentStatusPublished InstallmentStatus = "published"
)

type JavascriptModuleType

type JavascriptModuleType = string

JavascriptModuleType — JavaScript module format types for creative assets

const (
	JavascriptModuleTypeEsm      JavascriptModuleType = "esm"
	JavascriptModuleTypeCommonjs JavascriptModuleType = "commonjs"
	JavascriptModuleTypeScript   JavascriptModuleType = "script"
)

type KeywordMatchCaps

type KeywordMatchCaps struct {
	SupportedMatchTypes []string `json:"supported_match_types"`
}

KeywordMatchCaps declares which match types a seller honors for keyword or negative-keyword targeting. supported_match_types is required when present.

type LandingPageRequirement

type LandingPageRequirement = string

LandingPageRequirement — Landing page policy for creative click-through destinations

const (
	LandingPageRequirementAny                 LandingPageRequirement = "any"
	LandingPageRequirementRetailerSiteOnly    LandingPageRequirement = "retailer_site_only"
	LandingPageRequirementMustIncludeRetailer LandingPageRequirement = "must_include_retailer"
)

type ListAccountsRequest

type ListAccountsRequest struct {
	AdcpMajorVersion int                `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	Status           string             `json:"status,omitempty"`             // Filter accounts by status. Omit to return accounts in all statuses.
	Pagination       *PaginationRequest `json:"pagination,omitempty"`
	Sandbox          *bool              `json:"sandbox,omitempty"` // Filter by sandbox status. true returns only sandbox accounts, false returns only
	Context          any                `json:"context,omitempty"`
	Ext              any                `json:"ext,omitempty"`
}

ListAccountsRequest — Request parameters for listing accounts accessible to the authenticated agent

type ListAccountsResponse

type ListAccountsResponse struct {
	Accounts   []Account           `json:"accounts"`         // Array of accounts accessible to the authenticated agent
	Errors     []AdcpError         `json:"errors,omitempty"` // Task-specific errors and warnings
	Pagination *PaginationResponse `json:"pagination,omitempty"`
	Context    any                 `json:"context,omitempty"`
	Ext        any                 `json:"ext,omitempty"`
}

ListAccountsResponse — Response payload for list_accounts task

type ListCollectionListsRequest

type ListCollectionListsRequest struct {
	AdcpMajorVersion int                `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	Account          *AccountReference  `json:"account,omitempty"`            // Filter to lists owned by this account. When omitted, returns lists across all ac
	NameContains     string             `json:"name_contains,omitempty"`      // Filter to lists whose name contains this string
	Pagination       *PaginationRequest `json:"pagination,omitempty"`
	Context          any                `json:"context,omitempty"`
	Ext              any                `json:"ext,omitempty"`
}

ListCollectionListsRequest — Request parameters for listing collection lists

type ListCollectionListsResult

type ListCollectionListsResult struct {
	Lists      []CollectionList
	Pagination *PaginationResponse
}

ListCollectionListsResult is the return type for Config.ListCollectionLists.

type ListCreativeFormatsRequest

type ListCreativeFormatsRequest struct {
	AdcpMajorVersion      int                `json:"adcp_major_version,omitempty"`     // The AdCP major version the buyer's payloads conform to. Sellers validate against
	FormatIDs             []FormatRef        `json:"format_ids,omitempty"`             // Return only these specific format IDs (e.g., from get_products response)
	AssetTypes            []string           `json:"asset_types,omitempty"`            // Filter to formats that include these asset types. For third-party tags, search f
	MaxWidth              int                `json:"max_width,omitempty"`              // Maximum width in pixels (inclusive). Returns formats where ANY render has width
	MaxHeight             int                `json:"max_height,omitempty"`             // Maximum height in pixels (inclusive). Returns formats where ANY render has heigh
	MinWidth              int                `json:"min_width,omitempty"`              // Minimum width in pixels (inclusive). Returns formats where ANY render has width
	MinHeight             int                `json:"min_height,omitempty"`             // Minimum height in pixels (inclusive). Returns formats where ANY render has heigh
	IsResponsive          *bool              `json:"is_responsive,omitempty"`          // Filter for responsive formats that adapt to container size. When true, returns f
	NameSearch            string             `json:"name_search,omitempty"`            // Search for formats by name (case-insensitive partial match)
	WcagLevel             string             `json:"wcag_level,omitempty"`             // Filter to formats that meet at least this WCAG conformance level (A < AA < AAA)
	DisclosurePositions   []string           `json:"disclosure_positions,omitempty"`   // Filter to formats that support all of these disclosure positions. When a format
	DisclosurePersistence []string           `json:"disclosure_persistence,omitempty"` // Filter to formats where each requested persistence mode is supported by at least
	OutputFormatIDs       []FormatRef        `json:"output_format_ids,omitempty"`      // Filter to formats whose output_format_ids includes any of these format IDs. Retu
	InputFormatIDs        []FormatRef        `json:"input_format_ids,omitempty"`       // Filter to formats whose input_format_ids includes any of these format IDs. Retur
	Pagination            *PaginationRequest `json:"pagination,omitempty"`
	Context               any                `json:"context,omitempty"`
	Ext                   any                `json:"ext,omitempty"`
}

ListCreativeFormatsRequest — Request parameters for discovering supported creative formats

type ListCreativeFormatsResponse

type ListCreativeFormatsResponse struct {
	Formats        []CreativeFormat    `json:"formats"`                   // Full format definitions for all formats this agent supports. Each format's autho
	CreativeAgents []any               `json:"creative_agents,omitempty"` // Optional: Creative agents that provide additional formats. Buyers can recursivel
	Errors         []AdcpError         `json:"errors,omitempty"`          // Task-specific errors and warnings (e.g., format availability issues)
	Pagination     *PaginationResponse `json:"pagination,omitempty"`
	Sandbox        *bool               `json:"sandbox,omitempty"` // When true, this response contains simulated data from sandbox mode.
	Context        any                 `json:"context,omitempty"`
	Ext            any                 `json:"ext,omitempty"`
}

ListCreativeFormatsResponse — Response payload for list_creative_formats task

type ListCreativesRequest

type ListCreativesRequest struct {
	AdcpMajorVersion   int                `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	Filters            *CreativeFilters   `json:"filters,omitempty"`
	Sort               any                `json:"sort,omitempty"` // Sorting parameters
	Pagination         *PaginationRequest `json:"pagination,omitempty"`
	IncludeAssignments *bool              `json:"include_assignments,omitempty"` // Include package assignment information in response
	IncludeSnapshot    *bool              `json:"include_snapshot,omitempty"`    // Include a lightweight delivery snapshot per creative (lifetime impressions and l
	IncludeItems       *bool              `json:"include_items,omitempty"`       // Include items for multi-asset formats like carousels and native ads
	IncludeVariables   *bool              `json:"include_variables,omitempty"`   // Include dynamic content variable definitions (DCO slots) for each creative
	IncludePricing     *bool              `json:"include_pricing,omitempty"`     // Include pricing_options on each creative. Requires account to be provided. When
	Account            *AccountReference  `json:"account,omitempty"`             // Account reference for pricing and access. When provided with include_pricing, th
	Fields             []string           `json:"fields,omitempty"`              // Specific fields to include in response (omit for all fields). The 'concept' valu
	Context            any                `json:"context,omitempty"`
	Ext                any                `json:"ext,omitempty"`
}

ListCreativesRequest — Request parameters for querying creative assets from a creative library with filtering, sorting, and

type ListScenariosSuccess

type ListScenariosSuccess struct {
	Success   bool     `json:"success"`
	Scenarios []string `json:"scenarios"` // Scenarios this seller has implemented. Runners and sellers MUST accept unknown s
	Context   any      `json:"context,omitempty"`
	Ext       any      `json:"ext,omitempty"`
}

ListScenariosSuccess — Lists which scenarios this seller's test controller supports

type LogEventRequest

type LogEventRequest struct {
	AdcpMajorVersion int              `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	EventSourceID    string           `json:"event_source_id"`              // Event source configured on the account via sync_event_sources
	TestEventCode    string           `json:"test_event_code,omitempty"`    // Test event code for validation without affecting production data. Events with th
	Events           []map[string]any `json:"events"`                       // Events to log
	IdempotencyKey   string           `json:"idempotency_key"`              // Client-generated unique key for this request. Prevents duplicate event logging o
	Context          any              `json:"context,omitempty"`
	Ext              any              `json:"ext,omitempty"`
}

LogEventRequest — Request parameters for logging marketing events

type LogEventResult

type LogEventResult struct {
	EventsReceived  int `json:"events_received"`
	EventsProcessed int `json:"events_processed"`
}

type MCPWebhookPayload

type MCPWebhookPayload struct {
	IdempotencyKey string `json:"idempotency_key"`        // Sender-generated key stable across retries of the same webhook event. Publishers
	OperationID    string `json:"operation_id,omitempty"` // Client-generated identifier that was embedded in the webhook URL by the buyer. P
	TaskID         string `json:"task_id"`                // Unique identifier for this task. Use this to correlate webhook notifications wit
	TaskType       string `json:"task_type"`              // Type of AdCP operation that triggered this webhook. Enables webhook handlers to
	Protocol       string `json:"protocol,omitempty"`     // AdCP protocol this task belongs to. Helps classify the operation type at a high
	Status         string `json:"status"`                 // Current task status. Webhooks are triggered for status changes after initial sub
	Timestamp      string `json:"timestamp"`              // ISO 8601 timestamp when this webhook was generated.
	Message        string `json:"message,omitempty"`      // Human-readable summary of the current task state. Provides context about what ha
	ContextID      string `json:"context_id,omitempty"`   // Session/conversation identifier. Use this to continue the conversation if input-
	Result         any    `json:"result,omitempty"`       // Task-specific payload matching the status. For completed/failed, contains the fu
}

MCPWebhookPayload — Standard envelope for HTTP-based push notifications (MCP). This defines the wire format sent to the

func (*MCPWebhookPayload) IdempotencyKeyPtr

func (p *MCPWebhookPayload) IdempotencyKeyPtr() *string

--- Webhook Payload interface satisfaction --- IdempotencyKeyPtr returns a writable pointer to the payload's idempotency_key field so webhook.Marshal can fill a UUIDv4 key when the caller leaves it empty. Spec: adcontextprotocol/adcp#2417.

type MakegoodPolicy

type MakegoodPolicy struct {
	AvailableRemedies []string `json:"available_remedies"`
}

MakegoodPolicy declares available remedies when a threshold is breached.

type MakegoodRemedy

type MakegoodRemedy = string

MakegoodRemedy — Remedy types available when a performance standard or billing measurement thresh

const (
	MakegoodRemedyAdditionalDelivery MakegoodRemedy = "additional_delivery"
	MakegoodRemedyCredit             MakegoodRemedy = "credit"
	MakegoodRemedyInvoiceAdjustment  MakegoodRemedy = "invoice_adjustment"
)

type MarkdownFlavor

type MarkdownFlavor = string

MarkdownFlavor — Markdown specification flavors supported for text assets

const (
	MarkdownFlavorCommonmark MarkdownFlavor = "commonmark"
	MarkdownFlavorGfm        MarkdownFlavor = "gfm"
)

type MatchIDType

type MatchIDType = string

MatchIDType — Identifier types for audience match reporting. Combines hashed PII types (from a

const (
	MatchIDTypeHashedEmail MatchIDType = "hashed_email"
	MatchIDTypeHashedPhone MatchIDType = "hashed_phone"
	MatchIDTypeRampid      MatchIDType = "rampid"
	MatchIDTypeId5         MatchIDType = "id5"
	MatchIDTypeUid2        MatchIDType = "uid2"
	MatchIDTypeEuid        MatchIDType = "euid"
	MatchIDTypePairid      MatchIDType = "pairid"
	MatchIDTypeMaid        MatchIDType = "maid"
	MatchIDTypeOther       MatchIDType = "other"
)

type MatchingLatencyRange

type MatchingLatencyRange struct {
	Min *int `json:"min,omitempty"`
	Max *int `json:"max,omitempty"`
}

type MeasurementTerms

type MeasurementTerms struct {
	BillingMeasurement *BillingMeasurement `json:"billing_measurement,omitempty"`
	MakegoodPolicy     *MakegoodPolicy     `json:"makegood_policy,omitempty"`
}

MeasurementTerms declares billing measurement and makegood terms.

type MeasurementWindow

type MeasurementWindow struct {
	WindowID                 string `json:"window_id"`
	Description              string `json:"description,omitempty"`
	DurationDays             int    `json:"duration_days"`
	ExpectedAvailabilityDays int    `json:"expected_availability_days,omitempty"`
	IsGuaranteeBasis         bool   `json:"is_guarantee_basis,omitempty"`
}

MeasurementWindow defines a measurement maturation window for broadcast TV.

type MediaBuyCapabilities

type MediaBuyCapabilities struct {
	SupportedPricingModels   []string                `json:"supported_pricing_models,omitempty"`
	ReportingDeliveryMethods []string                `json:"reporting_delivery_methods,omitempty"`
	OfflineDeliveryProtocols []string                `json:"offline_delivery_protocols,omitempty"`
	Features                 map[string]any          `json:"features,omitempty"`
	Execution                *MediaBuyExecution      `json:"execution,omitempty"`
	AudienceTargeting        *AudienceTargetingCaps  `json:"audience_targeting,omitempty"`
	ConversionTracking       *ConversionTrackingCaps `json:"conversion_tracking,omitempty"`
	ContentStandards         *ContentStandardsCaps   `json:"content_standards,omitempty"`
	Portfolio                *PortfolioCaps          `json:"portfolio,omitempty"`
}

MediaBuyCapabilities is the media_buy protocol capability block.

type MediaBuyData

type MediaBuyData struct {
	MediaBuyID       string    `json:"media_buy_id"`      // Seller's unique identifier for the media buy
	Account          *Account  `json:"account,omitempty"` // Account billed for this media buy
	Status           string    `json:"status"`
	RejectionReason  string    `json:"rejection_reason,omitempty"`  // Reason provided by the seller when status is 'rejected'. Present only when statu
	ConfirmedAt      string    `json:"confirmed_at,omitempty"`      // ISO 8601 timestamp when the seller confirmed this media buy. A successful create
	Cancellation     any       `json:"cancellation,omitempty"`      // Cancellation metadata. Present only when status is 'canceled'.
	TotalBudget      float64   `json:"total_budget"`                // Total budget amount
	Packages         []Package `json:"packages"`                    // Array of packages within this media buy
	InvoiceRecipient any       `json:"invoice_recipient,omitempty"` // Per-buy override for who receives the invoice. When provided, the seller invoice
	CreativeDeadline string    `json:"creative_deadline,omitempty"` // ISO 8601 timestamp for creative upload deadline
	Revision         int       `json:"revision,omitempty"`          // Monotonically increasing revision number. Incremented on every state change or u
	CreatedAt        string    `json:"created_at,omitempty"`        // Creation timestamp
	UpdatedAt        string    `json:"updated_at,omitempty"`        // Last update timestamp
	Ext              any       `json:"ext,omitempty"`
}

MediaBuyData — Represents a purchased advertising campaign

type MediaBuyDelivery

type MediaBuyDelivery struct {
	MediaBuyID string            `json:"media_buy_id"`
	Status     string            `json:"status"`
	Totals     DeliveryTotals    `json:"totals"`
	ByPackage  []PackageDelivery `json:"by_package"`
}

type MediaBuyExecution

type MediaBuyExecution struct {
	TrustedMatch  *TrustedMatchCaps  `json:"trusted_match,omitempty"`
	CreativeSpecs *CreativeSpecsCaps `json:"creative_specs,omitempty"`
	Targeting     *TargetingCaps     `json:"targeting,omitempty"`
}

MediaBuyExecution describes technical execution capabilities for media buying.

type MediaBuyListItem

type MediaBuyListItem struct {
	MediaBuyID string    `json:"media_buy_id"`
	Status     string    `json:"status"`
	Currency   string    `json:"currency"`
	Packages   []Package `json:"packages"`
}

type MediaBuyStatus

type MediaBuyStatus = string

MediaBuyStatus — Status of a media buy.

const (
	MediaBuyStatusPendingCreatives MediaBuyStatus = "pending_creatives"
	MediaBuyStatusPendingStart     MediaBuyStatus = "pending_start"
	MediaBuyStatusActive           MediaBuyStatus = "active"
	MediaBuyStatusPaused           MediaBuyStatus = "paused"
	MediaBuyStatusCompleted        MediaBuyStatus = "completed"
	MediaBuyStatusRejected         MediaBuyStatus = "rejected"
	MediaBuyStatusCanceled         MediaBuyStatus = "canceled"
)

type MetricType

type MetricType = string

MetricType — Performance metric types for feedback and optimization

const (
	MetricTypeOverallPerformance MetricType = "overall_performance"
	MetricTypeConversionRate     MetricType = "conversion_rate"
	MetricTypeBrandLift          MetricType = "brand_lift"
	MetricTypeClickThroughRate   MetricType = "click_through_rate"
	MetricTypeCompletionRate     MetricType = "completion_rate"
	MetricTypeViewability        MetricType = "viewability"
	MetricTypeBrandSafety        MetricType = "brand_safety"
	MetricTypeCostEfficiency     MetricType = "cost_efficiency"
)

type MetroSystem

type MetroSystem = string

MetroSystem — Metro area classification systems for geographic targeting

const (
	MetroSystemNielsenDma    MetroSystem = "nielsen_dma"
	MetroSystemUkItl1        MetroSystem = "uk_itl1"
	MetroSystemUkItl2        MetroSystem = "uk_itl2"
	MetroSystemEurostatNuts2 MetroSystem = "eurostat_nuts2"
	MetroSystemCustom        MetroSystem = "custom"
)

type NotificationType

type NotificationType = string

NotificationType — Type of delivery notification for media buy reporting

const (
	NotificationTypeScheduled NotificationType = "scheduled"
	NotificationTypeFinal     NotificationType = "final"
	NotificationTypeDelayed   NotificationType = "delayed"
	NotificationTypeAdjusted  NotificationType = "adjusted"
)

type OutcomeType

type OutcomeType = string

OutcomeType — The type of outcome reported to a campaign governance agent after a seller inter

const (
	OutcomeTypeCompleted OutcomeType = "completed"
	OutcomeTypeFailed    OutcomeType = "failed"
	OutcomeTypeDelivery  OutcomeType = "delivery"
)

type Pacing

type Pacing = string

Pacing — Budget pacing strategy

const (
	PacingEven        Pacing = "even"
	PacingAsap        Pacing = "asap"
	PacingFrontLoaded Pacing = "front_loaded"
)

type Package

type Package struct {
	PackageID            string                `json:"package_id"`           // Seller's unique identifier for the package
	ProductID            string                `json:"product_id,omitempty"` // ID of the product this package is based on
	Budget               float64               `json:"budget,omitempty"`     // Budget allocation for this package in the currency specified by the pricing opti
	Pacing               string                `json:"pacing,omitempty"`
	PricingOptionID      string                `json:"pricing_option_id,omitempty"` // ID of the selected pricing option from the product's pricing_options array
	BidPrice             float64               `json:"bid_price,omitempty"`         // Bid price for auction-based pricing. This is the exact bid/price to honor unless
	PriceBreakdown       any                   `json:"price_breakdown,omitempty"`   // Breakdown of the effective price for this package. On fixed-price packages, echo
	Impressions          float64               `json:"impressions,omitempty"`       // Impression goal for this package
	Catalogs             []Catalog             `json:"catalogs,omitempty"`          // Catalogs this package promotes. Each catalog MUST have a distinct type (e.g., on
	FormatIDs            []FormatRef           `json:"format_ids,omitempty"`        // Format IDs active for this package. Echoed from the create_media_buy request; om
	TargetingOverlay     *Targeting            `json:"targeting_overlay,omitempty"`
	MeasurementTerms     *MeasurementTerms     `json:"measurement_terms,omitempty"`      // Agreed billing measurement and makegood terms for this package. Reflects what wa
	PerformanceStandards []PerformanceStandard `json:"performance_standards,omitempty"`  // Agreed performance standards for this package. When any entry specifies a vendor
	CreativeAssignments  []any                 `json:"creative_assignments,omitempty"`   // Creative assets assigned to this package
	FormatIDsToProvide   []FormatRef           `json:"format_ids_to_provide,omitempty"`  // Format IDs that creative assets will be provided for this package
	OptimizationGoals    []any                 `json:"optimization_goals,omitempty"`     // Optimization targets for this package. The seller optimizes delivery toward thes
	StartTime            string                `json:"start_time,omitempty"`             // Flight start date/time for this package in ISO 8601 format. When omitted, the pa
	EndTime              string                `json:"end_time,omitempty"`               // Flight end date/time for this package in ISO 8601 format. When omitted, the pack
	Paused               *bool                 `json:"paused,omitempty"`                 // Whether this package is paused by the buyer. Paused packages do not deliver impr
	Canceled             *bool                 `json:"canceled,omitempty"`               // Whether this package has been canceled. Canceled packages stop delivery and cann
	Cancellation         any                   `json:"cancellation,omitempty"`           // Cancellation metadata. Present only when canceled is true.
	AgencyEstimateNumber string                `json:"agency_estimate_number,omitempty"` // Agency estimate or authorization number for this package. Echoed from the buyer'
	CreativeDeadline     string                `json:"creative_deadline,omitempty"`      // ISO 8601 timestamp for creative upload or change deadline for this package. Afte
	Context              any                   `json:"context,omitempty"`
	Ext                  any                   `json:"ext,omitempty"`
}

Package — A specific product within a media buy (line item)

type PackageDelivery

type PackageDelivery struct {
	PackageID string         `json:"package_id"`
	Totals    DeliveryTotals `json:"totals"`
}

type PackageInput

type PackageInput struct {
	ProductID       string  `json:"product_id"`
	PricingOptionID string  `json:"pricing_option_id,omitempty"`
	Budget          float64 `json:"budget"`
	BidPrice        float64 `json:"bid_price,omitempty"`

	// Business terms (buyer proposals, override product defaults)
	MeasurementTerms     *MeasurementTerms     `json:"measurement_terms,omitempty"`
	PerformanceStandards []PerformanceStandard `json:"performance_standards,omitempty"`

	// Broadcast / scheduling
	AgencyEstimateNumber string `json:"agency_estimate_number,omitempty"`
	StartTime            string `json:"start_time,omitempty"`
	EndTime              string `json:"end_time,omitempty"`
}

PackageInput is a single package in a create_media_buy request.

type PaginationRequest

type PaginationRequest struct {
	MaxResults int    `json:"max_results,omitempty"` // Maximum number of items to return per page
	Cursor     string `json:"cursor,omitempty"`      // Opaque cursor from a previous response to fetch the next page
}

PaginationRequest — Standard cursor-based pagination parameters for list operations

type PaginationResponse

type PaginationResponse struct {
	HasMore    bool   `json:"has_more"`              // Whether more results are available beyond this page
	Cursor     string `json:"cursor,omitempty"`      // Opaque cursor to pass in the next request to fetch the next page. Only present w
	TotalCount int    `json:"total_count,omitempty"` // Total number of items matching the query across all pages. Optional because not
}

PaginationResponse — Standard cursor-based pagination metadata for list responses

type PerformanceFeedback

type PerformanceFeedback struct {
	FeedbackID        string  `json:"feedback_id"`           // Unique identifier for this performance feedback submission
	MediaBuyID        string  `json:"media_buy_id"`          // Publisher's media buy identifier
	PackageID         string  `json:"package_id,omitempty"`  // Specific package within the media buy (if feedback is package-specific)
	CreativeID        string  `json:"creative_id,omitempty"` // Specific creative asset (if feedback is creative-specific)
	MeasurementPeriod any     `json:"measurement_period"`    // Time period for performance measurement
	PerformanceIndex  float64 `json:"performance_index"`     // Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expec
	MetricType        string  `json:"metric_type"`           // The business metric being measured
	FeedbackSource    string  `json:"feedback_source"`       // Source of the performance data
	Status            string  `json:"status"`                // Processing status of the performance feedback
	SubmittedAt       string  `json:"submitted_at"`          // ISO 8601 timestamp when feedback was submitted
	AppliedAt         string  `json:"applied_at,omitempty"`  // ISO 8601 timestamp when feedback was applied to optimization algorithms
}

PerformanceFeedback — Represents performance feedback data for a media buy or package

type PerformanceStandard

type PerformanceStandard struct {
	Metric    string          `json:"metric"`
	Threshold float64         `json:"threshold"`
	Standard  string          `json:"standard,omitempty"`
	Vendor    *BrandReference `json:"vendor"`
}

PerformanceStandard defines a rate threshold for a performance metric.

type PerformanceStandardMetric

type PerformanceStandardMetric = string

PerformanceStandardMetric — Performance metrics that support rate thresholds on media buys. Each metric spec

const (
	PerformanceStandardMetricViewability    PerformanceStandardMetric = "viewability"
	PerformanceStandardMetricIvt            PerformanceStandardMetric = "ivt"
	PerformanceStandardMetricCompletionRate PerformanceStandardMetric = "completion_rate"
	PerformanceStandardMetricBrandSafety    PerformanceStandardMetric = "brand_safety"
	PerformanceStandardMetricAttentionScore PerformanceStandardMetric = "attention_score"
)

type Plan

type Plan struct {
	PlanID                     string                `json:"plan_id"`
	Brand                      *BrandReference       `json:"brand"`
	Objectives                 string                `json:"objectives"`
	Budget                     PlanBudget            `json:"budget"`
	Channels                   *PlanChannels         `json:"channels,omitempty"`
	Flight                     PlanFlight            `json:"flight"`
	Countries                  []string              `json:"countries,omitempty"`
	Regions                    []string              `json:"regions,omitempty"`
	PolicyIDs                  []string              `json:"policy_ids,omitempty"`
	PolicyCategories           []string              `json:"policy_categories,omitempty"`
	Audience                   *AudienceConstraints  `json:"audience,omitempty"`
	RestrictedAttributes       []RestrictedAttribute `json:"restricted_attributes,omitempty"`
	RestrictedAttributesCustom []string              `json:"restricted_attributes_custom,omitempty"`
	MinAudienceSize            int                   `json:"min_audience_size,omitempty"`
	HumanReviewRequired        bool                  `json:"human_review_required,omitempty"`
	HumanOverride              *HumanOverride        `json:"human_override,omitempty"`
	CustomPolicies             []PolicyEntry         `json:"custom_policies,omitempty"`
	ApprovedSellers            []string              `json:"approved_sellers,omitempty"`
	Delegations                []PlanDelegation      `json:"delegations,omitempty"`
	Portfolio                  *PlanPortfolio        `json:"portfolio,omitempty"`
	Ext                        map[string]any        `json:"ext,omitempty"`
}

Plan is a campaign governance plan — the authorized parameters for a campaign. Inline nested object in sync_plans_request.plans; must be hand-written because the generator does not descend into inline arrays.

func (*Plan) Validate

func (p *Plan) Validate() []PlanValidationError

Validate enforces the cross-field invariants that the AdCP governance schema encodes as oneOf and if/then rules plus defense-in-depth size caps. Callers should run Validate before submitting a plan to a governance agent; governance-agent implementors MUST run it on receipt — Validate is advisory, not enforcing, and an agent that skips it accepts plans that violate the schema's load-bearing human-oversight invariants.

Enforced invariants:

  • budget.reallocation_threshold XOR budget.reallocation_unlimited must be set
  • policy_categories ∋ regulated vertical ⇒ human_review_required = true (case- and whitespace-insensitive to catch common obfuscations)
  • policy_ids ∋ eu_ai_act_annex_iii ⇒ human_review_required = true (ditto)
  • objectives ≤ 2000 chars (schema maxLength)
  • custom_policies[].policy ≤ 5000 chars; .description ≤ 500 chars
  • human_override.reason ≥ 20 chars; .approver parses as an email address; .approved_at parses as RFC 3339 when non-empty
  • portfolio.member_plan_ids required when portfolio is set
  • delegations[].agent_url and .authority required
  • brand.data_subject_contestation URL must be https; email must parse

Not enforced (governance-agent responsibility): semantic industry matching, prompt-injection content filtering beyond size, registry vs inline policy segmentation in LLM prompts.

Returns nil when the plan has no violations. Errors use stable codes — callers embedding Validate in a server should return the code, not the raw message, to avoid leaking the untrusted input values back to the caller.

type PlanBudget

type PlanBudget struct {
	Total                 float64                         `json:"total"`
	Currency              string                          `json:"currency"`
	PerSellerMaxPct       float64                         `json:"per_seller_max_pct,omitempty"`
	ReallocationThreshold *float64                        `json:"reallocation_threshold,omitempty"`
	ReallocationUnlimited bool                            `json:"reallocation_unlimited,omitempty"`
	Allocations           map[string]PlanBudgetAllocation `json:"allocations,omitempty"`
}

PlanBudget authorizes spend for a plan. Exactly one of ReallocationThreshold or ReallocationUnlimited must be set (the schema's oneOf constraint). Use Validate to enforce this invariant at runtime; struct types alone cannot.

type PlanBudgetAllocation

type PlanBudgetAllocation struct {
	Amount float64 `json:"amount,omitempty"`
	MaxPct float64 `json:"max_pct,omitempty"`
}

PlanBudgetAllocation caps spend for a single purchase type within a plan.

type PlanChannelMixTarget

type PlanChannelMixTarget struct {
	MinPct float64 `json:"min_pct,omitempty"`
	MaxPct float64 `json:"max_pct,omitempty"`
}

PlanChannelMixTarget is a per-channel target allocation range.

type PlanChannels

type PlanChannels struct {
	Required   []string                        `json:"required,omitempty"`
	Allowed    []string                        `json:"allowed,omitempty"`
	MixTargets map[string]PlanChannelMixTarget `json:"mix_targets,omitempty"`
}

PlanChannels constrains channel selection for a plan.

type PlanDelegation

type PlanDelegation struct {
	AgentURL    string                `json:"agent_url"`
	Authority   string                `json:"authority"`
	BudgetLimit *PlanDelegationBudget `json:"budget_limit,omitempty"`
	Markets     []string              `json:"markets,omitempty"`
	ExpiresAt   string                `json:"expires_at,omitempty"`
}

PlanDelegation grants an agent authority to execute against a plan.

type PlanDelegationBudget

type PlanDelegationBudget struct {
	Amount   float64 `json:"amount"`
	Currency string  `json:"currency"`
}

PlanDelegationBudget caps the budget a delegated agent can commit.

type PlanFlight

type PlanFlight struct {
	Start string `json:"start"`
	End   string `json:"end"`
}

PlanFlight defines the authorized flight window (ISO 8601 timestamps).

type PlanPortfolio

type PlanPortfolio struct {
	MemberPlanIDs    []string                `json:"member_plan_ids"`
	TotalBudgetCap   *PlanPortfolioBudgetCap `json:"total_budget_cap,omitempty"`
	SharedPolicyIDs  []string                `json:"shared_policy_ids,omitempty"`
	SharedExclusions []PolicyEntry           `json:"shared_exclusions,omitempty"`
}

PlanPortfolio marks a plan as a portfolio plan governing member plans.

type PlanPortfolioBudgetCap

type PlanPortfolioBudgetCap struct {
	Amount   float64 `json:"amount"`
	Currency string  `json:"currency"`
}

PlanPortfolioBudgetCap caps aggregate spend across member plans.

type PlanValidationError

type PlanValidationError struct {
	Field   string
	Code    string
	Message string
}

PlanValidationError describes a single invariant violation on a Plan. Field is a JSON pointer-style path; Code is a stable machine-readable token suitable for direct mapping to AdCP INVALID_FIELD error responses.

func (PlanValidationError) Error

func (e PlanValidationError) Error() string

type PolicyCategory

type PolicyCategory = string

PolicyCategory — The nature of the obligation a policy represents.

const (
	PolicyCategoryRegulation PolicyCategory = "regulation"
	PolicyCategoryStandard   PolicyCategory = "standard"
)

type PolicyCategoryDefinition

type PolicyCategoryDefinition struct {
	CategoryID           string   `json:"category_id"`                     // Unique identifier for this category. Used in plan.policy_categories, signal-defi
	Name                 string   `json:"name"`                            // Human-readable name (e.g., 'Children-Directed Content').
	Description          string   `json:"description"`                     // What this category covers. Defines the boundary — what campaigns or data fall un
	RegulatoryFrameworks []any    `json:"regulatory_frameworks,omitempty"` // Key regulations and standards grouped under this category. Governance agents use
	RestrictedAttributes []string `json:"restricted_attributes,omitempty"` // Restricted attribute categories that regulations in this category prohibit for t
	RequiresHumanReview  *bool    `json:"requires_human_review,omitempty"` // When true, any plan declaring this category MUST set plan.human_review_required
	Industries           []string `json:"industries,omitempty"`            // Industries where this category commonly applies (e.g., 'pharmaceutical' for age_
	Guidance             string   `json:"guidance,omitempty"`              // Implementation notes for governance agents. Edge cases, disambiguation, and comm
	RelatedCategories    []string `json:"related_categories,omitempty"`    // Categories that frequently co-occur (e.g., 'children_directed' often appears wit
}

PolicyCategoryDefinition — Definition of a policy category in the registry. Policy categories group related regulatory regimes

type PolicyEnforcement

type PolicyEnforcement = string

PolicyEnforcement — How governance agents treat violations of a policy. Uses RFC 2119 keywords.

const (
	PolicyEnforcementMust   PolicyEnforcement = "must"
	PolicyEnforcementShould PolicyEnforcement = "should"
	PolicyEnforcementMay    PolicyEnforcement = "may"
)

type PolicyEntry

type PolicyEntry struct {
	PolicyID            string              `json:"policy_id"`                       // Unique identifier for this policy. Registry-published ids are canonical (e.g., "
	Source              string              `json:"source,omitempty"`                // Origin of this policy. 'registry' = published to the shared AdCP policy registry
	Version             string              `json:"version,omitempty"`               // Semver version string (e.g., "1.0.0"). Incremented when policy content changes.
	Name                string              `json:"name,omitempty"`                  // Human-readable name (e.g., "UK HFSS Restrictions"). Optional for inline bespoke
	Description         string              `json:"description,omitempty"`           // Brief summary of what this policy covers.
	Category            string              `json:"category,omitempty"`              // The nature of the obligation: regulation (legal requirement) or standard (best p
	Enforcement         string              `json:"enforcement"`                     // How governance agents treat violations. Regulations are typically "must"; standa
	RequiresHumanReview *bool               `json:"requires_human_review,omitempty"` // When true, plans subject to this policy MUST set plan.human_review_required = tr
	Jurisdictions       []string            `json:"jurisdictions,omitempty"`         // ISO 3166-1 alpha-2 country codes where this policy applies. Empty array means th
	RegionAliases       map[string][]string `json:"region_aliases,omitempty"`        // Named groups of jurisdictions for convenience (e.g., {"EU": ["AT","BE","BG",...]
	PolicyCategories    []string            `json:"policy_categories,omitempty"`     // Regulatory categories this policy belongs to (e.g., ["children_directed", "age_r
	Channels            []string            `json:"channels,omitempty"`              // Advertising channels this policy applies to. If omitted or null, the policy appl
	GovernanceDomains   []string            `json:"governance_domains,omitempty"`    // Governance sub-domains this policy applies to. Determines which types of governa
	EffectiveDate       string              `json:"effective_date,omitempty"`        // ISO 8601 date when the regulation or standard takes effect. Before this date, go
	SunsetDate          string              `json:"sunset_date,omitempty"`           // ISO 8601 date when the regulation or standard is no longer enforced. After this
	SourceURL           string              `json:"source_url,omitempty"`            // Link to the source regulation, standard, or legislation.
	SourceName          string              `json:"source_name,omitempty"`           // Name of the issuing body (e.g., "UK Food Standards Agency", "US Federal Trade Co
	Policy              string              `json:"policy"`                          // Natural language policy text describing what is required, prohibited, or recomme
	Guidance            string              `json:"guidance,omitempty"`              // Implementation notes for governance agent developers. Not used in evaluation pro
	Exemplars           any                 `json:"exemplars,omitempty"`             // Calibration examples for governance agents, following the Content Standards patt
	Ext                 any                 `json:"ext,omitempty"`
}

PolicyEntry — A policy — either published to the shared registry (with full regulatory metadata) or authored inlin

type PortfolioCaps

type PortfolioCaps struct {
	PublisherDomains    []string `json:"publisher_domains"`
	PrimaryChannels     []string `json:"primary_channels,omitempty"`
	PrimaryCountries    []string `json:"primary_countries,omitempty"`
	Description         string   `json:"description,omitempty"`
	AdvertisingPolicies string   `json:"advertising_policies,omitempty"`
}

PortfolioCaps describes the seller's inventory portfolio. publisher_domains is required when present.

type PostalSystem

type PostalSystem = string

PostalSystem — Postal code systems for geographic targeting. System names encode country and pr

const (
	PostalSystemUsZip         PostalSystem = "us_zip"
	PostalSystemUsZipPlusFour PostalSystem = "us_zip_plus_four"
	PostalSystemGbOutward     PostalSystem = "gb_outward"
	PostalSystemGbFull        PostalSystem = "gb_full"
	PostalSystemCaFsa         PostalSystem = "ca_fsa"
	PostalSystemCaFull        PostalSystem = "ca_full"
	PostalSystemDePlz         PostalSystem = "de_plz"
	PostalSystemFrCodePostal  PostalSystem = "fr_code_postal"
	PostalSystemAuPostcode    PostalSystem = "au_postcode"
	PostalSystemChPlz         PostalSystem = "ch_plz"
	PostalSystemAtPlz         PostalSystem = "at_plz"
)

type Preview

type Preview struct {
	PreviewID string          `json:"preview_id"`
	Input     map[string]any  `json:"input"`
	Renders   []PreviewRender `json:"renders"`
}

type PreviewCreativeRequest

type PreviewCreativeRequest struct {
	AdcpMajorVersion int               `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	RequestType      string            `json:"request_type"`                 // Preview mode. 'single' previews one creative manifest. 'batch' previews multiple
	CreativeManifest *CreativeManifest `json:"creative_manifest,omitempty"`  // Complete creative manifest with all required assets for the format. Required whe
	FormatID         *FormatRef        `json:"format_id,omitempty"`          // Format identifier for rendering the preview. Defaults to creative_manifest.forma
	Inputs           []any             `json:"inputs,omitempty"`             // Array of input sets for generating multiple preview variants. Each input set def
	TemplateID       string            `json:"template_id,omitempty"`        // Specific template ID for custom format rendering. Used in single mode.
	Quality          string            `json:"quality,omitempty"`            // Render quality. 'draft' produces fast, lower-fidelity renderings. 'production' p
	OutputFormat     string            `json:"output_format,omitempty"`      // Output format. 'url' returns preview_url (iframe-embeddable URL), 'html' returns
	ItemLimit        int               `json:"item_limit,omitempty"`         // Maximum number of catalog items to render per preview variant. Used in single mo
	Requests         []any             `json:"requests,omitempty"`           // Array of preview requests (1-50 items). Required when request_type is 'batch'. E
	VariantID        string            `json:"variant_id,omitempty"`         // Platform-assigned variant identifier from get_creative_delivery response. Requir
	CreativeID       string            `json:"creative_id,omitempty"`        // Creative identifier for context. Used in variant mode.
	Context          any               `json:"context,omitempty"`
	Ext              any               `json:"ext,omitempty"`
}

PreviewCreativeRequest — Request to generate previews of creative manifests. Uses request_type to select single, batch, or va

type PreviewOutputFormat

type PreviewOutputFormat = string

PreviewOutputFormat — Output format for creative previews

const (
	PreviewOutputFormatURL  PreviewOutputFormat = "url"
	PreviewOutputFormatHTML PreviewOutputFormat = "html"
)

type PreviewRender

type PreviewRender struct {
	RenderID     string  `json:"render_id"`
	OutputFormat string  `json:"output_format"`
	PreviewURL   string  `json:"preview_url,omitempty"`
	HTML         string  `json:"html,omitempty"`
	Role         string  `json:"role"`
	Dimensions   *Render `json:"dimensions,omitempty"`
}

type PreviewResult

type PreviewResult struct {
	ResponseType string    `json:"response_type"`
	Previews     []Preview `json:"previews"`
	ExpiresAt    string    `json:"expires_at"`
}

type PricingModel

type PricingModel = string

PricingModel — Supported pricing models for advertising products

const (
	PricingModelCPM      PricingModel = "cpm"
	PricingModelVcpm     PricingModel = "vcpm"
	PricingModelCPC      PricingModel = "cpc"
	PricingModelCpcv     PricingModel = "cpcv"
	PricingModelCpv      PricingModel = "cpv"
	PricingModelCpp      PricingModel = "cpp"
	PricingModelCPA      PricingModel = "cpa"
	PricingModelFlatRate PricingModel = "flat_rate"
	PricingModelTime     PricingModel = "time"
)

type PricingOption

type PricingOption struct {
	PricingOptionID     string   `json:"pricing_option_id"`
	PricingModel        string   `json:"pricing_model"`
	Currency            string   `json:"currency"`
	FixedPrice          float64  `json:"fixed_price,omitempty"`
	FloorPrice          float64  `json:"floor_price,omitempty"`
	MinSpendPerPackage  float64  `json:"min_spend_per_package,omitempty"`
	MaxBid              *bool    `json:"max_bid,omitempty"`
	PriceGuidance       any      `json:"price_guidance,omitempty"`
	PriceBreakdown      any      `json:"price_breakdown,omitempty"`
	EventSourceID       string   `json:"event_source_id,omitempty"`
	EventType           string   `json:"event_type,omitempty"`
	CustomEventName     string   `json:"custom_event_name,omitempty"`
	EligibleAdjustments []string `json:"eligible_adjustments,omitempty"`
	Parameters          any      `json:"parameters,omitempty"`
}

PricingOption is the flattened union of all variants in pricing-option.json. The schema is a oneOf of 9 pricing models (cpm, vcpm, cpc, cpcv, cpv, cpp, cpa, flat_rate, time); the Go representation carries every variant's fields so a single struct type can be constructed for any model. PricingModel is the discriminator; callers MUST only set fields that apply to their model.

Fields by variant:

cpm / vcpm / cpc / cpcv / cpv / cpp:
  FixedPrice (fixed) OR FloorPrice + PriceGuidance (auction); MaxBid for
  auction models to interpret bid_price as a ceiling.
cpa:
  FixedPrice, EventSourceID, EventType (required); CustomEventName when
  EventType="custom"; EligibleAdjustments for adjustment filtering.
flat_rate:
  FixedPrice (required).
time:
  FixedPrice (required), Parameters for duration/unit specifics.
All variants: PricingOptionID, Currency, MinSpendPerPackage, PriceBreakdown.

type Product

type Product struct {
	ProductID                  string                      `json:"product_id"`           // Unique identifier for the product
	Name                       string                      `json:"name"`                 // Human-readable product name
	Description                string                      `json:"description"`          // Detailed description of the product and its inventory
	PublisherProperties        []PublisherPropertySelector `json:"publisher_properties"` // Publisher properties covered by this product. Buyers fetch actual property defin
	Channels                   []string                    `json:"channels,omitempty"`   // Advertising channels this product is sold as. Products inherit from their proper
	FormatIDs                  []FormatRef                 `json:"format_ids"`           // Array of supported creative format IDs - structured format_id objects with agent
	Placements                 []any                       `json:"placements,omitempty"` // Optional array of specific placements within this product. When provided, buyers
	DeliveryType               string                      `json:"delivery_type"`
	Exclusivity                string                      `json:"exclusivity,omitempty"` // Whether this product offers exclusive access to its inventory. Defaults to 'none
	PricingOptions             []PricingOption             `json:"pricing_options"`       // Available pricing models for this product
	Forecast                   any                         `json:"forecast,omitempty"`    // Forecasted delivery metrics for this product. Gives buyers an estimate of expect
	OutcomeMeasurement         any                         `json:"outcome_measurement,omitempty"`
	DeliveryMeasurement        any                         `json:"delivery_measurement,omitempty"`  // Measurement provider and methodology for delivery metrics. The buyer accepts the
	MeasurementTerms           *MeasurementTerms           `json:"measurement_terms,omitempty"`     // Seller's default billing measurement and makegood terms. Declares who counts the
	PerformanceStandards       []PerformanceStandard       `json:"performance_standards,omitempty"` // Seller's default performance standards for this product: viewability, IVT, compl
	CancellationPolicy         *CancellationPolicy         `json:"cancellation_policy,omitempty"`   // Cancellation terms for this product. Declares the minimum notice period required
	ReportingCapabilities      any                         `json:"reporting_capabilities"`
	CreativePolicy             any                         `json:"creative_policy,omitempty"`
	IsCustom                   *bool                       `json:"is_custom,omitempty"`                    // Whether this is a custom product
	PropertyTargetingAllowed   *bool                       `json:"property_targeting_allowed,omitempty"`   // Whether buyers can filter this product to a subset of its publisher_properties.
	DataProviderSignals        []any                       `json:"data_provider_signals,omitempty"`        // Data provider signals available for this product. Buyers fetch signal definition
	SignalTargetingAllowed     *bool                       `json:"signal_targeting_allowed,omitempty"`     // Whether buyers can filter this product to a subset of its data_provider_signals.
	CatalogTypes               []string                    `json:"catalog_types,omitempty"`                // Catalog types this product supports for catalog-driven campaigns. A sponsored pr
	MetricOptimization         any                         `json:"metric_optimization,omitempty"`          // Metric optimization capabilities for this product. Presence indicates the produc
	MaxOptimizationGoals       int                         `json:"max_optimization_goals,omitempty"`       // Maximum number of optimization_goals this product accepts on a package. When abs
	MeasurementReadiness       any                         `json:"measurement_readiness,omitempty"`        // Assessment of whether the buyer's event source setup is sufficient for this prod
	ConversionTracking         any                         `json:"conversion_tracking,omitempty"`          // Conversion event tracking for this product. Presence indicates the product suppo
	CatalogMatch               any                         `json:"catalog_match,omitempty"`                // When the buyer provides a catalog on get_products, indicates which catalog items
	BriefRelevance             string                      `json:"brief_relevance,omitempty"`              // Explanation of why this product matches the brief (only included when brief is p
	ExpiresAt                  string                      `json:"expires_at,omitempty"`                   // Expiration timestamp. After this time, the product may no longer be available fo
	ProductCard                any                         `json:"product_card,omitempty"`                 // Optional standard visual card (300x400px) for displaying this product in user in
	ProductCardDetailed        any                         `json:"product_card_detailed,omitempty"`        // Optional detailed card with carousel and full specifications. Provides rich prod
	Collections                []any                       `json:"collections,omitempty"`                  // Collections available in this product. Each entry references collections declare
	CollectionTargetingAllowed *bool                       `json:"collection_targeting_allowed,omitempty"` // Whether buyers can target a subset of this product's collections. When false (de
	Installments               []any                       `json:"installments,omitempty"`                 // Specific installments included in this product. Each installment references its
	EnforcedPolicies           []string                    `json:"enforced_policies,omitempty"`            // Registry policy IDs the seller enforces for this product. Enforcement level come
	TrustedMatch               any                         `json:"trusted_match,omitempty"`                // Trusted Match Protocol capabilities for this product. When present, the product
	MaterialSubmission         any                         `json:"material_submission,omitempty"`          // Instructions for submitting physical creative materials (print, static OOH, cine
	Ext                        any                         `json:"ext,omitempty"`
}

Product — Represents available advertising inventory

type ProductionQuality

type ProductionQuality = string

ProductionQuality — Production quality tier for collection content. Maps to OpenRTB content.prodq: p

const (
	ProductionQualityProfessional ProductionQuality = "professional"
	ProductionQualityProsumer     ProductionQuality = "prosumer"
	ProductionQualityUgc          ProductionQuality = "ugc"
)

type ProductsData

type ProductsData struct {
	Products []Product `json:"products"`
	Sandbox  bool      `json:"sandbox,omitempty"`
}

type PropertyListChangedWebhook

type PropertyListChangedWebhook struct {
	IdempotencyKey  string `json:"idempotency_key"`             // Sender-generated key stable across retries of the same webhook event. Governance
	Event           string `json:"event"`                       // The event type
	ListID          string `json:"list_id"`                     // ID of the property list that changed
	ListName        string `json:"list_name,omitempty"`         // Name of the property list
	ChangeSummary   any    `json:"change_summary,omitempty"`    // Summary of changes to the resolved list
	ResolvedAt      string `json:"resolved_at"`                 // When the list was re-resolved
	CacheValidUntil string `json:"cache_valid_until,omitempty"` // When the consumer should refresh from the governance agent
	Signature       string `json:"signature"`                   // Cryptographic signature of the webhook payload, signed with the agent's private
	Ext             any    `json:"ext,omitempty"`
}

PropertyListChangedWebhook — Webhook notification sent when a property list's resolved properties change. Contains a summary only

func (*PropertyListChangedWebhook) IdempotencyKeyPtr

func (p *PropertyListChangedWebhook) IdempotencyKeyPtr() *string

type PropertyType

type PropertyType = string

PropertyType — Types of addressable advertising properties with verifiable ownership. Property

const (
	PropertyTypeWebsite        PropertyType = "website"
	PropertyTypeMobileApp      PropertyType = "mobile_app"
	PropertyTypeCtvApp         PropertyType = "ctv_app"
	PropertyTypeDesktopApp     PropertyType = "desktop_app"
	PropertyTypeDooh           PropertyType = "dooh"
	PropertyTypePodcast        PropertyType = "podcast"
	PropertyTypeRadio          PropertyType = "radio"
	PropertyTypeLinearTv       PropertyType = "linear_tv"
	PropertyTypeStreamingAudio PropertyType = "streaming_audio"
	PropertyTypeAiAssistant    PropertyType = "ai_assistant"
)

type ProposalStatus

type ProposalStatus = string

ProposalStatus — Lifecycle status of a proposal. Absent means the proposal is ready to buy (backw

const (
	ProposalStatusDraft     ProposalStatus = "draft"
	ProposalStatusCommitted ProposalStatus = "committed"
)

type ProvidePerformanceFeedbackError

type ProvidePerformanceFeedbackError struct {
	Errors  []AdcpError `json:"errors"` // Array of errors explaining why feedback was rejected (e.g., invalid measurement
	Context any         `json:"context,omitempty"`
	Ext     any         `json:"ext,omitempty"`
}

ProvidePerformanceFeedbackError — Error response - feedback rejected or could not be processed

type ProvidePerformanceFeedbackRequest

type ProvidePerformanceFeedbackRequest struct {
	AdcpMajorVersion  int     `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	MediaBuyID        string  `json:"media_buy_id"`                 // Seller's media buy identifier
	IdempotencyKey    string  `json:"idempotency_key"`              // Client-generated unique key for this request. Prevents duplicate feedback submis
	MeasurementPeriod any     `json:"measurement_period"`           // Time period for performance measurement
	PerformanceIndex  float64 `json:"performance_index"`            // Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expec
	PackageID         string  `json:"package_id,omitempty"`         // Specific package within the media buy (if feedback is package-specific)
	CreativeID        string  `json:"creative_id,omitempty"`        // Specific creative asset (if feedback is creative-specific)
	MetricType        string  `json:"metric_type,omitempty"`        // The business metric being measured
	FeedbackSource    string  `json:"feedback_source,omitempty"`    // Source of the performance data
	Context           any     `json:"context,omitempty"`
	Ext               any     `json:"ext,omitempty"`
}

ProvidePerformanceFeedbackRequest — Request payload for provide_performance_feedback task

type ProvidePerformanceFeedbackResponse

type ProvidePerformanceFeedbackResponse = any

ProvidePerformanceFeedbackResponse is a discriminated union — use the appropriate variant type.

type ProvidePerformanceFeedbackSuccess

type ProvidePerformanceFeedbackSuccess struct {
	Success bool  `json:"success"`           // Whether the performance feedback was successfully received
	Sandbox *bool `json:"sandbox,omitempty"` // When true, this response contains simulated data from sandbox mode.
	Context any   `json:"context,omitempty"`
	Ext     any   `json:"ext,omitempty"`
}

ProvidePerformanceFeedbackSuccess — Success response - feedback received and processed

type PublisherIdentifierTypes

type PublisherIdentifierTypes = string

PublisherIdentifierTypes — Valid identifier types for publisher/legal entity identification

const (
	PublisherIdentifierTypesTagID    PublisherIdentifierTypes = "tag_id"
	PublisherIdentifierTypesDuns     PublisherIdentifierTypes = "duns"
	PublisherIdentifierTypesLei      PublisherIdentifierTypes = "lei"
	PublisherIdentifierTypesSellerID PublisherIdentifierTypes = "seller_id"
	PublisherIdentifierTypesGln      PublisherIdentifierTypes = "gln"
)

type PublisherPropertySelector

type PublisherPropertySelector struct {
	PublisherDomain string   `json:"publisher_domain"`
	SelectionType   string   `json:"selection_type"`
	PropertyIDs     []string `json:"property_ids,omitempty"`
	PropertyTags    []string `json:"property_tags,omitempty"`
}

PublisherPropertySelector is the flattened union of the three variants in publisher-property-selector.json. SelectionType is the discriminator:

"all":     set PublisherDomain only.
"by_id":   set PublisherDomain + PropertyIDs.
"by_tag":  set PublisherDomain + PropertyTags.

type PurchaseType

type PurchaseType = string

PurchaseType — The type of financial commitment being governed.

const (
	PurchaseTypeMediaBuy         PurchaseType = "media_buy"
	PurchaseTypeRightsLicense    PurchaseType = "rights_license"
	PurchaseTypeSignalActivation PurchaseType = "signal_activation"
	PurchaseTypeCreativeServices PurchaseType = "creative_services"
)

type ReachUnit

type ReachUnit = string

ReachUnit — Unit of measurement for reach and audience size metrics. Different channels and

const (
	ReachUnitIndividuals ReachUnit = "individuals"
	ReachUnitHouseholds  ReachUnit = "households"
	ReachUnitDevices     ReachUnit = "devices"
	ReachUnitAccounts    ReachUnit = "accounts"
	ReachUnitCookies     ReachUnit = "cookies"
	ReachUnitCustom      ReachUnit = "custom"
)

type Render

type Render struct {
	Width  int `json:"width"`
	Height int `json:"height"`
}

Render is a rendering variant inside a CreativeFormat. Wired into generated CreativeFormat via schemas/generate.py's INLINE_TYPE_HINTS so the format.json renders[] oneOf items become []Render instead of []any.

type ReportPlanOutcomeRequest

type ReportPlanOutcomeRequest struct {
	AdcpMajorVersion  int    `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	PlanID            string `json:"plan_id"`                      // The plan this outcome is for. The plan uniquely scopes the account and operator;
	CheckID           string `json:"check_id,omitempty"`           // The check_id from check_governance. Links the outcome to the governance check th
	IdempotencyKey    string `json:"idempotency_key"`              // Client-generated unique key for this request. Prevents duplicate outcome reports
	PurchaseType      string `json:"purchase_type,omitempty"`      // The type of financial commitment this outcome is for. Determines which budget al
	Outcome           string `json:"outcome"`                      // Outcome type.
	SellerResponse    any    `json:"seller_response,omitempty"`    // The seller's full response. Required when outcome is 'completed'.
	Delivery          any    `json:"delivery,omitempty"`           // Delivery metrics. Required when outcome is 'delivery'.
	Error             any    `json:"error,omitempty"`              // Error details. Required when outcome is 'failed'.
	GovernanceContext string `json:"governance_context"`           // Opaque governance context from the check_governance response that authorized thi
	Context           any    `json:"context,omitempty"`
	Ext               any    `json:"ext,omitempty"`
}

ReportPlanOutcomeRequest — Report the outcome of an action to the governance agent. Called by the orchestrator (buyer-side agen

type ReportPlanOutcomeResponse

type ReportPlanOutcomeResponse struct {
	OutcomeID       string  `json:"outcome_id"`                 // Unique identifier for this outcome record.
	Status          string  `json:"status"`                     // 'accepted' means state updated with no issues. 'findings' means issues were dete
	CommittedBudget float64 `json:"committed_budget,omitempty"` // Budget committed from this outcome. Present for 'completed' and 'failed' outcome
	Findings        []any   `json:"findings,omitempty"`         // Issues detected. Present only when status is 'findings'.
	PlanSummary     any     `json:"plan_summary,omitempty"`     // Updated plan budget state. Present for 'completed' and 'failed' outcomes.
	Replayed        *bool   `json:"replayed,omitempty"`         // Set to true when this response is a cached replay returned for an idempotency_ke
	Context         any     `json:"context,omitempty"`
	Ext             any     `json:"ext,omitempty"`
}

ReportPlanOutcomeResponse — Response from reporting an action outcome. Only returned to the orchestrator (buyer-side agent) that

type ReportedSpend

type ReportedSpend struct {
	Amount   float64 `json:"amount"`
	Currency string  `json:"currency"`
}

ReportedSpend is the spend amount and currency.

type ReportingFrequency

type ReportingFrequency = string

ReportingFrequency — Available frequencies for delivery reports and metrics updates

const (
	ReportingFrequencyHourly  ReportingFrequency = "hourly"
	ReportingFrequencyDaily   ReportingFrequency = "daily"
	ReportingFrequencyMonthly ReportingFrequency = "monthly"
)

type ReportingPeriod

type ReportingPeriod struct {
	Start string `json:"start"`
	End   string `json:"end"`
}

type RequestSigningCapabilities

type RequestSigningCapabilities struct {
	Supported           bool     `json:"supported"`
	CoversContentDigest string   `json:"covers_content_digest,omitempty"`
	RequiredFor         []string `json:"required_for,omitempty"`
	WarnFor             []string `json:"warn_for,omitempty"`
	SupportedFor        []string `json:"supported_for,omitempty"`
}

RequestSigningCapabilities declares RFC 9421 signing policy.

type ResolvedCollection

type ResolvedCollection struct {
	CollectionRID   string           `json:"collection_rid,omitempty"`
	Name            string           `json:"name"`
	DistributionIDs []DistributionID `json:"distribution_ids,omitempty"`
	ContentRating   *ContentRating   `json:"content_rating,omitempty"`
	Genre           []string         `json:"genre,omitempty"`
	GenreTaxonomy   string           `json:"genre_taxonomy,omitempty"`
	Kind            string           `json:"kind,omitempty"`
}

ResolvedCollection is a single collection entry in a get_collection_list response.

type ResponseType

type ResponseType = string

ResponseType — What the publisher wants back from a TMP context match. Determines the richness

const (
	ResponseTypeActivation   ResponseType = "activation"
	ResponseTypeCatalogItems ResponseType = "catalog_items"
	ResponseTypeCreative     ResponseType = "creative"
	ResponseTypeDeal         ResponseType = "deal"
)

type RestrictedAttribute

type RestrictedAttribute = string

RestrictedAttribute — Personal data categories that may be restricted from use in audience targeting.

const (
	RestrictedAttributeRacialEthnicOrigin       RestrictedAttribute = "racial_ethnic_origin"
	RestrictedAttributePoliticalOpinions        RestrictedAttribute = "political_opinions"
	RestrictedAttributeReligiousBeliefs         RestrictedAttribute = "religious_beliefs"
	RestrictedAttributeTradeUnionMembership     RestrictedAttribute = "trade_union_membership"
	RestrictedAttributeHealthData               RestrictedAttribute = "health_data"
	RestrictedAttributeSexLifeSexualOrientation RestrictedAttribute = "sex_life_sexual_orientation"
	RestrictedAttributeGeneticData              RestrictedAttribute = "genetic_data"
	RestrictedAttributeBiometricData            RestrictedAttribute = "biometric_data"
	RestrictedAttributeAge                      RestrictedAttribute = "age"
	RestrictedAttributeFamilialStatus           RestrictedAttribute = "familial_status"
)

type RevocationNotification

type RevocationNotification struct {
	IdempotencyKey string   `json:"idempotency_key"`        // Sender-generated key stable across retries of the same revocation notification.
	RightsID       string   `json:"rights_id"`              // The revoked rights grant identifier
	BrandID        string   `json:"brand_id"`               // Brand identifier of the rights subject
	Reason         string   `json:"reason"`                 // Human-readable reason for revocation
	EffectiveAt    string   `json:"effective_at"`           // When the revocation takes effect. Immediate revocations use current time. Grace
	RevokedUses    []string `json:"revoked_uses,omitempty"` // If present, only these uses are revoked (partial revocation). If absent, all use
	Context        any      `json:"context,omitempty"`
	Ext            any      `json:"ext,omitempty"`
}

RevocationNotification — Payload sent by a rights holder to a buyer's revocation_webhook when rights are revoked. The buyer m

func (*RevocationNotification) IdempotencyKeyPtr

func (p *RevocationNotification) IdempotencyKeyPtr() *string

type RightType

type RightType = string

RightType — Categories of intellectual property rights that can be licensed through the bran

const (
	RightTypeTalent     RightType = "talent"
	RightTypeCharacter  RightType = "character"
	RightTypeBrandIP    RightType = "brand_ip"
	RightTypeMusic      RightType = "music"
	RightTypeStockMedia RightType = "stock_media"
)

type RightUse

type RightUse = string

RightUse — Types of rights usage that can be licensed through the brand protocol. Aligned w

const (
	RightUseLikeness         RightUse = "likeness"
	RightUseVoice            RightUse = "voice"
	RightUseName             RightUse = "name"
	RightUseEndorsement      RightUse = "endorsement"
	RightUseMotionCapture    RightUse = "motion_capture"
	RightUseSignature        RightUse = "signature"
	RightUseCatchphrase      RightUse = "catchphrase"
	RightUseSync             RightUse = "sync"
	RightUseBackgroundMusic  RightUse = "background_music"
	RightUseEditorial        RightUse = "editorial"
	RightUseCommercial       RightUse = "commercial"
	RightUseAiGeneratedImage RightUse = "ai_generated_image"
)

type SICapabilities

type SICapabilities struct {
	Endpoint     SIEndpoint     `json:"endpoint"`
	Capabilities map[string]any `json:"capabilities"`
	BrandURL     string         `json:"brand_url,omitempty"`
}

SICapabilities is the sponsored_intelligence protocol capability block. Callers declaring this block MUST populate Endpoint.Transports and Capabilities — the schema requires both, and a nil/empty value will fail upstream validation.

type SIEndpoint

type SIEndpoint struct {
	Transports []SITransport `json:"transports"`
	Preferred  string        `json:"preferred,omitempty"`
}

type SITransport

type SITransport struct {
	Type string `json:"type"`
	URL  string `json:"url"`
}

type ServeOption

type ServeOption func(*serveConfig)

ServeOption configures the HTTP server.

func WithPath

func WithPath(path string) ServeOption

WithPath sets the MCP endpoint path (default: /mcp).

func WithPort

func WithPort(port int) ServeOption

WithPort sets the listen port (default: PORT env or 3001).

type SiSessionStatus

type SiSessionStatus = string

SiSessionStatus — State of a Sponsored Intelligence session between a host and a brand agent

const (
	SiSessionStatusActive         SiSessionStatus = "active"
	SiSessionStatusPendingHandoff SiSessionStatus = "pending_handoff"
	SiSessionStatusComplete       SiSessionStatus = "complete"
	SiSessionStatusTerminated     SiSessionStatus = "terminated"
)

type Signal

type Signal struct {
	ID                   string   `json:"id"`                              // Signal identifier within this data provider's catalog
	Name                 string   `json:"name"`                            // Human-readable signal name
	Description          string   `json:"description,omitempty"`           // Detailed description of what this signal represents and how it's derived
	ValueType            string   `json:"value_type"`                      // The data type of this signal's values
	Tags                 []string `json:"tags,omitempty"`                  // Tags for grouping and filtering signals within the catalog
	AllowedValues        []string `json:"allowed_values,omitempty"`        // For categorical signals, the valid values users can be assigned
	RestrictedAttributes []string `json:"restricted_attributes,omitempty"` // Restricted attribute categories this signal touches. Data providers SHOULD decla
	PolicyCategories     []string `json:"policy_categories,omitempty"`     // Policy categories this signal is sensitive for (e.g., a children's interest sign
	Range                any      `json:"range,omitempty"`                 // For numeric signals, the valid value range
}

Signal — Definition of a signal in a data provider's catalog, published via adagents.json

type SignalCatalogType

type SignalCatalogType = string

SignalCatalogType — Types of signal catalogs available for audience targeting

const (
	SignalCatalogTypeMarketplace SignalCatalogType = "marketplace"
	SignalCatalogTypeCustom      SignalCatalogType = "custom"
	SignalCatalogTypeOwned       SignalCatalogType = "owned"
)

type SignalFilters

type SignalFilters struct {
	MaxCPM                float64  `json:"max_cpm,omitempty"`
	MinCoveragePercentage float64  `json:"min_coverage_percentage,omitempty"`
	CatalogTypes          []string `json:"catalog_types,omitempty"`
}

SignalFilters contains optional filters for get_signals.

type SignalID

type SignalID struct {
	Source             string `json:"source"`
	DataProviderDomain string `json:"data_provider_domain,omitempty"`
	AgentURL           string `json:"agent_url,omitempty"`
	ID                 string `json:"id"`
}

type SignalPricing

type SignalPricing = VendorPricingOption

SignalPricing is an alias for VendorPricingOption. Upstream's signal-pricing-option.json is a deprecated $ref to vendor-pricing-option.json; the two were always the same shape on the wire. Kept here so existing callers that reference SignalPricing continue to compile.

type SignalSource

type SignalSource = string

SignalSource — Source type for signal identifiers. Determines how the signal is referenced and

const (
	SignalSourceCatalog SignalSource = "catalog"
	SignalSourceAgent   SignalSource = "agent"
)

type SignalValueType

type SignalValueType = string

SignalValueType — The data type of a signal's values, determining how it can be targeted

const (
	SignalValueTypeBinary      SignalValueType = "binary"
	SignalValueTypeCategorical SignalValueType = "categorical"
	SignalValueTypeNumeric     SignalValueType = "numeric"
)

type SignalsCapabilities

type SignalsCapabilities struct {
	DataProviderDomains []string        `json:"data_provider_domains,omitempty"`
	Features            map[string]bool `json:"features,omitempty"`
}

SignalsCapabilities is the signals protocol capability block.

type SimulateBudgetParams

type SimulateBudgetParams struct {
	AccountID       string  `json:"account_id,omitempty"`
	MediaBuyID      string  `json:"media_buy_id,omitempty"`
	SpendPercentage float64 `json:"spend_percentage"`
}

SimulateBudgetParams contains budget simulation parameters.

type SimulateDeliveryParams

type SimulateDeliveryParams struct {
	Impressions   int            `json:"impressions,omitempty"`
	Clicks        int            `json:"clicks,omitempty"`
	ReportedSpend *ReportedSpend `json:"reported_spend,omitempty"`
	Conversions   int            `json:"conversions,omitempty"`
}

SimulateDeliveryParams contains delivery simulation parameters.

type SimulationResult

type SimulationResult struct {
	Success    bool `json:"success"`
	Simulated  any  `json:"simulated"`
	Cumulative any  `json:"cumulative,omitempty"`
}

SimulationResult is returned by simulate_* scenarios.

type SimulationSuccess

type SimulationSuccess struct {
	Success    bool           `json:"success"`
	Simulated  map[string]any `json:"simulated"`            // Values injected or applied by this call. Shape depends on scenario.
	Cumulative map[string]any `json:"cumulative,omitempty"` // Running totals across all simulation calls (simulate_delivery only)
	Message    string         `json:"message,omitempty"`
	Context    any            `json:"context,omitempty"`
	Ext        any            `json:"ext,omitempty"`
}

SimulationSuccess — A simulate_delivery or simulate_budget_spend scenario succeeded. For delivery: simulated contains im

type SortDirection

type SortDirection = string

SortDirection — Sort direction for list queries

const (
	SortDirectionAsc  SortDirection = "asc"
	SortDirectionDesc SortDirection = "desc"
)

type SortMetric

type SortMetric = string

SortMetric — Numeric delivery metrics available for sorting breakdown rows. Subset of deliver

const (
	SortMetricImpressions        SortMetric = "impressions"
	SortMetricSpend              SortMetric = "spend"
	SortMetricClicks             SortMetric = "clicks"
	SortMetricCtr                SortMetric = "ctr"
	SortMetricViews              SortMetric = "views"
	SortMetricCompletedViews     SortMetric = "completed_views"
	SortMetricCompletionRate     SortMetric = "completion_rate"
	SortMetricConversions        SortMetric = "conversions"
	SortMetricConversionValue    SortMetric = "conversion_value"
	SortMetricRoas               SortMetric = "roas"
	SortMetricCostPerAcquisition SortMetric = "cost_per_acquisition"
	SortMetricNewToBrandRate     SortMetric = "new_to_brand_rate"
	SortMetricLeads              SortMetric = "leads"
	SortMetricGrps               SortMetric = "grps"
	SortMetricReach              SortMetric = "reach"
	SortMetricFrequency          SortMetric = "frequency"
	SortMetricEngagements        SortMetric = "engagements"
	SortMetricFollows            SortMetric = "follows"
	SortMetricSaves              SortMetric = "saves"
	SortMetricProfileVisits      SortMetric = "profile_visits"
	SortMetricEngagementRate     SortMetric = "engagement_rate"
	SortMetricCostPerClick       SortMetric = "cost_per_click"
)

type SpecialCategory

type SpecialCategory = string

SpecialCategory — Category of special or event-anchored content

const (
	SpecialCategoryAwards        SpecialCategory = "awards"
	SpecialCategoryChampionship  SpecialCategory = "championship"
	SpecialCategoryConcert       SpecialCategory = "concert"
	SpecialCategoryConference    SpecialCategory = "conference"
	SpecialCategoryElection      SpecialCategory = "election"
	SpecialCategoryFestival      SpecialCategory = "festival"
	SpecialCategoryGala          SpecialCategory = "gala"
	SpecialCategoryHoliday       SpecialCategory = "holiday"
	SpecialCategoryPremiere      SpecialCategory = "premiere"
	SpecialCategoryProductLaunch SpecialCategory = "product_launch"
	SpecialCategoryReunion       SpecialCategory = "reunion"
	SpecialCategoryTribute       SpecialCategory = "tribute"
)

type Specialism

type Specialism = string

Specialism — Specialized capability claims an agent can make. Each specialism maps to a compl

const (
	SpecialismAudienceSync              Specialism = "audience-sync"
	SpecialismBrandRights               Specialism = "brand-rights"
	SpecialismCollectionLists           Specialism = "collection-lists"
	SpecialismContentStandards          Specialism = "content-standards"
	SpecialismCreativeAdServer          Specialism = "creative-ad-server"
	SpecialismCreativeGenerative        Specialism = "creative-generative"
	SpecialismCreativeTemplate          Specialism = "creative-template"
	SpecialismGovernanceAwareSeller     Specialism = "governance-aware-seller"
	SpecialismGovernanceDeliveryMonitor Specialism = "governance-delivery-monitor"
	SpecialismGovernanceSpendAuthority  Specialism = "governance-spend-authority"
	SpecialismPropertyLists             Specialism = "property-lists"
	SpecialismSalesBroadcastTv          Specialism = "sales-broadcast-tv"
	SpecialismSalesCatalogDriven        Specialism = "sales-catalog-driven"
	SpecialismSalesGuaranteed           Specialism = "sales-guaranteed"
	SpecialismSalesNonGuaranteed        Specialism = "sales-non-guaranteed"
	SpecialismSalesProposalMode         Specialism = "sales-proposal-mode"
	SpecialismSalesSocial               Specialism = "sales-social"
	SpecialismSignalMarketplace         Specialism = "signal-marketplace"
	SpecialismSignalOwned               Specialism = "signal-owned"
	SpecialismSignedRequests            Specialism = "signed-requests"
)

type StateTransition

type StateTransition struct {
	Success       bool   `json:"success"`
	PreviousState string `json:"previous_state"`
	CurrentState  string `json:"current_state"`
}

StateTransition is returned by force_* scenarios.

type StateTransitionSuccess

type StateTransitionSuccess struct {
	Success       bool   `json:"success"`
	PreviousState string `json:"previous_state"`    // State before this transition
	CurrentState  string `json:"current_state"`     // State after this transition
	Message       string `json:"message,omitempty"` // Human-readable description of the transition
	Context       any    `json:"context,omitempty"`
	Ext           any    `json:"ext,omitempty"`
}

StateTransitionSuccess — A force_* scenario successfully transitioned the entity to the target state

type SyncAccountsRequest

type SyncAccountsRequest struct {
	AdcpMajorVersion       int            `json:"adcp_major_version,omitempty"`       // The AdCP major version the buyer's payloads conform to. Sellers validate against
	IdempotencyKey         string         `json:"idempotency_key"`                    // Client-generated unique key for at-most-once execution. Natural per-account upse
	Accounts               []AccountInput `json:"accounts"`                           // Advertiser accounts to sync
	DeleteMissing          *bool          `json:"delete_missing,omitempty"`           // When true, accounts previously synced by this agent but not included in this req
	DryRun                 *bool          `json:"dry_run,omitempty"`                  // When true, preview what would change without applying. Returns what would be cre
	PushNotificationConfig any            `json:"push_notification_config,omitempty"` // Webhook for async notifications when account status changes (e.g., pending_appro
	Context                any            `json:"context,omitempty"`
	Ext                    any            `json:"ext,omitempty"`
}

SyncAccountsRequest — Sync advertiser accounts with a seller using upsert semantics. The agent declares which brands it re

type SyncCatalogsRequest

type SyncCatalogsRequest struct {
	AdcpMajorVersion       int              `json:"adcp_major_version,omitempty"`       // The AdCP major version the buyer's payloads conform to. Sellers validate against
	IdempotencyKey         string           `json:"idempotency_key"`                    // Client-generated unique key for at-most-once execution. `catalog_id` gives resou
	Account                AccountReference `json:"account"`                            // Account that owns these catalogs.
	Catalogs               []CatalogInput   `json:"catalogs,omitempty"`                 // Array of catalog feeds to sync (create or update). When omitted, the call is dis
	CatalogIDs             []string         `json:"catalog_ids,omitempty"`              // Optional filter to limit sync scope to specific catalog IDs. When provided, only
	DeleteMissing          *bool            `json:"delete_missing,omitempty"`           // When true, buyer-managed catalogs on the account not included in this sync will
	DryRun                 *bool            `json:"dry_run,omitempty"`                  // When true, preview changes without applying them. Returns what would be created/
	ValidationMode         string           `json:"validation_mode,omitempty"`          // Validation strictness. 'strict' fails entire sync on any validation error. 'leni
	PushNotificationConfig any              `json:"push_notification_config,omitempty"` // Optional webhook configuration for async sync notifications. Publisher will send
	Context                any              `json:"context,omitempty"`
	Ext                    any              `json:"ext,omitempty"`
}

SyncCatalogsRequest — Request parameters for syncing catalog feeds with upsert semantics. Supports bulk operations across

type SyncCreativesRequest

type SyncCreativesRequest struct {
	AdcpMajorVersion       int              `json:"adcp_major_version,omitempty"`       // The AdCP major version the buyer's payloads conform to. Sellers validate against
	Account                AccountReference `json:"account"`                            // Account that owns these creatives.
	Creatives              []CreativeInput  `json:"creatives"`                          // Array of creative assets to sync (create or update)
	CreativeIDs            []string         `json:"creative_ids,omitempty"`             // Optional filter to limit sync scope to specific creative IDs. When provided, onl
	Assignments            []any            `json:"assignments,omitempty"`              // Optional bulk assignment of creatives to packages. Each entry maps one creative
	IdempotencyKey         string           `json:"idempotency_key"`                    // Client-generated idempotency key for safe retries. If a sync fails without a res
	DeleteMissing          *bool            `json:"delete_missing,omitempty"`           // When true, creatives not included in this sync will be archived. Use with cautio
	DryRun                 *bool            `json:"dry_run,omitempty"`                  // When true, preview changes without applying them. Returns what would be created/
	ValidationMode         string           `json:"validation_mode,omitempty"`          // Validation strictness. 'strict' fails entire sync on any validation error. 'leni
	PushNotificationConfig any              `json:"push_notification_config,omitempty"` // Optional webhook configuration for async sync notifications. The agent will send
	Context                any              `json:"context,omitempty"`
	Ext                    any              `json:"ext,omitempty"`
}

SyncCreativesRequest — Request parameters for syncing creative assets with upsert semantics - supports bulk operations, sco

type SyncEventSourcesRequest

type SyncEventSourcesRequest struct {
	AdcpMajorVersion int                `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	IdempotencyKey   string             `json:"idempotency_key"`              // Client-generated unique key for at-most-once execution. `event_source_id` gives
	Account          AccountReference   `json:"account"`                      // Account to configure event sources for.
	EventSources     []EventSourceInput `json:"event_sources,omitempty"`      // Event sources to sync (create or update). When omitted, the call is discovery-on
	DeleteMissing    *bool              `json:"delete_missing,omitempty"`     // When true, event sources not included in this sync will be removed
	Context          any                `json:"context,omitempty"`
	Ext              any                `json:"ext,omitempty"`
}

SyncEventSourcesRequest — Request parameters for configuring event sources on an account with upsert semantics. Existing event

type SyncGovernanceError

type SyncGovernanceError struct {
	Errors  []AdcpError `json:"errors"` // Operation-level errors (e.g., authentication failure, service unavailable)
	Context any         `json:"context,omitempty"`
	Ext     any         `json:"ext,omitempty"`
}

SyncGovernanceError — Operation failed completely, no accounts were processed

type SyncGovernanceRequest

type SyncGovernanceRequest struct {
	AdcpMajorVersion int                      `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	IdempotencyKey   string                   `json:"idempotency_key"`              // Client-generated unique key for at-most-once execution. `account` gives resource
	Accounts         []GovernanceAccountInput `json:"accounts"`                     // Per-account governance agent configuration. Each entry pairs an account referenc
	Context          any                      `json:"context,omitempty"`
	Ext              any                      `json:"ext,omitempty"`
}

SyncGovernanceRequest — Sync governance agent endpoints against specific accounts. The seller persists these governance agen

type SyncGovernanceResponse

type SyncGovernanceResponse = any

SyncGovernanceResponse is a discriminated union — use the appropriate variant type.

type SyncGovernanceSuccess

type SyncGovernanceSuccess struct {
	Accounts []any `json:"accounts"` // Per-account sync results
	Context  any   `json:"context,omitempty"`
	Ext      any   `json:"ext,omitempty"`
}

SyncGovernanceSuccess — Sync processed — individual accounts may have errors

type SyncPlansRequest

type SyncPlansRequest struct {
	AdcpMajorVersion int    `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	IdempotencyKey   string `json:"idempotency_key"`              // Client-generated unique key for at-most-once execution. `plan_id` gives resource
	Plans            []Plan `json:"plans"`                        // One or more campaign plans to sync.
	Context          any    `json:"context,omitempty"`
	Ext              any    `json:"ext,omitempty"`
}

SyncPlansRequest — Push campaign plans to the governance agent. A plan defines the authorized parameters for a campaign

type SyncPlansResponse

type SyncPlansResponse struct {
	Plans    []any `json:"plans"`              // Status for each synced plan.
	Replayed *bool `json:"replayed,omitempty"` // Set to true when this response is a cached replay returned for an idempotency_ke
	Context  any   `json:"context,omitempty"`
	Ext      any   `json:"ext,omitempty"`
}

SyncPlansResponse — Response from syncing campaign plans. Returns status and active validation categories for each plan.

type TalentRole

type TalentRole = string

TalentRole — Role of a person associated with a collection or installment

const (
	TalentRoleHost          TalentRole = "host"
	TalentRoleGuest         TalentRole = "guest"
	TalentRoleCreator       TalentRole = "creator"
	TalentRoleCast          TalentRole = "cast"
	TalentRoleNarrator      TalentRole = "narrator"
	TalentRoleProducer      TalentRole = "producer"
	TalentRoleCorrespondent TalentRole = "correspondent"
	TalentRoleCommentator   TalentRole = "commentator"
	TalentRoleAnalyst       TalentRole = "analyst"
)

type Targeting

type Targeting struct {
	GeoCountries          []string           `json:"geo_countries,omitempty"`            // Restrict delivery to specific countries. ISO 3166-1 alpha-2 codes (e.g., 'US', '
	GeoCountriesExclude   []string           `json:"geo_countries_exclude,omitempty"`    // Exclude specific countries from delivery. ISO 3166-1 alpha-2 codes (e.g., 'US',
	GeoRegions            []string           `json:"geo_regions,omitempty"`              // Restrict delivery to specific regions/states. ISO 3166-2 subdivision codes (e.g.
	GeoRegionsExclude     []string           `json:"geo_regions_exclude,omitempty"`      // Exclude specific regions/states from delivery. ISO 3166-2 subdivision codes (e.g
	GeoMetros             []any              `json:"geo_metros,omitempty"`               // Restrict delivery to specific metro areas. Each entry specifies the classificati
	GeoMetrosExclude      []any              `json:"geo_metros_exclude,omitempty"`       // Exclude specific metro areas from delivery. Each entry specifies the classificat
	GeoPostalAreas        []any              `json:"geo_postal_areas,omitempty"`         // Restrict delivery to specific postal areas. Each entry specifies the postal syst
	GeoPostalAreasExclude []any              `json:"geo_postal_areas_exclude,omitempty"` // Exclude specific postal areas from delivery. Each entry specifies the postal sys
	DaypartTargets        []any              `json:"daypart_targets,omitempty"`          // Restrict delivery to specific time windows. Each entry specifies days of week an
	AxeIncludeSegment     string             `json:"axe_include_segment,omitempty"`      // Deprecated: Use TMP provider fields instead. AXE segment ID to include for targe
	AxeExcludeSegment     string             `json:"axe_exclude_segment,omitempty"`      // Deprecated: Use TMP provider fields instead. AXE segment ID to exclude from targ
	AudienceInclude       []string           `json:"audience_include,omitempty"`         // Restrict delivery to members of these first-party CRM audiences. Only users pres
	AudienceExclude       []string           `json:"audience_exclude,omitempty"`         // Suppress delivery to members of these first-party CRM audiences. Matched users a
	FrequencyCap          any                `json:"frequency_cap,omitempty"`
	PropertyList          any                `json:"property_list,omitempty"`           // Reference to a property list for targeting specific properties within this produ
	CollectionList        *CollectionListRef `json:"collection_list,omitempty"`         // Reference to a collection list for including specific collections (programs, sho
	CollectionListExclude *CollectionListRef `json:"collection_list_exclude,omitempty"` // Reference to a collection list for excluding specific collections (programs, sho
	AgeRestriction        any                `json:"age_restriction,omitempty"`         // Age restriction for compliance. Use for legal requirements (alcohol, gambling),
	DevicePlatform        []string           `json:"device_platform,omitempty"`         // Restrict to specific platforms. Use for technical compatibility (app only works
	DeviceType            []string           `json:"device_type,omitempty"`             // Restrict to specific device form factors. Use for campaigns targeting hardware c
	DeviceTypeExclude     []string           `json:"device_type_exclude,omitempty"`     // Exclude specific device form factors from delivery (e.g., exclude CTV for app-in
	StoreCatchments       []any              `json:"store_catchments,omitempty"`        // Target users within store catchment areas from a synced store catalog. Each entr
	GeoProximity          []any              `json:"geo_proximity,omitempty"`           // Target users within travel time, distance, or a custom boundary around arbitrary
	Language              []string           `json:"language,omitempty"`                // Restrict to users with specific language preferences. ISO 639-1 codes (e.g., 'en
	KeywordTargets        []any              `json:"keyword_targets,omitempty"`         // Keyword targeting for search and retail media platforms. Restricts delivery to q
	NegativeKeywords      []any              `json:"negative_keywords,omitempty"`       // Keywords to exclude from delivery. Queries matching these keywords will not trig
}

Targeting — Optional restriction overlays for media buys. Most targeting should be expressed in the brief and ha

type TargetingCaps

type TargetingCaps struct {
	GeoCountries     *bool               `json:"geo_countries,omitempty"`
	GeoRegions       *bool               `json:"geo_regions,omitempty"`
	GeoMetros        *GeoMetrosCaps      `json:"geo_metros,omitempty"`
	GeoPostalAreas   *GeoPostalAreasCaps `json:"geo_postal_areas,omitempty"`
	GeoProximity     *GeoProximityCaps   `json:"geo_proximity,omitempty"`
	AgeRestriction   *AgeRestrictionCaps `json:"age_restriction,omitempty"`
	Language         *bool               `json:"language,omitempty"`
	KeywordTargets   *KeywordMatchCaps   `json:"keyword_targets,omitempty"`
	NegativeKeywords *KeywordMatchCaps   `json:"negative_keywords,omitempty"`
}

TargetingCaps declares which targeting dimensions the seller honors. Presence of a boolean/object indicates support; buyers can then send matching fields in targeting_overlay.

type TaskStatus

type TaskStatus = string

TaskStatus — Standardized task status values based on A2A TaskState enum. Indicates the curre

const (
	TaskStatusSubmitted     TaskStatus = "submitted"
	TaskStatusWorking       TaskStatus = "working"
	TaskStatusInputRequired TaskStatus = "input-required"
	TaskStatusCompleted     TaskStatus = "completed"
	TaskStatusCanceled      TaskStatus = "canceled"
	TaskStatusFailed        TaskStatus = "failed"
	TaskStatusRejected      TaskStatus = "rejected"
	TaskStatusAuthRequired  TaskStatus = "auth-required"
	TaskStatusUnknown       TaskStatus = "unknown"
)

type TaskType

type TaskType = string

TaskType — Valid AdCP task types across all domains. These represent the complete set of op

const (
	TaskTypeCreateMediaBuy       TaskType = "create_media_buy"
	TaskTypeUpdateMediaBuy       TaskType = "update_media_buy"
	TaskTypeSyncCreatives        TaskType = "sync_creatives"
	TaskTypeActivateSignal       TaskType = "activate_signal"
	TaskTypeGetSignals           TaskType = "get_signals"
	TaskTypeCreatePropertyList   TaskType = "create_property_list"
	TaskTypeUpdatePropertyList   TaskType = "update_property_list"
	TaskTypeGetPropertyList      TaskType = "get_property_list"
	TaskTypeListPropertyLists    TaskType = "list_property_lists"
	TaskTypeDeletePropertyList   TaskType = "delete_property_list"
	TaskTypeSyncAccounts         TaskType = "sync_accounts"
	TaskTypeGetAccountFinancials TaskType = "get_account_financials"
	TaskTypeGetCreativeDelivery  TaskType = "get_creative_delivery"
	TaskTypeSyncEventSources     TaskType = "sync_event_sources"
	TaskTypeSyncAudiences        TaskType = "sync_audiences"
	TaskTypeSyncCatalogs         TaskType = "sync_catalogs"
	TaskTypeLogEvent             TaskType = "log_event"
	TaskTypeGetBrandIdentity     TaskType = "get_brand_identity"
	TaskTypeGetRights            TaskType = "get_rights"
	TaskTypeAcquireRights        TaskType = "acquire_rights"
)

type TestControllerError

type TestControllerError struct {
	Code         string // NOT_FOUND, INVALID_TRANSITION, INVALID_PARAMS
	Message      string
	CurrentState string
}

TestControllerError is a typed error for test controller store methods.

func (*TestControllerError) Error

func (e *TestControllerError) Error() string

type TestControllerStore

type TestControllerStore struct {
	ForceAccountStatus  func(accountID, status string) (*StateTransition, error)
	ForceMediaBuyStatus func(mediaBuyID, status string, rejectionReason string) (*StateTransition, error)
	ForceCreativeStatus func(creativeID, status string, rejectionReason string) (*StateTransition, error)
	ForceSessionStatus  func(sessionID, status string, terminationReason string) (*StateTransition, error)
	SimulateDelivery    func(mediaBuyID string, params SimulateDeliveryParams) (*SimulationResult, error)
	SimulateBudgetSpend func(params SimulateBudgetParams) (*SimulationResult, error)
}

TestControllerStore is the seller-side interface for comply_test_controller. Implement the methods for each scenario you support. Unimplemented (nil) methods mean that scenario is excluded from list_scenarios.

type TransportMode

type TransportMode = string

TransportMode — Transportation modes for isochrone-based catchment area calculations. Determines

const (
	TransportModeWalking         TransportMode = "walking"
	TransportModeCycling         TransportMode = "cycling"
	TransportModeDriving         TransportMode = "driving"
	TransportModePublicTransport TransportMode = "public_transport"
)

type TrustedMatchCaps

type TrustedMatchCaps struct {
	Surfaces []string `json:"surfaces,omitempty"`
}

type UIDType

type UIDType = string

UIDType — Type of user identifier. Used in audience sync, event logging, and TMP identity

const (
	UIDTypeRampid              UIDType = "rampid"
	UIDTypeRampidDerived       UIDType = "rampid_derived"
	UIDTypeId5                 UIDType = "id5"
	UIDTypeUid2                UIDType = "uid2"
	UIDTypeEuid                UIDType = "euid"
	UIDTypePairid              UIDType = "pairid"
	UIDTypeMaid                UIDType = "maid"
	UIDTypeHashedEmail         UIDType = "hashed_email"
	UIDTypePublisherFirstParty UIDType = "publisher_first_party"
	UIDTypeOther               UIDType = "other"
)

type URLAssetType

type URLAssetType = string

URLAssetType — Types of URL assets for tracking and click-through purposes

const (
	URLAssetTypeClickthrough  URLAssetType = "clickthrough"
	URLAssetTypeTrackerPixel  URLAssetType = "tracker_pixel"
	URLAssetTypeTrackerScript URLAssetType = "tracker_script"
)

type UniversalMacro

type UniversalMacro = string

UniversalMacro — Standardized macro placeholders for dynamic value substitution in creative track

const (
	UniversalMacroMEDIABUYID        UniversalMacro = "MEDIA_BUY_ID"
	UniversalMacroPACKAGEID         UniversalMacro = "PACKAGE_ID"
	UniversalMacroCREATIVEID        UniversalMacro = "CREATIVE_ID"
	UniversalMacroCACHEBUSTER       UniversalMacro = "CACHEBUSTER"
	UniversalMacroTIMESTAMP         UniversalMacro = "TIMESTAMP"
	UniversalMacroCLICKURL          UniversalMacro = "CLICK_URL"
	UniversalMacroGDPR              UniversalMacro = "GDPR"
	UniversalMacroGDPRCONSENT       UniversalMacro = "GDPR_CONSENT"
	UniversalMacroUSPRIVACY         UniversalMacro = "US_PRIVACY"
	UniversalMacroGPPSTRING         UniversalMacro = "GPP_STRING"
	UniversalMacroGPPSID            UniversalMacro = "GPP_SID"
	UniversalMacroIPADDRESS         UniversalMacro = "IP_ADDRESS"
	UniversalMacroLIMITADTRACKING   UniversalMacro = "LIMIT_AD_TRACKING"
	UniversalMacroDEVICETYPE        UniversalMacro = "DEVICE_TYPE"
	UniversalMacroOS                UniversalMacro = "OS"
	UniversalMacroOSVERSION         UniversalMacro = "OS_VERSION"
	UniversalMacroDEVICEMAKE        UniversalMacro = "DEVICE_MAKE"
	UniversalMacroDEVICEMODEL       UniversalMacro = "DEVICE_MODEL"
	UniversalMacroUSERAGENT         UniversalMacro = "USER_AGENT"
	UniversalMacroAPPBUNDLE         UniversalMacro = "APP_BUNDLE"
	UniversalMacroAPPNAME           UniversalMacro = "APP_NAME"
	UniversalMacroCOUNTRY           UniversalMacro = "COUNTRY"
	UniversalMacroREGION            UniversalMacro = "REGION"
	UniversalMacroCITY              UniversalMacro = "CITY"
	UniversalMacroZIP               UniversalMacro = "ZIP"
	UniversalMacroDMA               UniversalMacro = "DMA"
	UniversalMacroLAT               UniversalMacro = "LAT"
	UniversalMacroLONG              UniversalMacro = "LONG"
	UniversalMacroDEVICEID          UniversalMacro = "DEVICE_ID"
	UniversalMacroDEVICEIDTYPE      UniversalMacro = "DEVICE_ID_TYPE"
	UniversalMacroDOMAIN            UniversalMacro = "DOMAIN"
	UniversalMacroPAGEURL           UniversalMacro = "PAGE_URL"
	UniversalMacroREFERRER          UniversalMacro = "REFERRER"
	UniversalMacroKEYWORDS          UniversalMacro = "KEYWORDS"
	UniversalMacroPLACEMENTID       UniversalMacro = "PLACEMENT_ID"
	UniversalMacroFOLDPOSITION      UniversalMacro = "FOLD_POSITION"
	UniversalMacroADWIDTH           UniversalMacro = "AD_WIDTH"
	UniversalMacroADHEIGHT          UniversalMacro = "AD_HEIGHT"
	UniversalMacroVIDEOID           UniversalMacro = "VIDEO_ID"
	UniversalMacroVIDEOTITLE        UniversalMacro = "VIDEO_TITLE"
	UniversalMacroVIDEODURATION     UniversalMacro = "VIDEO_DURATION"
	UniversalMacroVIDEOCATEGORY     UniversalMacro = "VIDEO_CATEGORY"
	UniversalMacroCONTENTGENRE      UniversalMacro = "CONTENT_GENRE"
	UniversalMacroCONTENTRATING     UniversalMacro = "CONTENT_RATING"
	UniversalMacroPLAYERWIDTH       UniversalMacro = "PLAYER_WIDTH"
	UniversalMacroPLAYERHEIGHT      UniversalMacro = "PLAYER_HEIGHT"
	UniversalMacroPODPOSITION       UniversalMacro = "POD_POSITION"
	UniversalMacroPODSIZE           UniversalMacro = "POD_SIZE"
	UniversalMacroADBREAKID         UniversalMacro = "AD_BREAK_ID"
	UniversalMacroSTATIONID         UniversalMacro = "STATION_ID"
	UniversalMacroCOLLECTIONNAME    UniversalMacro = "COLLECTION_NAME"
	UniversalMacroINSTALLMENTID     UniversalMacro = "INSTALLMENT_ID"
	UniversalMacroAUDIODURATION     UniversalMacro = "AUDIO_DURATION"
	UniversalMacroTMPX              UniversalMacro = "TMPX"
	UniversalMacroAXEM              UniversalMacro = "AXEM"
	UniversalMacroCATALOGID         UniversalMacro = "CATALOG_ID"
	UniversalMacroSKU               UniversalMacro = "SKU"
	UniversalMacroGTIN              UniversalMacro = "GTIN"
	UniversalMacroOFFERINGID        UniversalMacro = "OFFERING_ID"
	UniversalMacroJOBID             UniversalMacro = "JOB_ID"
	UniversalMacroHOTELID           UniversalMacro = "HOTEL_ID"
	UniversalMacroFLIGHTID          UniversalMacro = "FLIGHT_ID"
	UniversalMacroVEHICLEID         UniversalMacro = "VEHICLE_ID"
	UniversalMacroLISTINGID         UniversalMacro = "LISTING_ID"
	UniversalMacroSTOREID           UniversalMacro = "STORE_ID"
	UniversalMacroPROGRAMID         UniversalMacro = "PROGRAM_ID"
	UniversalMacroDESTINATIONID     UniversalMacro = "DESTINATION_ID"
	UniversalMacroCREATIVEVARIANTID UniversalMacro = "CREATIVE_VARIANT_ID"
	UniversalMacroAPPITEMID         UniversalMacro = "APP_ITEM_ID"
)

type UpdateCollectionListRequest

type UpdateCollectionListRequest struct {
	AdcpMajorVersion int                    `json:"adcp_major_version,omitempty"` // The AdCP major version the buyer's payloads conform to. Sellers validate against
	ListID           string                 `json:"list_id"`                      // ID of the collection list to update
	Account          *AccountReference      `json:"account,omitempty"`            // Account that owns the list. Required when the authenticated agent has access to
	Name             string                 `json:"name,omitempty"`               // New name for the list
	Description      string                 `json:"description,omitempty"`        // New description
	BaseCollections  []BaseCollectionSource `json:"base_collections,omitempty"`   // Complete replacement for the base collections list (not a patch). Each entry is
	Filters          *CollectionListFilters `json:"filters,omitempty"`            // Complete replacement for the filters (not a patch)
	Brand            *BrandReference        `json:"brand,omitempty"`              // Update brand reference. Resolved to full brand identity at execution time.
	WebhookURL       string                 `json:"webhook_url,omitempty"`        // Update the webhook URL for list change notifications (set to empty string to rem
	Context          any                    `json:"context,omitempty"`
	Ext              any                    `json:"ext,omitempty"`
	IdempotencyKey   string                 `json:"idempotency_key"` // Client-generated unique key for at-most-once execution. If a request with the sa
}

UpdateCollectionListRequest — Request parameters for updating an existing collection list

type UpdateFrequency

type UpdateFrequency = string

UpdateFrequency — Frequency of product catalog updates

const (
	UpdateFrequencyRealtime UpdateFrequency = "realtime"
	UpdateFrequencyHourly   UpdateFrequency = "hourly"
	UpdateFrequencyDaily    UpdateFrequency = "daily"
	UpdateFrequencyWeekly   UpdateFrequency = "weekly"
)

type ValidationMode

type ValidationMode = string

ValidationMode — Creative validation strictness levels

const (
	ValidationModeStrict  ValidationMode = "strict"
	ValidationModeLenient ValidationMode = "lenient"
)

type VastTrackingEvent

type VastTrackingEvent = string

VastTrackingEvent — Tracking events for video ads. Includes IAB VAST 4.2 TrackingEvents, plus flatte

const (
	VastTrackingEventImpression           VastTrackingEvent = "impression"
	VastTrackingEventCreativeView         VastTrackingEvent = "creativeView"
	VastTrackingEventLoaded               VastTrackingEvent = "loaded"
	VastTrackingEventStart                VastTrackingEvent = "start"
	VastTrackingEventFirstQuartile        VastTrackingEvent = "firstQuartile"
	VastTrackingEventMidpoint             VastTrackingEvent = "midpoint"
	VastTrackingEventThirdQuartile        VastTrackingEvent = "thirdQuartile"
	VastTrackingEventComplete             VastTrackingEvent = "complete"
	VastTrackingEventMute                 VastTrackingEvent = "mute"
	VastTrackingEventUnmute               VastTrackingEvent = "unmute"
	VastTrackingEventPause                VastTrackingEvent = "pause"
	VastTrackingEventResume               VastTrackingEvent = "resume"
	VastTrackingEventRewind               VastTrackingEvent = "rewind"
	VastTrackingEventSkip                 VastTrackingEvent = "skip"
	VastTrackingEventPlayerExpand         VastTrackingEvent = "playerExpand"
	VastTrackingEventPlayerCollapse       VastTrackingEvent = "playerCollapse"
	VastTrackingEventFullscreen           VastTrackingEvent = "fullscreen"
	VastTrackingEventExitFullscreen       VastTrackingEvent = "exitFullscreen"
	VastTrackingEventProgress             VastTrackingEvent = "progress"
	VastTrackingEventNotUsed              VastTrackingEvent = "notUsed"
	VastTrackingEventOtherAdInteraction   VastTrackingEvent = "otherAdInteraction"
	VastTrackingEventInteractiveStart     VastTrackingEvent = "interactiveStart"
	VastTrackingEventClickTracking        VastTrackingEvent = "clickTracking"
	VastTrackingEventCustomClick          VastTrackingEvent = "customClick"
	VastTrackingEventClose                VastTrackingEvent = "close"
	VastTrackingEventCloseLinear          VastTrackingEvent = "closeLinear"
	VastTrackingEventError                VastTrackingEvent = "error"
	VastTrackingEventViewable             VastTrackingEvent = "viewable"
	VastTrackingEventNotViewable          VastTrackingEvent = "notViewable"
	VastTrackingEventViewUndetermined     VastTrackingEvent = "viewUndetermined"
	VastTrackingEventMeasurableImpression VastTrackingEvent = "measurableImpression"
	VastTrackingEventViewableImpression   VastTrackingEvent = "viewableImpression"
)

type VastVersion

type VastVersion = string

VastVersion — Supported VAST (Video Ad Serving Template) specification versions

const (
	VastVersion20 VastVersion = "2.0"
	VastVersion30 VastVersion = "3.0"
	VastVersion40 VastVersion = "4.0"
	VastVersion41 VastVersion = "4.1"
	VastVersion42 VastVersion = "4.2"
)

type VendorPricingOption

type VendorPricingOption struct {
	PricingOptionID string         `json:"pricing_option_id"`
	Model           string         `json:"model"`
	CPM             float64        `json:"cpm,omitempty"`
	Percent         float64        `json:"percent,omitempty"`
	MaxCPM          float64        `json:"max_cpm,omitempty"`
	Amount          float64        `json:"amount,omitempty"`
	Period          string         `json:"period,omitempty"`
	Unit            string         `json:"unit,omitempty"`
	UnitPrice       float64        `json:"unit_price,omitempty"`
	Description     string         `json:"description,omitempty"`
	Metadata        map[string]any `json:"metadata,omitempty"`
	Currency        string         `json:"currency,omitempty"`
	Ext             any            `json:"ext,omitempty"`
}

VendorPricingOption wires the vendor-pricing-option.json schema — a pricing_option_id wrapper around the signal-pricing.json oneOf. Discriminated by Model: cpm, percent_of_media, flat_fee, per_unit, custom. Custom pricing requires Description + Metadata; buyers should route it through operator review rather than auto-selecting. PricingOptionID is the wrapper field, not part of the oneOf.

Go cannot express JSON Schema oneOf at the type level, so required-field enforcement per variant is deferred to the schema validator; omitempty on numeric fields means legitimate zero values (e.g. CPM: 0) do not round-trip.

type ViewabilityStandard

type ViewabilityStandard = string

ViewabilityStandard — Viewability measurement standard applied to determine whether an impression qual

const (
	ViewabilityStandardMrc    ViewabilityStandard = "mrc"
	ViewabilityStandardGroupm ViewabilityStandard = "groupm"
)

type WcagLevel

type WcagLevel = string

WcagLevel — Web Content Accessibility Guidelines conformance level

const (
	WcagLevelA   WcagLevel = "A"
	WcagLevelAA  WcagLevel = "AA"
	WcagLevelAAA WcagLevel = "AAA"
)

type WebhookResponseType

type WebhookResponseType = string

WebhookResponseType — Expected response content type from webhook endpoints

const (
	WebhookResponseTypeHTML       WebhookResponseType = "html"
	WebhookResponseTypeJSON       WebhookResponseType = "json"
	WebhookResponseTypeXML        WebhookResponseType = "xml"
	WebhookResponseTypeJavascript WebhookResponseType = "javascript"
)

type WebhookSecurityMethod

type WebhookSecurityMethod = string

WebhookSecurityMethod — Security methods for authenticating webhook requests

const (
	WebhookSecurityMethodHmacSha256 WebhookSecurityMethod = "hmac_sha256"
	WebhookSecurityMethodAPIKey     WebhookSecurityMethod = "api_key"
	WebhookSecurityMethodNone       WebhookSecurityMethod = "none"
)

type WebhookSigningCapabilities

type WebhookSigningCapabilities struct {
	Supported          bool     `json:"supported"`
	Profile            string   `json:"profile,omitempty"`
	Algorithms         []string `json:"algorithms,omitempty"`
	LegacyHMACFallback bool     `json:"legacy_hmac_fallback,omitempty"`
}

WebhookSigningCapabilities declares RFC 9421 webhook-signature policy — what this agent emits on outbound webhook deliveries. Top-level peer of RequestSigning. Profile is a closed enum ("adcp/webhook-signing/v1"); the value MUST match the tag= on the on-wire Signature-Input header.

Directories

Path Synopsis
cmd
adcp-signing-keygen command
Command adcp-signing-keygen generates an AdCP request-signing keypair and emits the PEM-encoded private key plus the public JWK.
Command adcp-signing-keygen generates an AdCP request-signing keypair and emits the PEM-encoded private key plus the public JWK.
Package idempotency provides canonicalization, hashing, typed errors, storage backends, and handler middleware for AdCP idempotency_key support.
Package idempotency provides canonicalization, hashing, typed errors, storage backends, and handler middleware for AdCP idempotency_key support.
Package signing implements the AdCP RFC 9421 request-signing profile: signs outgoing HTTP requests and verifies inbound ones for AdCP agent identity, with replay protection via per-(keyid, nonce) deduplication and tampering protection via optional RFC 9530 Content-Digest coverage.
Package signing implements the AdCP RFC 9421 request-signing profile: signs outgoing HTTP requests and verifies inbound ones for AdCP agent identity, with replay protection via per-(keyid, nonce) deduplication and tampering protection via optional RFC 9530 Content-Digest coverage.
Package webhook provides sender and receiver helpers for AdCP webhook payloads.
Package webhook provides sender and receiver helpers for AdCP webhook payloads.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL