AgentScore
Pricing
Log inGet started

Economic infrastructure for AI agents.

Identity, payments, and compliance. From your first agent transaction to your billionth.

Start building Talk to sales

Product

  • Identity
  • For Merchants
  • For Buyers
  • Pricing

Resources

  • Case Studies
  • Blog
  • Docs
  • API Reference

Company

  • About
  • Careers
  • Contact
  • Status

Legal

  • Terms of Service
  • Privacy Policy
  • Data Use Policy

© 2026 AgentScore. All rights reserved.

Made in San Francisco.

Martin Estate vineyard at sunset

Martin Estate · Case Study

How Martin Estate opened Napa wine to AI agents.

A Napa winery selling wine directly to AI agents. KYC, age 21+, sanctions, and per-state shipping enforced at the gate.

Built with

StripeTempoMPPx402SolanaBase

At a glance

Customer
Estate winery in Rutherford, Napa Valley. Stone winery built in 1887.
Catalog
Estate Cabernet and Rosé
Compliance
KYC, age 21+, sanctions, US-only with per-state allowlist
Payment rails
x402 (Base), MPP (Tempo + Solana), Stripe SPT
Fulfillment
Ships per-state; tax computed in Martin's own module
Timeline
1 week, discovery to production
See the skill manifest Want this for your storefront?

When Martin Estate, a high-end Napa Valley winery, came to us and said they wanted to accept AI agents as a new customer type, we had a bit of thinking to do.

We built the endpoint that lets AI agents buy wine at agents.martinestate.com. Bottles ship, per-state taxes get paid, recipients prove they're 21.

The first question we got wasn't about payment. Payment is the easy part. The first question was whether an agent could legally ship a bottle of Cabernet from Napa to a recipient anywhere in the country, given a 21+ age requirement, the requirement that the seller hold an in-state shipper's license, complex wine-industry tax rates, and a series of delivery rules.

Most American businesses will hit the same wall when they take on agents as customers.

What had to be true for a winery

Selling wine direct-to-consumer is a regulatory minefield that pre-dates the internet. Every state has its own rules about who can ship, where, and how much tax they have to collect. Some states are open. Some require licenses. Some are dry. Some have dry counties inside permissive states. The federal layer adds excise tax and record-keeping.

And the buyer has to be 21. Not the agent, not the operator. The actual human receiving the bottle.

Now add an agent. The agent isn't the buyer, it's acting for one. Sometimes the buyer is also the recipient. Sometimes the recipient is a third party because it's a gift. The buyer may be in California, the agent running on a server in Virginia, the recipient in Illinois, the operator entity in Delaware.

Every wine website today solves this by making the human do the work. Verify your age. Type the address. Approve the tax. We're trying to remove that friction, not give agents a worse version of it.

What a real business cares about

At one point some of the Stripe/Tempo team joked with us: "What currency does the winery prefer?" The answer is that the winery does not have any position on currency. They are not nerds like us. They just want to be paid for their product and are happy to accept any form of payment as long as it is swept into US dollars that they can move into their bank account.

Does this all evolve as stablecoins continue to grow and more modern banking takes off? Absolutely, but we have a long adoption curve to go if we step outside of our SF/NY circles.

The winery is interested in a bull case where they can have a new customer type, and it is our job to make it as easy as possible for the winery to test this thesis.

The merchant doesn't write the compliance code. They configure AgentScore Gate.

AgentScore Gate

The Martin Estate codebase is a normal Hono app running on Bun. Product catalog, cart, order endpoint, fulfillment. The only AgentScore code is AgentScore Gate:

const gate = agentscoreGate({
  apiKey: process.env.AGENTSCORE_API_KEY!,
  requireKyc: true,
  requireSanctionsClear: true,
  minAge: 21,
  allowedJurisdictions: ['US'],
});
 
// Gate fires only when a payment credential is attached, so
// anonymous agents can read the 402 with prices first;
// identity is verified on the settle leg.
app.use('/purchase', async (c, next) => {
  const hasPayment = Boolean(
    c.req.header('payment-signature') ||
    c.req.header('x-payment') ||
    c.req.header('authorization')?.startsWith('Payment ')
  );
  if (!hasPayment) return next();
  return gate(c, next);
});

One short block of config, wrapped conditionally on the /purchase route. On every gated request the gate runs:

  • Age check on the buyer's Passport. The buyer has to carry a verified 21+ attestation tied to their KYC. The recipient is a separate problem the merchant handles. If Martin needs adult-signature-on-delivery for a gift, that's set in their carrier config, not the gate.
  • Jurisdiction check. The gate confirms the buyer is in the US. The per-state alcohol shipping rules, the license allowlist, and the dry-county logic all live in Martin's own src/lib/shipping.ts. AgentScore handles who the buyer is and where; Martin handles whether this product can legally arrive there.
  • Sanctions. Two passes. The buyer's name runs against OpenSanctions at KYC, and the buyer's wallet runs against OFAC's SDN list at settle. Hits reject, near-matches escalate.
  • Payment. Rails sit on the Checkout orchestrator, not the gate. Martin advertises every rail they accept (tempo, x402_base on eip155:8453, solana_mpp, and stripe) and the agent picks the one it can pay with. No preference baked in on the merchant side.

skill.md

The agent reads agents.martinestate.com/skill.md on first contact. It's a plain text manifest under 200 lines that describes the catalog, pricing, payment rails, gate requirements, gift schema, and a worked example. The agent parses it once and has what it needs to transact.

A real order

Prompt: "Buy a bottle of the 2019 Martin Estate Reserve Cabernet Sauvignon, ship as a gift to my dad in Chicago."

The agent fetches skill.md, picks the SKU, presents its Passport. Passport carries the operator's identity, the human's KYC, the 21+ attestation. The gate validates it in one call.

Then the checks. Martin's shipping module confirms Illinois accepts direct wine from California and that Martin holds the Illinois shipper's license. Buyer-side sanctions clear. Tax calculates from Martin's tax_rates table, a single per-state rate applied to the order. Add shipping and you have the total the agent pays.

The agent pays in x402_base because that's what its wallet holds. The order shows up in Martin Estate's back office. The carrier picks it up per Martin's shipping config, the bottle arrives, someone gets a bottle of Cab on their birthday.

The integration with real businesses

Explaining the agentic economy to a winery is an interesting experience. If you are reading this, you are probably running your agents all day. Most people have heard the future is agentic; almost no one has seen what that means for their own business.

The businesses that will pay for agentic commerce first are the ones already living with friction. Wine, prescription, age-restricted, licensed services, anything jurisdiction-locked. Compliance overhead means higher prices, which means a real budget for infrastructure that handles it correctly. That's where we focused.

Martin Estate is the first one running. There are more coming.

Currently shipping

Martin Estate Reserve Cabernet Sauvignon 2019

Reserve Cabernet Sauvignon 2019

Martin Estate Rosé

Rosé

Want to sell to AI agents? Talk to us, and we'll build you a version of this.

Next case study

Sayer & Stone

Lab-grown diamond jewelry, sold to AI agents on the same stack.

Sayer & Stone