{
  "schemaVersion": "1.0",
  "item": {
    "slug": "stock-prices",
    "name": "Stock Prices",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/anthonylee1994/stock-prices",
    "canonicalUrl": "https://clawhub.ai/anthonylee1994/stock-prices",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/stock-prices",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=stock-prices",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "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. 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. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.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/stock-prices"
    },
    "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/stock-prices",
    "agentPageUrl": "https://openagent3.xyz/skills/stock-prices/agent",
    "manifestUrl": "https://openagent3.xyz/skills/stock-prices/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/stock-prices/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. 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. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Stock Prices API Skill",
        "body": "This skill helps you work with the Stock Prices API to fetch real-time market data and stock quotes."
      },
      {
        "title": "API Endpoint",
        "body": "Base URL: https://stock-prices.on99.app\n\nPrimary Endpoint: /quotes?symbols={SYMBOLS}"
      },
      {
        "title": "Quick Start",
        "body": "Fetch stock quotes for one or more symbols (responses are in TOON format):\n\ncurl \"https://stock-prices.on99.app/quotes?symbols=NVDA\"\ncurl \"https://stock-prices.on99.app/quotes?symbols=AAPL,GOOGL,MSFT\"\n\nInstall the TOON decoder for parsing: pnpm add @toon-format/toon"
      },
      {
        "title": "Response Format",
        "body": "The API returns TOON (Token-Oriented Object Notation) format—a compact, human-readable encoding that uses ~40% fewer tokens than JSON. This makes it ideal for LLM prompts and streaming."
      },
      {
        "title": "TOON Response Example",
        "body": "quotes[1]{symbol,currentPrice,change,percentChange,highPrice,lowPrice,openPrice,previousClosePrice,preMarketPrice,preMarketChange,preMarketTime,preMarketChangePercent,...}:\n  NVDA,188.54,-1.5,-0.789308,192.48,188.12,191.405,190.04,191.8799,3.3399048,2026-02-11T13:49:16.000Z,1.771457,..."
      },
      {
        "title": "Decoding TOON Responses",
        "body": "Use @toon-format/toon to parse responses back to JavaScript/JSON:\n\nimport { decode } from \"@toon-format/toon\";\n\nconst response = await fetch(\"https://stock-prices.on99.app/quotes?symbols=NVDA\");\nconst toonText = await response.text();\nconst data = decode(toonText);\n\n// data.quotes is an array of quote objects\nconst quote = data.quotes[0];\nconsole.log(`${quote.symbol}: $${quote.currentPrice}`);\n\nThe decoded structure matches JSON—same objects, arrays, and primitives."
      },
      {
        "title": "Available Data Fields",
        "body": "FieldTypeDescriptionsymbolstringStock ticker symbolcurrentPricenumberCurrent trading pricechangenumberPrice change from previous closepercentChangenumberPercentage change from previous closehighPricenumberDay's high pricelowPricenumberDay's low priceopenPricenumberOpening pricepreviousClosePricenumberPrevious day's closing pricepreMarketPricenumberPre-market trading pricepreMarketChangenumberPre-market price changepreMarketTimestring (ISO 8601)Pre-market data timestamppreMarketChangePercentnumberPre-market percentage change"
      },
      {
        "title": "Multiple Symbols",
        "body": "Query multiple stocks by separating symbols with commas (max 50):\n\ncurl \"https://stock-prices.on99.app/quotes?symbols=AAPL,GOOGL,MSFT,TSLA,AMZN\""
      },
      {
        "title": "Error Handling",
        "body": "Always check for valid responses. Decode TOON before accessing data:\n\nimport { decode } from \"@toon-format/toon\";\n\nconst response = await fetch(\"https://stock-prices.on99.app/quotes?symbols=NVDA\");\nconst data = decode(await response.text());\n\nif (data.quotes && data.quotes.length > 0) {\n    const quote = data.quotes[0];\n    console.log(`${quote.symbol}: $${quote.currentPrice}`);\n}"
      },
      {
        "title": "Price Analysis",
        "body": "Calculate common metrics:\n\n// Determine if stock is up or down\nconst isUp = quote.change > 0;\nconst direction = isUp ? \"📈\" : \"📉\";\n\n// Calculate day's range percentage\nconst rangePct = ((quote.highPrice - quote.lowPrice) / quote.lowPrice) * 100;\n\n// Compare current to open\nconst vsOpen = quote.currentPrice - quote.openPrice;"
      },
      {
        "title": "1. Price Monitoring",
        "body": "import { decode } from \"@toon-format/toon\";\n\nasync function checkPrice(symbol: string) {\n    const res = await fetch(`https://stock-prices.on99.app/quotes?symbols=${symbol}`);\n    const data = decode(await res.text());\n    const quote = data.quotes[0];\n\n    return {\n        price: quote.currentPrice,\n        change: quote.change,\n        changePercent: quote.percentChange,\n    };\n}"
      },
      {
        "title": "2. Portfolio Tracking",
        "body": "import { decode } from \"@toon-format/toon\";\n\nasync function getPortfolio(symbols: string[]) {\n    const symbolString = symbols.join(\",\");\n    const res = await fetch(`https://stock-prices.on99.app/quotes?symbols=${symbolString}`);\n    const data = decode(await res.text());\n\n    return data.quotes.map(q => ({\n        symbol: q.symbol,\n        value: q.currentPrice,\n        dailyChange: q.percentChange,\n    }));\n}"
      },
      {
        "title": "3. Market Summary",
        "body": "import { decode } from \"@toon-format/toon\";\n\nasync function marketSummary(symbols: string[]) {\n    const res = await fetch(`https://stock-prices.on99.app/quotes?symbols=${symbols.join(\",\")}`);\n    const data = decode(await res.text());\n\n    const gainers = data.quotes.filter(q => q.change > 0);\n    const losers = data.quotes.filter(q => q.change < 0);\n\n    return {\n        totalStocks: data.quotes.length,\n        gainers: gainers.length,\n        losers: losers.length,\n        avgChange: data.quotes.reduce((sum, q) => sum + q.percentChange, 0) / data.quotes.length,\n    };\n}"
      },
      {
        "title": "Tech Giants (FAANG+)",
        "body": "AAPL - Apple\nGOOGL - Alphabet (Google)\nMETA - Meta (Facebook)\nAMZN - Amazon\nNFLX - Netflix\nMSFT - Microsoft"
      },
      {
        "title": "High-Profile Stocks",
        "body": "NVDA - NVIDIA\nTSLA - Tesla\nAMD - Advanced Micro Devices\nINTC - Intel\nORCL - Oracle"
      },
      {
        "title": "Indices",
        "body": "^GSPC - S&P 500\n^DJI - Dow Jones\n^IXIC - NASDAQ"
      },
      {
        "title": "Notes",
        "body": "Response format: API returns TOON, not JSON. Use decode() from @toon-format/toon to parse.\nAll prices are in USD\nData updates in real-time during market hours\nPre-market and after-hours data is available\nTimestamps are in ISO 8601 format (UTC)\nMaximum 50 symbols per request"
      }
    ],
    "body": "Stock Prices API Skill\n\nThis skill helps you work with the Stock Prices API to fetch real-time market data and stock quotes.\n\nAPI Endpoint\n\nBase URL: https://stock-prices.on99.app\n\nPrimary Endpoint: /quotes?symbols={SYMBOLS}\n\nQuick Start\n\nFetch stock quotes for one or more symbols (responses are in TOON format):\n\ncurl \"https://stock-prices.on99.app/quotes?symbols=NVDA\"\ncurl \"https://stock-prices.on99.app/quotes?symbols=AAPL,GOOGL,MSFT\"\n\n\nInstall the TOON decoder for parsing: pnpm add @toon-format/toon\n\nResponse Format\n\nThe API returns TOON (Token-Oriented Object Notation) format—a compact, human-readable encoding that uses ~40% fewer tokens than JSON. This makes it ideal for LLM prompts and streaming.\n\nTOON Response Example\nquotes[1]{symbol,currentPrice,change,percentChange,highPrice,lowPrice,openPrice,previousClosePrice,preMarketPrice,preMarketChange,preMarketTime,preMarketChangePercent,...}:\n  NVDA,188.54,-1.5,-0.789308,192.48,188.12,191.405,190.04,191.8799,3.3399048,2026-02-11T13:49:16.000Z,1.771457,...\n\nDecoding TOON Responses\n\nUse @toon-format/toon to parse responses back to JavaScript/JSON:\n\nimport { decode } from \"@toon-format/toon\";\n\nconst response = await fetch(\"https://stock-prices.on99.app/quotes?symbols=NVDA\");\nconst toonText = await response.text();\nconst data = decode(toonText);\n\n// data.quotes is an array of quote objects\nconst quote = data.quotes[0];\nconsole.log(`${quote.symbol}: $${quote.currentPrice}`);\n\n\nThe decoded structure matches JSON—same objects, arrays, and primitives.\n\nAvailable Data Fields\nField\tType\tDescription\nsymbol\tstring\tStock ticker symbol\ncurrentPrice\tnumber\tCurrent trading price\nchange\tnumber\tPrice change from previous close\npercentChange\tnumber\tPercentage change from previous close\nhighPrice\tnumber\tDay's high price\nlowPrice\tnumber\tDay's low price\nopenPrice\tnumber\tOpening price\npreviousClosePrice\tnumber\tPrevious day's closing price\npreMarketPrice\tnumber\tPre-market trading price\npreMarketChange\tnumber\tPre-market price change\npreMarketTime\tstring (ISO 8601)\tPre-market data timestamp\npreMarketChangePercent\tnumber\tPre-market percentage change\nUsage Guidelines\nMultiple Symbols\n\nQuery multiple stocks by separating symbols with commas (max 50):\n\ncurl \"https://stock-prices.on99.app/quotes?symbols=AAPL,GOOGL,MSFT,TSLA,AMZN\"\n\nError Handling\n\nAlways check for valid responses. Decode TOON before accessing data:\n\nimport { decode } from \"@toon-format/toon\";\n\nconst response = await fetch(\"https://stock-prices.on99.app/quotes?symbols=NVDA\");\nconst data = decode(await response.text());\n\nif (data.quotes && data.quotes.length > 0) {\n    const quote = data.quotes[0];\n    console.log(`${quote.symbol}: $${quote.currentPrice}`);\n}\n\nPrice Analysis\n\nCalculate common metrics:\n\n// Determine if stock is up or down\nconst isUp = quote.change > 0;\nconst direction = isUp ? \"📈\" : \"📉\";\n\n// Calculate day's range percentage\nconst rangePct = ((quote.highPrice - quote.lowPrice) / quote.lowPrice) * 100;\n\n// Compare current to open\nconst vsOpen = quote.currentPrice - quote.openPrice;\n\nCommon Use Cases\n1. Price Monitoring\nimport { decode } from \"@toon-format/toon\";\n\nasync function checkPrice(symbol: string) {\n    const res = await fetch(`https://stock-prices.on99.app/quotes?symbols=${symbol}`);\n    const data = decode(await res.text());\n    const quote = data.quotes[0];\n\n    return {\n        price: quote.currentPrice,\n        change: quote.change,\n        changePercent: quote.percentChange,\n    };\n}\n\n2. Portfolio Tracking\nimport { decode } from \"@toon-format/toon\";\n\nasync function getPortfolio(symbols: string[]) {\n    const symbolString = symbols.join(\",\");\n    const res = await fetch(`https://stock-prices.on99.app/quotes?symbols=${symbolString}`);\n    const data = decode(await res.text());\n\n    return data.quotes.map(q => ({\n        symbol: q.symbol,\n        value: q.currentPrice,\n        dailyChange: q.percentChange,\n    }));\n}\n\n3. Market Summary\nimport { decode } from \"@toon-format/toon\";\n\nasync function marketSummary(symbols: string[]) {\n    const res = await fetch(`https://stock-prices.on99.app/quotes?symbols=${symbols.join(\",\")}`);\n    const data = decode(await res.text());\n\n    const gainers = data.quotes.filter(q => q.change > 0);\n    const losers = data.quotes.filter(q => q.change < 0);\n\n    return {\n        totalStocks: data.quotes.length,\n        gainers: gainers.length,\n        losers: losers.length,\n        avgChange: data.quotes.reduce((sum, q) => sum + q.percentChange, 0) / data.quotes.length,\n    };\n}\n\nPopular Stock Symbols\nTech Giants (FAANG+)\nAAPL - Apple\nGOOGL - Alphabet (Google)\nMETA - Meta (Facebook)\nAMZN - Amazon\nNFLX - Netflix\nMSFT - Microsoft\nHigh-Profile Stocks\nNVDA - NVIDIA\nTSLA - Tesla\nAMD - Advanced Micro Devices\nINTC - Intel\nORCL - Oracle\nIndices\n^GSPC - S&P 500\n^DJI - Dow Jones\n^IXIC - NASDAQ\nNotes\nResponse format: API returns TOON, not JSON. Use decode() from @toon-format/toon to parse.\nAll prices are in USD\nData updates in real-time during market hours\nPre-market and after-hours data is available\nTimestamps are in ISO 8601 format (UTC)\nMaximum 50 symbols per request"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/anthonylee1994/stock-prices",
    "publisherUrl": "https://clawhub.ai/anthonylee1994/stock-prices",
    "owner": "anthonylee1994",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/stock-prices",
    "downloadUrl": "https://openagent3.xyz/downloads/stock-prices",
    "agentUrl": "https://openagent3.xyz/skills/stock-prices/agent",
    "manifestUrl": "https://openagent3.xyz/skills/stock-prices/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/stock-prices/agent.md"
  }
}