A new field enables AI agents to express buyer intent in natural language — unlocking personalization without authentication.
When a human shops online, merchants personalize the experience based on browsing history, past purchases, and account preferences. But when an AI agent shops on behalf of a user, none of that context exists — the agent appears as a blank slate.
Without personalization signals, merchants return generic results. An agent searching for "shoes" gets the same results whether the user wants running shoes for a marathon or formal shoes for a wedding. This creates friction: more queries, more back-and-forth, worse outcomes.
The key insight: AI agents know things about user intent that don't require authentication to share. "Looking for a gift under $50" or "need something durable for outdoor use" are valuable signals that don't expose PII.
intent Field in ContextUCP's context object — which carries provisional buyer signals like location, currency, and postal code — now includes an optional intent field:
{
"context": {
"country": "US",
"currency": "USD",
"postal_code": "94043",
"intent": "looking for a gift under $50, something unique and handmade"
}
}
The intent field is a freeform string that describes the buyer's purpose. Unlike structured filters, it allows natural language expression of complex shopping goals.
The PR also clarifies that context signals "SHOULD be non-identifying" — addressing reviewer concerns about PII leakage in freeform fields. This means:
Originally proposed for catalog search, the intent field applies across the entire shopping journey:
GET /catalog/search?q=shoes
Context: { "intent": "need running shoes for trail running, wide fit" }
→ Merchant returns trail running shoes, prioritizes wide-fit options
POST /cart
Context: { "intent": "planning a camping trip next month" }
→ Merchant suggests related items: tent stakes, headlamp, camp stove
POST /checkout
Context: { "intent": "this is a gift, needs to arrive by Dec 24" }
→ Merchant highlights gift wrapping option, prioritizes expedited shipping
Today's e-commerce search is keyword-based. An agent might need to translate "something for my dad who likes fishing" into specific product queries. With intent, the agent can pass the natural language goal directly to the merchant, who can apply their own ML models for relevance.
Without intent, agents must iteratively refine searches based on results. With intent, merchants can factor in the full context upfront, returning better results on the first query.
Intent signals what the user wants without identifying who they are. This is crucial for privacy-conscious users who want personalization without account linking.
The change adds a single property to context.json:
"intent": {
"type": "string",
"description": "Background context describing buyer's intent
(e.g., 'looking for a gift under $50', 'need something durable
for outdoor use'). Informs relevance, recommendations,
and personalization."
}
The field is optional. Merchants that don't support intent simply ignore it. This makes it a non-breaking addition that platforms can adopt incrementally.
Intent can be refined throughout the session. An agent might start with a broad intent ("shopping for kitchen items") and narrow it as the user provides more context ("specifically looking for a stand mixer, KitchenAid preferred").
This commit pairs interestingly with the risk & abuse signals proposal. Together, they show UCP's approach to the personalization-vs-privacy tradeoff:
| Signal Type | Purpose | Identifying? |
|---|---|---|
intent |
Personalization, relevance | No (by design) |
signals.buyer_ip |
Fraud prevention, rate limiting | Potentially (device-level) |
signals.device_id |
Bot detection | Yes (device fingerprint) |
Intent is explicitly non-identifying. Risk signals are potentially identifying but optional. This gives platforms granular control over the privacy-utility tradeoff.