Experimental. Sponsored Intelligence is part of AdCP 3.0 as an experimental surface (feature id
sponsored_intelligence.core) — the protocol surface (session lifecycle, UI components, identity/consent object shape, and capability negotiation) may change between 3.x releases with at least 6 weeks’ notice. Sellers implementing SI MUST declare sponsored_intelligence.core in experimental_features. See experimental status for the full contract and the 3.1.0 roadmap for planned changes.Protocol Overview
The SI Protocol defines how AI assistants (hosts) invoke and interact with brand agent endpoints to enable conversational brand experiences. The protocol consists of:- Discovery - How hosts discover brand agents and their capabilities
- Offering Lookup - Anonymous pre-flight checks before session handoff
- Session Management - Initiation, messaging, and termination
- Capability Negotiation - Determining supported features
- UI Components - Standard visual elements for rendering
Transport Requirements
Supported Transports
Brand 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 |
Transport Declaration
Brand agents declare supported transports viaget_adcp_capabilities:
preferred field.
Discovery
Capability Discovery
Brand agents MUST implement theget_adcp_capabilities task to declare SI support. When a host calls this task, the response MUST include:
sponsored_intelligencein thesupported_protocolsarray- A
sponsored_intelligenceobject containing:endpoint- Transport configuration (REQUIRED)capabilities- Supported modalities and components (REQUIRED)
brand- Brand reference (domain-based identity)
Get Offering
Purpose
Thesi_get_offering task retrieves offering details and availability before session handoff. This allows hosts to show offering information (pricing, product availability) to users before asking for consent to engage with the brand.
Requirements
Hosts MAY callsi_get_offering before initiating a session.
If a host calls si_get_offering:
- The request MUST NOT include user PII
- The request MUST include
offering_id - The request MAY include
intentfor personalized results (e.g., “mens size 14 near Cincinnati”) - The request MAY set
include_products: trueto get matching products - Brand agents MUST return an
offering_tokenif available - Brand agents SHOULD return a
ttl_secondsindicating validity duration
Offering Token Flow
If a host receives anoffering_token:
- The host SHOULD include this token in the subsequent
si_initiate_sessionrequest - The brand agent MAY use the token to correlate offering lookups with sessions
- The token MUST be treated as opaque by the host
Matching Products
Wheninclude_products is true and intent is provided, the response MAY include matching products:
Session Lifecycle
Session States
Schema:enums/si-session-status.json
SI sessions progress through the following states. Terminal states (complete, terminated) allow no further messages.
| State | Description |
|---|---|
active | Session is in progress and accepting messages |
pending_handoff | Brand agent is requesting handoff to a commerce or external flow |
complete | Session ended normally after successful conversation or handoff |
terminated | Session was ended due to timeout, error, policy violation, or explicit host/user action |
Session State Transitions
- Brand agents MUST return
session_status: "active"fromsi_initiate_sessionon success - Brand agents MUST return
session_statuson everysi_send_messageresponse - When
session_statusispending_handoff, the response MUST include ahandoffobject - Brand agents MAY transition from
activetopending_handoffon anysi_send_messageresponse when the conversation reaches a commerce or checkout intent - Brand agents MAY transition from
activedirectly tocompleteon asi_send_messageresponse when the conversation has concluded (e.g., question answered, no further action needed) - Hosts MUST call
si_terminate_sessionto end a session. Brand agents MUST accept termination from any non-terminal state. - Brand agents MUST return
SESSION_NOT_FOUNDfor messages sent to an unknown or expired session - Brand agents MUST return
SESSION_TERMINATEDfor messages sent to a session incompleteorterminatedstate. Brand agents that prioritize minimizing information disclosure MAY returnSESSION_NOT_FOUNDfor terminated sessions as well — the recovery path is identical in both cases. - Terminal states are irreversible — once a session is
completeorterminated, a new session must be initiated
Session Timeout
Sessions SHOULD have a maximum inactivity timeout. Brand agents MAY enforce timeout by transitioning idle sessions toterminated.
- Brand agents SHOULD treat sessions as expired after a period of inactivity (RECOMMENDED: 5 minutes for conversational sessions)
- Brand agents SHOULD return
SESSION_NOT_FOUNDfor messages sent to an expired session, rather than silently creating a new session - Hosts SHOULD track
last_active_atand warn users before session timeout when possible - Brand agents MAY include
session_ttl_secondsin thesi_initiate_sessionresponse to communicate the timeout duration to the host
Initiate Session
Thesi_initiate_session task establishes a new SI session.
Request Requirements
Hosts MUST include:intent- Natural language description of user intent — the conversation handoff from host to brand agentidentity- User identity with consent status
supported_capabilities- Host’s capability set for negotiationoffering_token- Token fromsi_get_offeringif performed
media_buy_id- AdCP media buy ID if triggered by advertisingoffering_id- Brand-specific offering to applyplacement- Where this session was triggered
Response Requirements
Brand agents MUST return:session_id- Unique identifier for this session
response.message- Initial conversational messagenegotiated_capabilities- Intersection of brand and host capabilities
Send Message
Thesi_send_message task exchanges messages within an active session.
Request Requirements
Hosts MUST include:session_id- Active session identifier
message- User’s text messageaction_response- Response to a UI action
Response Requirements
Brand agents MUST return:session_id- The session identifiersession_status- Current session state (active,pending_handoff, orcomplete)
response.message- Conversational response
session_status is pending_handoff, the response MUST include:
handoff- Handoff configuration for commerce flow
Terminate Session
Thesi_terminate_session task ends an SI session.
Request Requirements
Hosts MUST include:session_id- Session to terminatereason- Termination reason
Termination Reasons
| Reason | Resulting State | Description |
|---|---|---|
handoff_transaction | complete | User proceeding to purchase; brand agent SHOULD return acp_handoff data |
handoff_complete | complete | Conversation completed successfully |
user_exit | terminated | User ended the session |
session_timeout | terminated | Session timed out due to inactivity |
host_terminated | terminated | Host ended the session (policy/error) |
Handoff Data
Whenreason is handoff_transaction, the brand agent SHOULD return an acp_handoff object in the termination response:
| Field | Type | Description |
|---|---|---|
checkout_url | uri | Brand’s ACP checkout endpoint. Hosts MUST validate this is HTTPS before opening (see Security Considerations). |
checkout_token | string | Opaque token to pass to the checkout endpoint. Correlates the SI session with the transaction. |
payload | object | Rich checkout context (product details, applied offers, pricing). Alternative to checkout_token for integrations that need structured data. |
expires_at | datetime | When this handoff data expires. Hosts SHOULD initiate checkout before this time. |
checkout_token or payload (or both) so the host can pass session context to the checkout endpoint.
Brand agents MAY also return a follow_up object with post-session context (e.g., summary of what was discussed, next steps).
Capability Negotiation
Negotiation Process
- Brand declares capabilities in SI manifest
- Host sends supported capabilities in session initiation
- Brand returns negotiated (intersection) capabilities in response
- Session uses only negotiated capabilities
Capability Categories
Modalities
Modalities define interaction modes:| Modality | Description | Required Support |
|---|---|---|
conversational | Text exchange | REQUIRED for all implementations |
voice | Audio-based interaction | OPTIONAL |
video | Video content playback | OPTIONAL |
avatar | Animated video presence | OPTIONAL |
conversational modality.
Standard Components
The following components MUST be renderable by all compliant hosts:| Component | Purpose |
|---|---|
text | Conversational message |
link | URL with label |
image | Single image |
product_card | Product display with CTA |
carousel | Array of cards/images |
action_button | CTA that triggers callback |
Extension Components
Hosts MAY support additional components:| Component | Purpose |
|---|---|
app_handoff | Platform-specific app handoff |
integration_actions | MCP/A2A installation prompts |
UI Element Requirements
Standard Component Data
Each standard component MUST include the required fields as defined insi-ui-element.json:
text: message (required)
link: url, label (required); preview (optional)
image: url, alt (required); caption (optional)
product_card: title, price (required); subtitle, image_url, description, badge, cta (optional)
carousel: items (required); title (optional)
action_button: label, action (required); payload (optional)
Action Handling
When a user interacts with anaction_button:
- The host MUST send an
action_responseviasi_send_message - The
action_responseMUST include theactionidentifier - The
action_responseSHOULD include thepayloadif provided
Integration Actions
Theintegration_actions component allows brand agents to offer persistent connections:
Identity and Privacy
Consent Requirements
Hosts MUST obtain explicit user consent before sharing identity with brand agents. The consent flow MUST:- Clearly identify what data will be shared
- Reference the brand’s privacy policy
- Allow the user to decline
Identity Object
When consent is granted, theidentity object MUST include:
consent_granted: trueconsent_timestamp- When consent was obtainedconsent_scope- Array of data types consented toprivacy_policy_acknowledged.brand_policy_url
user object MAY include:
emailnamelocaleshipping_address
Anonymous Sessions
If consent is not granted:identity.consent_grantedMUST befalseidentity.anonymous_session_idSHOULD be provided- No PII MUST be transmitted
Commerce Integration
ACP Handoff
Whensession_status is pending_handoff with handoff.type: "transaction":
- The host SHOULD initiate ACP checkout flow
- The
handoff.intentMUST describe the purchase intent - The
handoff.context_for_checkoutMAY include conversation context
Commerce Actions
Theaction_button component MAY include commerce actions:
| Action | Description |
|---|---|
acp_checkout | Initiate ACP checkout |
add_to_cart | Add item to persistent cart |
Error Handling
Error Response
Brand agents MUST return errors in theerrors array using the standard error schema:
Error Codes
SI uses both standard AdCP error codes and SI-specific codes: Standard AdCP error codes (fromenums/error-code.json):
| Code | Description |
|---|---|
SESSION_NOT_FOUND | Session ID is invalid, expired, or does not exist |
SESSION_TERMINATED | Session has been terminated and cannot accept further messages |
REFERENCE_NOT_FOUND | Generic fallback when the referenced SI offering, proposal, or other resource does not exist or is not accessible. Returned uniformly for both cases — see Uniform response for inaccessible references |
RATE_LIMITED | Too many requests |
SERVICE_UNAVAILABLE | Brand agent is temporarily unavailable |
| Code | Description |
|---|---|
offer_unavailable | Referenced offer is no longer available |
capability_unsupported | Required capability not available |
Security Considerations
Transport Security
All SI communications MUST use HTTPS with TLS 1.2 or higher.Token Security
- Availability tokens MUST be opaque and unpredictable
- Session IDs MUST be unique and unpredictable
- Tokens SHOULD expire within a reasonable timeframe
Handoff URL Validation
Hosts MUST validatecheckout_url in acp_handoff data before presenting it to users. Hosts SHOULD restrict to https scheme and MAY verify the domain matches the brand agent’s registered domain. Hosts MUST NOT open javascript:, data:, or other non-HTTPS URIs from handoff data.
Data Minimization
- Hosts MUST NOT send PII without consent
- Brand agents SHOULD minimize data collection
- Session data SHOULD be deleted after termination
Conformance
Host Conformance
A conformant SI host MUST:- Support MCP transport
- Render all standard components
- Implement session lifecycle (initiate, send, terminate)
- Obtain consent before sharing identity
- Support capability negotiation
Brand Agent Conformance
A conformant SI brand agent MUST:- Publish an SI manifest
- Support at least one specified transport
- Support conversational modality
- Return valid session IDs
- Handle all termination reasons
Version History
| Version | Date | Changes |
|---|---|---|
| 1.0.0 | 2025-01 | Initial specification |