Optionalrestricted_attributes?: RestrictedAttribute[]Restricted attribute categories this listing touches. Required with demographic_predicate and must include age. For referenced provider/source signals, any projected values must match the authoritative definition.
Optionaldemographic_predicate?: DemographicPredicateOptionalpolicy_categories?: string[]Policy categories this signal is sensitive for.
Optionaltaxonomy?: {Optional taxonomy metadata describing what this signal means in an external audience, content, retail-media, or provider-owned taxonomy.
Optionalsegmentation_criteria?: stringOptionalcriteria_url?: stringOptionaldata_sources?: (Optionalmethodology?: "declared" | "inferred" | "modeled" | "observed" | "derived"Optionalaudience_expansion?: booleanOptionaldevice_expansion?: booleanOptionalrefresh_cadence?: Optionallookback_window?: Optionalonboarder?: {Optionalcountries?: string[]Optionalconsent_basis?: ConsentBasis[]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.
Optionalart9_basis?: 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.
Optionalmodeling?: {Provider assertion that the seed source carries a signed attestation. Consumers MUST NOT treat this boolean alone as cryptographic proof.
Optionaldisclosure?: {The provider's claim that a modeling or AI-use disclosure is required for this signal in at least one applicable jurisdiction. This is a declared compliance signal, not a protocol-level legal determination.
Optionaljurisdictions?: [Jurisdictions where a modeling or AI-use disclosure applies.
Optionalnotes?: stringOptional provider notes on how the disclosure should be interpreted. Informational only; buyers should not branch programmatically on this text.
Optionaldata_subject_rights?: {Per-signal data-subject-rights routing. This is a contact/routing reference, not a machine-callable AdCP API.
Optionallast_updated?: stringWhen this listing record was last updated. This indicates freshness of the listing record, not an attestation that the underlying data or model was refreshed at that time.
Optionaldts_compliant_version?: stringOptionalsignal_ref?: SignalRefOptionalsignal_id?: SignalIDHuman-readable signal name
Detailed signal description
Optionalmethodology_url?: stringOptional link to published methodology, media-kit, or data documentation. For data_provider and signal_source refs, this SHOULD match or supplement the referenced definition.
Optionalvalue_type?: SignalValueTypeOptionalcategories?: string[]Valid values for categorical signals. Present when value_type is 'categorical'. Buyers must use one of these values in SignalTargeting.values.
Optionalrange?: { min: number; max: number }Valid range for numeric signals. Present when value_type is 'numeric'.
Minimum value (inclusive)
Maximum value (inclusive)
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.
Optionaldata_provider?: stringHuman-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.
Optionalcoverage_percentage?: numberDEPRECATED 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).
Optionalcoverage_forecast?: {Coverage or availability points. Each point reuses the standard ForecastPoint shape, MUST include a signal dimension, and MUST include metrics.coverage_rate. Use metrics.impressions for count denominators and metrics.coverage_rate for the fraction of the declared scope represented by the point.
How to interpret the points array. Signal coverage forecasts always use 'availability' because the points describe available inventory or population coverage, not spend curves or temporal pacing.
Explicit denominator for the coverage forecast. This identifies the inventory, product, account, or custom universe that coverage_rate values are relative to. Additional seller-specific qualifiers are allowed for scopes such as line item type, ad server, inventory class, country, or flight window.
Denominator family for the coverage forecast.
Human-readable denominator label, such as 'network price-priority inventory'.
Optionalproduct_id?: stringProduct denominator when kind is 'product'.
Optionalcountries?: [string, ...string[]]Countries included in the denominator, as ISO 3166-1 alpha-2 codes.
Optionalline_item_types?: [string, ...string[]]Seller or ad-server line item types included in the denominator.
Optionaldate_range?: DateRange'exclusive' means the returned signal-value buckets do not overlap with each other. 'overlapping' means one impression or user can appear in multiple returned buckets, so coverage_rate values may sum above 1.0. This field describes overlap among returned buckets; bucket_completeness declares whether the returned buckets cover the full denominator.
'complete' means the returned buckets cover the declared denominator. For complete + exclusive forecasts, count metrics and coverage_rate values can be treated as a full partition, subject to metric additivity rules. 'partial' means omitted denominator share represents undisclosed, other, or unsupported buckets; buyers MUST NOT infer totals by summing returned points.
Optionalgenerated_at?: stringWhen this coverage forecast was computed.
Optionalvalid_until?: stringWhen this coverage forecast expires.
Optionalext?: ExtensionObjectArray of deployment targets
Optionalpricing_options?: VendorPricingOption[]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.
Build an
activate_signalrequest from a discovered signal row. The returned object is suitable foragent.activateSignal(...); the SDK will injectidempotency_keyunless the caller supplied one.