Module adcp.types.domains.signals.get_signals_response
Classes
class AiActRiskClass (*args, **kwds)-
Expand source code
class AiActRiskClass(StrEnum): minimal = 'minimal' limited = 'limited' high_risk = 'high_risk'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var high_riskvar limitedvar minimal
class Art9Basis (*args, **kwds)-
Expand source code
class Art9Basis(StrEnum): explicit_consent = 'explicit_consent' manifestly_made_public = 'manifestly_made_public' substantial_public_interest = 'substantial_public_interest' vital_interests = 'vital_interests'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var explicit_consentvar manifestly_made_publicvar substantial_public_interestvar vital_interests
class CacheScope (*args, **kwds)-
Expand source code
class CacheScope(StrEnum): public = 'public' account = 'account'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var accountvar public
class Channel (**data: Any)-
Expand source code
class Channel(AdCPBaseModel): model_config = ConfigDict( extra='forbid', ) rights: Annotated[list[Right], Field(min_length=1)] url: AnyUrl | None = None email: EmailStr | None = None languages: list[str] | None = None countries: list[Country] | None = NoneBase model for AdCP types with spec-compliant serialization.
Defaults to
extra='ignore'so unknown fields from newer spec versions are silently dropped rather than causing validation errors. Generated types whose schemas setadditionalProperties: trueoverride this withextra='allow'in their ownmodel_config.Set
ADCP_STRICT_VALIDATION=1in the environment ("1","true","yes","on"are accepted) to flip the default toextra='forbid'. Use this during spec upgrades to catch silently-dropped renamed fields in tests. See :func:_resolve_extra_policy.Important
The env var is resolved once at module import time. Set it in your shell or CI environment before
import adcpruns — mutatingos.environ["ADCP_STRICT_VALIDATION"]after the firstadcpimport has no effect on already-imported model classes (they captured the policy at class-body evaluation).Consumers who want per-model strict validation can override
model_configon their subclass.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var countries : list[Country] | Nonevar email : pydantic.networks.EmailStr | Nonevar languages : list[str] | Nonevar model_configvar rights : list[Right]var url : pydantic.networks.AnyUrl | None
Inherited members
class Country (value: Any = <object object>, *, root: Any = <object object>)-
Expand source code
class Country(ScalarStr): __slots__ = () _constraints = {'pattern': '^[A-Z]{2}$'}A
strgenerated from a JSON Schema string root.Ancestors
- adcp.types._scalar.ScalarStr
- adcp.types._scalar._ScalarRoot
- builtins.str
Subclasses
class DataSource (*args, **kwds)-
Expand source code
class DataSource(StrEnum): app_behavior = 'app_behavior' app_usage = 'app_usage' web_usage = 'web_usage' geo_location = 'geo_location' email = 'email' tv_ott_or_stb_device = 'tv_ott_or_stb_device' panel = 'panel' online_ecommerce = 'online_ecommerce' credit_data = 'credit_data' loyalty_card = 'loyalty_card' transaction = 'transaction' online_survey = 'online_survey' offline_survey = 'offline_survey' public_record_census = 'public_record_census' public_record_voter_file = 'public_record_voter_file' public_record_other = 'public_record_other' offline_transaction = 'offline_transaction'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var app_behaviorvar app_usagevar credit_datavar emailvar geo_locationvar loyalty_cardvar offline_surveyvar offline_transactionvar online_ecommercevar online_surveyvar panelvar public_record_censusvar public_record_othervar public_record_voter_filevar transactionvar tv_ott_or_stb_devicevar web_usage
class DataSubjectRights (**data: Any)-
Expand source code
class DataSubjectRights(AdCPBaseModel): model_config = ConfigDict( extra='forbid', ) upstream_source_domain: Annotated[ str | None, Field( max_length=253, pattern='^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]{0,61}[A-Za-z0-9])$', ), ] = None channels: Annotated[list[Channel], Field(min_length=1)] response_sla_days: Annotated[SchemaInt | None, Field(ge=1, le=90)] = None ccpa_opt_out_url: AnyUrl | None = NoneBase model for AdCP types with spec-compliant serialization.
Defaults to
extra='ignore'so unknown fields from newer spec versions are silently dropped rather than causing validation errors. Generated types whose schemas setadditionalProperties: trueoverride this withextra='allow'in their ownmodel_config.Set
ADCP_STRICT_VALIDATION=1in the environment ("1","true","yes","on"are accepted) to flip the default toextra='forbid'. Use this during spec upgrades to catch silently-dropped renamed fields in tests. See :func:_resolve_extra_policy.Important
The env var is resolved once at module import time. Set it in your shell or CI environment before
import adcpruns — mutatingos.environ["ADCP_STRICT_VALIDATION"]after the firstadcpimport has no effect on already-imported model classes (they captured the policy at class-body evaluation).Consumers who want per-model strict validation can override
model_configon their subclass.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var ccpa_opt_out_url : pydantic.networks.AnyUrl | Nonevar channels : list[Channel]var model_configvar response_sla_days : int | Nonevar upstream_source_domain : str | None
Inherited members
class GetSignalsResponse (**data: Any)-
Expand source code
class GetSignalsResponse(AdcpResponse, AdcpVersionEnvelope, ProtocolEnvelope): model_config = ConfigDict( extra='allow', ) signals: Annotated[Sequence[Signal] | None, Field(description='Array of matching signals')] = None errors: Annotated[ list[error.Error] | None, Field( description='Task-specific errors and warnings (e.g., signal discovery or pricing issues)' ), ] = None incomplete: Annotated[ list[IncompleteItem] | None, Field( description="Declares what the agent could not finish within the caller's time_budget or due to internal limits. Each entry identifies a scope that is missing or partial. Absent when the response is fully complete.", min_length=1, ), ] = None wholesale_feed_version: Annotated[ str | None, Field( description="Opaque token representing the version of the wholesale signals feed state used to compose this response. Agents that implement conditional-fetch (if_wholesale_feed_version) MUST return this on every wholesale-mode response so callers can cache and probe later. Callers MUST treat the value as opaque — no format, no ordering, no inspection. The token is scope-keyed: it describes a version for the cache_scope declared on this response, NOT a global agent version. A caller caches `(cache_scope, wholesale_feed_version)` pairs and presents the matching token on the next request. Scoping dimensions: (agent, discovery_mode, filters, destinations, countries) for cache_scope: 'public'; that tuple plus account_id for cache_scope: 'account'. pagination.cursor is NOT part of the scoping tuple. See specs/wholesale-feed-webhooks.md for the full cache layering model." ), ] = None pricing_version: Annotated[ str | None, Field( description='Opaque token representing the version of the pricing layer. When the agent supports independent pricing versioning, pricing_version changes when prices move but wholesale_feed_version changes only when structure/metadata moves. Same cache_scope keying as wholesale_feed_version. Agents not separating these MAY omit pricing_version and use wholesale_feed_version for both.' ), ] = None cache_scope: Annotated[ CacheScope | None, Field( description="Declares whether the wholesale_feed_version and pricing_version on this response describe a universal layer or an account-specific overlay. REQUIRED on every 3.1+ response (the 3.1 schema enforces this — the safety property of the two-layer cache model depends on it). 'public': this response describes the agent's published rate card; the caller MAY dedupe under (agent, discovery_mode, filters, destinations, countries) without scoping by account. 'account': this response includes account-specific overrides; the caller MUST cache the version under that tuple plus account_id. When the request did NOT include `account`, the agent MUST return `cache_scope: 'public'`. When the request included `account`, the agent MUST return either 'public' (this account prices off the public rate card — caller dedupes) or 'account' (account-specific overrides exist — caller caches under the account key). Agents MAY return 'public' on an account-scoped request that previously had overrides — callers SHOULD interpret this as a downgrade. Without schema-required cache_scope, an agent silently omitting the field on an account-scoped response would cause callers to mis-key the cache and serve account-overlay payloads to other accounts — the canonical safety invariant of the entire cache layering model. **Backward-compatibility note for 3.1 validators:** SDKs validating strictly against the 3.1 schema MUST select the validator based on the server-declared `adcp_version`. For responses with `adcp_version` starting `3.0`, the 3.1 cache_scope-required constraint MUST be relaxed — pre-3.1 agents correctly emit no cache_scope and remain conformant to their declared version. This is a tightening within 3.1, not a 3.0 break." ), ] = CacheScope.public unchanged: Annotated[ Literal[True] | None, Field( description="Present and `true` ONLY on wholesale-mode responses when the request carried if_wholesale_feed_version (and/or if_pricing_version) matching the agent's current version for the caller's cache_scope, in which case signals[] MUST be omitted; wholesale_feed_version (echoed), cache_scope (echoed), and pricing_version (echoed when used) MUST still be present. Callers receiving unchanged: true MUST NOT mutate their local wholesale signals mirror. **One shape per state:** agents MUST NOT emit `unchanged: false` — the absence of the field IS the signal that the response carries signals. **Cross-scope isolation:** the comparator that decides `unchanged` MUST be keyed on `(cache_scope, wholesale_feed_version)`, not on the token value alone. An agent MUST NOT emit `unchanged: true` when it resolves the request to a different `cache_scope` than the one whose token the caller echoed in `if_wholesale_feed_version` (and/or `if_pricing_version`): because the token is scope-keyed, a value minted for `cache_scope: 'public'` cannot match the agent's current token for `cache_scope: 'account'` (or vice-versa), so such a request MUST return the full feed for the resolved scope with that scope's own token." ), ] = None pagination: pagination_response.PaginationResponse | None = None sandbox: Annotated[ StrictBool | None, Field(description='When true, this response contains simulated data from sandbox mode.'), ] = None context: context_1.ContextObject | None = None ext: ext_1.ExtensionObject | None = NoneThe response message of a task in the pinned bundle's task registry.
A consumer holding one can route on task state, pick up an async
task_id, split envelope from payload and log uniformly, before knowing which tool answered. Which makes one generic poll-to-terminal loop possible for all 77 tasks, where today each arm has no common type at all.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdcpResponse
- adcp.types.base._AdcpMessage
- AdcpVersionEnvelope
- ProtocolEnvelope
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var cache_scope : CacheScope | Nonevar context : ContextObject | Nonevar errors : list[Error] | Nonevar ext : ExtensionObject | Nonevar incomplete : list[IncompleteItem] | Nonevar model_configvar pagination : PaginationResponse | Nonevar pricing_version : str | Nonevar sandbox : bool | Nonevar signals : collections.abc.Sequence[Signal] | Nonevar unchanged : Literal[True] | Nonevar wholesale_feed_version : str | None
Inherited members
class IncompleteItem (**data: Any)-
Expand source code
class IncompleteItem(AdCPBaseModel): model_config = ConfigDict( extra='forbid', ) scope: Annotated[ Scope, Field( description="'signals': not all matching signals were returned. 'pricing': signals returned but pricing is absent or unconfirmed. 'wholesale_feed': in wholesale mode, full feed enumeration could not complete in the time budget." ), ] description: Annotated[ str, Field(description='Human-readable explanation of what is missing and why.') ] estimated_wait: Annotated[ duration.Duration | None, Field( description='How much additional time would resolve this scope. Allows the caller to decide whether to retry with a larger time_budget.' ), ] = NoneBase model for AdCP types with spec-compliant serialization.
Defaults to
extra='ignore'so unknown fields from newer spec versions are silently dropped rather than causing validation errors. Generated types whose schemas setadditionalProperties: trueoverride this withextra='allow'in their ownmodel_config.Set
ADCP_STRICT_VALIDATION=1in the environment ("1","true","yes","on"are accepted) to flip the default toextra='forbid'. Use this during spec upgrades to catch silently-dropped renamed fields in tests. See :func:_resolve_extra_policy.Important
The env var is resolved once at module import time. Set it in your shell or CI environment before
import adcpruns — mutatingos.environ["ADCP_STRICT_VALIDATION"]after the firstadcpimport has no effect on already-imported model classes (they captured the policy at class-body evaluation).Consumers who want per-model strict validation can override
model_configon their subclass.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var description : strvar estimated_wait : Duration | Nonevar model_configvar scope : Scope
Inherited members
class MatchKey (*args, **kwds)-
Expand source code
class MatchKey(StrEnum): name = 'name' address = 'address' email = 'email' postal = 'postal' lat_long = 'lat_long' mobile_id = 'mobile_id' cookie_id = 'cookie_id' ip = 'ip' customer_id = 'customer_id' phone = 'phone'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var addressvar customer_idvar emailvar ipvar lat_longvar mobile_idvar namevar phonevar postal
class Method (*args, **kwds)-
Expand source code
class Method(StrEnum): lookalike = 'lookalike' supervised = 'supervised' embedding = 'embedding' rules = 'rules'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var embeddingvar lookalikevar rulesvar supervised
class Methodology (*args, **kwds)-
Expand source code
class Methodology(StrEnum): observed = 'observed' declared = 'declared' derived = 'derived' inferred = 'inferred' modeled = 'modeled'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var declaredvar derivedvar inferredvar modeledvar observed
class Modeling (**data: Any)-
Expand source code
class Modeling(AdCPBaseModel): model_config = ConfigDict( extra='forbid', ) method: Method seed_source: SeedSource training_data_jurisdictions: Annotated[list[TrainingDataJurisdiction], Field(min_length=1)] ai_act_risk_class: AiActRiskClass disclosure: signal_modeling_disclosure.SignalModelingDisclosure | None = NoneBase model for AdCP types with spec-compliant serialization.
Defaults to
extra='ignore'so unknown fields from newer spec versions are silently dropped rather than causing validation errors. Generated types whose schemas setadditionalProperties: trueoverride this withextra='allow'in their ownmodel_config.Set
ADCP_STRICT_VALIDATION=1in the environment ("1","true","yes","on"are accepted) to flip the default toextra='forbid'. Use this during spec upgrades to catch silently-dropped renamed fields in tests. See :func:_resolve_extra_policy.Important
The env var is resolved once at module import time. Set it in your shell or CI environment before
import adcpruns — mutatingos.environ["ADCP_STRICT_VALIDATION"]after the firstadcpimport has no effect on already-imported model classes (they captured the policy at class-body evaluation).Consumers who want per-model strict validation can override
model_configon their subclass.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var ai_act_risk_class : AiActRiskClassvar disclosure : SignalModelingDisclosure | Nonevar method : Methodvar model_configvar seed_source : SeedSourcevar training_data_jurisdictions : list[TrainingDataJurisdiction]
Inherited members
class Onboarder (**data: Any)-
Expand source code
class Onboarder(AdCPBaseModel): model_config = ConfigDict( extra='forbid', ) match_keys: Annotated[list[MatchKey], Field(min_length=1)] pre_onboarding_audience_expansion: StrictBool | None = None pre_onboarding_device_expansion: StrictBool | None = None pre_onboarding_precision_level: PreOnboardingPrecisionLevel | None = NoneBase model for AdCP types with spec-compliant serialization.
Defaults to
extra='ignore'so unknown fields from newer spec versions are silently dropped rather than causing validation errors. Generated types whose schemas setadditionalProperties: trueoverride this withextra='allow'in their ownmodel_config.Set
ADCP_STRICT_VALIDATION=1in the environment ("1","true","yes","on"are accepted) to flip the default toextra='forbid'. Use this during spec upgrades to catch silently-dropped renamed fields in tests. See :func:_resolve_extra_policy.Important
The env var is resolved once at module import time. Set it in your shell or CI environment before
import adcpruns — mutatingos.environ["ADCP_STRICT_VALIDATION"]after the firstadcpimport has no effect on already-imported model classes (they captured the policy at class-body evaluation).Consumers who want per-model strict validation can override
model_configon their subclass.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var match_keys : list[MatchKey]var model_configvar pre_onboarding_audience_expansion : bool | Nonevar pre_onboarding_device_expansion : bool | Nonevar pre_onboarding_precision_level : PreOnboardingPrecisionLevel | None
Inherited members
class ParentMatchBehavior (*args, **kwds)-
Expand source code
class ParentMatchBehavior(StrEnum): exact_only = 'exact_only' descendants_supported = 'descendants_supported' unknown = 'unknown'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var descendants_supportedvar exact_onlyvar unknown
class PreOnboardingPrecisionLevel (*args, **kwds)-
Expand source code
class PreOnboardingPrecisionLevel(StrEnum): individual = 'individual' household = 'household' business = 'business' geography = 'geography'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var businessvar geographyvar householdvar individual
class Range (**data: Any)-
Expand source code
class Range(AdCPBaseModel): model_config = ConfigDict( extra='forbid', ) min: Annotated[StrictFloat, Field(description='Minimum value, inclusive.')] max: Annotated[StrictFloat, Field(description='Maximum value, inclusive.')]Base model for AdCP types with spec-compliant serialization.
Defaults to
extra='ignore'so unknown fields from newer spec versions are silently dropped rather than causing validation errors. Generated types whose schemas setadditionalProperties: trueoverride this withextra='allow'in their ownmodel_config.Set
ADCP_STRICT_VALIDATION=1in the environment ("1","true","yes","on"are accepted) to flip the default toextra='forbid'. Use this during spec upgrades to catch silently-dropped renamed fields in tests. See :func:_resolve_extra_policy.Important
The env var is resolved once at module import time. Set it in your shell or CI environment before
import adcpruns — mutatingos.environ["ADCP_STRICT_VALIDATION"]after the firstadcpimport has no effect on already-imported model classes (they captured the policy at class-body evaluation).Consumers who want per-model strict validation can override
model_configon their subclass.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var max : floatvar min : floatvar model_config
Inherited members
class RefreshCadence (*args, **kwds)-
Expand source code
class RefreshCadence(StrEnum): intra_day = 'intra_day' daily = 'daily' weekly = 'weekly' monthly = 'monthly' bi_monthly = 'bi_monthly' quarterly = 'quarterly' bi_annually = 'bi_annually' annually = 'annually'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var annuallyvar bi_annuallyvar bi_monthlyvar dailyvar intra_dayvar monthlyvar quarterlyvar weekly
class Right (*args, **kwds)-
Expand source code
class Right(StrEnum): access = 'access' rectification = 'rectification' erasure = 'erasure' portability = 'portability' objection = 'objection'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var accessvar erasurevar objectionvar portabilityvar rectification
class Scope (*args, **kwds)-
Expand source code
class Scope(StrEnum): signals = 'signals' pricing = 'pricing' wholesale_feed = 'wholesale_feed'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var pricingvar signalsvar wholesale_feed
class SeedSource (**data: Any)-
Expand source code
class SeedSource(AdCPBaseModel): model_config = ConfigDict( extra='forbid', ) type: Type provider_signed: Annotated[ StrictBool, Field( description='Provider assertion that the seed source carries a signed attestation. Consumers MUST NOT treat this boolean alone as cryptographic proof.' ), ]Base model for AdCP types with spec-compliant serialization.
Defaults to
extra='ignore'so unknown fields from newer spec versions are silently dropped rather than causing validation errors. Generated types whose schemas setadditionalProperties: trueoverride this withextra='allow'in their ownmodel_config.Set
ADCP_STRICT_VALIDATION=1in the environment ("1","true","yes","on"are accepted) to flip the default toextra='forbid'. Use this during spec upgrades to catch silently-dropped renamed fields in tests. See :func:_resolve_extra_policy.Important
The env var is resolved once at module import time. Set it in your shell or CI environment before
import adcpruns — mutatingos.environ["ADCP_STRICT_VALIDATION"]after the firstadcpimport has no effect on already-imported model classes (they captured the policy at class-body evaluation).Consumers who want per-model strict validation can override
model_configon their subclass.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var model_configvar provider_signed : boolvar type : Type
Inherited members
class Signal (**data: Any)-
Expand source code
class Signal(AdCPBaseModel): model_config = ConfigDict( extra='allow', ) signal_id: Annotated[ signal_id_1.SignalId | None, Field( deprecated=True, description='DEPRECATED. Use signal_ref instead. Legacy SignalId retained for compatibility with older Signals Protocol clients.', ), ] = None signal_ref: Annotated[ signal_ref_1.SignalRef | None, Field( description="Canonical signal reference. Use scope 'product' for a product-local signal defined by this listing; use scope 'data_provider' with data_provider_domain for a signal defined in a data provider's published adagents.json signals[]; use scope 'signal_source' with signal_source_url for a source-native signal." ), ] = None signal_agent_segment_id: Annotated[ str, Field( description='Opaque resolved-segment handle issued by this signal source. Pass this string verbatim to activate_signal.signal_agent_segment_id, and echo it in package signal targeting when the selected product option exposes the same handle. Treat the value as provider-scoped and opaque: providers MAY namespace it so two providers can expose similarly named signals without relying on a shared taxonomy. Do not pass the signal_id object as this handle, and do not reconstruct a segment handle from categorical values when get_signals returned a resolved segment.' ), ] name: Annotated[ str, Field( description="Human-readable signal name. Required when signal_ref_1.scope is 'product'. For data_provider and signal_source refs, this is optional contextual display text; the referenced definition or source remains authoritative." ), ] description: Annotated[ str, Field( description='Detailed signal description. For data_provider and signal_source refs, this is optional contextual display text and MUST NOT replace the referenced definition.' ), ] value_type: Annotated[ signal_value_type.SignalValueType | None, Field( description="The data type of this signal's values. Required when signal_ref_1.scope is 'product'." ), ] = None categories: Annotated[ list[str] | None, Field( description="Valid values for categorical signals. Present when value_type is 'categorical'.", min_length=1, ), ] = None range: Annotated[ Range | None, Field(description="Valid range for numeric signals. Present when value_type is 'numeric'."), ] = None signal_type: Annotated[ signal_catalog_type.SignalAvailabilityType, Field(description='Commercial/provenance type of signal (marketplace, custom, owned)'), ] data_provider: Annotated[ str | None, Field( description='Human-readable source name for the signal, when applicable. For data_provider-scoped signals this is the data provider name; for signal_source-scoped signals it may identify the signal source or proprietary origin.' ), ] = None coverage_percentage: Annotated[ StrictFloat | None, Field( deprecated=True, description='DEPRECATED for detailed planning. Optional legacy scalar percentage of audience coverage retained only as a fallback for clients that do not consume coverage_forecast. When coverage_forecast is present, coverage_forecast is authoritative for signal-level discovery and coverage_percentage is fallback-only. If coverage_forecast includes an absent bucket over the same denominator, coverage_percentage SHOULD align with 100 * (1 - absent coverage_rate.mid).', ge=0.0, le=100.0, ), ] = None coverage_forecast: Annotated[ signal_coverage_forecast.SignalCoverageForecast | None, Field( description='Optional forecast-shaped signal availability guidance. When present, this is authoritative for signal-level discovery coverage. Use this to disclose the denominator, bucket semantics, not-present bucket, aggregate present bucket, and per-value coverage distribution for the signal.' ), ] = None deployments: Annotated[ Sequence[deployment.Deployment], Field(description='Array of deployment targets') ] pricing_options: Annotated[ list[vendor_pricing_option.VendorPricingOption] | None, Field( description='Pricing options available for this signal when it has an incremental price. The buyer selects one and passes its pricing_option_id in report_usage or package-level signal_targeting_groups for billing verification. Omit when pricing is unavailable to the caller, bundled into the destination product, or has no incremental cost.', min_length=1, ), ] = None methodology_url: Annotated[ AnyUrl | None, Field( description='Optional link to published methodology, media-kit, or data documentation. For data_provider and signal_source refs, this SHOULD match or supplement the referenced definition.' ), ] = None last_updated: Annotated[ AwareDatetime | None, Field( description='When this definition record was last updated. This indicates freshness of the definition record, not an attestation that the underlying data or model was refreshed at that time.' ), ] = None restricted_attributes: Annotated[ list[restricted_attribute.RestrictedAttribute] | None, Field(description='Restricted attribute categories this signal touches.', min_length=1), ] = None demographic_predicate: Annotated[ demographic_predicate_1.DemographicPredicate | None, Field( description="Projected authoritative demographic meaning for the signal. When projected from another provider, this MUST match the provider's definition exactly. Signal names alone never establish demographic semantics." ), ] = None policy_categories: Annotated[ list[str] | None, Field(description='Policy categories this signal is sensitive for.', min_length=1), ] = None taxonomy: Annotated[ Taxonomy | None, Field( description='Optional taxonomy metadata describing what this signal means in an external audience, content, retail-media, or provider-owned taxonomy.' ), ] = None segmentation_criteria: Annotated[str | None, Field(max_length=500)] = None criteria_url: AnyUrl | None = None data_sources: Annotated[list[DataSource] | None, Field(min_length=1)] = None methodology: Methodology | None = None audience_expansion: StrictBool | None = None device_expansion: StrictBool | None = None refresh_cadence: RefreshCadence | None = None lookback_window: RefreshCadence | None = None onboarder: Onboarder | None = None countries: Annotated[list[Country] | None, Field(min_length=1)] = None consent_basis: Annotated[ list[consent_basis_1.ConsentBasis] | None, Field( description="Data provider's declared GDPR Article 6 lawful basis or consent basis for the underlying signal definition, projected into this get_signals response row when requested. Sellers and federating agents that pass through another provider's signal MUST NOT substitute their own processing basis for the provider-declared basis.", min_length=1, ), ] = None art9_basis: Annotated[ Art9Basis | None, Field( description="Data provider's declared GDPR Article 9 basis for the underlying signal definition when special-category data is involved and Article 9 applies, projected into this get_signals response row when requested. Sellers and federating agents that pass through another provider's signal MUST NOT substitute their own Article 9 basis for the provider-declared basis." ), ] = None modeling: Modeling | None = None data_subject_rights: Annotated[ DataSubjectRights | None, Field( description='Per-signal data-subject-rights routing. This is a contact/routing reference, not a machine-callable AdCP API.' ), ] = None dts_compliant_version: str | None = NoneBase model for AdCP types with spec-compliant serialization.
Defaults to
extra='ignore'so unknown fields from newer spec versions are silently dropped rather than causing validation errors. Generated types whose schemas setadditionalProperties: trueoverride this withextra='allow'in their ownmodel_config.Set
ADCP_STRICT_VALIDATION=1in the environment ("1","true","yes","on"are accepted) to flip the default toextra='forbid'. Use this during spec upgrades to catch silently-dropped renamed fields in tests. See :func:_resolve_extra_policy.Important
The env var is resolved once at module import time. Set it in your shell or CI environment before
import adcpruns — mutatingos.environ["ADCP_STRICT_VALIDATION"]after the firstadcpimport has no effect on already-imported model classes (they captured the policy at class-body evaluation).Consumers who want per-model strict validation can override
model_configon their subclass.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var art9_basis : Art9Basis | Nonevar audience_expansion : bool | Nonevar categories : list[str] | Nonevar consent_basis : list[ConsentBasis] | Nonevar countries : list[Country] | Nonevar coverage_forecast : SignalCoverageForecast | Nonevar coverage_percentage : float | Nonevar criteria_url : pydantic.networks.AnyUrl | Nonevar data_provider : str | Nonevar data_sources : list[DataSource] | Nonevar data_subject_rights : DataSubjectRights | Nonevar demographic_predicate : DemographicPredicate | Nonevar deployments : Sequence[Deployment1 | Deployment2]var description : strvar device_expansion : bool | Nonevar dts_compliant_version : str | Nonevar last_updated : pydantic.types.AwareDatetime | Nonevar lookback_window : RefreshCadence | Nonevar methodology : Methodology | Nonevar methodology_url : pydantic.networks.AnyUrl | Nonevar model_configvar modeling : Modeling | Nonevar name : strvar onboarder : Onboarder | Nonevar policy_categories : list[str] | Nonevar pricing_options : list[VendorPricingOption7 | VendorPricingOption8 | VendorPricingOption9 | VendorPricingOption10 | VendorPricingOption11] | Nonevar range : Range | Nonevar refresh_cadence : RefreshCadence | Nonevar restricted_attributes : list[RestrictedAttribute] | Nonevar segmentation_criteria : str | Nonevar signal_agent_segment_id : strvar signal_id : SignalId8 | SignalId9 | Nonevar signal_ref : SignalRef1 | SignalRef2 | SignalRef3 | Nonevar signal_type : SignalAvailabilityTypevar taxonomy : Taxonomy | Nonevar value_type : SignalValueType | None
Inherited members
class Taxonomy (**data: Any)-
Expand source code
class Taxonomy(AdCPBaseModel): model_config = ConfigDict( extra='forbid', ) ref: AnyUrl version: str | None = None segtax: Annotated[SchemaInt | None, Field(ge=1)] = None etag: str | None = None values: Annotated[list[Value], Field(min_length=1)] value_mappings: Annotated[list[ValueMapping] | None, Field(min_length=1)] = None parent_match_behavior: ParentMatchBehavior | None = NoneBase model for AdCP types with spec-compliant serialization.
Defaults to
extra='ignore'so unknown fields from newer spec versions are silently dropped rather than causing validation errors. Generated types whose schemas setadditionalProperties: trueoverride this withextra='allow'in their ownmodel_config.Set
ADCP_STRICT_VALIDATION=1in the environment ("1","true","yes","on"are accepted) to flip the default toextra='forbid'. Use this during spec upgrades to catch silently-dropped renamed fields in tests. See :func:_resolve_extra_policy.Important
The env var is resolved once at module import time. Set it in your shell or CI environment before
import adcpruns — mutatingos.environ["ADCP_STRICT_VALIDATION"]after the firstadcpimport has no effect on already-imported model classes (they captured the policy at class-body evaluation).Consumers who want per-model strict validation can override
model_configon their subclass.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var etag : str | Nonevar model_configvar parent_match_behavior : ParentMatchBehavior | Nonevar ref : pydantic.networks.AnyUrlvar segtax : int | Nonevar value_mappings : list[ValueMapping] | Nonevar values : list[Value]var version : str | None
Inherited members
class TrainingDataJurisdiction (value: Any = <object object>, *, root: Any = <object object>)-
Expand source code
class TrainingDataJurisdiction(Country): passA
strgenerated from a JSON Schema string root.Ancestors
- Country
- adcp.types._scalar.ScalarStr
- adcp.types._scalar._ScalarRoot
- builtins.str
class Type (*args, **kwds)-
Expand source code
class Type(StrEnum): first_party_crm = 'first_party_crm' panel = 'panel' declared_survey = 'declared_survey' transactional = 'transactional' behavioral = 'behavioral'Enum where members are also (and must be) strings
Ancestors
- enum.StrEnum
- builtins.str
- enum.ReprEnum
- enum.Enum
Class variables
var behavioralvar declared_surveyvar first_party_crmvar panelvar transactional
class Value (**data: Any)-
Expand source code
class Value(AdCPBaseModel): model_config = ConfigDict( extra='forbid', ) id: Annotated[str, Field(min_length=1)] path: str | None = None modifiers: list[str] | None = NoneBase model for AdCP types with spec-compliant serialization.
Defaults to
extra='ignore'so unknown fields from newer spec versions are silently dropped rather than causing validation errors. Generated types whose schemas setadditionalProperties: trueoverride this withextra='allow'in their ownmodel_config.Set
ADCP_STRICT_VALIDATION=1in the environment ("1","true","yes","on"are accepted) to flip the default toextra='forbid'. Use this during spec upgrades to catch silently-dropped renamed fields in tests. See :func:_resolve_extra_policy.Important
The env var is resolved once at module import time. Set it in your shell or CI environment before
import adcpruns — mutatingos.environ["ADCP_STRICT_VALIDATION"]after the firstadcpimport has no effect on already-imported model classes (they captured the policy at class-body evaluation).Consumers who want per-model strict validation can override
model_configon their subclass.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var id : strvar model_configvar modifiers : list[str] | Nonevar path : str | None
Inherited members
class ValueMapping (**data: Any)-
Expand source code
class ValueMapping(AdCPBaseModel): model_config = ConfigDict( extra='forbid', ) value: str taxonomy_value_id: str path: str | None = None modifiers: list[str] | None = NoneBase model for AdCP types with spec-compliant serialization.
Defaults to
extra='ignore'so unknown fields from newer spec versions are silently dropped rather than causing validation errors. Generated types whose schemas setadditionalProperties: trueoverride this withextra='allow'in their ownmodel_config.Set
ADCP_STRICT_VALIDATION=1in the environment ("1","true","yes","on"are accepted) to flip the default toextra='forbid'. Use this during spec upgrades to catch silently-dropped renamed fields in tests. See :func:_resolve_extra_policy.Important
The env var is resolved once at module import time. Set it in your shell or CI environment before
import adcpruns — mutatingos.environ["ADCP_STRICT_VALIDATION"]after the firstadcpimport has no effect on already-imported model classes (they captured the policy at class-body evaluation).Consumers who want per-model strict validation can override
model_configon their subclass.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors
- AdCPBaseModel
- pydantic.main.BaseModel
Class variables
var model_configvar modifiers : list[str] | Nonevar path : str | Nonevar taxonomy_value_id : strvar value : str
Inherited members