Status: Request for Comments Last Updated: January 25, 2026 This document defines the Signals Protocol specification. The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.Documentation Index
Fetch the complete documentation index at: https://docs.adcontextprotocol.org/llms.txt
Use this file to discover all available pages before exploring further.
Abstract
The Signals Protocol defines a standard interface for AI-powered signal discovery, activation, and management systems. This protocol enables AI assistants to help marketers discover, activate, and manage data signals (audiences, contextual, geographical, temporal, and multi-dimensional data) through natural language interactions.Protocol Overview
The Signals Protocol provides:- Natural language signal discovery based on marketing objectives
- Multi-platform signal discovery in a single request
- Signal activation for specific platforms and accounts
- Transparent pricing with CPM and revenue share models
- Signal size reporting with unit types (individuals, devices, households)
Transport Requirements
Signal agents MUST support at least one of the following transports:| Transport | Protocol | Description |
|---|---|---|
| MCP | Model Context Protocol | Tool-based interaction via JSON-RPC |
| A2A | Agent-to-Agent | Message-based interaction |
get_adcp_capabilities:
Core Concepts
Request Roles
Every signal request involves two roles:- Orchestrator: The platform making the API request (e.g., a buyer agent or AI assistant)
- Account: The commercial relationship on whose behalf the request is made. See Accounts Protocol.
Signal Agent Types
Private Signal Agents — owned by a single account with exclusive access:- Signal agents MUST return
REFERENCE_NOT_FOUNDfor unauthorized accounts — the same response as “agent does not exist.” Distinguishing “exists but unauthorized” from “does not exist” would enable cross-tenant enumeration of private agents. See the uniform-response MUST in error-handling.mdx for the full set of observable channels that MUST match on both paths. - Signal agents MUST NOT expose private signals across accounts
- Signal agents MUST support public wholesale feed access without account registration
- Signal agents SHOULD support account-personalized wholesale feed views for registered accounts
Identifiers
-
signal_agent_segment_id: Opaque signal handle issued by the signal source. Signals Protocol responses MUST return this for each signal and orchestrators MUST use it inactivate_signalrequests. For seller-offered media-buy signal targeting, buyers usesignal_refas the named signal reference and includesignal_agent_segment_idonly when the selected product option exposes a distinct execution handle. -
activation_key: Key for external deployment targeting. Signal agents MUST return this whenis_live: trueAND the caller has access to the deployment. Orchestrators MUST use this for platform or destination targeting (notsignal_agent_segment_id). For seller-offered signals selected on a sales-agent media buy, usepackages[].targeting_overlay.signal_targeting_groups; includeactivation_keyonly when the seller requires a prior activation key.
Governance metadata
Signal definitions MAY includerestricted_attributes and policy_categories fields to enable structural governance matching. Data providers SHOULD declare these so governance agents can deterministically evaluate compliance rather than inferring sensitivity from signal names.
restricted_attributes: Array of GDPR Article 9 special category values this signal touches. Governance agents SHOULD prefer declared attributes over semantic inference.policy_categories: Array of policy category IDs this signal is sensitive for. Governance agents match these against a plan’spolicy_categoriesto flag sensitive data usage.
Enrichment and progressive disclosure
Rich definition fields such astaxonomy.values[], taxonomy.value_mappings[], segmentation_criteria, onboarder, and modeling.disclosure.jurisdictions[] describe the authoritative signal definition. They are not required to be repeated in every discovery listing.
Signal agents SHOULD treat get_signals as a discovery and availability surface. For broad search results and wholesale feed pages, agents SHOULD return compact listings with stable identity, display metadata, pricing, deployment status, and cache validators or disclosure pointers when available. Large taxonomies, long segmentation criteria, and jurisdiction-specific disclosure text SHOULD be fetched from the provider’s authoritative adagents.json signal definition or from declared URLs such as taxonomy.ref, criteria_url, and modeling.disclosure.jurisdictions[].disclosure_url.
When a response includes taxonomy.etag or another provider-supplied validator, orchestrators SHOULD cache the dereferenced definition or taxonomy under that validator and refresh it only when the validator changes. Agents MAY include inline excerpts for review, ranking, or lookup-by-reference flows, but SHOULD avoid duplicating full external resources across every item in a large get_signals response.
Orchestrators that need richer metadata inline MAY set fields on get_signals, using the same response-projection pattern as get_products.fields, to request specific listing or definition fields such as taxonomy, data_sources, methodology, modeling, countries, consent_basis, or data_subject_rights. Agents SHOULD honor requested fields for exact lookup, refinement, and small custom-signal result sets when available. For broad discovery and wholesale pages, agents MAY still return compact pointers instead of inlining large definition resources.
Definition enrichment fields
Signal definitions MAY carry additional fields for transparency, governance, and review:- Taxonomy metadata:
taxonomy.ref,taxonomy.values[],taxonomy.value_mappings[], andtaxonomy.parent_match_behaviordescribe how the signal maps to an external or provider-owned taxonomy. These fields do not change package targeting grammar. - Source and methodology disclosure:
data_sources,methodology,segmentation_criteria,criteria_url,refresh_cadence,lookback_window, andonboarderdescribe how the segment was compiled. Offline and public-record source categories requireonboarder. - Modeling disclosure:
modelingis required whenmethodologyismodeledoraudience_expansionistrue. Required modeling disclosures must name the jurisdictions where the disclosure applies. - Jurisdiction and privacy metadata:
countries, GDPR-scopedconsent_basis,restricted_attributes,policy_categories, andart9_basislet governance agents evaluate use constraints structurally. - Data-subject-rights routing:
data_subject_rights.channels[]declares where access, erasure, objection, portability, or rectification requests route for this signal. At least one channel must support access, erasure, or objection.
Tasks
The Signals Protocol defines two tasks. See task reference pages for complete request/response schemas and examples.get_signals
Schema:get-signals-request.json / get-signals-response.json
Reference: get_signals task
Discover signals matching campaign criteria.
Requirements:
- Orchestrators MUST include
signal_spec,signal_refs, or deprecatedsignal_ids - Signal agents MUST return all required fields per response schema
- Signal agents MUST include
activation_keywhenis_live: trueAND caller has deployment access
activate_signal
Schema:activate-signal-request.json / activate-signal-response.json
Reference: activate_signal task
Activate a signal for use on a decisioning platform.
Requirements:
- Orchestrators MUST include
signal_agent_segment_idanddestinations - On success, signal agents MUST return a
deploymentsarray withis_livefor each deployment - Signal agents MUST return
activation_keywhenis_live: trueAND caller has deployment access - On failure, signal agents MUST return an
errorsarray (with nodeploymentsarray)
Error Handling
Signal agents MUST return errors using the standard AdCP error schema. Signal agents MUST use Signals Protocol error codes as defined in the Error Handling Reference.Security Considerations
Transport Security
All Signals Protocol communications MUST use HTTPS with TLS 1.2 or higher.Authentication
- Orchestrators MUST authenticate with signal agents using valid credentials
- Signal agents MUST validate credentials before processing requests
- Signal agents SHOULD use account context to determine catalog access level
Activation Key Security
- Signal agents MUST only return
activation_keyto authenticated callers with deployment access - Signal agents MUST NOT return activation keys for deployments the caller cannot access
Data Minimization
- Signal agents MUST NOT return signals the authenticated agent or account is not authorized to access
Conformance
Signal Agent Conformance
A conformant Signals Protocol agent MUST:- Support at least one specified transport (MCP or A2A)
- Implement
get_signalsandactivate_signaltasks per schema - Return required fields as defined in response schemas
- Use specified error codes
- Enforce access control for private signals and activation keys
Orchestrator Conformance
A conformant Signals Protocol orchestrator MUST:- Authenticate with signal agents
- Include required fields as defined in request schemas
- Handle async activation responses
- Use
activation_keyfor external deployment targeting, and use package-levelsignal_targeting_groupsfor seller-offered signal selection on sales-agent media buys
create_media_buy.packages[].targeting_overlay.signal_targeting_groups, including the selected signal pricing_option_id when required and the selected signal_ref. get_signals is the broader discovery surface, while the selected product’s inline signal_targeting_options when present and signal_targeting_rules govern buy-time eligibility and pricing; wholesale products can omit inline options and rely on get_signals for candidate discovery. included_signals is descriptive only: it identifies signals already bundled into or planned into the product, but does not make them selectable. If the product option or get_signals result exposes a separate signal_agent_segment_id required by the seller, buyers echo it as an execution handle; otherwise signal_ref is sufficient. This is the package-level binding; audience_include and audience_exclude remain scoped to buyer-managed audiences from sync_audiences.
Implementation Notes
Multi-Platform Discovery
Orchestrators MAY request signals across multiple platforms in a singleget_signals call.
Signal agents SHOULD return deployment information for all requested platforms.
Activation Timing
Signal activation is typically asynchronous:- Simple activations: 1-2 hours
- Complex deployments: up to 24-48 hours
Destination Type Selection
Theactivate_signal request supports two destination types. The choice depends on the buyer’s execution path:
- Orchestrators buying through a Sales Agent SHOULD use
type: "agent"destinations with the SA’s URL. The SA handles downstream platform coordination — which DSP it uses is an implementation detail. - Orchestrators buying directly on a DSP SHOULD use
type: "platform"destinations. The orchestrator is responsible for ensuring the activation platform matches where campaigns will run. - Signal agents MUST support both destination types per the destination schema.
Schema Reference
| Schema | Description |
|---|---|
signals/get-signals-request.json | get_signals request |
signals/get-signals-response.json | get_signals response |
signals/activate-signal-request.json | activate_signal request |
signals/activate-signal-response.json | activate_signal response |
core/deployment.json | Deployment target |
core/activation-key.json | Activation key |