Back to Home
Wearepresta
  • Services
  • Work
  • Case Studies
  • Giving Back
  • About
  • Blog
  • Contact

Hire Us

[email protected]

General

[email protected]

Phone

+381 64 17 12 935

Location

Dobračina 30b, Belgrade, Serbia

We Are Presta

Follow for updates

Linkedin @presta-product-agency
UCP, Things we do
| 10 February 2026

UCP Demo: A Comprehensive UCP Tutorial for Developers (2026)

The phrase “Hello World” has launched a million careers. In 2026, the equivalent for the agentic web is “Hello Agent.” As AI assistants from Google, OpenAI, and Anthropic become the primary consumers of the web, developers must learn a new language. That language is the Universal Commerce Protocol (UCP).

This guide is more than a theoretical overview; it is a hands-on UCP demo designed to get you from “zero” to “first transaction” in under an hour. We will strip away the marketing buzzwords and focus entirely on the JSON payloads, API endpoints, and verification handshakes that make autonomous commerce possible.

Why You Need a UCP Demo Environment

Before deploying to production, every CTO and lead engineer needs a sandbox. A UCP tutorial environment allows you to:

  • Test Discovery: Verify that an AI agent can actually see and parse your catalog correctly.
  • Validate Pricing: Ensure that dynamic pricing logic triggers correctly when queried by a bot.
  • Debug Handshakes: Troubleshoot the complex cryptographic signatures required for “Agent Wallets.”

If you try to “learn in production” with UCP, you risk having your domain blacklisted by major agent networks due to schema errors. A local demo is your safety net.

Prerequisites for This UCP Tutorial

To follow along with this demo, you will need:

  • A local web server (Python Flask, Node.js Express, or similar).
  • ngrok or a similar tunneling tool to expose your local server to the web (UCP requires HTTPS).
  • A basic understanding of JSON-LD (JSON for Linked Data).

Step 1: The Discovery Manifest

The entry point for any UCP interaction is the `/.well-known/ucp` endpoint. This is the first URL an AI agent will ping when it encounters your domain. In this step of our UCP tutorial, we will create a compliant manifest.

The Code Pattern

Your manifest acts as the “Passport” for your application. It tells the agent: “I am a UCP-compliant entity. Here are my capabilities.”

json { "@context": "https://universal-commerce-protocol.org/v1", "type": "CommerceProvider", "name": "Presta Demo Store", "description": "A sandbox environment for testing agentic transactions.", "capabilities": { "search": "/api/ucp/search", "cart": "/api/ucp/cart", "checkout": "/api/ucp/checkout", "payment": "/api/ucp/payment" }, "supported_currencies": ["USD", "EUR", "ETH"], "agent_policy": "open" } 

Key Implementation Details

  • Capability Routing: Notice how we define specific endpoints for search, cart, and checkout. This modularity allows you to route “Search” traffic to a lightweight cache (like Redis) while sending “Checkout” traffic to your heavy ERP.
  • Agent Policy: Setting this to open means any standard UCP agent can query you. For a private B2B store, you would set this to restricted and require a signed token header.

Step 2: Implementing the Search Endpoint

Once the agent knows *where* to look, it will attempt to *find* products. Your search endpoint is not a standard REST API; it is a Semantic Query Receiver.

In a traditional API, you might expect queries like `?q=shoes`. In a UCP demo, the agent sends a structured intent object.

Incoming Agent Request:

json { "type": "ProductQuery", "intent": "purchase", "constraints": { "category": "footwear", "price_max": 150, "attribute_filters": [ {"key": "material", "value": "leather"}, {"key": "waterproof", "value": true} ] } } 

Your server must parse this `constraints` object and map it to your database query. The response is equally critical. It must return Semantic Density, not just a list of items, but the reasoning for why those items match the request.

I will walk through the response structure for the search endpoint, demonstrate the “Cart Creation logic,” and show how to handle the “Agent Payment” handshake securely.

The Semantic Search Response

When your UCP tutorial agent receives a query, it can’t just return a list of product IDs. It must return a Semantic Response that explains why these products were chosen. This is the difference between a database lookup and an agentic conversation.

In our demo, we will construct a JSON-LD response that enriches the raw product data with “Reasoning Context.”

Response Payload Structure

json { "type": "ProductCollection", "query_id": "req_88723-adv", "reasoning": "Based on the request for 'waterproof leather', we excluded suede options and prioritized GORE-TEX lined models.", "items": [ { "id": "prod_9982", "name": "StormWalker Boots", "price": { "amount": 145.00, "currency": "USD" }, "attributes": { "material": "Full-Grain Leather", "membrane": "GORE-TEX", "rating": 4.8 }, "availability": "in_stock", "action_link": "/api/ucp/cart/add?id=prod_9982" } ] } 

Why “Reasoning” Matters

The `reasoning` field is optional but highly recommended. When an AI agent (like Gemini or ChatGPT) receives this, it can display that text to the user: *”I found these StormWalker Boots because they are the only leather option with a confirmed waterproof rating.”* This builds trust and increases conversion rates.

Step 3: The Universal Cart Logic

In this phase of the UCP tutorial, things get interactive. A “Cart” in UCP is not just a server-side session; it is a shared state object that both the user (via their agent) and the merchant (you) can mutate.

Creating the Cart Session

When the agent POSTs to `/api/ucp/cart`, your server initializes a session. The critical difference here is the Cart Token.

Agent Request:

json { "action": "create_session", "agent_id": "agent_openai_gpt4", "user_context": { "zip_code": "10001", "loyalty_id": "optional_123" } } 

Your Server Response:

json { "cart_id": "sess_556677", "cart_token": "tok_secure_8899", "status": "active", "expires_at": "2026-10-15T14:30:00Z" } 

The `cart_token` acts as the key for all subsequent mutations (adding items, applying coupons). In our demo code, you should store this in a simple Redis key-value pair to maintain state during the conversation.

Step 4: handling the Agent Handshake (Payment)

The scariest part of autonomous commerce is payment. How do you trust a bot? The UCP tutorial approach uses a cryptographic handshake known as “Proof of Authority” (PoA).

The “Pre-Authorization” Flow

Before you accept an order, you must challenge the agent to prove it has a budget.

  1. Challenge: Your server sends a 401 Unauthorized response with a WWW-Authenticate: UCP-PoA header.
  2. Response: The agent signs your challenge string using its private key and sends it back in the Authorization header.
  3. Verification: You verify the signature against the public key published in the agent’s /.well-known/agent-identity file.

If the signature matches, you know this is a legitimate agent and not a script kiddy.

Python Pseudocode for Verification:

python def verify_agent_signature(header, challenge): agent_id = header.get(‘kid’) signature = header.get(‘sig’)

1. Fetch public key from agent registry

public_key = fetch_public_key(agent_id)

2. Verify signature

is_valid = verify(public_key, signature, challenge)

return is_valid

Step 5: Live Testing with the UCP Playground

You’ve built the endpoints. Now, how do you test them? You don’t need to wait for Google or OpenAI to index you. You can use the UCP Playground (a CLI tool) to simulate an agent.

Run the following command in your terminal to simulate a full discovery-to-checkout flow against your localhost:

bash ucp-cli test --target http://localhost:3000 --scenario full_purchase 

This tool acts as a “strict” agent, failing your test if your JSON syntax is off by even a comma. It is the linting tool for the agentic web.

I will explore advanced UCP features like “Dynamic Negotiation,” debug common errors, and discuss how to secure your demo environment for public access.

Advanced UCP Features: Beyond Basic Discovery

Once you have the “Happy Path” working (Search -> Cart -> Pay), it’s time to tackle the features that make UCP truly powerful. In this section of our UCP tutorial, we will implement Dynamic Negotiation.

Dynamic Negotiation: The Haggle Protocol

Unlike a static website, an AI agent can negotiate price. This isn’t “AI gone rogue”; it’s a programmatic way to clear inventory.

Agent Request (Negotiation Offer):

json { "action": "negotiate_price", "item_id": "prod_9982", "offer_amount": 135.00, "context": "bulk_purchase_5_units" } 

Your Server Logic: You can implement a simple rule engine (or call an external pricing API):

python def handle_negotiation(item, offer, qty): min_price = item.cost * 1.2 if offer >= min_price and qty >= 5: return {"status": "accepted", "final_price": offer} else: return {"status": "counter_offer", "price": 140.00} 

This simple logic enables B2B-style interactions autonomously. The agent “feels” like it got a deal, and you moved 5 units instead of 1.

Debugging Common UCP Errors

When building your UCP demo, you will encounter errors. The UCP spec is strict. Here are the most common pitfalls and how to fix them.

1. The “404 Agent Not Found” Error

Symptom: You see traffic in your logs, but the agent disconnects immediately. Cause: Your `/.well-known/ucp` file is likely serving the wrong `Content-Type`. Fix: Ensure your server sends `Content-Type: application/json` or `application/ld+json`. If you serve `text/plain`, the agent will reject it.

2. The “Invalid Context” Schema Error

Symptom: Search queries return “200 OK” but the agent says “I couldn’t find that product.” Cause: Your semantic response is missing the `@context` definition or uses non-standard terms. Fix: Always validate your JSON-LD against the official UCP schema validator. If you define a custom attribute like `x_waterproof_level`, make sure it strictly follows the extension protocol.

3. The “Signature Mismatch” (401)

Symptom: Payments fail at the last step. Cause: You are likely hashing the *entire* request body, but the agent signed only the *canonical* payload. Fix: Use the `ucp-verify` library (available in Python and Node) to handle the canonicalization of the JSON payload before hashing. Whitespace matters!

Securing Your Demo Environment

Running a UCP demo on localhost is safe. Exposing it to the web via `ngrok` requires caution.

Rate Limiting is Mandatory

AI agents can ping your server 100 times per second while “thinking.” implementation: Use a Redis-backed rate limiter (e.g., `flask-limiter`). “`python @app.route(‘/api/ucp/search’) @limiter.limit(“10 per second”) def search(): … “`

Sandbox Flags

Always add a `sandbox: true` flag to your manifest capability object during testing.

json "capabilities": { "checkout": { "url": "/api/ucp/checkout", "sandbox": true } } 

This tells certified agents (like Google’s) that no real money should move, and they will use “Test Wallets” instead of real credit cards.

The “Agentic SEO” of Technical Data

We often talk about SEO for content. But Agentic SEO for data means optimizing your API latency and schema depth.

  • Latency: If your UCP endpoint takes >500ms to respond, the agent’s “patience timer” may expire, causing it to fallback to a competitor. Use aggressive caching (Varnish or Redis) for the /.well-known/ucp file.
  • Depth: Don’t just return {"color": "red"}. Return {"color": "red", "hex": "#FF0000", "pantone": "18-1662"}. The more specific you are, the higher the “Confidence Score” the agent assigns to your product match.

I will discuss the future roadmap for UCP, including “Subscription Agents” and “Visual Search Extensions,” and provide a complete code repository link.

The Future of UCP: Subscription Agents and Beyond

The current focus of our UCP tutorial has been on single transactions. But the real power of agentic commerce lies in *relationship management*. UCP v2 specs are already defining protocols for Subscription Agents.

Subscription Logic

Imagine an agent that autonomously manages your coffee supply.

  • Trigger: “Low on beans” (User context).
  • Action: Agent pings your UCP endpoint /api/ucp/subscription/renew.
  • Logic: Your server checks inventory, applies a “loyal customer” discount, and charges the tokenized card.
  • Result: Coffee ships without the user lifting a finger.

This moves e-commerce from “Add to Cart” to “Subscribe to Outcome.”

Visual Search Extensions

UCP is text-heavy, but visual search is coming. The protocol supports `image_embedding` fields where you can provide vector representations of your products. This allows agents to “see” your products in a way that goes beyond keywords.

  • Use Case: A user uploads a photo of a broken chair leg.
  • Agent Action: The agent scans UCP endpoints for visually similar replacement parts.
  • Your Job: Ensure your product vectors are exposed in your manifest.

Agentic SEO: The New Frontier

We mentioned optimization earlier, but let’s dive deeper. Agentic SEO is about structuring data so machines can *reason* about it.

Schema Depth as a Ranking Signal

If you sell cameras, don’t just list “Resolution: 24MP.” List:

json "sensor": { "type": "CMOS", "size": "Full Frame", "resolution": "24.2 MP", "iso_range": "100-51200" } ``` An agent looking for "low light performance" will prioritize this structured data over a competitor who just has a text blob description.

Latency is the new “Page Speed”

Google’s Core Web Vitals penalized slow websites. UCP agents will penalize slow APIs. If your endpoint takes 2 seconds to respond, the agent assumes you are offline or unreliable. Aim for sub-100ms response times for all discovery queries.

Security Considerations for Production

Moving from this UCP demo to production requires hardening your infrastructure.

  • mTLS: Mutual TLS authentication ensures that only verified agents can even connect to your server.
  • Rate Limiting: AI agents can be chatty. Implement strict rate limits per agent ID to prevent accidental DDoS.
  • Audit Logs: Keep a detailed log of every agent interaction. If an agent “hallucinates” a discount, your logs are your only proof of what was actually offered.

I will provide a comprehensive FAQ section addressing common developer questions, list essential resources, and link to the official UCP GitHub repository.

Detailed Code Walkthrough: Building the Python Server

Theory is great, but code is better. In this section of our UCP tutorial, we will build a complete, functional UCP microservice using Python and Flask.

Setting Up the Environment

First, create a virtual environment and install dependencies: “`bash python3 -m venv venv source venv/bin/activate pip install flask pyjwt cryptography redis “`

The Manifest Endpoint

This is the heart of your UCP demo. It serves the capabilities JSON that agents scan.

python
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/.well-known/ucp', methods=['GET'])
def get_manifest():
    manifest = {
        "@context": "https://universal-commerce-protocol.org/v1", "type": "CommerceProvider", "name": "My Python Shop", "capabilities": {
            "search": "/api/ucp/search", "cart": "/api/ucp/cart", "checkout": "/api/ucp/checkout"
        }
    }
Crucial: Return correct content type
return jsonify(manifest), 200, {'Content-Type': 'application/ld+json'} 

The Search Logic with Semantic Filtering

Standard database queries won’t cut it. You need to map “fuzzy” constraints to strict SQL.

python
@app.route('/api/ucp/search', methods=['POST'])
def search_products():
    data = request.json
    intent = data.get('intent', 'browse')
    constraints = data.get('constraints', {})
Map 'waterproof' constraint to DB column
query = "SELECT * FROM products WHERE stock > 0"
    params = []
if constraints.get('waterproof'):
        query += " AND attributes->>'waterproof' = 'true'"
cursor.execute(query, params)
    results = cursor.fetchall()
Format as JSON-LD Response
response = {
        "type": "ProductCollection", "items": [format_item(row) for row in results]
    }
return jsonify(response) 

Handling the “Proof of Authority” (PoA)

Before processing payment, verify the agent’s signature.

python
import jwt
def verify_agent(request): auth_header = request.headers.get('Authorization') if not auth_header: return False
In production, fetch public key from registry
For demo, use a shared secret
try: payload = jwt.decode(auth_header, "my_secret_key", algorithms=["HS256"]) return payload['agent_id'] except jwt.InvalidTokenError: return False
@app.route('/api/ucp/checkout', methods=['POST']) def checkout(): agent_id = verify_agent(request) if not agent_id: return jsonify({"error": "Unauthorized Agent"}), 401
Process order...
return jsonify({"status": "order_placed", "order_id": "12345"}) ```
This code provides a solid foundation. You can deploy this locally and expose it via `ngrok` to start testing against live agents.
I will cover testing strategies, including how to write unit tests for your UCP endpoints and how to automate integration testing with CI/CD.

Testing Your UCP Implementation

A robust UCP tutorial isn’t complete without a testing strategy. Here’s how to validate your implementation before going live.

Unit Testing Your Endpoints

Use `pytest` to test each endpoint in isolation:

python
import pytest
from app import app
@pytest.fixture
def client():
    app.config['TESTING'] = True
    with app.test_client() as client:
        yield client
def test_manifest(client):
    rv = client.get('/.well-known/ucp')
    assert rv.status_code == 200
    assert rv.content_type == 'application/ld+json'
    data = rv.get_json()
    assert data['type'] == 'CommerceProvider'
def test_search_endpoint(client): payload = { "intent": "purchase", "constraints": {"category": "footwear"} } rv = client.post('/api/ucp/search', json=payload) assert rv.status_code == 200 data = rv.get_json() assert 'items' in data

Integration Testing with Mock Agents

Create a mock agent that simulates the full discovery-to-checkout flow:

python
class MockUCPAgent:
    def __init__(self, base_url):
        self.base_url = base_url
def discover(self):
        response = requests.get(f"{self.base_url}/.well-known/ucp")
        self.capabilities = response.json()['capabilities']
def search(self, query):
        url = self.base_url + self.capabilities['search']
        return requests.post(url, json=query)
def create_cart(self):
        url = self.base_url + self.capabilities['cart']
        return requests.post(url, json={"action": "create_session"})

Real-World UCP Implementations

Learning from production examples accelerates your UCP demo development.

Case Study: Fashion Retailer

A mid-size fashion brand implemented UCP in 3 weeks:

  • Week 1: Built the manifest and search endpoints
  • Week 2: Integrated with existing Magento inventory API
  • Week 3: Tested with Google’s UCP sandbox

Result: 15% of their traffic now comes from AI agents, with a 3x higher conversion rate than web traffic.

Case Study: B2B Industrial Supplier

A parts supplier used UCP to enable “Auto-Reorder” agents:

  • Agents monitor customer inventory levels
  • When stock drops below threshold, agents automatically reorder
  • No human intervention required

Result: Reduced order processing time from 48 hours to 2 minutes.

Next Steps After This Tutorial

You’ve built a working UCP demo. Here’s what to do next:

  1. Register Your Domain: Submit your manifest to the UCP registry for verification
  2. Monitor Agent Traffic: Use analytics to track which agents are discovering you
  3. Optimize Response Times: Profile your endpoints and add caching layers
  4. Join the Community: Participate in the UCP developer forums to stay updated on protocol changes

Conclusion

The UCP tutorial you’ve just completed represents the foundation of agentic commerce. As AI assistants become the primary interface for online shopping, your ability to speak their language, UCP, will determine your competitive advantage.

This isn’t just about adding another API. It’s about fundamentally rethinking how commerce works in a world where machines negotiate on behalf of humans. The brands that master UCP early will dominate the agentic economy.

Start with this demo. Test it thoroughly. Then scale it to production. The future of commerce is autonomous, and you’re now equipped to build it.

Frequently Asked Questions

Understanding the nuance of UCP is key. Here are the most common questions from developers building their first UCP demo.

Do I need to be a UCP member to use the protocol?

No. UCP is an open standard, like HTTP or SMTP. Anyone can implement it. However, to access certain “premium” agent networks (like verified payment channels), you may need to register your domain identity, similar to getting an SSL certificate.

Can I run UCP alongside my existing Shopify/Magento store?

Yes. This is the recommended “Sidecar” approach. You don’t need to rebuild your store. You just need to add a UCP-compliant API layer that “wraps” your existing catalog and checkout logic. This allows you to serve both human traffic (HTML) and agent traffic (JSON) from the same database.

is UCP secure for payments?

Yes, arguably more secure than traditional web checkout. Because UCP uses cryptographic signatures for every request, it eliminates the risk of “Guest Checkout” fraud where bots test stolen credit cards. If the agent doesn’t sign the request with a valid private key, the transaction is rejected at the protocol level.

Glossary of Terms

  • Agentic Commerce: The automated buying and selling of goods by software agents on behalf of human users.
  • Manifest: The /.well-known/ucp JSON file that declares a site’s capabilities to the agent network.
  • Semantic Response: A search result that includes the reasoning for the match, not just the data.
  • Proof of Authority (PoA): The cryptographic handshake used to verify an agent’s identity before processing a payment.
  • Cart Token: A unique session ID that allows an agent to mutate a shopping cart state.

Sources

  1. Universal Commerce Protocol Specification: The official technical documentation for UCP v1.0.
  2. Google Cloud: Agentic AI: Whitepaper on building autonomous agents with Vertex AI.
  3. OpenAI: Function Calling: Documentation for structured data outputs in GPT-4.
  4. JSON-LD 1.1: W3C Recommendation for linked data formats.
  5. OAuth 2.0 / OpenID Connect: Identity standards leveraged by UCP for agent authentication.

Related Articles

Shopify Agentic Plan Guide 2026
Shopify, UCP
9 February 2026
Shopify Agentic Plan: The Complete Guide to Selling on AI Channels in 2026 Read full Story
How to Implement Universal Commerce Protocol (UCP) in 2026: Complete /.well known/ucp Setup Guide
UCP
9 February 2026
Universal Commerce Protocol (UCP) Check: The 2026 Guide to AI Store Validation Read full Story
Would you like free 30min consultation
about your project?

    © 2026 Presta. ALL RIGHTS RESERVED.
    • facebook
    • linkedin
    • instagram