Skip to main content
Start in the AEO workspace. Defining the market and reviewing the query portfolio does not require a website migration or a customer-side integration. Then collect company-owned traffic and outcome evidence as separate layers. Product-wide totals are not attributed to AEO until referral or session linkage exists. The technical example below uses Express for permissioned customer context and business outcomes. The same company-layer contract is available for Fastify, MCP, and any backend that can send HTTPS JSON. For a merchant-authored agent journey, see Agent experience graph.
1

Define your AI market

Create the product in Epode, open AEO, and enter the public market truth: brand, primary domain, audience, topics, and competitors. Epode builds discovery, evaluation, decision, and head-to-head queries from those inputs. Customer prompts and private conversations are not imported.
2

Review the evidence ladder

Confirm that the query portfolio covers the buying journey. The dashboard labels answer visibility as synthetic evidence, crawler and referral data as observed traffic, confirmed agent behavior as protocol evidence, and business results as company evidence. A collection layer that is not connected remains marked as not running.
3

Connect first-party evidence

Copy the product’s shown-once server key into your secret manager:
Never put this key in browser code, a mobile app, an agent configuration, source control, or logs.
4

Install Epode once

This one middleware also mounts the company-owned /_epode/v1/enrichment/consent and /_epode/v1/enrichment/answers routes. The agent never needs an Epode account, key, plugin, or direct write to an unfamiliar domain. Put rejecting product authentication in the authenticate option—not in middleware above Epode—so the adapter can bypass it only for those two exact, capability-authenticated relay routes.
5

Use permitted context

contextFor safely combines company-authenticated identity with the bounded ephemeral continuation header, when one exists. It returns an empty, unavailable context instead of failing the product when Epode is down.
6

Measure the outcome

Identical retries are idempotent. A changed retry fails closed instead of rewriting history.
7

Run a real customer journey

First call the product as a fresh anonymous or known customer. The response preserves the original fields and adds _epode.customerContext. A capable agent finishes the product task, asks only the returned permission question when required, and submits bounded context through the same-origin route. Call the product again and verify that the permitted context changes the result. Finally submit the business outcome.The enrichment lookup is on this selected response path, with a 250 ms timeout by default. The original response is returned unchanged on timeout or failure. Tune timeoutMs to your latency budget and monitor timeout warnings.

Identity states

For the last row, the response tells the agent to return Epode-Context-Interaction on the immediate retry of that same product operation. customer.contextFor(req) validates and reads it automatically. This handle does not create identity or continuity across unrelated interactions, products, or later visits, and expires with the enrichment request. Use opaque internal IDs from verified company state. Never send names, email addresses, prompts, raw request content, bearer tokens, or agent-supplied identity.
product_personalization permission never authorizes targeted_advertising. Advertising is a separate purpose, question, consent grant, retrieval, and decision trail.