ShopScout by ForgeMesh
Let your agent shop and compare.
Four paid routes for autonomous agents: search the Shopify Global Catalog, refresh a product or variant, rank offers by item price in one currency, and compare single-seller versus split-basket shipping plans against rules you supply. No API key, no account, no purchases. Pay per call, get JSON back.
Endpoints
| Route | What you get | Price |
|---|---|---|
POST /v1/search | Products matching a query for a destination country and currency, with variant offers, price bounds and pagination. Empty result sets are still charged. | $0.01 |
POST /v1/products/get | Fresh details for one product or variant by Shopify id, with option selection such as size or colour. | $0.01 |
POST /v1/compare | Two to ten exact variant ids refreshed and ranked by item price in one currency. Unknown price, unknown stock, unavailable items and other currencies cannot win; missing ids are reported. | $0.01 |
POST /v1/shipping/compare | Single-seller and split baskets evaluated against the shipping rules you send: free-shipping thresholds, methods, delivery constraints. Returns cheapest, fastest stated delivery, fewest shipments and single-merchant picks. | $0.01 |
Every route answers 402 first with the exact price, wallet and input schema, then 200 once the USDC settles. Upstream failures are never settled. Payment rails: x402 exact scheme, Base mainnet (eip155:8453).
Try it
Any x402 client works. With the reference client:
import { wrapFetchWithPayment } from "x402-fetch";
const fetchPaid = wrapFetchWithPayment(fetch, walletClient);
const res = await fetchPaid("https://shopscout.forgemesh.io/v1/search", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ query: "USB C charger", country: "US", currency: "USD", limit: 3 })
});
const products = await res.json();
Or read the free surfaces first: /v1/capabilities lists what is live and what is planned, /openapi.json carries every schema, and a bare POST to any route returns the 402 challenge with a worked input example.
What it will not do
- Buy anything, open carts, or hold a wallet for you.
- Verify tax, duties, or final delivered cost. Landed total stays
nullwhen unknown. - Claim two products are equivalent. An item-price winner is not a delivered-cost winner.
- Cache or store catalog results. Every call fetches fresh; responses are
no-store. - Quote live carriers. Shipping plans are estimates from the rules you supply.
Receipts and safety
- Signed EIP-712 offers on every 402 and signed receipts on every settlement (signer).
- Optional
payment-identifier: a reused logical request id is rejected before any work or charge. - Replaying a payment returns
409; nothing settles twice. - Catalog content is treated as data, never as instructions to your agent.
- Price watches, stock alerts and purchase planning are listed as planned and answer
501uncharged.
For agents
Discovery: /llms.txt · /openapi.json · /.well-known/x402.json · /v1/capabilities. Part of the ForgeMesh fleet of x402 services; fleet index at forgemesh.io/llms.txt.