{
  "schemaVersion": "1.0",
  "item": {
    "slug": "buy-anything",
    "name": "Buy Anything",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/tsyvic/buy-anything",
    "canonicalUrl": "https://clawhub.ai/tsyvic/buy-anything",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/buy-anything",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=buy-anything",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/buy-anything"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/buy-anything",
    "agentPageUrl": "https://openagent3.xyz/skills/buy-anything/agent",
    "manifestUrl": "https://openagent3.xyz/skills/buy-anything/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/buy-anything/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Buy Anything",
        "body": "Purchase products from Amazon and Shopify stores through Rye checkout. Like having a personal shopper in your chat app."
      },
      {
        "title": "When to Use",
        "body": "Activate this skill when the user:\n\nShares an Amazon product URL (amazon.com/dp/...)\nShares a Shopify store product URL (any *.myshopify.com or custom-domain Shopify store)\nSays \"buy\", \"order\", or \"purchase\" with a product link\nWants to buy something from an online store"
      },
      {
        "title": "IMPORTANT: How This Works",
        "body": "DO NOT try to fetch the product URL yourself with web_fetch or read tools\nThe Rye API handles all product lookup - you just pass the URL\nYou don't need to know product details before checkout\nSimply collect shipping address and set up the card, then call the API\nThe Rye API validates the URL and returns product details — if the URL is unsupported or invalid, the API will return an error"
      },
      {
        "title": "Checkout Flow",
        "body": "User provides product URL - confirm you'll help them buy it\nCollect shipping address (or use saved address from memory)\nSet up card via BasisTheory (or use saved BT token from memory)\nSubmit order to Rye API using bash (see Step 2)\nShow order confirmation from API response\nSave BT token/address to memory for future purchases (ask permission first)"
      },
      {
        "title": "Step 1: Secure Card Capture via BasisTheory",
        "body": "If the user does NOT have a saved BasisTheory token in memory, capture their card securely through the browser.\n\nTry to open the card capture page in the user's browser:\n\nopen \"https://mcp.rye.com/bt-card-capture\" 2>/dev/null || xdg-open \"https://mcp.rye.com/bt-card-capture\" 2>/dev/null\n\nIf the command fails (e.g. unsupported platform), provide the URL as a clickable link instead: https://mcp.rye.com/bt-card-capture\n\nTell the user: \"I've opened a secure card entry page in your browser. Please enter your card details there and click Submit. Your card info never touches this chat — it goes directly to BasisTheory's PCI-compliant vault. After submitting, copy the token shown on the page and paste it back here.\"\n\nWait for the user to paste the token (a UUID like d1ff0c32-...).\n\nIf the user already has a saved BT token in memory, skip this step entirely and use the saved token.\n\nIf a purchase fails with a CVC/CVV-related error (e.g. \"Missing information\", payment session issues), the saved token's CVC may have expired (BasisTheory clears CVC after 24 hours). Open the CVC refresh page:\n\nopen \"https://mcp.rye.com/bt-cvc-refresh?token_id=SAVED_TOKEN_ID\" 2>/dev/null || xdg-open \"https://mcp.rye.com/bt-cvc-refresh?token_id=SAVED_TOKEN_ID\" 2>/dev/null\n\nIf the command fails, provide the URL as a clickable link instead.\n\nTell the user: \"Your saved card's security code has expired. I've opened a page to re-enter just your CVC — no need to re-enter the full card. Close the tab when done and I'll retry.\"\n\nThen retry the purchase with the same saved token."
      },
      {
        "title": "Step 2: Submit Order to Rye",
        "body": "The partner endpoint is authenticated by the partner path — no API key header is needed. Only requests to /partners/clawdbot/ are accepted.\n\ncurl -s -X POST https://api.rye.com/api/v1/partners/clawdbot/purchase \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"productUrl\": \"https://www.example-store.com/products/cool-thing\",\n    \"quantity\": 1,\n    \"buyer\": {\n      \"firstName\": \"John\",\n      \"lastName\": \"Doe\",\n      \"email\": \"john@example.com\",\n      \"phone\": \"+14155551234\",\n      \"address1\": \"123 Main St\",\n      \"city\": \"San Francisco\",\n      \"province\": \"CA\",\n      \"postalCode\": \"94102\",\n      \"country\": \"US\"\n    },\n    \"paymentMethod\": {\n      \"type\": \"basis_theory_token\",\n      \"basisTheoryToken\": \"d1ff0c32-...\"\n    },\n    \"constraints\": {\n      \"maxTotalPrice\": 50000\n    }\n  }'\n\nconstraints.maxTotalPrice: The user's spending limit in cents (e.g. $500 = 50000). The API will reject the order if the total exceeds this. If the user said \"no limit\", omit the constraints field entirely.\n\nThe POST response contains an id field (e.g. ci_abc123). Use this to poll for the order status."
      },
      {
        "title": "Step 3: Poll for Order Status",
        "body": "After submitting the order, use the id from the POST response to poll for the final result:\n\ncurl -s https://api.rye.com/api/v1/partners/clawdbot/purchase/CHECKOUT_INTENT_ID\n\nReplace CHECKOUT_INTENT_ID with the actual ID (e.g. ci_abc123).\n\nPoll every 5 seconds until the state is a terminal state. The response state will be one of:\n\nretrieving_offer — fetching product details and pricing (keep polling)\nplacing_order — order is being placed with the store (keep polling)\ncompleted — order placed successfully (stop polling)\nfailed — order failed (stop polling)\n\nWhen completed, show the user:\n\nProduct name from offer.product.title\nTotal from offer.cost.total (format as dollars, value is in cents)\nOrder ID from orderId (if present)\n\nWhen failed, show failureReason.message to the user."
      },
      {
        "title": "Pricing & Shipping",
        "body": "The API validates the store automatically. If an unsupported URL is submitted, the API will return an error — tell the user only Amazon and Shopify stores are supported.\n\nShopify stores: Standard store pricing — no markup from us\nAmazon: 3% fee to cover transaction costs\nAmazon orders under $15 have a $6.99 shipping charge\nAmazon orders $15 and above get free 2-day Prime shipping\nAmazon orders are processed through a 3rd party Amazon account (not the user's personal Amazon)\nUser will receive an email with confirmation and order details\nFor returns or refunds, direct the user to support@rye.com"
      },
      {
        "title": "Example Conversation",
        "body": "User: Buy this for me https://amazon.com/dp/B0DJLKV4N9\n\nYou: I'll help you buy that! Where should I ship it?\n     (Need: name, address, city, state, zip, email, phone)\n\nUser: John Doe, 123 Main St, San Francisco CA 94102, john@example.com, +14155551234\n\nYou: Got it! What's your maximum purchase price? (I'll warn you if an order exceeds this)\n     Say \"no limit\" to skip this.\n\nUser: $500\n\nYou: Max set to $500. I'm opening a secure card entry page in your browser now.\n     Please enter your card details there — your card info never touches this chat.\n     After submitting, copy the token shown on the page and paste it here.\n     [Opens https://mcp.rye.com/bt-card-capture]\n\nUser: d1ff0c32-a1b2-4c3d-8e4f-567890abcdef\n\nYou: Got it! Submitting your order...\n     [POST to purchase API with the BT token, gets back ci_abc123]\n\nYou: Order submitted! Waiting for confirmation...\n     [Polls GET /purchase/ci_abc123 every 5 seconds]\n\nYou: Order confirmed!\n     Product: Wireless Earbuds Pro\n     Total: $358.44 (includes 3% service fee)\n     Order ID: RYE-ABC123\n\n     Would you like me to save your card token and address for faster checkout next time?"
      },
      {
        "title": "Spending Limit",
        "body": "Before the first purchase, ask the user what their maximum purchase price is. Store this in memory.\n\nIf an order total (including any fees) exceeds the limit, warn the user and ask for confirmation\nUser can say \"no limit\" to disable this check"
      },
      {
        "title": "Memory",
        "body": "Saved data is stored in the agent's local memory on the user's device only — it is not synced to the cloud or shared across devices.\n\nAfter first successful purchase (with user permission):\n\nSave the BasisTheory token ID to memory for future purchases (NOT raw card details — the token is an opaque ID that cannot be reversed into card numbers)\nSave shipping address to memory\nSave maximum purchase price to memory\nOn subsequent purchases, reuse the saved BT token directly — no card entry needed\nAlways confirm with the user before placing an order with a saved token\nIf the user asks to remove their saved card, tell them to ask you to forget the token from memory. To also revoke the token from BasisTheory's vault, direct them to contact support@rye.com"
      }
    ],
    "body": "Buy Anything\n\nPurchase products from Amazon and Shopify stores through Rye checkout. Like having a personal shopper in your chat app.\n\nWhen to Use\n\nActivate this skill when the user:\n\nShares an Amazon product URL (amazon.com/dp/...)\nShares a Shopify store product URL (any *.myshopify.com or custom-domain Shopify store)\nSays \"buy\", \"order\", or \"purchase\" with a product link\nWants to buy something from an online store\nIMPORTANT: How This Works\nDO NOT try to fetch the product URL yourself with web_fetch or read tools\nThe Rye API handles all product lookup - you just pass the URL\nYou don't need to know product details before checkout\nSimply collect shipping address and set up the card, then call the API\nThe Rye API validates the URL and returns product details — if the URL is unsupported or invalid, the API will return an error\nCheckout Flow\nUser provides product URL - confirm you'll help them buy it\nCollect shipping address (or use saved address from memory)\nSet up card via BasisTheory (or use saved BT token from memory)\nSubmit order to Rye API using bash (see Step 2)\nShow order confirmation from API response\nSave BT token/address to memory for future purchases (ask permission first)\nStep 1: Secure Card Capture via BasisTheory\n\nIf the user does NOT have a saved BasisTheory token in memory, capture their card securely through the browser.\n\nTry to open the card capture page in the user's browser:\n\nopen \"https://mcp.rye.com/bt-card-capture\" 2>/dev/null || xdg-open \"https://mcp.rye.com/bt-card-capture\" 2>/dev/null\n\n\nIf the command fails (e.g. unsupported platform), provide the URL as a clickable link instead: https://mcp.rye.com/bt-card-capture\n\nTell the user: \"I've opened a secure card entry page in your browser. Please enter your card details there and click Submit. Your card info never touches this chat — it goes directly to BasisTheory's PCI-compliant vault. After submitting, copy the token shown on the page and paste it back here.\"\n\nWait for the user to paste the token (a UUID like d1ff0c32-...).\n\nIf the user already has a saved BT token in memory, skip this step entirely and use the saved token.\n\nIf a purchase fails with a CVC/CVV-related error (e.g. \"Missing information\", payment session issues), the saved token's CVC may have expired (BasisTheory clears CVC after 24 hours). Open the CVC refresh page:\n\nopen \"https://mcp.rye.com/bt-cvc-refresh?token_id=SAVED_TOKEN_ID\" 2>/dev/null || xdg-open \"https://mcp.rye.com/bt-cvc-refresh?token_id=SAVED_TOKEN_ID\" 2>/dev/null\n\n\nIf the command fails, provide the URL as a clickable link instead.\n\nTell the user: \"Your saved card's security code has expired. I've opened a page to re-enter just your CVC — no need to re-enter the full card. Close the tab when done and I'll retry.\"\n\nThen retry the purchase with the same saved token.\n\nStep 2: Submit Order to Rye\n\nThe partner endpoint is authenticated by the partner path — no API key header is needed. Only requests to /partners/clawdbot/ are accepted.\n\ncurl -s -X POST https://api.rye.com/api/v1/partners/clawdbot/purchase \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"productUrl\": \"https://www.example-store.com/products/cool-thing\",\n    \"quantity\": 1,\n    \"buyer\": {\n      \"firstName\": \"John\",\n      \"lastName\": \"Doe\",\n      \"email\": \"john@example.com\",\n      \"phone\": \"+14155551234\",\n      \"address1\": \"123 Main St\",\n      \"city\": \"San Francisco\",\n      \"province\": \"CA\",\n      \"postalCode\": \"94102\",\n      \"country\": \"US\"\n    },\n    \"paymentMethod\": {\n      \"type\": \"basis_theory_token\",\n      \"basisTheoryToken\": \"d1ff0c32-...\"\n    },\n    \"constraints\": {\n      \"maxTotalPrice\": 50000\n    }\n  }'\n\n\nconstraints.maxTotalPrice: The user's spending limit in cents (e.g. $500 = 50000). The API will reject the order if the total exceeds this. If the user said \"no limit\", omit the constraints field entirely.\n\nThe POST response contains an id field (e.g. ci_abc123). Use this to poll for the order status.\n\nStep 3: Poll for Order Status\n\nAfter submitting the order, use the id from the POST response to poll for the final result:\n\ncurl -s https://api.rye.com/api/v1/partners/clawdbot/purchase/CHECKOUT_INTENT_ID\n\n\nReplace CHECKOUT_INTENT_ID with the actual ID (e.g. ci_abc123).\n\nPoll every 5 seconds until the state is a terminal state. The response state will be one of:\n\nretrieving_offer — fetching product details and pricing (keep polling)\nplacing_order — order is being placed with the store (keep polling)\ncompleted — order placed successfully (stop polling)\nfailed — order failed (stop polling)\n\nWhen completed, show the user:\n\nProduct name from offer.product.title\nTotal from offer.cost.total (format as dollars, value is in cents)\nOrder ID from orderId (if present)\n\nWhen failed, show failureReason.message to the user.\n\nPricing & Shipping\n\nThe API validates the store automatically. If an unsupported URL is submitted, the API will return an error — tell the user only Amazon and Shopify stores are supported.\n\nShopify stores: Standard store pricing — no markup from us\nAmazon: 3% fee to cover transaction costs\nAmazon orders under $15 have a $6.99 shipping charge\nAmazon orders $15 and above get free 2-day Prime shipping\nAmazon orders are processed through a 3rd party Amazon account (not the user's personal Amazon)\nUser will receive an email with confirmation and order details\nFor returns or refunds, direct the user to support@rye.com\nExample Conversation\nUser: Buy this for me https://amazon.com/dp/B0DJLKV4N9\n\nYou: I'll help you buy that! Where should I ship it?\n     (Need: name, address, city, state, zip, email, phone)\n\nUser: John Doe, 123 Main St, San Francisco CA 94102, john@example.com, +14155551234\n\nYou: Got it! What's your maximum purchase price? (I'll warn you if an order exceeds this)\n     Say \"no limit\" to skip this.\n\nUser: $500\n\nYou: Max set to $500. I'm opening a secure card entry page in your browser now.\n     Please enter your card details there — your card info never touches this chat.\n     After submitting, copy the token shown on the page and paste it here.\n     [Opens https://mcp.rye.com/bt-card-capture]\n\nUser: d1ff0c32-a1b2-4c3d-8e4f-567890abcdef\n\nYou: Got it! Submitting your order...\n     [POST to purchase API with the BT token, gets back ci_abc123]\n\nYou: Order submitted! Waiting for confirmation...\n     [Polls GET /purchase/ci_abc123 every 5 seconds]\n\nYou: Order confirmed!\n     Product: Wireless Earbuds Pro\n     Total: $358.44 (includes 3% service fee)\n     Order ID: RYE-ABC123\n\n     Would you like me to save your card token and address for faster checkout next time?\n\nSpending Limit\n\nBefore the first purchase, ask the user what their maximum purchase price is. Store this in memory.\n\nIf an order total (including any fees) exceeds the limit, warn the user and ask for confirmation\nUser can say \"no limit\" to disable this check\nMemory\n\nSaved data is stored in the agent's local memory on the user's device only — it is not synced to the cloud or shared across devices.\n\nAfter first successful purchase (with user permission):\n\nSave the BasisTheory token ID to memory for future purchases (NOT raw card details — the token is an opaque ID that cannot be reversed into card numbers)\nSave shipping address to memory\nSave maximum purchase price to memory\nOn subsequent purchases, reuse the saved BT token directly — no card entry needed\nAlways confirm with the user before placing an order with a saved token\nIf the user asks to remove their saved card, tell them to ask you to forget the token from memory. To also revoke the token from BasisTheory's vault, direct them to contact support@rye.com"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/tsyvic/buy-anything",
    "publisherUrl": "https://clawhub.ai/tsyvic/buy-anything",
    "owner": "tsyvic",
    "version": "3.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/buy-anything",
    "downloadUrl": "https://openagent3.xyz/downloads/buy-anything",
    "agentUrl": "https://openagent3.xyz/skills/buy-anything/agent",
    "manifestUrl": "https://openagent3.xyz/skills/buy-anything/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/buy-anything/agent.md"
  }
}