/

Partnerships

How to Implement UCP: The Native Build and Integrating via Rye

Sophia Willows

Head of Engineering @ Rye

9 minutes read

A merchant's scoping guide for two paths to agentic-commerce coverage — implementing UCP natively, or integrating via Rye. The build steps and tradeoffs of each.

TL;DR / Key Takeaways

  • Universal Commerce Protocol is an open standard for AI agents and merchants to transact. It defines two participants — businesses (typically merchants) and platforms (AI agents and their host applications) — and five capabilities: Checkout, Cart, Catalog, Order, and Identity Linking. The current spec version is 2026-04-08; UCP uses date-based versioning.

  • Native UCP implementation, on the merchant side, is twelve discrete build steps: a signed /.well-known/ucp profile, RFC 9421 signing infrastructure, JSON Schema 2020-12 authorship per capability, the capability intersection algorithm, server implementations of Catalog/Cart/Checkout/Payment Handlers/Order, a full OAuth 2.0 authorization server if Identity Linking is declared, the continue_url or Embedded Checkout handoff, and ongoing operational discipline.

  • Integrating via Rye runs through one of two onboarding paths depending on the merchant's stack. Non-Shopify merchants sign a commercial agreement with Rye (covering commissions and terms) and allowlist the Rye Agent in their security platform — Rye then uses the merchant's existing website as-is, no code change. Shopify merchants install the Rye Sales Channel app and configure commissions and visible products in-product. Both paths support optional developer gating — merchants can restrict which developers in Rye's network can transact with their products.

  • Both paths have real tradeoffs. Native UCP gives the merchant direct AI-surface relationships, full visibility into agent behavior, full ownership of the agent-facing schema, and no commission relationship — at the cost of building and operating a protocol surface. Integrating via Rye gives broader immediate agent reach (including agents that don't speak any protocol) through a single integration — at the cost of not being a named UCP participant in the spec's discovery model and having the agent-facing contract be Rye's API surface rather than the merchant's own UCP profile.

  • This post scopes both paths. The right call depends on the merchant's engineering capacity, agentic-commerce strategy, and willingness to be the named UCP participant versus integrating through a commerce layer.

  • For the protocol primer ("what is UCP, what is ACP, what is Universal Checkout"), read What Is Agentic Checkout? Definition, How It Works & Why It Matters in 2026.

What UCP Is, in One Section

Universal Commerce Protocol is an open standard for AI agents to discover, transact with, and follow up after a purchase from any merchant. It defines a set of five capabilities — Checkout (dev.ucp.shopping.checkout), Cart, Catalog, Order, and Identity Linking (dev.ucp.common.identity_linking). Agents discover what a merchant supports by fetching /.well-known/ucp, computing the capability intersection, and then calling the declared endpoints over the merchant's chosen transport: REST, MCP, A2A, JSON-RPC, or the Embedded Protocol.

Three properties of UCP shape the rest of the implementation surface:

  1. UCP defines two roles: businesses and platforms. Businesses are typically merchants exposing products and accepting checkouts. Platforms are AI agents and the host applications they run in. Both publish profiles at /.well-known/ucp, both sign their requests and responses, and the capability intersection is negotiated between them. The rest of this post scopes the implementation surface on the business (merchant) side.

  2. Signing and schema discipline are spec-mandated. Every UCP response is signed per RFC 9421 (HTTP Message Signatures). Every payload validates against a JSON Schema 2020-12 document the merchant authors and hosts. Webhooks MUST be signed end-to-end.

  3. The spec uses date-based versioning. The current version is 2026-04-08. New revisions ship on a regular cadence; merchants migrate forward on their own schedule, within the spec's compatibility guarantees.

For the protocol primer and how UCP compares to ACP and Universal Checkout, read What Is Agentic Checkout? Definition, How It Works & Why It Matters in 2026. The rest of this post is engineering scoping for merchants.

The Native UCP Build, Step by Step

Twelve build steps from zero to a UCP-compliant merchant surface.

1. Publish /.well-known/ucp

The discovery profile. A signed JSON document at https://merchant.example/.well-known/ucp that declares which capabilities the merchant supports, where each capability is hosted, which transports it accepts, the merchant's public signing keys (in JWK format under signing_keys), and the payment handlers it advertises.

Spec-mandated operational properties:

  • HTTPS only. All UCP communication MUST occur over HTTPS.

  • Caching. Minimum 60-second TTL, Cache-Control: public.

  • No redirects. Profile endpoints MUST NOT use 3xx responses.

The profile is the source of truth for what agents will call. It stays current as the merchant adds capabilities, rotates keys, or changes transports.

2. Stand Up RFC 9421 Signing Infrastructure

Every UCP response is signed with HTTP Message Signatures (RFC 9421). The merchant generates and rotates signing keys, publishes the public keys in the profile's signing_keys array, and signs every outbound response with Signature, Signature-Input, and Content-Digest headers.

Key rotation is coordinated across every UCP-serving service. The rotation window has to be long enough that in-flight agent calls can still verify the previous key.

3. Author JSON Schema Documents Per Capability

UCP uses JSON Schema 2020-12 for every payload. The merchant authors, hosts, and versions a schema document per declared capability. Schemas have to be reachable, valid 2020-12, and consistent with the actual server response — agents validate strictly, and the platform validates that the spec URI's origin matches the namespace authority (a security primitive the spec calls "namespace validation").

A typed catalog payload alone — product, variants, options, eligibility filters, availability, regulatory metadata — is often hundreds of fields, all of which the schema commits to.

4. Implement the Capability Intersection Algorithm

UCP uses a server-selects architecture for capability negotiation. When an agent connects, the merchant computes the intersection of platform-declared and business-supported capabilities through a defined algorithm:

  1. Match capabilities by name; select the highest mutually-supported version

  2. Prune extensions whose parent capabilities are absent

  3. Repeat until the set is stable

  4. Return the active capabilities in the response's ucp.capabilities object

The intersection shapes everything the agent attempts next. It also handles the merchant's evolution over time — capability additions, deprecations, version migrations.

5. Implement the Catalog Capability

Catalog covers two operations: dev.ucp.shopping.catalog.search and dev.ucp.shopping.catalog.lookup. Search returns matching products against an agent's query; Lookup returns the full product object for a specific product ID. Both are signed, both validate against the merchant's catalog schema, and both handle:

  • Product variants with full option matrices and per-variant availability

  • Real-time pricing — session-specific; the spec says catalog responses SHOULD NOT be reused across sessions without re-validation

  • Eligibility filters (age-gated, regulated, region-restricted) via context.eligibility claims

  • Media (images, video, optional 3D)

Catalog responses are explicitly not transactional commitments. Checkout is authoritative — pricing or availability can shift between catalog read and checkout creation.

6. Implement the Cart Capability

Cart is four operations: Create, Get, Update, Cancel. The merchant persists carts server-side, returns the full cart resource on every operation, and handles edge cases — out-of-stock items, eligibility shifts, optional expiry via the expires_at field.

Two spec requirements worth noting:

  • Full-replacement updates. Update is a full replacement of the cart resource, not a patch. The platform sends the entire cart; the merchant replaces existing state.

  • Cart-to-checkout idempotency. If an incomplete checkout already exists for a cart_id, the merchant MUST return the existing checkout session rather than create a new one.

There is no Delete operation. Cancel is the removal mechanism.

7. Implement the Checkout State Machine

The Checkout capability runs as a state machine over five REST operations on /checkout-sessions:

Operation

Method

Path

Create

POST

/checkout-sessions

Get

GET

/checkout-sessions/{id}

Update

PUT

/checkout-sessions/{id}

Complete

POST

/checkout-sessions/{id}/complete

Cancel

POST

/checkout-sessions/{id}/cancel

Three explicit states are defined in the spec: incomplete, ready_for_complete, and completed. A fourth — canceled — is implied by the /cancel operation.

State transitions handle address validation and normalization, real-time shipping calculation, real-time tax calculation, discount eligibility, payment handler selection, and final eligibility checks (region, age, regulated goods). The merchant returns a totals array on every response with the line-item-level breakdown (subtotal, tax, shipping, total).

The error model is two-tier:

  • Protocol errors surface as HTTP status codes (401, 403, 409, 429, 503)

  • Business outcomes return HTTP 200 with a messages array — each message carrying type, code, path, and severity (recoverable or unrecoverable)

For flows that can't complete headlessly — 3DS, captcha, age verification, ID upload — the response includes a continue_url. This is the merchant's existing checkout page.

8. Implement Payment Handlers

UCP doesn't process payments itself. It declares which payment handlers a merchant accepts — by reverse-DNS handler ID — and the merchant implements the server-side hooks for each declared handler. Spec-referenced handler IDs:

  • com.google.pay

  • dev.shopify.shop_pay

Each handler is its own integration with the merchant's PSP. The merchant advertises the handler in ucp.payment_handlers with its configuration; the platform supplies tokenized credentials. Token exchange, 3DS handling, refund flows, dispute response — per handler, per PSP relationship.

Payment handler implementation is selective. The merchant implements only the handlers it declares; undeclared handlers are unavailable.

9. Implement the Order Capability

Post-purchase. The merchant pushes order lifecycle updates to the platform via signed webhooks. Order covers two surfaces:

Fulfillment events — append-only is preferred per the spec ("Businesses SHOULD append new entries rather than mutating existing ones; append-only ledger is preferred"). Event type is an open string. Spec-listed examples: processing, shipped, in_transit, delivered, failed_attempt, canceled, undeliverable, returned_to_sender. Required fields per event: id, occurred_at, type, line_items.

Adjustments — for refunds, returns, credits, price changes, disputes, cancellations. Adjustments support in-place mutation as a fallback for businesses that don't maintain adjustment history ("MAY perform in-place updates").

Webhook payloads MUST be signed per RFC 9421. Retry semantics are at-least-once — the merchant MUST retry failed webhook deliveries. The spec does not currently mandate an idempotency-key mechanism, so the platform's redelivery handling is the operational guarantee.

The Order capability covers post-confirmation lifecycle only. "Placed" and "paid" are implicit in a successful Checkout /complete call — they are not Order events.

10. Stand Up an OAuth 2.0 Authorization Server

Identity Linking requires a full RFC 6749 OAuth 2.0 server using the Authorization Code flow. No delegated or federated alternative is in the spec.

The merchant hosts the standard endpoints:

  • Authorization endpoint

  • Token endpoint (with enforced client authentication)

  • Revocation endpoint per RFC 7009

Discovery follows OAuth's own standard — the merchant publishes endpoint locations at /.well-known/oauth-authorization-server per RFC 8414.

Scopes map to capability operations. The spec example: ucp:scopes:checkout_session grants access to all CheckoutSession operations (Get, Create, Update, Cancel, Complete). The merchant's consent UI is the merchant's responsibility — the spec advises hiding scope complexity behind general consent language rather than enumerating per-operation rows.

Merchants that already operate an OAuth server for their own apps can extend scopes into it. Merchants that don't are building a full identity platform.

11. Decide the Embedded vs. Continue-URL Handoff

For flows that can't complete headlessly — 3DS, captcha, age verification, OAuth consent — the merchant either redirects the user to its existing checkout via continue_url or, if it advertises the embedded transport, lets the agent embed the merchant's existing checkout UI directly in an iframe/webview.

What the merchant ships here:

  • No new pages for the embedded path. Embedded Checkout reuses the merchant's existing checkout at the continue_url. The merchant declares support by advertising the embedded transport in its profile, and the agent loads the URL with ec_* query parameters (ec_version, ec_auth, ec_delegate, ec_color_scheme).

  • A handshake on load. The merchant's embedded checkout sends an ec.ready message confirming which delegations it accepted; subsequent state changes (ec.start, ec.line_items.change, ec.complete, etc.) fire to the host.

  • A new OAuth consent page if Identity Linking is declared. The merchant needs an agent-facing consent page if it doesn't already have one for its existing apps.

12. Operational Discipline

Once the eleven preceding steps are shipped, ongoing operational requirements:

  • Profile caching. 60-second minimum TTL, Cache-Control: public, no redirects.

  • Rate limits per agent, per capability, per endpoint.

  • Schema fidelity audits as the storefront evolves.

  • Versioned capability migration — UCP ships date-based revisions; the merchant migrates forward.

  • Signing key rotation cadence.

  • Webhook delivery SLOs and retry monitoring.

  • Unidirectional credentials discipline. Credentials flow Platform → Business only; businesses MUST NOT echo credentials back.

  • Agent behavior monitoring — which agents are calling, at what cadence, with what error rates.

What the merchant gets

Agents that adopt UCP discover the merchant via /.well-known/ucp, negotiate capabilities, and transact directly against the merchant's signed endpoints. The merchant is a named UCP participant in the spec's discovery model, owns the agent-facing schema (a JSON Schema 2020-12 contract the merchant evolves on the spec's revision cadence), has full visibility into agent calls on its own infrastructure, and has no commission relationship layered into the agent flow.

The Rye Path, Step by Step

Every Rye integration starts with a conversation. Email carrie@rye.com to align on commission terms, scope, and the right onboarding path. From there, the technical onboarding depends on the merchant's stack.

Path A — Non-Shopify merchants

1. Sign a commercial agreement with Rye.

The commercial agreement covers commission terms, scope of access, and the merchant's relationship with Rye. This is where commission rate and any developer-gating defaults get set.

2. Allowlist the Rye Agent in your security platform.

A configuration change in the merchant's bot detection / WAF (Cloudflare, Akamai, or similar) to allow Rye Agent traffic to reach the storefront. This is the technical opt-in.

Rye uses the merchant's existing website as-is — checkout flow, pricing, inventory, and payment processor are unchanged. No code change on the merchant side. Real-time pricing, shipping, tax, and availability come from the live checkout flow.

Path B — Shopify merchants

1. Install the Rye Sales Channel app.

The app installs from the Shopify App Store. The merchant retains full control of fulfillment and the customer record.

2. Configure commissions and visible products in-product.

Set the commission rate. Choose which products are visible to Rye's network. The merchant's full catalog, pricing, inventory, and order webhooks flow through the integration.

Both paths: optional developer gating

By default, merchants integrated with Rye are accessible to every developer in Rye's network. A merchant that wants to limit access — only allow specific developers to transact with their products, for example — can gate that through developer allowlist controls. Admission policy is the merchant's.

What the merchant gets

Agents built on Rye get agent-facing capabilities — product lookup, cart, checkout, post-purchase order events — against the merchant's products without the merchant implementing a protocol surface. The merchant's existing website (Path A) or storefront (Path B) is the source of truth; Rye is the integration layer between agents and the merchant.

What Integrating via Rye Changes

Both Rye paths change the shape of the merchant's surface relative to native UCP in ways worth naming explicitly:

  • A commercial relationship. Both paths involve a commission-based agreement — set in the commercial agreement for non-Shopify, in the Sales Channel app for Shopify. Native UCP imposes no commission structure at the spec level; economics are between the merchant and the AI surfaces or any other intermediary the merchant integrates with directly.

  • Not a named UCP participant. The merchant's agent-facing surface lives behind Rye's API. The merchant doesn't operate an independent UCP profile and doesn't appear in the spec's discovery model. AI surfaces that consume Rye see Rye as the named UCP participant.

  • Agent-facing schema is Rye's. Native UCP gives the merchant a JSON Schema 2020-12 contract it authors and owns. Via Rye, the agent-facing contract is Rye's API surface — the merchant doesn't define the schema agents see.

  • Order observability granularity. The merchant sees its own orders through Rye's webhooks. Granular agent-traffic data — which agents called, error rates, attempt cadence at the protocol level — sits on Rye's side of the integration.

  • Vendor coverage dependency. The merchant's reach into the agentic-commerce ecosystem is a function of Rye's network and integrations — not the merchant's own protocol surface.

  • Migration cost between paths. A merchant that integrates via Rye and later decides to ship native UCP starts from zero on the protocol surface. The two paths share no engineering output.

Side-by-Side Comparison

Dimension

Native UCP

Integrating via Rye

Time to first agent transaction

Depends on existing infrastructure (OAuth, signing, webhook tooling), engineering capacity, and priority — see FAQ for the variables

Days to weeks (commercial agreement + allowlist for non-Shopify; Sales Channel install for Shopify)

Engineering work on the merchant side

Engineering team building twelve spec capabilities; scope depends on starting point and existing infrastructure

None for Path A (allowlist is a security-platform config change); Shopify App install for Path B

Schema authorship

Author + host JSON Schema 2020-12 per capability

Rye's API contract is the surface agents see

RFC 9421 signing infrastructure

Implementation + key rotation + public-key publication

Rye signs its own requests; merchant doesn't operate RFC 9421

OAuth 2.0 authorization server

Required for Identity Linking

Not required for the Rye integration

Hosted web surface for non-headless flows

continue_url to existing checkout; declare embedded transport if used; merchant hosts OAuth consent

Rye handles agent navigation against the merchant's existing checkout (Path A) or via the Sales Channel integration (Path B)

Payment handlers

Per declared handler, per PSP relationship

Existing merchant payment stack used as-is

Order event log

Append-only preferred, signed webhooks per RFC 9421, at-least-once retry

Order webhooks fired through Rye

Profile + operational surface

Profile caching, rate limits, namespace validation, key rotation, versioned migration, agent monitoring

Operational surface handled by Rye

Direct relationships with AI surfaces (Google, OpenAI, Anthropic)

Yes — merchant is a named UCP participant

Indirect, through Rye

Visibility into agent behavior (calls, errors, cadence)

Full — every agent call surfaces on the merchant's own infrastructure

Merchant sees orders; granular agent-traffic metrics sit on Rye's side

Control over which agents/developers can transact

Merchant decides via OAuth scopes, capability declaration, rate limits

Merchant decides via developer gating in Rye's network

Commission relationship

None imposed by the spec

Commission-based agreement (commercial agreement for non-Shopify, Sales Channel app for Shopify)

Schema / API contract ownership

Merchant owns schema; evolves it on spec revisions

Rye's API contract; evolves with Rye's product

Independence from vendor coverage

Merchant's protocol surface is independent

Tied to Rye's merchant coverage and roadmap

Migration cost between paths

Going Rye-first and later shipping native UCP starts at zero on the protocol surface

Fallback for non-UCP traffic

None — agentic commerce layered on top of existing channels separately

Same Rye integration handles UCP-aware agents and agents that don't speak any protocol

When Each Path Fits

The right call depends on the merchant's existing engineering capacity, agentic-commerce strategy, and willingness to be the named UCP participant versus integrating through a commerce layer.

Native UCP fits when the merchant:

  • Has internal engineering capacity to ship and operate a protocol surface — RFC 9421 signing, JSON Schema versioning, an OAuth 2.0 server, signed webhooks, profile caching, namespace validation

  • Wants to be a named UCP participant in the spec's discovery model

  • Wants direct, named relationships with the AI surfaces and is prepared to maintain those across spec revisions

  • Wants full visibility into agent behavior (every call, error, attempt cadence) on its own infrastructure

  • Wants to own the agent-facing schema and evolve it on the spec's revision cadence

  • Doesn't want a commission relationship with an intermediary

Integrating via Rye fits when the merchant:

  • Wants agentic-commerce coverage without operating an independent UCP protocol surface

  • Wants a single integration to handle both UCP-aware agents and agents that don't speak any protocol

  • Doesn't have engineering capacity to ship and operate a protocol surface, or wants that capacity allocated to product work instead

  • Is comfortable with a commission-based agreement (set in the commercial agreement for non-Shopify, in-app for Shopify) in exchange for the integration

  • Is comfortable with Rye as the named UCP participant in the spec's discovery model

  • Wants merchant-side admission control over which developers in Rye's network can transact, without operating the full UCP discovery model

Either path can come first. A merchant on Rye can later ship native UCP for direct AI-surface relationships; a merchant on native UCP can later integrate with Rye to reach agents outside the UCP discovery model. The two paths aren't mutually exclusive.

Frequently Asked Questions

What does it take for a merchant to integrate with Rye?

Two paths. Non-Shopify merchants sign a commercial agreement with Rye (commission terms, scope) and allowlist the Rye Agent in their security platform — Rye then uses the merchant's existing website as-is, with no code change on the merchant side. Shopify merchants install the Rye Sales Channel app from the Shopify App Store and configure commission rate and visible products in-product. Both paths support optional developer gating — merchants can restrict which developers in Rye's network can transact with their products.

What is the engineering lift to implement UCP natively?

The actual timeline depends on variables specific to the merchant. The main ones:

  • Existing infrastructure. A merchant with an OAuth 2.0 server already running for its apps, RFC 9421 signing tooling in production, and signed-webhook patterns already in place will move faster than a merchant building these from zero.

  • Engineering capacity. The twelve build steps assume dedicated engineering. Capacity split across a product roadmap paces differently.

  • Priority and roadmap fit. UCP adoption competing against existing roadmap commitments paces differently than a roadmap-first program.

  • Schema authorship readiness. A merchant with typed catalog data already structured internally moves faster than one writing the schema layer alongside its first JSON Schema 2020-12 documents.

  • Operational readiness for ongoing work. The merchant operates the surface on the spec's date-based revision cadence — that ongoing work is its own variable.

There is no authoritative public timeline for a from-zero UCP implementation. A merchant scoping its own build should size each of the variables above against its own organization.

What does the merchant give up by integrating via Rye instead of implementing UCP natively?

The merchant trades direct UCP participation for broader immediate agent reach (including agents that don't speak any protocol). Specifically: the merchant isn't a named UCP participant in the spec's discovery model, doesn't own the agent-facing schema (Rye's API contract is the surface agents see), and doesn't see granular agent-traffic metrics (those sit on Rye's side — the merchant sees its own orders). Commission terms apply per the commercial agreement (non-Shopify) or the Sales Channel app (Shopify). The merchant retains admission control over which developers in Rye's network can transact with its products. A migration to native UCP later starts from zero on the protocol surface.Does Rye implement UCP?

Rye operates as a commerce integration layer between agents and merchants. Merchants integrating via Rye get agent-facing coverage — catalog query, cart, checkout state, post-purchase events — without implementing the protocol surface themselves. The integration is a commercial relationship; the tradeoffs are described in the comparison table above.

What's the minimum a merchant has to implement to be UCP-compliant?

At minimum, a merchant publishes a /.well-known/ucp profile, signs every response with RFC 9421, and implements the Checkout capability with its three-state machine (incomplete / ready_for_complete / completed, plus canceled via the /cancel op) and the continue_url for non-headless steps. Catalog, Cart, Order, Identity Linking, and Payment Handlers are part of the full spec — agents call only what the merchant declares, so partial implementations are valid.

Does UCP require OAuth?

Identity Linking, the capability that enables an agent to act on a customer's behalf with the merchant's authorization, is implemented as a full RFC 6749 OAuth 2.0 server using the Authorization Code flow. If the merchant doesn't declare Identity Linking in its /.well-known/ucp profile, the OAuth server is not required. Most merchants declare it because the personalized flows (saved addresses, loyalty, payment methods on file) depend on it.

What about ACP?

Agentic Commerce Protocol (ACP) is Stripe and OpenAI's parallel standard. This post covers UCP specifically. For a comparison of ACP, UCP, and Universal Checkout, read What Is Agentic Checkout? Definition, How It Works & Why It Matters in 2026.

Get Started

If you're scoping a native UCP build, the spec is at ucp.dev/latest/specification/. Read Checkout and Identity Linking first — they're where the surface area concentrates.

If you're scoping the Rye path, the first step is the same regardless of stack: email carrie@rye.com to start the conversation about commission terms, scope, and the right onboarding path for your stack.

Read the docs →

Stop the redirect.
Start the revenue.

Stop the redirect.
Start the revenue.

Stop the redirect.
Start the revenue.