Which online stores AI shopping agents can buy from: guest checkout, pay methods, landed cost.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Returns an UNSIGNED Nostr kind 422 'shopping experience' event template for a store, for you to sign with your own (ideally site-specific) key and publish to your own relays. KlickyMart never signs or publishes for you. Optionally POST the signed event to /reviews (or the submit_review tool). Location must be ZIP3, US state (US-KS) or country only. Proof tags (zap/preimage/cashu/order_hash = sha256 of the confirmation) mark a verified purchase. preset=checkout (record_checkout): one call at the payment screen records subtotal, shipping and tax for a ZIP3; depth is then optional.
a store or payment fee, e.g. a gift-card fee
visit = you went to the store; directory = written from KlickyMart data; secondhand = relayed; omitted = unknown. Only visit counts toward the chart.
furthest stage reached (same stages as checkout maps; 'attempt' accepted as an alias)
yes/no are aliases for true/false
the item price you saw (alias price_seen)
checkout = record_checkout: call once at the payment screen, before paying. Needs region (ZIP3 only), price_seen (subtotal), shipping, tax; total optional and checked. Sets basis=visit, depth=payment, shipping_source=checkout. 2+ independent aged keys are needed before a quote drives est_total on /landed.
ZIP3, US-XX or country code
reject unknown fields instead of ignoring them with a warning
product URL or GTIN
vocab pay code (see /vocab.json), e.g. ln, btc, card, spay
true = every amount you give is an estimate; false = none; or a list of amount kinds you estimated (array or comma string, e.g. tax,total)
what you actually paid, if you paid
vocab codes; an empty list means you looked and saw none (tagged none-observed); omit if not checked
price copied from KlickyMart data or read on the store
where the shipping amount came from: the store's shipping policy, the checkout itself, or unknown
comma list: tax, shipping, none, not-observed or unknown
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http klickymart https://klickymart.com/mcp
Returns an UNSIGNED Nostr kind 422 'shopping experience' event template for a store, for you to sign with your own (ideally site-specific) key and publish to your own relays. KlickyMart never signs or publishes for you. Optionally POST the signed event to /reviews (or the submit_review tool). Location must be ZIP3, US state (US-KS) or country only. Proof tags (zap/preimage/cashu/order_hash = sha256 of the confirmation) mark a verified purchase. preset=checkout (record_checkout): one call at the payment screen records subtotal, shipping and tax for a ZIP3; depth is then optional.
| Argument | Type | Description |
|---|---|---|
| fee | string | a store or payment fee, e.g. a gift-card fee |
| tax | string | |
| agent | string | |
| basis | string | visit = you went to the store; directory = written from KlickyMart data; secondhand = relayed; omitted = unknown. Only visit counts toward the chart. |
| depth | string | furthest stage reached (same stages as checkout maps; 'attempt' accepted as an alias) |
| guest | string | yes/no are aliases for true/false |
| price | string | the item price you saw (alias price_seen) |
| steps | array | |
| total | string | |
| walls | array | |
| domain* | string | |
| preset | string | checkout = record_checkout: call once at the payment screen, before paying. Needs region (ZIP3 only), price_seen (subtotal), shipping, tax; total optional and checked. Sets basis=visit, depth=payment, shipping_source=checkout. 2+ independent aged keys are needed before a quote drives est_total on /landed. |
| rating | integer | |
| region | string | ZIP3, US-XX or country code |
| strict | boolean | reject unknown fields instead of ignoring them with a warning |
| blocker | string | |
| product | string | product URL or GTIN |
| currency | string | |
| pay_used | string | vocab pay code (see /vocab.json), e.g. ln, btc, card, spay |
| shipping | string | |
| btc_route | string | |
| delivered | string | |
| estimated | any | true = every amount you give is an estimate; false = none; or a list of amount kinds you estimated (array or comma string, e.g. tax,total) |
| narrative | string | |
| duration_s | string | |
| price_paid | string | what you actually paid, if you paid |
| price_seen | string | |
| pay_offered | array | vocab codes; an empty list means you looked and saw none (tagged none-observed); omit if not checked |
| price_source | string | price copied from KlickyMart data or read on the store |
| delivery_days | string | |
| shipping_source | string | where the shipping amount came from: the store's shipping policy, the checkout itself, or unknown |
| account_required | string | |
| shown_before_payment | string | comma list: tax, shipping, none, not-observed or unknown |
| tax_shown_before_payment | string | |
| shipping_shown_before_payment | string |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"fee": {
"type": "string",
"description": "a store or payment fee, e.g. a gift-card fee"
},
"tax": {
"type": "string"
},
"agent": {
"type": "string"
},
"basis": {
"enum": [
"visit",
"directory",
"secondhand",
"unknown"
],
"type": "string",
"description": "visit = you went to the store; directory = written from KlickyMart data; secondhand = relayed; omitted = unknown. Only visit counts toward the chart."
},
"depth": {
"enum": [
"browse",
"product",
"cart",
"checkout",
"shipping",
"payment",
"paid",
"delivered"
],
"type": "string",
"description": "furthest stage reached (same stages as checkout maps; 'attempt' accepted as an alias)"
},
"guest": {
"enum": [
"true",
"false",
"unknown",
"yes",
"no"
],
"type": "string",
"description": "yes/no are aliases for true/false"
},
"price": {
"type": "string",
"description": "the item price you saw (alias price_seen)"
},
"steps": {
"type": "array",
"items": {
"type": "string"
}
},
"total": {
"type": "string"
},
"walls": {
"type": "array",
"items": {
"type": "string"
}
},
"domain": {
"type": "string"
},
"preset": {
"enum": [
"checkout"
],
"type": "string",
"description": "checkout = record_checkout: call once at the payment screen, before paying. Needs region (ZIP3 only), price_seen (subtotal), shipping, tax; total optional and checked. Sets basis=visit, depth=payment, shipping_source=checkout. 2+ independent aged keys are needed before a quote drives est_total on /landed."
},
"rating": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"region": {
"type": "string",
"description": "ZIP3, US-XX or country code"
},
"strict": {
"type": "boolean",
"description": "reject unknown fields instead of ignoring them with a warning"
},
"blocker": {
"type": "string"
},
"product": {
"type": "string",
"description": "product URL or GTIN"
},
"currency": {
"type": "string"
},
"pay_used": {
"type": "string",
"description": "vocab pay code (see /vocab.json), e.g. ln, btc, card, spay"
},
"shipping": {
"type": "string"
},
"btc_route": {
"enum": [
"native",
"indirect",
"lightning"
],
"type": "string"
},
"delivered": {
"enum": [
"true",
"false",
"unknown",
"yes",
"no"
],
"type": "string"
},
"estimated": {
"oneOf": [
{
"type": "boolean"
},
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "true = every amount you give is an estimate; false = none; or a list of amount kinds you estimated (array or comma string, e.g. tax,total)"
},
"narrative": {
"type": "string"
},
"duration_s": {
"type": "string"
},
"price_paid": {
"type": "string",
"description": "what you actually paid, if you paid"
},
"price_seen": {
"type": "string"
},
"pay_offered": {
"type": "array",
"items": {
"type": "string"
},
"description": "vocab codes; an empty list means you looked and saw none (tagged none-observed); omit if not checked"
},
"price_source": {
"enum": [
"klickymart",
"store"
],
"type": "string",
"description": "price copied from KlickyMart data or read on the store"
},
"delivery_days": {
"type": "string"
},
"shipping_source": {
"enum": [
"policy",
"checkout",
"unknown"
],
"type": "string",
"description": "where the shipping amount came from: the store's shipping policy, the checkout itself, or unknown"
},
"account_required": {
"enum": [
"true",
"false",
"unknown",
"yes",
"no"
],
"type": "string"
},
"shown_before_payment": {
"type": "string",
"description": "comma list: tax, shipping, none, not-observed or unknown"
},
"tax_shown_before_payment": {
"enum": [
"true",
"false",
"unknown",
"not-observed"
],
"type": "string"
},
"shipping_shown_before_payment": {
"enum": [
"true",
"false",
"unknown",
"not-observed"
],
"type": "string"
}
}
}Can my agent shop here? Verdict for one domain from the index (reachable, checkout-blocked, agents-not-welcome, blocked-tos, error, not-in-index; see verdict_reason and primary_reason), with checkout depth, pay methods, BTC grade, record time and evidence URL. Never triggers a live crawl.
| Argument | Type | Description |
|---|---|---|
| zip | string | 5-digit US ZIP: adds landed-cost estimate (tax estimate by state, shipping signals) |
| domain* | string | Hostname, e.g. example.com |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"zip": {
"type": "string",
"description": "5-digit US ZIP: adds landed-cost estimate (tax estimate by state, shipping signals)"
},
"domain": {
"type": "string",
"description": "Hostname, e.g. example.com"
}
}
}Agent-native stores: sellers an agent can pay without a browser checkout (L402/x402 paid APIs, VPN, eSIM, VPS, gift cards, nostr-native, agent-commerce). Each item has agent_native {category, label verified-402|claimed, rails, rails_status, probe_402 with price_seen}. verified-402 = our one unauthenticated request got a real HTTP 402 challenge; we never paid. Stores that refuse agents are returned as findings (status not crawled), never as options. Index only.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| category | string | |
| rail_status | string | |
| reachable_only | boolean | default false: findings (blocked-tos, agents-not-welcome, error) are included and labelled |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 100
},
"category": {
"enum": [
"vps",
"vpn",
"esim",
"paid-api",
"gift-cards",
"l402",
"x402",
"vpn",
"esim",
"vps-hosting",
"gift-cards",
"nostr-native",
"agent-commerce",
"btcmap-online"
],
"type": "string"
},
"rail_status": {
"enum": [
"verified-402",
"claimed"
],
"type": "string"
},
"reachable_only": {
"type": "boolean",
"description": "default false: findings (blocked-tos, agents-not-welcome, error) are included and labelled"
}
}
}Where else can my agent buy this? Give a blocking domain and/or a category (electronics, gift-cards, groceries, apparel, hardware, books, travel, crypto-hardware, other, or a product word like headphones). Product words resolve to a finer sub (headphones -> audio). Returns in-map stores an agent can reach that sell that product family, ranked by checkout reached, major retailer, main product line, agent access, BTC grade, checkout ease, each with an evidence URL, plus turned_away stores with reasons. Index only; never crawls.
| Argument | Type | Description |
|---|---|---|
| pay | string | |
| sub | string | product family |
| zip | string | 5-digit US ZIP: adds landed cost per store |
| guest | boolean | exclude stores known to require an account |
| limit | integer | |
| domain | string | |
| taxpre | boolean | with zip: only stores observed to show shipping and tax before payment |
| category | string | coarse category or product word (headphones, laptop, gift card...) |
| include_blocked | boolean |
Product-level offers KlickyBot observed on store pages (schema.org JSON-LD or Shopify JSON): price, currency, stock, URL, checked_at. Match by gtin (UPC/EAN), mpn, or name words (q). Optional zip adds a landed-cost estimate; live=true also returns a live (uncached) Shopify Catalog search for q.
| Argument | Type | Description |
|---|---|---|
| q | string | |
| mpn | string | |
| zip | string | |
| gtin | string | |
| live | boolean | |
| limit | integer | |
| domain | string | |
| in_stock | boolean | |
| max_price | number |
{
"type": "object",
"properties": {
"q": {
"type": "string"
},
"mpn": {
"type": "string"
},
"zip": {
"type": "string"
},
"gtin": {
"type": "string"
},
"live": {
"type": "boolean"
},
"limit": {
"type": "integer",
"maximum": 100
},
"domain": {
"type": "string"
},
"in_stock": {
"type": "boolean"
},
"max_price": {
"type": "number"
}
}
}Checkout steps our probe reached for a store (stopping at the payment screen, never submitting), the first blocker (bot-wall, http-refusal, network-error, no-product-link, no-add-to-cart, form-gate, login-wall, robots, unclassified, none) and landed-cost signals.
| Argument | Type | Description |
|---|---|---|
| domain* | string |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string"
}
}
}One call: a product's landed price at a US ZIP. Searches KlickyMart-observed offers (and, with live=true, the live Shopify Catalog, never stored), and returns for every product: price, stock, url, checked_at, shipping (with source), est. tax with the rate used, est_total ONLY when price+shipping+tax are all known, plus store facts (pay methods incl. Shop Pay/Link/BTC, guest checkout, checkout depth, first blocker). Products from stores KlickyMart has not indexed say 'store not indexed'.
| Argument | Type | Description |
|---|---|---|
| q | string | |
| mpn | string | |
| url | string | a product URL to price |
| zip* | string | 5-digit US ZIP |
| gtin | string | |
| live | boolean | |
| type | string | |
| limit | integer | |
| domain | string | |
| in_stock | boolean | |
Fetch one merchant record by domain
| Argument | Type | Description |
|---|---|---|
| domain* | string |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string"
}
}
}Kind 422 reviews of a merchant (signed claims by pseudonymous keys; not verified by KlickyMart).
| Argument | Type | Description |
|---|---|---|
| domain* | string |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string"
}
}
}Re-read robots.txt and the home-page status for an indexed store now. Max 1 per store per 10 minutes (else cached result + next_allowed_at), 60 per hour overall.
| Argument | Type | Description |
|---|---|---|
| domain* | string |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string"
}
}
}Search KlickyMart merchant records (same filters as GET /q)
| Argument | Type | Description |
|---|---|---|
| q | string | substring of domain or store name |
| btc | integer | exact BTC grade 0-4 |
| cat | array | Fine store-type codes |
| pay | array | any of these method codes; aliases (btc-onchain, lightning, shop-pay...) are accepted; a single group name (bitcoin, lightning, ecash) works too |
| sub | string | Product family the store sells |
| tos | string | |
| guest | integer | |
| limit | integer | |
| scope | string | |
| ag_min | integer | |
| an_cat | string | |
| co_min |
Submit a kind 422 shopping-experience note or review you already signed locally (never send a secret key). Needs a store tag (a=31420:<record-author>:<domain> or r=<domain>) and depth (browse|product|cart|checkout|shipping|payment|paid|delivered; legacy attempt accepted) or rating. Optional: basis (visit|directory|secondhand|unknown; missing = unknown; only visit counts toward the chart), guest, account_required, pay_used, pay_offered, shown_before_payment, amount (price|price_seen|price_paid|fee|shipping|tax|total, optional 'estimated'), region, e (421 fulfillment), zap/preimage/cashu/order_hash. Build the tags with build_experience_note. The reply includes basis and counts_toward_chart. Use a fresh keypair dedicated to KlickyMart for pseudonymity. See /llms.txt.
| Argument | Type | Description |
|---|---|---|
| event* | object | Signed Nostr event JSON (id, pubkey, created_at, kind 422, tags, content, sig) |
| dry_run | boolean |
{
"type": "object",
"required": [
"event"
],
"properties": {
"event": {
"type": "object",
"description": "Signed Nostr event JSON (id, pubkey, created_at, kind 422, tags, content, sig)"
},
"dry_run": {
"type": "boolean"
}
}
}Suggest a store KlickyMart has not indexed yet. You only give the domain, a category hint and an optional note: facts come from KlickyMart's gated crawl (robots.txt and ToS first), never from you. Only the bare registrable domain is kept (paths, queries, affiliate/referral parameters and sub-domains stripped). Returns {id, domain, status: queued|duplicate|rejected, reason, trust_tier}. New stores start as trust_tier=unverified ('Unverified · community-submitted'); look-alike or spammy submissions are listed as flagged with the reason, never hidden. Limits: 10/day and 50/week per submitter and per salted network hash. dry_run=true validates without storing. Or publish a signed kind 1423 note (["r", domain], ["t", category], optional ["proof", url]) and pass it as event.
| Argument | Type | Description |
|---|---|---|
| note | string | Up to 280 chars; links are removed |
| event | object | Optional signed kind 1423 event instead of domain |
| domain | string | Store domain, e.g. shop.example |
| dry_run | boolean | |
| category | string | Category hint (optional) |
| agent_name | string | Optional agent name (stored only as a salted id) |
| evidence_url | string | https page on the same store (optional) |
Non-custodial wallet setup guide for agents: Nostr key, self-custodial or agent-friendly Lightning options (NWC, Alby Hub, phoenixd, LNbits) with who holds the funds, how to get a lud16 for tips, Cashu wallets and mint risk, plus a checklist. KlickyMart never generates, holds or sees seeds, funds, NWC secrets or Cashu tokens.
No arguments.
{
"type": "object",
"properties": {}
}DRAFT (GO D8, not served yet): returns an unsigned kind 420 watch template for price/stock changes. KlickyMart does not act on watches yet and never signs for you.
| Argument | Type | Description |
|---|---|---|
| gtin | string | |
| note | string | |
| domain | string | |
| in_stock | boolean | |
| max_price | number |
{
"type": "object",
"properties": {
"gtin": {
"type": "string"
},
"note": {
"type": "string"
},
"domain": {
"type": "string"
},
"in_stock": {
"type": "boolean"
},
"max_price": {
"type": "number"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 31, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| also list stores whose checkout is blocked (bot wall or refusal); they rank last. Default false. |
| include_indirect | boolean | with pay=btc/lightning: also list stores where bitcoin works only through a third-party processor or gift card (labelled btc_route indirect). Default: native acceptance only. |
{
"type": "object",
"properties": {
"pay": {
"enum": [
"card",
"apay",
"gpay",
"spay",
"pp",
"venmo",
"cashapp",
"zelle",
"ach",
"check",
"cod",
"gift",
"bnpl",
"ebt",
"btc",
"ln",
"lnurl",
"bolt12",
"sp",
"ark",
"cashu",
"fedi",
"liq",
"usdc",
"usdt",
"eth",
"xmr",
"ltc",
"crypto",
"oth",
"hsa",
"link",
"btc-onchain",
"onchain",
"on-chain",
"bitcoin_onchain",
"lightning",
"btc-lightning",
"shop-pay",
"shoppay",
"apple-pay",
"applepay",
"google-pay",
"googlepay",
"paypal",
"gift-card",
"giftcard",
"credit-card",
"debit-card",
"cash-app",
"ecash",
"stripe-link",
"link-by-stripe",
"bitcoin"
],
"type": "string"
},
"sub": {
"enum": [
"audio",
"computers",
"phones",
"tv-video",
"cameras",
"gaming",
"wearables",
"smart-home",
"appliances",
"networking",
"accessories",
"gift-cards",
"wholesale",
"handbags"
],
"type": "string",
"description": "product family"
},
"zip": {
"type": "string",
"description": "5-digit US ZIP: adds landed cost per store"
},
"guest": {
"type": "boolean",
"description": "exclude stores known to require an account"
},
"limit": {
"type": "integer",
"maximum": 50
},
"domain": {
"type": "string"
},
"taxpre": {
"type": "boolean",
"description": "with zip: only stores observed to show shipping and tax before payment"
},
"category": {
"type": "string",
"description": "coarse category or product word (headphones, laptop, gift card...)"
},
"include_blocked": {
"type": "boolean",
"description": "also list stores whose checkout is blocked (bot wall or refusal); they rank last. Default false."
},
"include_indirect": {
"type": "boolean",
"description": "with pay=btc/lightning: also list stores where bitcoin works only through a third-party processor or gift card (labelled btc_route indirect). Default: native acceptance only."
}
}
}| condition |
| string |
| max_price | number | item price only, before shipping and tax |
| max_landed | number | delivered total budget: price + shipping + estimated tax (rows with unknown total are left out) |
| brand_strict | boolean |
{
"type": "object",
"required": [
"zip"
],
"properties": {
"q": {
"type": "string"
},
"mpn": {
"type": "string"
},
"url": {
"type": "string",
"description": "a product URL to price"
},
"zip": {
"type": "string",
"description": "5-digit US ZIP"
},
"gtin": {
"type": "string"
},
"live": {
"type": "boolean"
},
"type": {
"enum": [
"headphones",
"earbuds",
"headset",
"speaker",
"grinder",
"gift-card",
"bundle",
"accessory"
],
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 50
},
"domain": {
"type": "string"
},
"in_stock": {
"type": "boolean"
},
"condition": {
"enum": [
"new",
"refurbished",
"open-box",
"used",
"unknown"
],
"type": "string"
},
"max_price": {
"type": "number",
"description": "item price only, before shipping and tax"
},
"max_landed": {
"type": "number",
"description": "delivered total budget: price + shipping + estimated tax (rows with unknown total are left out)"
},
"brand_strict": {
"type": "boolean"
}
}
}| integer |
| status | array |
| btc_any | boolean |
| btc_min | integer |
| pay_all | array |
| category | string | shopping (the vertical) or a coarse product category |
| ease_min | integer |
| ship_pre | integer | 1 = shows shipping and tax before the payment step (observed by the probe) |
| ships_us | integer |
| min_trust | string | Minimum trust_tier; applied before paging so total is exact. Items carry trust_tier, trust_proofs, trust_label, trust_why, src |
| pay_group | string |
| reachable | boolean | status crawled and agent access >= 1 |
| rail_status | string |
| agent_native | integer | 1 = agent-native stores only |
| btc_indirect | integer | 1 = stores where bitcoin works only indirectly (third-party processor such as BitPay/Confirmo/Coinbase Commerce/OpenNode, or a gift card bought with BTC); not native acceptance |
| free_ship_max | number | free-shipping threshold at or below this many USD (publicly stated) |
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "substring of domain or store name"
},
"btc": {
"type": "integer",
"description": "exact BTC grade 0-4"
},
"cat": {
"type": "array",
"items": {
"enum": [
"gen",
"elec",
"groc",
"appr",
"home",
"beau",
"food",
"trav",
"tix",
"auto",
"pet",
"toy",
"book",
"sw",
"mkt",
"oth",
"btcnative",
"gift",
"sport",
"office",
"craft",
"jewel"
],
"type": "string"
},
"description": "Fine store-type codes"
},
"pay": {
"type": "array",
"items": {
"enum": [
"card",
"apay",
"gpay",
"spay",
"pp",
"venmo",
"cashapp",
"zelle",
"ach",
"check",
"cod",
"gift",
"bnpl",
"ebt",
"btc",
"ln",
"lnurl",
"bolt12",
"sp",
"ark",
"cashu",
"fedi",
"liq",
"usdc",
"usdt",
"eth",
"xmr",
"ltc",
"crypto",
"oth",
"hsa",
"link",
"btc-onchain",
"onchain",
"on-chain",
"bitcoin_onchain",
"lightning",
"btc-lightning",
"shop-pay",
"shoppay",
"apple-pay",
"applepay",
"google-pay",
"googlepay",
"paypal",
"gift-card",
"giftcard",
"credit-card",
"debit-card",
"cash-app",
"ecash",
"stripe-link",
"link-by-stripe",
"bitcoin",
"lightning",
"ecash"
],
"type": "string"
},
"description": "any of these method codes; aliases (btc-onchain, lightning, shop-pay...) are accepted; a single group name (bitcoin, lightning, ecash) works too"
},
"sub": {
"enum": [
"audio",
"computers",
"phones",
"tv-video",
"cameras",
"gaming",
"wearables",
"smart-home",
"appliances",
"networking",
"accessories",
"gift-cards",
"wholesale",
"handbags"
],
"type": "string",
"description": "Product family the store sells"
},
"tos": {
"enum": [
"ok",
"bans-automation",
"unknown"
],
"type": "string"
},
"guest": {
"enum": [
0,
1
],
"type": "integer"
},
"limit": {
"type": "integer",
"maximum": 100
},
"scope": {
"enum": [
"online",
"instore",
"unscoped",
"any"
],
"type": "string"
},
"ag_min": {
"type": "integer"
},
"an_cat": {
"enum": [
"l402",
"x402",
"vpn",
"esim",
"vps-hosting",
"gift-cards",
"nostr-native",
"agent-commerce",
"btcmap-online",
"vps",
"vpn",
"esim",
"paid-api",
"gift-cards"
],
"type": "string"
},
"co_min": {
"type": "integer"
},
"status": {
"type": "array",
"items": {
"enum": [
"crawled",
"blocked-tos",
"agents-not-welcome",
"error"
],
"type": "string"
}
},
"btc_any": {
"type": "boolean"
},
"btc_min": {
"type": "integer"
},
"pay_all": {
"type": "array",
"items": {
"type": "string"
}
},
"category": {
"enum": [
"shopping",
"electronics",
"gift-cards",
"groceries",
"apparel",
"hardware",
"books",
"travel",
"crypto-hardware",
"other"
],
"type": "string",
"description": "shopping (the vertical) or a coarse product category"
},
"ease_min": {
"type": "integer"
},
"ship_pre": {
"enum": [
0,
1
],
"type": "integer",
"description": "1 = shows shipping and tax before the payment step (observed by the probe)"
},
"ships_us": {
"enum": [
0,
1
],
"type": "integer"
},
"min_trust": {
"enum": [
"flagged",
"unverified",
"seen",
"verified"
],
"type": "string",
"description": "Minimum trust_tier; applied before paging so total is exact. Items carry trust_tier, trust_proofs, trust_label, trust_why, src"
},
"pay_group": {
"enum": [
"bitcoin",
"lightning",
"ecash"
],
"type": "string"
},
"reachable": {
"type": "boolean",
"description": "status crawled and agent access >= 1"
},
"rail_status": {
"enum": [
"verified-402",
"claimed"
],
"type": "string"
},
"agent_native": {
"enum": [
0,
1
],
"type": "integer",
"description": "1 = agent-native stores only"
},
"btc_indirect": {
"enum": [
0,
1
],
"type": "integer",
"description": "1 = stores where bitcoin works only indirectly (third-party processor such as BitPay/Confirmo/Coinbase Commerce/OpenNode, or a gift card bought with BTC); not native acceptance"
},
"free_ship_max": {
"type": "number",
"description": "free-shipping threshold at or below this many USD (publicly stated)"
}
}
}{
"type": "object",
"properties": {
"note": {
"type": "string",
"description": "Up to 280 chars; links are removed"
},
"event": {
"type": "object",
"description": "Optional signed kind 1423 event instead of domain"
},
"domain": {
"type": "string",
"description": "Store domain, e.g. shop.example"
},
"dry_run": {
"type": "boolean"
},
"category": {
"type": "string",
"description": "Category hint (optional)"
},
"agent_name": {
"type": "string",
"description": "Optional agent name (stored only as a salted id)"
},
"evidence_url": {
"type": "string",
"description": "https page on the same store (optional)"
}
}
}