Experimental. Sponsored Intelligence (
si_get_offering, si_initiate_session, si_send_message, si_terminate_session) is part of AdCP 3.0 as an experimental surface — it may change between 3.x releases with at least 6 weeks’ notice. Sellers implementing any of these tasks MUST declare sponsored_intelligence.core in experimental_features. See experimental status for the full contract.When to Use This Task
There are two valid flows for starting an SI session:Flow A: Pre-Session Lookup (Recommended for Sponsored Results)
offering_token bridges what was shown into the session, so references like “the second one” work.
Example: Search results page shows “Nike has 3 running shoes in your size from $89” before the user decides to engage.
Flow B: Direct Session
si_get_offering is for anonymous pre-consent previews. If you’re going straight into a session, skip it.
Purpose
The offering lookup serves three purposes:- Show offering details - Display pricing, availability, and descriptions to users before consent
- Surface matching products - When given an
intent, return relevant products from the offering - Session continuity - The returned token preserves what was shown, so the brand agent knows what the user already saw when the session starts
Request
| Field | Type | Required | Description |
|---|---|---|---|
offering_id | string | Yes | Offering identifier from the catalog |
intent | string | No | Natural language description of user intent for personalized results (no PII) |
include_products | boolean | No | Whether to include matching products (default: false) |
product_limit | integer | No | Max products to return (default: 5, max: 50) |
context | object | No | Opaque correlation data echoed unchanged in the response |
Privacy
This request must not include any personally identifiable information. Theintent field describes what the user is looking for but must be anonymous (e.g., “mens size 14 near Cincinnati” is OK, but email addresses are not).
Response
| Field | Type | Description |
|---|---|---|
available | boolean | Whether the offering is currently available |
offering_token | string | Token to pass to si_initiate_session |
ttl_seconds | integer | How long this information is valid |
checked_at | string | ISO 8601 timestamp of the lookup |
offering | object | Offering details |
matching_products | array | Products matching the intent (if requested) |
sponsored_context | object | Sponsored-context declaration for the returned offering and matching-products package |
total_matching | integer | Total products matching (may exceed returned count) |
unavailable_reason | string | Why offering is unavailable (if not available) |
alternative_offering_ids | array | Alternative offerings to check |
Offering Object
| Field | Type | Description |
|---|---|---|
offering_id | string | Offering identifier |
title | string | Offering title |
summary | string | Brief description |
tagline | string | Short promotional tagline |
expires_at | string | When the offering expires |
availability_status | string | Machine-readable availability state (enum: available, limited, sold_out, expired, region_restricted, inactive). Optional; aligns to the Unavailable Reasons vocabulary below. |
price_hint | string | Price indication (e.g., “from $89”) |
image_url | string | Hero image URL |
landing_url | string | Landing page URL |
Matching Product Object
| Field | Type | Description |
|---|---|---|
product_id | string | Product identifier |
name | string | Product name |
price | string | Display price |
original_price | string | Original price if on sale |
image_url | string | Product image URL |
availability_summary | string | Brief availability info |
availability_status | string | Machine-readable availability state (same enum as the offering field). Optional; structured counterpart to availability_summary. |
url | string | Product detail page URL |
Sponsored Context Object
When the returned offering ormatching_products are sponsored context entering the host boundary, include sponsored_context at the response level. It applies to the returned package as a whole:
| Field | Type | Description |
|---|---|---|
paying_principal | object | Brand economically accountable for the sponsored context, with optional seller account/operator context |
context_use | string | Declared host-side use mode: presentation_only, comparison_set, or reasoning_context |
disclosure_obligation | object | Disclosure the host must either accept and satisfy or reject before using the context |
context_use: "comparison_set" when matching_products are a sponsored candidate set for comparison, ranking, or selection. Use presentation_only for a distinct sponsored unit or handoff, and reasoning_context only when the context is intended to be available to host answer generation, planning, ranking, or other reasoning. Hosts that accept the package can include sponsored_context_receipt on the subsequent si_initiate_session request so the audit trail links the paying principal, declared use mode, disclosure obligation, and host receipt.
Unavailable Reasons
| Reason | Description |
|---|---|
sold_out | Product/offering inventory exhausted |
expired | Offering past its end date |
region_restricted | Not available in user’s region |
inactive | Campaign paused or ended |
Examples
Basic Offering Lookup
Response
With Product Context
Response with Products
“Nike has 12 running shoes in your size starting at $89. Want to explore with their assistant?”
Response with Sponsored Context
Unavailable Response
Using the Offering Token
Theoffering_token is the key to session continuity. When a user sees products from si_get_offering and then initiates a conversation, the token allows the brand agent to know exactly what was shown.
Why Session Continuity Matters
Without the token, this conversation breaks:How Brand Agents Should Use Tokens
When generating anoffering_token, store the full query state server-side:
si_initiate_session:
Including the Token in Session Initiation
When initiating a session after getting offering details, include the token:sponsored_context and the host accepted it, the host can also include a receipt:
accepted_context_use must match the original context_use, and disclosure_commitment.status must be accepted when the declaration required disclosure. If the host cannot honor either condition, it rejects the sponsored context instead of sending an accepted receipt. A rejected receipt may still be sent to make the rejection audit-visible, but it must omit accepted_context_use and disclosure_commitment.
Key Points
- Anonymous by design - No user data is sent with offering lookups. This protects user privacy while enabling hosts to show rich previews.
- Session continuity - The offering token is the brand’s memory of what was shown. When users reference “the first option” or “that blue one”, the token lets the brand agent resolve those references.
-
Product matching - When
include_productsis true andintentis provided, brands can return relevant products. This powers pre-session previews like “12 shoes in your size from $89.” -
Sponsored context accountability -
sponsored_contextdeclares the paying principal, intended use mode, and disclosure obligation for returned sponsored context. Hosts that accept it should record asponsored_context_receipt. -
Caching - Hosts may cache responses for up to
ttl_seconds. This reduces load on brand agents for frequently checked offerings. - Graceful degradation - If the lookup fails or times out, hosts may still initiate sessions directly. The offering lookup is optional.
-
Alternative suggestions - When offerings are unavailable, brand agents may suggest alternatives via
alternative_offering_ids.
Best Practices
For Hosts
- Get offering details before showing sponsored results to users
- Use
include_productswith anintentfor richer previews - Honor or reject
sponsored_contextbefore using matching products for presentation, comparison, or reasoning context - Retain a receipt linking
paying_principal,context_use, disclosure obligation, and host acceptance - Respect TTL for caching to avoid stale data
- Handle unavailable gracefully - don’t show expired offerings
- Include offering token in session initiation when available
For Brand Agents
- Return rich
offeringdetails to help hosts display accurate information - Support
include_productsfor contextual product matching - Attach
sponsored_contextwhen returned products or offering details are sponsored context entering the host boundary - Use reasonable TTL values (e.g., 5-60 minutes depending on volatility)
- Provide helpful
unavailable_reasonfor debugging - Suggest alternatives when primary offering is unavailable