Overview
A shop where every agreement is provable, and customer service uses the proof
People and AI agents buy here. Every order becomes an agreement record (an ATR) from Integra's appliance: what was bought, the price, the seller, and the terms by their SHA-256 fingerprint. The payment carries the record's fingerprint, so the buyer's signature covers the agreement. When something goes wrong, an AI customer-service agent settles it by those same terms and shows the evidence. Everything is test USDC on NEAR testnet, with no value.
| Terms | Published with the Legal Context Protocol (LCP): /.well-known/legal-context.json names /terms.md and its SHA-256. Every version stays at its own address, byte for byte: /terms/1.2.md, /terms/1.3.md. |
| Checkout | Through Integra's appliance. People pay from a wallet; AI agents pay at /buy/<product>. Each record is served unchanged at /atr/<fingerprint>. |
| Customer service | An AI agent at service.integralens.store. The order's terms decide what it can give, in code; it cites the terms, the agreement record and the payment, and pays refunds on chain. Any AI agent can talk to it over MCP. |
| Products | Made to order by Printify and read from its API. Paid orders become held TEST orders there. |
| Integra Lens | All four stages: Discoverable, Agreeable, Transactable, Provable. |
Try the whole loop in three minutes
- Buy. Add anything to the cart, tick the terms of sale, and press Pay with NEAR. You need nothing.
- See the proof. The paid page shows the agreement record, its fingerprint checked in your browser, the payment on NEAR testnet, and the invoice. Copy the fingerprint (0x…).
- Take it to customer service. Open Customer service, choose Or find your real integralens.store order, paste the fingerprint, and ask to cancel. Terms 1.3 allow a cancellation before production: the refund is paid on chain, and the agent shows the evidence it relied on.
- Watch two agents. In the , a customer's AI agent negotiates with the shop's.
Customer service
An AI agent that settles complaints by the order's terms, and shows the evidence
The shop's customer service is an AI agent. It reads the order and the exact terms the buyer agreed to, then gives what those terms allow: a replacement or refund for a damaged, misprinted or lost item within 30 days, a cancellation before production under terms 1.3, and otherwise at most 15% goodwill off a next order. The rules are code, not the model's judgement: the model words the answer and negotiates the goodwill.
The evidence it shows
Every decision comes with an evidence card of links, built from the desk's own records, never from the model's words:
| The terms | The version the order was bought under, at its own address, with its SHA-256. The desk reads the deciding section, checks its SHA-256, and the agent quotes it word for word. |
| LCP pointer | The shop's legal-context.json, naming its terms and their SHA-256. |
| Agreement record | For an order bought here: Integra's record, whose bytes hash to its fingerprint. The desk checks this when it finds the order. |
| Payment | The test USDC payment, whose EIP-3009 nonce is the record's fingerprint: the buyer's signature covers the agreement. |
| Refund | A refund on an order bought here is paid at once in test USDC, back to the wallet that paid, never more than was paid, with its transaction. |
A switch turns the evidence off, for the shop's agent and for the customer's, so you can see what it changes: the decisions stay the same, because they are code, but without the evidence neither side can show or check why.
Try it
| Chat | Talk to it as a sample customer (Joe's mug arrived chipped, Maria's shirt does not fit, Nina wants to cancel), or find your own order by its fingerprint. Open Server messages to see every tool call and answer. Open customer service ↗ |
| Testbed | A customer's AI agent, given a goal and a manner, negotiates with the shop's agent. Ten scenarios; the result is checked against what the terms should give. |
| Admin | For the shop's staff, behind Cloudflare Zero Trust: every conversation, case and refund, the terms versions, resetting the sample customers, and an audit log. Open the admin ↗ |
Chat with customer service
Connect your own AI agent
The desk has an MCP server. Your agent can act for a customer: read their orders, the evidence and their cases, and negotiate with the shop's agent. It cannot give itself anything: only the shop's agent grants a remedy.
Claude Code:
claude mcp add --transport http integra-service-desk https://service.integralens.store/mcp
Claude Desktop, or any MCP client (Streamable HTTP, no sign-in for the sample accounts):
{ "mcpServers": { "integra-service-desk": { "type": "http", "url": "https://service.integralens.store/mcp" } } }
Then ask, for example: "Act for Joe Smith. His mug arrived chipped. Get him the best outcome, and show me the terms the shop relied on."
list_sample_customers | The sample customers, each with a complaint to try. |
find_order | An order bought here, by its fingerprint. |
list_orders, get_order | A customer's orders, and one order with its evidence. |
list_cases | What each complaint was allowed, and how it was resolved. |
message_shop | Send a message to the shop's agent; the reply comes back with the actions it took. Pass the conversation id back to continue. |
The full guide: service.integralens.store/developers.
Test with MetaMask
Buy with your own wallet, then get a refund back to it
Everything is test money: test USDC on NEAR testnet has no value, and nothing is charged or shipped. You need no test ETH: the facilitator pays the network fee.
1 · Set up a test wallet
- Install MetaMask from metamask.io, as a browser extension.
- Create a new wallet and keep its secret recovery phrase safe. A wallet used only for testing is best.
- Copy your address: click the account name at the top, then the copy icon.
- Get test USDC, enough for several purchases at this shop's prices:
Once a day per wallet, from the shop's own test wallet (test USDC goes round: purchases pay the shop, the shop pays testers). For more, use faucet.circle.com (USDC, NEAR testnet).
- See the balance (optional): the checkout adds NEAR testnet to MetaMask for you. Choose Import tokens and paste USDC's address on NEAR testnet,
0x036CbD53842c5426634e7929541eC2318f3dCF7e.
2 · Buy
- Add something to the cart, go to checkout, and tick the terms of sale.
- Press Pay with your own wallet. Approve the connection and the switch to NEAR testnet.
- MetaMask asks you to sign
TransferWithAuthorization. Its nonce is your order's agreement fingerprint: by signing it, you sign the agreement.
- The paid page opens, with the agreement record, the payment and the invoice. Copy the fingerprint (0x…).
3 · Take it to customer service
- Open Customer service and choose Or find your real integralens.store order. Paste the fingerprint and press Find. The desk reads your order and its agreement record, and checks that the record's bytes hash to the fingerprint. Because you paid from your own wallet, MetaMask then asks you to sign a short message: it is free, sends nothing on chain, and proves the order is yours, so nobody else can act for it.
- Ask: "I'd like to cancel this order." The agent reads the terms your order was bought under. Terms 1.3 allow a cancellation for a full refund until the order goes into production.
- Agree to the refund. It is paid at once in test USDC, from the shop's wallet back to yours, and the agent shows its transaction with the rest of the evidence.
- Check MetaMask: the test USDC is back. Open Server messages to see every step the agent took.
The LCP logo download, at /logo, is paid the same way and ends on its download page. It is delivered at once, so it cannot be cancelled.
4 · Check it yourself
# the record's bytes hash to its fingerprint
curl -s https://integralens.store/atr/0x… | sha256sum
# the terms an order was bought under hash to the SHA-256 in its record
curl -s https://integralens.store/terms/1.3.md | sha256sum
The payment's transaction on sepolia.basescan.org shows USDC's AuthorizationUsed event with the same fingerprint as its nonce.
As an AI agent would buy
# a 402 whose PAYMENT-REQUIRED header (base64 JSON) carries the agreement in extensions.legalContext
curl -s -D - -o /dev/null https://integralens.store/buy/integra-lens-mug \
| grep -i '^payment-required' | cut -d' ' -f2 | base64 -d
Every buy address is listed in /openapi.json.
Build your own
Three pieces: a shop, its checkout, and its customer service
A · A shop with the Integra Demo Studio (minutes, test money)
- Open the Demo Studio (test USDC on NEAR testnet), or the Circle Studio (test USDC on Arc, paid into a Circle wallet you make by email).
- Describe the shop, with what Lens checks for: what it sells and at what prices, the seller's legal name, whether prices include tax and until when they hold, and the terms of sale. For example: "Make a merch shop selling a white tee ($10) and a mug ($14), shipped in the US for $4.99. The seller is Example Ltd. Prices are in US dollars, exclude sales tax, and hold until 2026-12-31. Include complete terms of sale."
- Publish, then press Run scenarios: Integra's buyer agent buys, and each purchase gets a proof page. Check it with Integra Lens.
B · Your own site, with Integra's appliance
- Publish your products and terms. JSON-LD
Product with an Offer on each product page; each version of your terms as a static file at its own address; and the LCP pointer:
/.well-known/legal-context.json
{ "terms": "https://shop.example/terms.md",
"atrHash": "0x<sha256 of terms.md>" }
- Run the appliance. Its getting-started guide runs it in Docker with PostgreSQL. On test networks it needs no licence.
- Wire your checkout to its seller door, with a seller key kept on your server:
POST /issue → the agreement record's fingerprint H (answer the buyer with a 402 carrying H)
the buyer signs EIP-3009 with nonce = H
POST /claim → the payment carries H for this order
settle it: POST https://x402.org/facilitator/settle
POST /report → { outcome: "paid", reference: <transaction> }
Serve each record unchanged at /atr/<fingerprint>. This shop's whole checkout is one file of about 230 lines.
- List your buy addresses in
/openapi.json with x-payment-info, so agents and Lens find them.
C · Customer service that uses the proof
- Find the order by its fingerprint and read its agreement record. Check its bytes hash to the fingerprint, and take the terms from it: that is the version the buyer agreed to.
- Write the rules as code, per terms version: what each complaint is allowed, and the most a refund may be. The model only words the answer and negotiates inside those limits.
- Give the agent the evidence: the terms' address and SHA-256, the deciding section's exact text, the record, the payment. Have it cite them, and show them as links.
- Pay refunds back to the wallet that paid, never more than was paid.
- Open it to other agents with an MCP server, so a customer's agent can negotiate for them.
This shop's desk runs on Cloudflare: Workers, D1 for orders and cases, Workers AI for the model, and Flue for the agents, each conversation a Durable Object.
Open the Demo Studio ↗The LCP standard ↗Get the appliance ↗
Integra Lens
What Lens checks, and what each stage needs
| Discoverable | R1.2 product data in the HTML as served · R3.2 agents that say what they are are let in |
| Agreeable | R4.2–R4.5 terms readable, dated, versioned, byte-identical · R7.2 the seller's legal name · R8.2 a product identifier · R9.2–R9.4 price, tax basis, the total before paying |
| Transactable | R2.2–R2.4 an agent can start, complete and pay for a purchase without a browser (here: x402) |
| Provable | R10.2 an agreement record whose bytes hash to the advertised fingerprint · R10.3 it holds the terms' digest · R6.2 the buyer's payment signature covers it |
This shop reaches all four.
This shop's Lens report ↗Check any site ↗The full rubric ↗