@adcp/sdk API Reference - v10.0.1
    Preparing search index...

    Function getSignalsResponse

    • Parameters

      • data: {
            context?: Omit<Omit<{}, "bank">, "authentication"> & {
                authentication?: unknown;
            };
            governance_context?: string;
            signals?: {
                restricted_attributes?: RestrictedAttribute[];
                policy_categories?: string[];
                taxonomy?: {
                    ref: string;
                    version?: string;
                    segtax?: number;
                    etag?: string;
                    values: { id: string; path?: string; modifiers?: string[] }[];
                    value_mappings?: {
                        value: string;
                        taxonomy_value_id: string;
                        path?: string;
                        modifiers?: (...)[];
                    }[];
                    parent_match_behavior?: | "unknown"
                    | "exact_only"
                    | "descendants_supported";
                };
                segmentation_criteria?: string;
                criteria_url?: string;
                data_sources?: (
                    | "email"
                    | "app_behavior"
                    | "app_usage"
                    | "web_usage"
                    | "geo_location"
                    | "tv_ott_or_stb_device"
                    | "panel"
                    | "online_ecommerce"
                    | "credit_data"
                    | "loyalty_card"
                    | "transaction"
                    | "online_survey"
                    | "offline_survey"
                    | "public_record_census"
                    | "public_record_voter_file"
                    | "public_record_other"
                    | "offline_transaction"
                )[];
                methodology?: "modeled"
                | "observed"
                | "declared"
                | "derived"
                | "inferred";
                audience_expansion?: boolean;
                device_expansion?: boolean;
                refresh_cadence?:
                    | "daily"
                    | "weekly"
                    | "monthly"
                    | "quarterly"
                    | "intra_day"
                    | "bi_monthly"
                    | "bi_annually"
                    | "annually";
                lookback_window?: | "daily"
                | "weekly"
                | "monthly"
                | "quarterly"
                | "intra_day"
                | "bi_monthly"
                | "bi_annually"
                | "annually";
                onboarder?: {
                    match_keys: (
                        | "email"
                        | "name"
                        | "address"
                        | "postal"
                        | "lat_long"
                        | "mobile_id"
                        | "cookie_id"
                        | "ip"
                        | "customer_id"
                        | "phone"
                    )[];
                    pre_onboarding_audience_expansion?: boolean;
                    pre_onboarding_device_expansion?: boolean;
                    pre_onboarding_precision_level?: | "individual"
                    | "household"
                    | "business"
                    | "geography";
                };
                countries?: string[];
                consent_basis?: ConsentBasis[];
                art9_basis?: | "explicit_consent"
                | "manifestly_made_public"
                | "substantial_public_interest"
                | "vital_interests";
                modeling?: {
                    method: "lookalike"
                    | "supervised"
                    | "embedding"
                    | "rules";
                    seed_source: {
                        type:
                            | "panel"
                            | "first_party_crm"
                            | "declared_survey"
                            | "transactional"
                            | "behavioral";
                        provider_signed: boolean;
                    };
                    training_data_jurisdictions: string[];
                    ai_act_risk_class: "minimal"
                    | "limited"
                    | "high_risk";
                    disclosure?: {
                        required: boolean;
                        jurisdictions?: {
                            country: ...;
                            region?: ...;
                            regulation: ...;
                            disclosure_text?: ...;
                            disclosure_url?: ...;
                            audience?: ...;
                        }[];
                        notes?: string;
                    };
                };
                data_subject_rights?: {
                    upstream_source_domain?: string;
                    channels: {
                        rights: (
                            "access"
                            | "rectification"
                            | "erasure"
                            | "portability"
                            | "objection"
                        )[];
                        url?: string;
                        email?: string;
                        languages?: string[];
                        countries?: string[];
                    }[];
                    response_sla_days?: number;
                    ccpa_opt_out_url?: string;
                };
                last_updated?: string;
                dts_compliant_version?: string;
                signal_ref?: | { scope: "product"; signal_id: string }
                | {
                    scope: "data_provider";
                    data_provider_domain: string;
                    signal_id: string;
                }
                | { scope: "signal_source"; signal_source_url: string; signal_id: string };
                signal_id?:
                    | { source: "catalog"; data_provider_domain: string; id: string }
                    | { source: "agent"; agent_url: string; id: string };
                name: string;
                description: string;
                methodology_url?: string;
                value_type?: SignalValueType;
                categories?: string[];
                range?: { min: number; max: number };
                signal_agent_segment_id: string;
                signal_type: SignalAvailabilityType;
                data_provider?: string;
                coverage_percentage?: number;
                coverage_forecast?: {
                    points: {
                        label?: string;
                        budget?: number;
                        product_id?: string;
                        dimensions: (
                            | {
                                kind: ...;
                                geo_level: ...;
                                system?: ...;
                                country?: ...;
                                geo_code: ...;
                                geo_name?: ...;
                            }
                            | { kind: ...; placement_ref: ...; placement_name?: ... }
                            | { kind: ...; device_type: ... }
                            | { kind: ...; device_platform: ... }
                            | {
                                kind: ...;
                                audience_id: ...;
                                audience_source: ...;
                                audience_name?: ...;
                            }
                            | {
                                kind: ...;
                                signal_ref?: ...;
                                signal_id?: ...;
                                signal_value?: ...;
                                presence: ...;
                                signal_name?: ...;
                                signal_value_name?: ...;
                            }
                        )[];
                        metrics: {
                            audience_size?: { low?: ...; mid?: ...; high?: ... };
                            reach?: { low?: ...; mid?: ...; high?: ... };
                            frequency?: { low?: ...; mid?: ...; high?: ... };
                            impressions?: { low?: ...; mid?: ...; high?: ... };
                            clicks?: { low?: ...; mid?: ...; high?: ... };
                            spend?: { low?: ...; mid?: ...; high?: ... };
                            views?: { low?: ...; mid?: ...; high?: ... };
                            completed_views?: { low?: ...; mid?: ...; high?: ... };
                            grps?: { low?: ...; mid?: ...; high?: ... };
                            engagements?: { low?: ...; mid?: ...; high?: ... };
                            follows?: { low?: ...; mid?: ...; high?: ... };
                            saves?: { low?: ...; mid?: ...; high?: ... };
                            profile_visits?: { low?: ...; mid?: ...; high?: ... };
                            measured_impressions?: { low?: ...; mid?: ...; high?: ... };
                            downloads?: { low?: ...; mid?: ...; high?: ... };
                            plays?: { low?: ...; mid?: ...; high?: ... };
                            coverage_rate?: { low?: ...; mid?: ...; high?: ... };
                            [key: string]: { low?: ...; mid?: ...; high?: ... } | undefined;
                        };
                        viewability?: Omit<(...), (...)> & { authentication?: ... };
                        vendor_metric_values?: {
                            vendor: ...;
                            metric_id: ...;
                            value: ...;
                            unit?: ...;
                            measurable_impressions?: ...;
                            breakdown?: ...;
                        }[];
                    }[];
                    forecast_range_unit: "availability";
                    method: ForecastMethod;
                    scope: {
                        kind: "product"
                        | "inventory"
                        | "custom"
                        | "account";
                        label: string;
                        product_id?: string;
                        countries?: string[];
                        line_item_types?: string[];
                        date_range?: { start: string; end: string };
                    };
                    bucket_semantics: "exclusive"
                    | "overlapping";
                    bucket_completeness: "complete" | "partial";
                    generated_at?: string;
                    valid_until?: string;
                    ext?: Omit<Omit<{}, "bank">, "authentication"> & {
                        authentication?: unknown;
                    };
                };
                deployments: (
                    | {
                        type: "platform";
                        platform: string;
                        account?: string;
                        is_live: boolean;
                        activation_key?: | { type: "segment_id"; segment_id: string }
                        | { type: "key_value"; key: string; value: string };
                        estimated_activation_duration_minutes?: number;
                        deployed_at?: string;
                    }
                    | {
                        type: "agent";
                        agent_url: string;
                        account?: string;
                        is_live: boolean;
                        activation_key?: | { type: "segment_id"; segment_id: string }
                        | { type: "key_value"; key: string; value: string };
                        estimated_activation_duration_minutes?: number;
                        deployed_at?: string;
                    }
                )[];
                pricing_options?: (
                    | {
                        pricing_option_id: string;
                        applies_to_output_format_ids?: {
                            agent_url: ...;
                            id: ...;
                            width?: ...;
                            height?: ...;
                            duration_ms?: ...;
                        }[];
                        model: "cpm";
                        cpm: number;
                        currency: string;
                        ext?: Omit<(...), (...)> & { authentication?: ... };
                    }
                    | {
                        pricing_option_id: string;
                        applies_to_output_format_ids?: {
                            agent_url: ...;
                            id: ...;
                            width?: ...;
                            height?: ...;
                            duration_ms?: ...;
                        }[];
                        model: "percent_of_media";
                        percent: number;
                        max_cpm?: number;
                        currency: string;
                        ext?: Omit<(...), (...)> & { authentication?: ... };
                    }
                    | {
                        pricing_option_id: string;
                        applies_to_output_format_ids?: {
                            agent_url: ...;
                            id: ...;
                            width?: ...;
                            height?: ...;
                            duration_ms?: ...;
                        }[];
                        model: "flat_fee";
                        amount: number;
                        period: "campaign"
                        | "monthly"
                        | "quarterly"
                        | "annual";
                        currency: string;
                        ext?: Omit<(...), (...)> & { authentication?: ... };
                    }
                    | {
                        pricing_option_id: string;
                        applies_to_output_format_ids?: {
                            agent_url: ...;
                            id: ...;
                            width?: ...;
                            height?: ...;
                            duration_ms?: ...;
                        }[];
                        model: "per_unit";
                        unit: string;
                        unit_price: number;
                        currency: string;
                        ext?: Omit<(...), (...)> & { authentication?: ... };
                    }
                    | {
                        pricing_option_id: string;
                        applies_to_output_format_ids?: {
                            agent_url: ...;
                            id: ...;
                            width?: ...;
                            height?: ...;
                            duration_ms?: ...;
                        }[];
                        model: "custom";
                        description: string;
                        metadata: { summary_for_operator?: string };
                        currency?: string;
                        ext?: Omit<(...), (...)> & { authentication?: ... };
                    }
                )[];
            }[];
            errors?: {
                code: string;
                message: string;
                field?: string;
                suggestion?: string;
                retry_after?: number;
                issues?: {
                    pointer: string;
                    message: string;
                    keyword: string;
                    schemaPath?: string;
                    schema_id?: string;
                    discriminator?: {
                        property_name: string;
                        value: (...)
                        | (...)
                        | (...)
                        | (...)
                        | (...);
                    }[];
                }[];
                details?: Omit<Omit<{}, "bank">, "authentication"> & {
                    authentication?: unknown;
                };
                recovery?: "transient"
                | "correctable"
                | "terminal";
                source?: "producer" | "sdk";
                sdk_id?: string;
            }[];
            incomplete?: {
                scope: "signals"
                | "pricing"
                | "wholesale_feed";
                description: string;
                estimated_wait?: {
                    interval: number;
                    unit: "seconds" | "minutes" | "hours" | "days" | "campaign";
                };
            }[];
            wholesale_feed_version?: string;
            pricing_version?: string;
            cache_scope?: "account"
            | "public";
            unchanged?: true;
            pagination?: { has_more: boolean; cursor?: string; total_count?: number };
            sandbox?: boolean;
            ext?: Omit<Omit<{}, "bank">, "authentication"> & {
                authentication?: unknown;
            };
        }
        • Optionalcontext?: Omit<Omit<{}, "bank">, "authentication"> & { authentication?: unknown }
        • Optionalgovernance_context?: string

          Governance context token issued by the account's governance agent during check_governance. Buyers attach it to governed purchase requests (media buys, rights acquisitions, signal activations, creative services); sellers persist it and include it on all subsequent governance calls for that action's lifecycle. An account binds to one governance agent (see sync_governance); governance is phased across purchase / modification / delivery, not partitioned across specialist agents, so the envelope carries a single token for the full lifecycle.

          Value format: governance agents MUST emit a compact JWS per the AdCP JWS profile (see Security — Signed Governance Context). Sellers MAY verify; sellers that do not verify MUST persist and forward the token unchanged. In 3.1 all sellers MUST verify. Non-JWS values from pre-3.0 governance agents are deprecated.

          This is the primary correlation key for audit and reporting across the governance lifecycle.

        • Optionalsignals?: {
              restricted_attributes?: RestrictedAttribute[];
              policy_categories?: string[];
              taxonomy?: {
                  ref: string;
                  version?: string;
                  segtax?: number;
                  etag?: string;
                  values: { id: string; path?: string; modifiers?: string[] }[];
                  value_mappings?: {
                      value: string;
                      taxonomy_value_id: string;
                      path?: string;
                      modifiers?: (...)[];
                  }[];
                  parent_match_behavior?: "unknown"
                  | "exact_only"
                  | "descendants_supported";
              };
              segmentation_criteria?: string;
              criteria_url?: string;
              data_sources?: (
                  | "email"
                  | "app_behavior"
                  | "app_usage"
                  | "web_usage"
                  | "geo_location"
                  | "tv_ott_or_stb_device"
                  | "panel"
                  | "online_ecommerce"
                  | "credit_data"
                  | "loyalty_card"
                  | "transaction"
                  | "online_survey"
                  | "offline_survey"
                  | "public_record_census"
                  | "public_record_voter_file"
                  | "public_record_other"
                  | "offline_transaction"
              )[];
              methodology?: "modeled"
              | "observed"
              | "declared"
              | "derived"
              | "inferred";
              audience_expansion?: boolean;
              device_expansion?: boolean;
              refresh_cadence?:
                  | "daily"
                  | "weekly"
                  | "monthly"
                  | "quarterly"
                  | "intra_day"
                  | "bi_monthly"
                  | "bi_annually"
                  | "annually";
              lookback_window?: | "daily"
              | "weekly"
              | "monthly"
              | "quarterly"
              | "intra_day"
              | "bi_monthly"
              | "bi_annually"
              | "annually";
              onboarder?: {
                  match_keys: (
                      | "email"
                      | "name"
                      | "address"
                      | "postal"
                      | "lat_long"
                      | "mobile_id"
                      | "cookie_id"
                      | "ip"
                      | "customer_id"
                      | "phone"
                  )[];
                  pre_onboarding_audience_expansion?: boolean;
                  pre_onboarding_device_expansion?: boolean;
                  pre_onboarding_precision_level?: | "individual"
                  | "household"
                  | "business"
                  | "geography";
              };
              countries?: string[];
              consent_basis?: ConsentBasis[];
              art9_basis?: | "explicit_consent"
              | "manifestly_made_public"
              | "substantial_public_interest"
              | "vital_interests";
              modeling?: {
                  method: "lookalike"
                  | "supervised"
                  | "embedding"
                  | "rules";
                  seed_source: {
                      type:
                          | "panel"
                          | "first_party_crm"
                          | "declared_survey"
                          | "transactional"
                          | "behavioral";
                      provider_signed: boolean;
                  };
                  training_data_jurisdictions: string[];
                  ai_act_risk_class: "minimal"
                  | "limited"
                  | "high_risk";
                  disclosure?: {
                      required: boolean;
                      jurisdictions?: {
                          country: ...;
                          region?: ...;
                          regulation: ...;
                          disclosure_text?: ...;
                          disclosure_url?: ...;
                          audience?: ...;
                      }[];
                      notes?: string;
                  };
              };
              data_subject_rights?: {
                  upstream_source_domain?: string;
                  channels: {
                      rights: (
                          "access"
                          | "rectification"
                          | "erasure"
                          | "portability"
                          | "objection"
                      )[];
                      url?: string;
                      email?: string;
                      languages?: string[];
                      countries?: string[];
                  }[];
                  response_sla_days?: number;
                  ccpa_opt_out_url?: string;
              };
              last_updated?: string;
              dts_compliant_version?: string;
              signal_ref?: | { scope: "product"; signal_id: string }
              | {
                  scope: "data_provider";
                  data_provider_domain: string;
                  signal_id: string;
              }
              | { scope: "signal_source"; signal_source_url: string; signal_id: string };
              signal_id?:
                  | { source: "catalog"; data_provider_domain: string; id: string }
                  | { source: "agent"; agent_url: string; id: string };
              name: string;
              description: string;
              methodology_url?: string;
              value_type?: SignalValueType;
              categories?: string[];
              range?: { min: number; max: number };
              signal_agent_segment_id: string;
              signal_type: SignalAvailabilityType;
              data_provider?: string;
              coverage_percentage?: number;
              coverage_forecast?: {
                  points: {
                      label?: string;
                      budget?: number;
                      product_id?: string;
                      dimensions: (
                          | {
                              kind: ...;
                              geo_level: ...;
                              system?: ...;
                              country?: ...;
                              geo_code: ...;
                              geo_name?: ...;
                          }
                          | { kind: ...; placement_ref: ...; placement_name?: ... }
                          | { kind: ...; device_type: ... }
                          | { kind: ...; device_platform: ... }
                          | {
                              kind: ...;
                              audience_id: ...;
                              audience_source: ...;
                              audience_name?: ...;
                          }
                          | {
                              kind: ...;
                              signal_ref?: ...;
                              signal_id?: ...;
                              signal_value?: ...;
                              presence: ...;
                              signal_name?: ...;
                              signal_value_name?: ...;
                          }
                      )[];
                      metrics: {
                          audience_size?: { low?: ...; mid?: ...; high?: ... };
                          reach?: { low?: ...; mid?: ...; high?: ... };
                          frequency?: { low?: ...; mid?: ...; high?: ... };
                          impressions?: { low?: ...; mid?: ...; high?: ... };
                          clicks?: { low?: ...; mid?: ...; high?: ... };
                          spend?: { low?: ...; mid?: ...; high?: ... };
                          views?: { low?: ...; mid?: ...; high?: ... };
                          completed_views?: { low?: ...; mid?: ...; high?: ... };
                          grps?: { low?: ...; mid?: ...; high?: ... };
                          engagements?: { low?: ...; mid?: ...; high?: ... };
                          follows?: { low?: ...; mid?: ...; high?: ... };
                          saves?: { low?: ...; mid?: ...; high?: ... };
                          profile_visits?: { low?: ...; mid?: ...; high?: ... };
                          measured_impressions?: { low?: ...; mid?: ...; high?: ... };
                          downloads?: { low?: ...; mid?: ...; high?: ... };
                          plays?: { low?: ...; mid?: ...; high?: ... };
                          coverage_rate?: { low?: ...; mid?: ...; high?: ... };
                          [key: string]: { low?: ...; mid?: ...; high?: ... } | undefined;
                      };
                      viewability?: Omit<(...), (...)> & { authentication?: ... };
                      vendor_metric_values?: {
                          vendor: ...;
                          metric_id: ...;
                          value: ...;
                          unit?: ...;
                          measurable_impressions?: ...;
                          breakdown?: ...;
                      }[];
                  }[];
                  forecast_range_unit: "availability";
                  method: ForecastMethod;
                  scope: {
                      kind: "product"
                      | "inventory"
                      | "custom"
                      | "account";
                      label: string;
                      product_id?: string;
                      countries?: string[];
                      line_item_types?: string[];
                      date_range?: { start: string; end: string };
                  };
                  bucket_semantics: "exclusive"
                  | "overlapping";
                  bucket_completeness: "complete" | "partial";
                  generated_at?: string;
                  valid_until?: string;
                  ext?: Omit<Omit<{}, "bank">, "authentication"> & {
                      authentication?: unknown;
                  };
              };
              deployments: (
                  | {
                      type: "platform";
                      platform: string;
                      account?: string;
                      is_live: boolean;
                      activation_key?: | { type: "segment_id"; segment_id: string }
                      | { type: "key_value"; key: string; value: string };
                      estimated_activation_duration_minutes?: number;
                      deployed_at?: string;
                  }
                  | {
                      type: "agent";
                      agent_url: string;
                      account?: string;
                      is_live: boolean;
                      activation_key?: | { type: "segment_id"; segment_id: string }
                      | { type: "key_value"; key: string; value: string };
                      estimated_activation_duration_minutes?: number;
                      deployed_at?: string;
                  }
              )[];
              pricing_options?: (
                  | {
                      pricing_option_id: string;
                      applies_to_output_format_ids?: {
                          agent_url: ...;
                          id: ...;
                          width?: ...;
                          height?: ...;
                          duration_ms?: ...;
                      }[];
                      model: "cpm";
                      cpm: number;
                      currency: string;
                      ext?: Omit<(...), (...)> & { authentication?: ... };
                  }
                  | {
                      pricing_option_id: string;
                      applies_to_output_format_ids?: {
                          agent_url: ...;
                          id: ...;
                          width?: ...;
                          height?: ...;
                          duration_ms?: ...;
                      }[];
                      model: "percent_of_media";
                      percent: number;
                      max_cpm?: number;
                      currency: string;
                      ext?: Omit<(...), (...)> & { authentication?: ... };
                  }
                  | {
                      pricing_option_id: string;
                      applies_to_output_format_ids?: {
                          agent_url: ...;
                          id: ...;
                          width?: ...;
                          height?: ...;
                          duration_ms?: ...;
                      }[];
                      model: "flat_fee";
                      amount: number;
                      period: "campaign"
                      | "monthly"
                      | "quarterly"
                      | "annual";
                      currency: string;
                      ext?: Omit<(...), (...)> & { authentication?: ... };
                  }
                  | {
                      pricing_option_id: string;
                      applies_to_output_format_ids?: {
                          agent_url: ...;
                          id: ...;
                          width?: ...;
                          height?: ...;
                          duration_ms?: ...;
                      }[];
                      model: "per_unit";
                      unit: string;
                      unit_price: number;
                      currency: string;
                      ext?: Omit<(...), (...)> & { authentication?: ... };
                  }
                  | {
                      pricing_option_id: string;
                      applies_to_output_format_ids?: {
                          agent_url: ...;
                          id: ...;
                          width?: ...;
                          height?: ...;
                          duration_ms?: ...;
                      }[];
                      model: "custom";
                      description: string;
                      metadata: { summary_for_operator?: string };
                      currency?: string;
                      ext?: Omit<(...), (...)> & { authentication?: ... };
                  }
              )[];
          }[]

          Array of matching signals

        • Optionalerrors?: {
              code: string;
              message: string;
              field?: string;
              suggestion?: string;
              retry_after?: number;
              issues?: {
                  pointer: string;
                  message: string;
                  keyword: string;
                  schemaPath?: string;
                  schema_id?: string;
                  discriminator?: {
                      property_name: string;
                      value: (...) | (...) | (...) | (...) | (...);
                  }[];
              }[];
              details?: Omit<Omit<{}, "bank">, "authentication"> & {
                  authentication?: unknown;
              };
              recovery?: "transient"
              | "correctable"
              | "terminal";
              source?: "producer" | "sdk";
              sdk_id?: string;
          }[]

          Task-specific errors and warnings (e.g., signal discovery or pricing issues)

        • Optionalincomplete?: {
              scope: "signals" | "pricing" | "wholesale_feed";
              description: string;
              estimated_wait?: {
                  interval: number;
                  unit: "seconds" | "minutes" | "hours" | "days" | "campaign";
              };
          }[]

          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.

        • Optionalwholesale_feed_version?: string

          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.

        • Optionalpricing_version?: string

          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.

        • Optionalcache_scope?: "account" | "public"

          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.

        • Optionalunchanged?: true

          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.

        • Optionalpagination?: { has_more: boolean; cursor?: string; total_count?: number }
          • has_more: boolean

            Whether more results are available beyond this page

          • Optionalcursor?: string

            Opaque cursor to pass in the next request to fetch the next page. Only present when has_more is true.

          • Optionaltotal_count?: number

            Total number of items matching the query across all pages. Optional because not all backends can efficiently compute this.

            0

        • Optionalsandbox?: boolean

          When true, this response contains simulated data from sandbox mode.

        • Optionalext?: Omit<Omit<{}, "bank">, "authentication"> & { authentication?: unknown }
      • Optionalsummary: string

      Returns McpToolResponse

      v6: createAdcpServerFromPlatform constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only.