{"openapi":"3.1.0","info":{"title":"STORES.md API","version":"1.0","description":"STORES.md is a plain Markdown file that says what a store sells to agents, what it costs and how to pay: an x402 link, a checkout link, an invoice. Agents read listings in any format into one STORES.md of their own, compare offers, and check every payment request against the person's rules before paying. Read-only, no key, nothing stored. Use at your own risk. stores.md is provided as is, without warranty. Information here may be inaccurate, incomplete or not current, and is not verified; figures are estimates from the numbers you send and the formulas stated. Nothing here is financial, legal, tax or purchasing advice, or an endorsement of any store. stores.md never sells anything, lists real stores, moves money, holds keys or fetches other sites. Check everything yourself before you act on it.","termsOfService":"https://www.stores.md/terms","license":{"name":"MIT","identifier":"MIT"}},"servers":[{"url":"https://www.stores.md"}],"paths":{"/stores.md":{"get":{"operationId":"getSkill","summary":"The STORES.md skill as Markdown. Add a preset or any setting to write your settings in; notes on clamped or ignored values come back in the X-Settings-Notes header.","parameters":[{"name":"preset","in":"query","required":false,"schema":{"type":"string","enum":["core","recommended","test_money","strict"]}},{"name":"max_per_purchase","in":"query","required":false,"description":"Most for one purchase ($). Default 5. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":100000}},{"name":"ask_over","in":"query","required":false,"description":"Ask before any purchase over ($). Default 1. Capped at max_per_purchase. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":100000}},{"name":"daily_cap","in":"query","required":false,"description":"Most per day, all purchases ($). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":1000000}},{"name":"monthly_cap","in":"query","required":false,"description":"Most per month, all purchases ($). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":10000000}},{"name":"store_monthly_cap","in":"query","required":false,"description":"Most per month at any one store ($). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":1000000}},{"name":"alert_pct","in":"query","required":false,"description":"Tell me at this share of a cap (%). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":10,"maximum":100}},{"name":"x402","in":"query","required":false,"description":"Pay per request over x402: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"l402","in":"query","required":false,"description":"Pay per request with Lightning (L402): allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"paid_tools","in":"query","required":false,"description":"Paid tools on MCP servers: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"checkout_links","in":"query","required":false,"description":"Checkout pages and payment links: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"agent_checkout","in":"query","required":false,"description":"Checkout APIs for agents: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"invoices","in":"query","required":false,"description":"Invoices, paid later: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"transfers","in":"query","required":false,"description":"Direct transfers to an address: ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["ask","never","unset"]}},{"name":"recurring","in":"query","required":false,"description":"Subscriptions and anything that renews: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"networks","in":"query","required":false,"description":"Networks: test_only (Test networks only (test money)), any (Main and test networks). Optional; unset clears it.","schema":{"type":"string","enum":["test_only","any","unset"]}},{"name":"other_assets","in":"query","required":false,"description":"Paying in anything but dollars or dollar tokens: ask (Ask first), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["ask","never","unset"]}},{"name":"dollar_tokens","in":"query","required":false,"description":"Dollar tokens, for these limits: face_value (Count them as dollars), ask (Ask first). Optional; unset clears it.","schema":{"type":"string","enum":["face_value","ask","unset"]}},{"name":"pay_to_check","in":"query","required":false,"description":"The address a payment goes to: must_match (Must be one the store published), ask_if_unlisted (Ask when the store published none), off (Don't check). Optional; unset clears it.","schema":{"type":"string","enum":["must_match","ask_if_unlisted","off","unset"]}},{"name":"which_stores","in":"query","required":false,"description":"Buy from: known (Only stores marked known), ask_new (Known stores; new ones after a yes), any (Any store). Default ask_new.","schema":{"type":"string","enum":["known","ask_new","any"]}},{"name":"require_stores_md","in":"query","required":false,"description":"Only stores that publish a STORES.md: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"require_refunds","in":"query","required":false,"description":"Only listings that say what happens on a refund: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"max_listing_age_days","in":"query","required":false,"description":"Read a listing again before paying when it is older than (days). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":365}},{"name":"price_drift_pct","in":"query","required":false,"description":"Most over the listed price (%). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":0,"maximum":100}},{"name":"refresh_days","in":"query","required":false,"description":"Pull your stores again every (days). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":90}},{"name":"gone_products","in":"query","required":false,"description":"When a store stops listing a product: mark (Mark it gone), drop (Remove it). Optional; unset clears it.","schema":{"type":"string","enum":["mark","drop","unset"]}},{"name":"log_purchases","in":"query","required":false,"description":"Log every purchase in STORES.md: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"report","in":"query","required":false,"description":"Tell me about purchases: each (After each one), daily (Once a day), asked (When I ask). Optional; unset clears it.","schema":{"type":"string","enum":["each","daily","asked","unset"]}}],"responses":{"200":{"description":"The skill","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/api/v1/settings":{"get":{"operationId":"listSettings","summary":"Every setting (group, kind, unit, range, options, default) and the presets.","responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}}}}},"/api/v1/read_listing":{"get":{"operationId":"readListingGet","summary":"Read any listing into STORES.md","description":"Reads what a store publishes, in any of these formats, into STORES.md entries: STORES.md, an HTTP 402 answer (x402 version 1 or 2, L402), an x402 discovery list, JSON-LD or a web page with it, a product feed (CSV, TSV or JSON), an MCP tool list, an OpenAPI document (JSON), llms.txt or an agent card. Returns the stores and products, links worth following, and warnings, including text that reads like instructions to agents. It reads only the text you send; it fetches nothing and checks nothing with the store.","parameters":[{"name":"text","in":"query","required":true,"description":"What the store published, pasted as is (up to 60,000 characters).","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"The format, or auto (default) to detect it.","schema":{"type":"string","enum":["auto","stores_md","http_402","x402","x402_discovery","json_ld","html","feed_csv","feed_tsv","feed_json","mcp_tools","openapi","llms_txt","agent_card"]}},{"name":"source_url","in":"query","required":false,"description":"Where the text came from (https). Names the store and resolves relative links. Never fetched.","schema":{"type":"string"}},{"name":"output","in":"query","required":false,"description":"index (default): entries for your own STORES.md, with source, format, pulled date and status new. store: a seller's file.","schema":{"type":"string","enum":["index","store"]}},{"name":"decimals","in":"query","required":false,"description":"Decimal places for x402 amounts whose request doesn't say. Default 6.","schema":{"type":"integer","minimum":0,"maximum":36}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"readListing","summary":"Read any listing into STORES.md","description":"Reads what a store publishes, in any of these formats, into STORES.md entries: STORES.md, an HTTP 402 answer (x402 version 1 or 2, L402), an x402 discovery list, JSON-LD or a web page with it, a product feed (CSV, TSV or JSON), an MCP tool list, an OpenAPI document (JSON), llms.txt or an agent card. Returns the stores and products, links worth following, and warnings, including text that reads like instructions to agents. It reads only the text you send; it fetches nothing and checks nothing with the store.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":60000,"description":"What the store published, pasted as is (up to 60,000 characters)."},"format":{"type":"string","enum":["auto","stores_md","http_402","x402","x402_discovery","json_ld","html","feed_csv","feed_tsv","feed_json","mcp_tools","openapi","llms_txt","agent_card"],"default":"auto","description":"The format, or auto (default) to detect it."},"source_url":{"type":"string","maxLength":2000,"description":"Where the text came from (https). Names the store and resolves relative links. Never fetched."},"output":{"type":"string","enum":["index","store"],"default":"index","description":"index (default): entries for your own STORES.md, with source, format, pulled date and status new. store: a seller's file."},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"Decimal places for x402 amounts whose request doesn't say. Default 6."}},"required":["text"]},"example":{"text":"HTTP/1.1 402 Payment Required\ncontent-type: application/json\npayment-required: eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJQQVlNRU5ULVNJR05BVFVSRSBoZWFkZXIgaXMgcmVxdWlyZWQiLCJyZXNvdXJjZSI6eyJ1cmwiOiJodHRwczovL2FwaS5leGFtcGxlLmNvbS92MS9mb3JlY2FzdCIsImRlc2NyaXB0aW9uIjoiSG91cmx5IGZvcmVjYXN0LCA0OCBob3VycyIsIm1pbWVUeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJlaXAxNTU6ODQ1MyIsImFtb3VudCI6IjIwMDAiLCJhc3NldCI6IjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNSIsInBheVRvIjoiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxIiwibWF4VGltZW91dFNlY29uZHMiOjYwLCJleHRyYSI6eyJuYW1lIjoiVVNEIn19XX0=\n\n{}","source_url":"https://api.example.com/v1/forecast"}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}},"/api/v1/check_purchase":{"get":{"operationId":"checkPurchaseGet","summary":"Check a purchase before paying","description":"The last check before money moves. Send the payment request (the whole HTTP 402 answer: x402 version 1 or 2, L402, or a price header) and, ideally, the store's STORES.md or your own entry for it. It reads the amount, asset, network and pay-to address, matches them to the listing, and checks them against your rules: the same settings as the skill (or a preset). Returns fits_your_rules, ask_first or stop, with every reason, the total, and a line for your purchase log. Without a 402, it checks a listed product and a way to pay. It never pays, and a fit is a check of what you sent, not an approval.","parameters":[{"name":"payment_request","in":"query","required":false,"description":"The 402 answer as received: status line, headers and body, or just the PAYMENT-REQUIRED value or the JSON body.","schema":{"type":"string"}},{"name":"stores_md","in":"query","required":false,"description":"The store's STORES.md, or the entry for it from your own STORES.md (its status: known, new or blocked counts).","schema":{"type":"string"}},{"name":"product","in":"query","required":false,"description":"The product's id or name, when the listing has several and there is no 402 to match by URL.","schema":{"type":"string"}},{"name":"rail","in":"query","required":false,"description":"The way to pay, when there is no 402. Default: the listing's first allowed one.","schema":{"type":"string","enum":["x402","l402","checkout","agent-checkout","mcp","invoice","transfer","free","contact"]}},{"name":"quantity","in":"query","required":false,"description":"How many: requests for a 402, units of the listing's price otherwise. Default 1.","schema":{"type":"number","minimum":1,"maximum":1000000000}},{"name":"store_status","in":"query","required":false,"description":"The store's status in your STORES.md, when stores_md doesn't say. Default new.","schema":{"type":"string","enum":["known","new","blocked"]}},{"name":"listing_age_days","in":"query","required":false,"description":"Days since you read the listing, when stores_md has no pulled date.","schema":{"type":"number","minimum":0,"maximum":36500}},{"name":"spent_today","in":"query","required":false,"description":"Dollars spent today so far, from your purchase log. Default 0.","schema":{"type":"number","minimum":0,"maximum":1000000000000}},{"name":"spent_this_month","in":"query","required":false,"description":"Dollars spent this month so far. Default 0.","schema":{"type":"number","minimum":0,"maximum":1000000000000}},{"name":"spent_at_store_this_month","in":"query","required":false,"description":"Dollars spent at this store this month. Default 0.","schema":{"type":"number","minimum":0,"maximum":1000000000000}},{"name":"usd_per_unit","in":"query","required":false,"description":"The person's own rate, in dollars per unit of the asset, for anything that isn't dollars or a dollar token. No rates are looked up.","schema":{"type":"number","minimum":0,"maximum":1000000000000}},{"name":"decimals","in":"query","required":false,"description":"Decimal places of the token, when the request doesn't say. Default 6.","schema":{"type":"integer","minimum":0,"maximum":36}},{"name":"preset","in":"query","required":false,"description":"Rules to start from: core, recommended, test_money, strict. Each setting overrides it. Unset rules follow the skill's defaults.","schema":{"type":"string","enum":["core","recommended","test_money","strict"]}},{"name":"max_per_purchase","in":"query","required":false,"description":"Most for one purchase ($). Default 5. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":100000}},{"name":"ask_over","in":"query","required":false,"description":"Ask before any purchase over ($). Default 1. Capped at max_per_purchase. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":100000}},{"name":"daily_cap","in":"query","required":false,"description":"Most per day, all purchases ($). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":1000000}},{"name":"monthly_cap","in":"query","required":false,"description":"Most per month, all purchases ($). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":10000000}},{"name":"store_monthly_cap","in":"query","required":false,"description":"Most per month at any one store ($). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":1000000}},{"name":"alert_pct","in":"query","required":false,"description":"Tell me at this share of a cap (%). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":10,"maximum":100}},{"name":"x402","in":"query","required":false,"description":"Pay per request over x402: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"l402","in":"query","required":false,"description":"Pay per request with Lightning (L402): allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"paid_tools","in":"query","required":false,"description":"Paid tools on MCP servers: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"checkout_links","in":"query","required":false,"description":"Checkout pages and payment links: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"agent_checkout","in":"query","required":false,"description":"Checkout APIs for agents: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"invoices","in":"query","required":false,"description":"Invoices, paid later: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"transfers","in":"query","required":false,"description":"Direct transfers to an address: ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["ask","never","unset"]}},{"name":"recurring","in":"query","required":false,"description":"Subscriptions and anything that renews: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"networks","in":"query","required":false,"description":"Networks: test_only (Test networks only (test money)), any (Main and test networks). Optional; unset clears it.","schema":{"type":"string","enum":["test_only","any","unset"]}},{"name":"other_assets","in":"query","required":false,"description":"Paying in anything but dollars or dollar tokens: ask (Ask first), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["ask","never","unset"]}},{"name":"dollar_tokens","in":"query","required":false,"description":"Dollar tokens, for these limits: face_value (Count them as dollars), ask (Ask first). Optional; unset clears it.","schema":{"type":"string","enum":["face_value","ask","unset"]}},{"name":"pay_to_check","in":"query","required":false,"description":"The address a payment goes to: must_match (Must be one the store published), ask_if_unlisted (Ask when the store published none), off (Don't check). Optional; unset clears it.","schema":{"type":"string","enum":["must_match","ask_if_unlisted","off","unset"]}},{"name":"which_stores","in":"query","required":false,"description":"Buy from: known (Only stores marked known), ask_new (Known stores; new ones after a yes), any (Any store). Default ask_new.","schema":{"type":"string","enum":["known","ask_new","any"]}},{"name":"require_stores_md","in":"query","required":false,"description":"Only stores that publish a STORES.md: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"require_refunds","in":"query","required":false,"description":"Only listings that say what happens on a refund: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"max_listing_age_days","in":"query","required":false,"description":"Read a listing again before paying when it is older than (days). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":365}},{"name":"price_drift_pct","in":"query","required":false,"description":"Most over the listed price (%). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":0,"maximum":100}},{"name":"refresh_days","in":"query","required":false,"description":"Pull your stores again every (days). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":90}},{"name":"gone_products","in":"query","required":false,"description":"When a store stops listing a product: mark (Mark it gone), drop (Remove it). Optional; unset clears it.","schema":{"type":"string","enum":["mark","drop","unset"]}},{"name":"log_purchases","in":"query","required":false,"description":"Log every purchase in STORES.md: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"report","in":"query","required":false,"description":"Tell me about purchases: each (After each one), daily (Once a day), asked (When I ask). Optional; unset clears it.","schema":{"type":"string","enum":["each","daily","asked","unset"]}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"checkPurchase","summary":"Check a purchase before paying","description":"The last check before money moves. Send the payment request (the whole HTTP 402 answer: x402 version 1 or 2, L402, or a price header) and, ideally, the store's STORES.md or your own entry for it. It reads the amount, asset, network and pay-to address, matches them to the listing, and checks them against your rules: the same settings as the skill (or a preset). Returns fits_your_rules, ask_first or stop, with every reason, the total, and a line for your purchase log. Without a 402, it checks a listed product and a way to pay. It never pays, and a fit is a check of what you sent, not an approval.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"payment_request":{"type":"string","maxLength":30000,"description":"The 402 answer as received: status line, headers and body, or just the PAYMENT-REQUIRED value or the JSON body."},"stores_md":{"type":"string","maxLength":30000,"description":"The store's STORES.md, or the entry for it from your own STORES.md (its status: known, new or blocked counts)."},"product":{"type":"string","maxLength":120,"description":"The product's id or name, when the listing has several and there is no 402 to match by URL."},"rail":{"type":"string","enum":["x402","l402","checkout","agent-checkout","mcp","invoice","transfer","free","contact"],"description":"The way to pay, when there is no 402. Default: the listing's first allowed one."},"quantity":{"type":"number","minimum":1,"maximum":1000000000,"description":"How many: requests for a 402, units of the listing's price otherwise. Default 1."},"store_status":{"type":"string","enum":["known","new","blocked"],"description":"The store's status in your STORES.md, when stores_md doesn't say. Default new."},"listing_age_days":{"type":"number","minimum":0,"maximum":36500,"description":"Days since you read the listing, when stores_md has no pulled date."},"spent_today":{"type":"number","minimum":0,"maximum":1000000000000,"description":"Dollars spent today so far, from your purchase log. Default 0."},"spent_this_month":{"type":"number","minimum":0,"maximum":1000000000000,"description":"Dollars spent this month so far. Default 0."},"spent_at_store_this_month":{"type":"number","minimum":0,"maximum":1000000000000,"description":"Dollars spent at this store this month. Default 0."},"usd_per_unit":{"type":"number","minimum":0,"maximum":1000000000000,"description":"The person's own rate, in dollars per unit of the asset, for anything that isn't dollars or a dollar token. No rates are looked up."},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"Decimal places of the token, when the request doesn't say. Default 6."},"preset":{"type":"string","enum":["core","recommended","test_money","strict"],"description":"Rules to start from: core, recommended, test_money, strict. Each setting overrides it. Unset rules follow the skill's defaults."},"max_per_purchase":{"type":"number","minimum":0,"maximum":100000,"description":"Most for one purchase ($). Default 5. Out-of-range values are clamped."},"ask_over":{"type":"number","minimum":0,"maximum":100000,"description":"Ask before any purchase over ($). Default 1. Capped at max_per_purchase. Out-of-range values are clamped."},"daily_cap":{"type":"number","minimum":0,"maximum":1000000,"description":"Most per day, all purchases ($). Optional; unset clears it. Out-of-range values are clamped."},"monthly_cap":{"type":"number","minimum":0,"maximum":10000000,"description":"Most per month, all purchases ($). Optional; unset clears it. Out-of-range values are clamped."},"store_monthly_cap":{"type":"number","minimum":0,"maximum":1000000,"description":"Most per month at any one store ($). Optional; unset clears it. Out-of-range values are clamped."},"alert_pct":{"type":"integer","minimum":10,"maximum":100,"description":"Tell me at this share of a cap (%). Optional; unset clears it. Out-of-range values are clamped."},"x402":{"type":"string","enum":["allow","ask","never","unset"],"description":"Pay per request over x402: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"l402":{"type":"string","enum":["allow","ask","never","unset"],"description":"Pay per request with Lightning (L402): allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"paid_tools":{"type":"string","enum":["allow","ask","never","unset"],"description":"Paid tools on MCP servers: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"checkout_links":{"type":"string","enum":["allow","ask","never","unset"],"description":"Checkout pages and payment links: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"agent_checkout":{"type":"string","enum":["allow","ask","never","unset"],"description":"Checkout APIs for agents: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"invoices":{"type":"string","enum":["allow","ask","never","unset"],"description":"Invoices, paid later: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"transfers":{"type":"string","enum":["ask","never","unset"],"description":"Direct transfers to an address: ask (Ask first, every time), never (Never). Optional; unset clears it."},"recurring":{"type":"string","enum":["allow","ask","never","unset"],"description":"Subscriptions and anything that renews: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"networks":{"type":"string","enum":["test_only","any","unset"],"description":"Networks: test_only (Test networks only (test money)), any (Main and test networks). Optional; unset clears it."},"other_assets":{"type":"string","enum":["ask","never","unset"],"description":"Paying in anything but dollars or dollar tokens: ask (Ask first), never (Never). Optional; unset clears it."},"dollar_tokens":{"type":"string","enum":["face_value","ask","unset"],"description":"Dollar tokens, for these limits: face_value (Count them as dollars), ask (Ask first). Optional; unset clears it."},"pay_to_check":{"type":"string","enum":["must_match","ask_if_unlisted","off","unset"],"description":"The address a payment goes to: must_match (Must be one the store published), ask_if_unlisted (Ask when the store published none), off (Don't check). Optional; unset clears it."},"which_stores":{"type":"string","enum":["known","ask_new","any"],"description":"Buy from: known (Only stores marked known), ask_new (Known stores; new ones after a yes), any (Any store). Default ask_new."},"require_stores_md":{"type":"string","enum":["yes","no","unset"],"description":"Only stores that publish a STORES.md: yes (Yes), no (No). Optional; unset clears it."},"require_refunds":{"type":"string","enum":["yes","no","unset"],"description":"Only listings that say what happens on a refund: yes (Yes), no (No). Optional; unset clears it."},"max_listing_age_days":{"type":"integer","minimum":1,"maximum":365,"description":"Read a listing again before paying when it is older than (days). Optional; unset clears it. Out-of-range values are clamped."},"price_drift_pct":{"type":"integer","minimum":0,"maximum":100,"description":"Most over the listed price (%). Optional; unset clears it. Out-of-range values are clamped."},"refresh_days":{"type":"integer","minimum":1,"maximum":90,"description":"Pull your stores again every (days). Optional; unset clears it. Out-of-range values are clamped."},"gone_products":{"type":"string","enum":["mark","drop","unset"],"description":"When a store stops listing a product: mark (Mark it gone), drop (Remove it). Optional; unset clears it."},"log_purchases":{"type":"string","enum":["yes","no","unset"],"description":"Log every purchase in STORES.md: yes (Yes), no (No). Optional; unset clears it."},"report":{"type":"string","enum":["each","daily","asked","unset"],"description":"Tell me about purchases: each (After each one), daily (Once a day), asked (When I ask). Optional; unset clears it."}}},"example":{"payment_request":"HTTP/1.1 402 Payment Required\ncontent-type: application/json\npayment-required: eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJQQVlNRU5ULVNJR05BVFVSRSBoZWFkZXIgaXMgcmVxdWlyZWQiLCJyZXNvdXJjZSI6eyJ1cmwiOiJodHRwczovL2FwaS5leGFtcGxlLmNvbS92MS9mb3JlY2FzdCIsImRlc2NyaXB0aW9uIjoiSG91cmx5IGZvcmVjYXN0LCA0OCBob3VycyIsIm1pbWVUeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJlaXAxNTU6ODQ1MyIsImFtb3VudCI6IjIwMDAiLCJhc3NldCI6IjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNSIsInBheVRvIjoiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxIiwibWF4VGltZW91dFNlY29uZHMiOjYwLCJleHRyYSI6eyJuYW1lIjoiVVNEIn19XX0=\n\n{}","stores_md":"---\nstores: 1\nupdated: 2026-10-15\n---\n\n# Example Weather\n\nForecasts and history for any place on Earth, sold by the call or by the month.\n\n- url: https://example.com\n- terms: https://example.com/terms\n- refunds: Plans within 14 days. Single calls are final.\n- pay_to: eip155:8453 0x00000000000000000000000000000000000000E1\n- contact: https://example.com/support\n\n## Forecast lookup\n\nHourly forecast for the next 48 hours, for one place.\n\n- id: forecast\n- price: 0.002 USD per call\n- pay: x402 https://api.example.com/v1/forecast\n- delivers: JSON, at once\n- tags: weather, forecast\n\n## History pack, 2025\n\nEvery hour of 2025 for one city, as one file.\n\n- id: history-2025\n- price: 12 USD once\n- pay: checkout https://example.com/buy/history-2025\n- pay: agent-checkout https://example.com/agents/checkout\n- delivers: a CSV download link, within a minute\n\n## Pro plan\n\n- id: pro\n- price: 20 USD per month\n- pay: checkout https://example.com/buy/pro\n- pay: invoice https://example.com/agents/invoice\n- delivers: an API key by email, within an hour\n- refunds: 14 days\n","preset":"recommended"}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}},"/api/v1/compare_offers":{"get":{"operationId":"compareOffersGet","summary":"Compare offers for the same need","description":"Puts offers on one footing: what each costs for the amount you'll actually use. Handles prices per unit, per block of units (5 USD per 1,000 calls), renewing plans over a number of months, one-off prices, setup fees and minimum spends. Ranks offers in one currency; it has no exchange rates, so offers in another currency are listed but not ranked. Arithmetic on the prices you send.","parameters":[{"name":"offers","in":"query","required":true,"description":"Offers: [{ \"label\": \"Per call\", \"price\": \"0.002 USD per call\", \"setup_fee\": 0, \"minimum\": 0 }]. Prices use the STORES.md price phrase. URL-encoded JSON.","schema":{"type":"string"}},{"name":"need","in":"query","required":true,"description":"How many units you'll use, like 2500 calls.","schema":{"type":"number","minimum":0,"maximum":1000000000000}},{"name":"unit","in":"query","required":false,"description":"The unit of need, like call. Default: the first offer's unit.","schema":{"type":"string"}},{"name":"months","in":"query","required":false,"description":"Months to cover, for renewing plans. Default 1.","schema":{"type":"number","minimum":0.03,"maximum":600}},{"name":"blocks","in":"query","required":false,"description":"Prices per block are bought in whole blocks (default true); false prorates them.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"compareOffers","summary":"Compare offers for the same need","description":"Puts offers on one footing: what each costs for the amount you'll actually use. Handles prices per unit, per block of units (5 USD per 1,000 calls), renewing plans over a number of months, one-off prices, setup fees and minimum spends. Ranks offers in one currency; it has no exchange rates, so offers in another currency are listed but not ranked. Arithmetic on the prices you send.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"offers":{"type":"array","description":"Offers: [{ \"label\": \"Per call\", \"price\": \"0.002 USD per call\", \"setup_fee\": 0, \"minimum\": 0 }]. Prices use the STORES.md price phrase.","items":{"type":"object","properties":{"label":{"type":"string","maxLength":80},"price":{"type":"string","maxLength":120},"setup_fee":{"type":"number","minimum":0},"minimum":{"type":"number","minimum":0}},"required":["label","price"]},"minItems":1,"maxItems":50},"need":{"type":"number","minimum":0,"maximum":1000000000000,"description":"How many units you'll use, like 2500 calls."},"unit":{"type":"string","maxLength":40,"description":"The unit of need, like call. Default: the first offer's unit."},"months":{"type":"number","minimum":0.03,"maximum":600,"default":1,"description":"Months to cover, for renewing plans. Default 1."},"blocks":{"type":"boolean","default":true,"description":"Prices per block are bought in whole blocks (default true); false prorates them."}},"required":["offers","need"]},"example":{"offers":[{"label":"Per call","price":"0.002 USD per call"},{"label":"Block of 1,000","price":"1.5 USD per 1,000 calls"},{"label":"Monthly plan","price":"15 USD per month"}],"need":2500,"unit":"call"}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}},"/api/v1/check_stores_md":{"get":{"operationId":"checkStoresMdGet","summary":"Check a STORES.md file","description":"Checks a STORES.md file against the format: every store has an https url, every product a price and a way to pay, pay lines name a known way to pay with an https link, and prices are readable. Warns about missing delivery and refund lines, missing pay_to addresses for x402, stale dates, and text that reads like instructions to agents. Returns errors and warnings with line numbers and the file rewritten in the canonical form. A clean result checks the format only; it says nothing about the store.","parameters":[{"name":"text","in":"query","required":true,"description":"The STORES.md file (up to 60,000 characters).","schema":{"type":"string"}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"checkStoresMd","summary":"Check a STORES.md file","description":"Checks a STORES.md file against the format: every store has an https url, every product a price and a way to pay, pay lines name a known way to pay with an https link, and prices are readable. Warns about missing delivery and refund lines, missing pay_to addresses for x402, stale dates, and text that reads like instructions to agents. Returns errors and warnings with line numbers and the file rewritten in the canonical form. A clean result checks the format only; it says nothing about the store.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":60000,"description":"The STORES.md file (up to 60,000 characters)."}},"required":["text"]},"example":{"text":"---\nstores: 1\nupdated: 2026-10-15\n---\n\n# Example Weather\n\nForecasts and history for any place on Earth, sold by the call or by the month.\n\n- url: https://example.com\n- terms: https://example.com/terms\n- refunds: Plans within 14 days. Single calls are final.\n- pay_to: eip155:8453 0x00000000000000000000000000000000000000E1\n- contact: https://example.com/support\n\n## Forecast lookup\n\nHourly forecast for the next 48 hours, for one place.\n\n- id: forecast\n- price: 0.002 USD per call\n- pay: x402 https://api.example.com/v1/forecast\n- delivers: JSON, at once\n- tags: weather, forecast\n\n## History pack, 2025\n\nEvery hour of 2025 for one city, as one file.\n\n- id: history-2025\n- price: 12 USD once\n- pay: checkout https://example.com/buy/history-2025\n- pay: agent-checkout https://example.com/agents/checkout\n- delivers: a CSV download link, within a minute\n\n## Pro plan\n\n- id: pro\n- price: 20 USD per month\n- pay: checkout https://example.com/buy/pro\n- pay: invoice https://example.com/agents/invoice\n- delivers: an API key by email, within an hour\n- refunds: 14 days\n"}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}},"/api/v1/build_settings":{"get":{"operationId":"buildSettingsGet","summary":"Write your settings into the skill","description":"Turns a preset and settings into the sections written at the top of STORES.md. Every setting is a number or a fixed choice; the catalog is at https://www.stores.md/api/v1/settings. Returns the sections as Markdown, the settings as JSON, a link to the skill with them written in and a one-line install. Out-of-range numbers are clamped with a note. Nothing is stored. Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree.","parameters":[{"name":"preset","in":"query","required":false,"description":"Starting point: core, recommended, test_money, strict. Applied first; each setting overrides it.","schema":{"type":"string","enum":["core","recommended","test_money","strict"]}},{"name":"max_per_purchase","in":"query","required":false,"description":"Most for one purchase ($). Default 5. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":100000}},{"name":"ask_over","in":"query","required":false,"description":"Ask before any purchase over ($). Default 1. Capped at max_per_purchase. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":100000}},{"name":"daily_cap","in":"query","required":false,"description":"Most per day, all purchases ($). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":1000000}},{"name":"monthly_cap","in":"query","required":false,"description":"Most per month, all purchases ($). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":10000000}},{"name":"store_monthly_cap","in":"query","required":false,"description":"Most per month at any one store ($). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"number","minimum":0,"maximum":1000000}},{"name":"alert_pct","in":"query","required":false,"description":"Tell me at this share of a cap (%). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":10,"maximum":100}},{"name":"x402","in":"query","required":false,"description":"Pay per request over x402: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"l402","in":"query","required":false,"description":"Pay per request with Lightning (L402): allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"paid_tools","in":"query","required":false,"description":"Paid tools on MCP servers: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"checkout_links","in":"query","required":false,"description":"Checkout pages and payment links: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"agent_checkout","in":"query","required":false,"description":"Checkout APIs for agents: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"invoices","in":"query","required":false,"description":"Invoices, paid later: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"transfers","in":"query","required":false,"description":"Direct transfers to an address: ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["ask","never","unset"]}},{"name":"recurring","in":"query","required":false,"description":"Subscriptions and anything that renews: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["allow","ask","never","unset"]}},{"name":"networks","in":"query","required":false,"description":"Networks: test_only (Test networks only (test money)), any (Main and test networks). Optional; unset clears it.","schema":{"type":"string","enum":["test_only","any","unset"]}},{"name":"other_assets","in":"query","required":false,"description":"Paying in anything but dollars or dollar tokens: ask (Ask first), never (Never). Optional; unset clears it.","schema":{"type":"string","enum":["ask","never","unset"]}},{"name":"dollar_tokens","in":"query","required":false,"description":"Dollar tokens, for these limits: face_value (Count them as dollars), ask (Ask first). Optional; unset clears it.","schema":{"type":"string","enum":["face_value","ask","unset"]}},{"name":"pay_to_check","in":"query","required":false,"description":"The address a payment goes to: must_match (Must be one the store published), ask_if_unlisted (Ask when the store published none), off (Don't check). Optional; unset clears it.","schema":{"type":"string","enum":["must_match","ask_if_unlisted","off","unset"]}},{"name":"which_stores","in":"query","required":false,"description":"Buy from: known (Only stores marked known), ask_new (Known stores; new ones after a yes), any (Any store). Default ask_new.","schema":{"type":"string","enum":["known","ask_new","any"]}},{"name":"require_stores_md","in":"query","required":false,"description":"Only stores that publish a STORES.md: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"require_refunds","in":"query","required":false,"description":"Only listings that say what happens on a refund: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"max_listing_age_days","in":"query","required":false,"description":"Read a listing again before paying when it is older than (days). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":365}},{"name":"price_drift_pct","in":"query","required":false,"description":"Most over the listed price (%). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":0,"maximum":100}},{"name":"refresh_days","in":"query","required":false,"description":"Pull your stores again every (days). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":90}},{"name":"gone_products","in":"query","required":false,"description":"When a store stops listing a product: mark (Mark it gone), drop (Remove it). Optional; unset clears it.","schema":{"type":"string","enum":["mark","drop","unset"]}},{"name":"log_purchases","in":"query","required":false,"description":"Log every purchase in STORES.md: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"report","in":"query","required":false,"description":"Tell me about purchases: each (After each one), daily (Once a day), asked (When I ask). Optional; unset clears it.","schema":{"type":"string","enum":["each","daily","asked","unset"]}},{"name":"format","in":"query","required":false,"description":"section (default): the settings sections only; skill: the whole skill file too.","schema":{"type":"string","enum":["section","skill"]}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"buildSettings","summary":"Write your settings into the skill","description":"Turns a preset and settings into the sections written at the top of STORES.md. Every setting is a number or a fixed choice; the catalog is at https://www.stores.md/api/v1/settings. Returns the sections as Markdown, the settings as JSON, a link to the skill with them written in and a one-line install. Out-of-range numbers are clamped with a note. Nothing is stored. Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"preset":{"type":"string","enum":["core","recommended","test_money","strict"],"description":"Starting point: core, recommended, test_money, strict. Applied first; each setting overrides it."},"max_per_purchase":{"type":"number","minimum":0,"maximum":100000,"description":"Most for one purchase ($). Default 5. Out-of-range values are clamped."},"ask_over":{"type":"number","minimum":0,"maximum":100000,"description":"Ask before any purchase over ($). Default 1. Capped at max_per_purchase. Out-of-range values are clamped."},"daily_cap":{"type":"number","minimum":0,"maximum":1000000,"description":"Most per day, all purchases ($). Optional; unset clears it. Out-of-range values are clamped."},"monthly_cap":{"type":"number","minimum":0,"maximum":10000000,"description":"Most per month, all purchases ($). Optional; unset clears it. Out-of-range values are clamped."},"store_monthly_cap":{"type":"number","minimum":0,"maximum":1000000,"description":"Most per month at any one store ($). Optional; unset clears it. Out-of-range values are clamped."},"alert_pct":{"type":"integer","minimum":10,"maximum":100,"description":"Tell me at this share of a cap (%). Optional; unset clears it. Out-of-range values are clamped."},"x402":{"type":"string","enum":["allow","ask","never","unset"],"description":"Pay per request over x402: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"l402":{"type":"string","enum":["allow","ask","never","unset"],"description":"Pay per request with Lightning (L402): allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"paid_tools":{"type":"string","enum":["allow","ask","never","unset"],"description":"Paid tools on MCP servers: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"checkout_links":{"type":"string","enum":["allow","ask","never","unset"],"description":"Checkout pages and payment links: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"agent_checkout":{"type":"string","enum":["allow","ask","never","unset"],"description":"Checkout APIs for agents: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"invoices":{"type":"string","enum":["allow","ask","never","unset"],"description":"Invoices, paid later: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"transfers":{"type":"string","enum":["ask","never","unset"],"description":"Direct transfers to an address: ask (Ask first, every time), never (Never). Optional; unset clears it."},"recurring":{"type":"string","enum":["allow","ask","never","unset"],"description":"Subscriptions and anything that renews: allow (Allowed, within your limits), ask (Ask first, every time), never (Never). Optional; unset clears it."},"networks":{"type":"string","enum":["test_only","any","unset"],"description":"Networks: test_only (Test networks only (test money)), any (Main and test networks). Optional; unset clears it."},"other_assets":{"type":"string","enum":["ask","never","unset"],"description":"Paying in anything but dollars or dollar tokens: ask (Ask first), never (Never). Optional; unset clears it."},"dollar_tokens":{"type":"string","enum":["face_value","ask","unset"],"description":"Dollar tokens, for these limits: face_value (Count them as dollars), ask (Ask first). Optional; unset clears it."},"pay_to_check":{"type":"string","enum":["must_match","ask_if_unlisted","off","unset"],"description":"The address a payment goes to: must_match (Must be one the store published), ask_if_unlisted (Ask when the store published none), off (Don't check). Optional; unset clears it."},"which_stores":{"type":"string","enum":["known","ask_new","any"],"description":"Buy from: known (Only stores marked known), ask_new (Known stores; new ones after a yes), any (Any store). Default ask_new."},"require_stores_md":{"type":"string","enum":["yes","no","unset"],"description":"Only stores that publish a STORES.md: yes (Yes), no (No). Optional; unset clears it."},"require_refunds":{"type":"string","enum":["yes","no","unset"],"description":"Only listings that say what happens on a refund: yes (Yes), no (No). Optional; unset clears it."},"max_listing_age_days":{"type":"integer","minimum":1,"maximum":365,"description":"Read a listing again before paying when it is older than (days). Optional; unset clears it. Out-of-range values are clamped."},"price_drift_pct":{"type":"integer","minimum":0,"maximum":100,"description":"Most over the listed price (%). Optional; unset clears it. Out-of-range values are clamped."},"refresh_days":{"type":"integer","minimum":1,"maximum":90,"description":"Pull your stores again every (days). Optional; unset clears it. Out-of-range values are clamped."},"gone_products":{"type":"string","enum":["mark","drop","unset"],"description":"When a store stops listing a product: mark (Mark it gone), drop (Remove it). Optional; unset clears it."},"log_purchases":{"type":"string","enum":["yes","no","unset"],"description":"Log every purchase in STORES.md: yes (Yes), no (No). Optional; unset clears it."},"report":{"type":"string","enum":["each","daily","asked","unset"],"description":"Tell me about purchases: each (After each one), daily (Once a day), asked (When I ask). Optional; unset clears it."},"format":{"type":"string","enum":["section","skill"],"description":"section (default): the settings sections only; skill: the whole skill file too."}}},"example":{"preset":"recommended"}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}}},"components":{"schemas":{"Result":{"type":"object","additionalProperties":true,"properties":{"tool":{"type":"string"},"summary":{"type":"string"},"disclaimer":{"type":"string"},"terms":{"type":"string"}},"required":["disclaimer","terms"]},"Problem":{"type":"object","properties":{"error":{"type":"string"},"hint":{"type":"string"},"docs":{"type":"string"},"disclaimer":{"type":"string"},"terms":{"type":"string"}},"required":["error","disclaimer","terms"]}}}}