{
  "schemaVersion": "1.0",
  "item": {
    "slug": "upbit-market-data-skill",
    "name": "UPBIT market data get skill",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/kuns9/upbit-market-data-skill",
    "canonicalUrl": "https://clawhub.ai/kuns9/upbit-market-data-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/upbit-market-data-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=upbit-market-data-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "package.json",
      "skill.js",
      "SKILL.md",
      "src/config.js",
      "src/utils/args.js",
      "src/upbit/auth.js"
    ],
    "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/upbit-market-data-skill"
    },
    "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/upbit-market-data-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/upbit-market-data-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/upbit-market-data-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/upbit-market-data-skill/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": "Upbit Market Data Skill",
        "body": "A CLI-based OpenClaw skill that fetches quotation/market data from the Upbit Open API.\n\nThis skill is designed to be executed via OpenClaw exec (run-once). It supports:\n\nTrading pair (market) list\nCandles (second/minute/day/week/month/year)\nRecent trades\nTickers (by trading pairs / by quote currency)\nOrderbooks\nWatchlist tickers (from config)\n\nAll responses are JSON:\n\nSuccess → stdout: { \"ok\": true, \"result\": ... }\nError   → stderr: { \"ok\": false, \"error\": { ... } } and exit code 1"
      },
      {
        "title": "Requirements",
        "body": "Node.js 18+ (uses built-in fetch)\nNPM"
      },
      {
        "title": "Installation",
        "body": "npm install"
      },
      {
        "title": "Configuration (JSON)",
        "body": "Create config/config.json.\n\nExample:\n\n{\n  \"upbit\": {\n    \"baseUrl\": \"https://api.upbit.com\",\n    \"accessKey\": \"\",\n    \"secretKey\": \"\"\n  },\n  \"watchlist\": [\"KRW-BTC\", \"KRW-ETH\", \"KRW-SOL\"]\n}"
      },
      {
        "title": "Config path override",
        "body": "Default path:\n\nconfig/config.json\n\nOverride at runtime:\n\nnode skill.js tickers --markets=KRW-BTC --config=./config/config.json"
      },
      {
        "title": "CLI Grammar",
        "body": "General format:\n\nnode skill.js <command> [subcommand] [--option=value]\n\nRules:\n\n<command> is required.\n[subcommand] is optional and MUST NOT start with --.\nOptions must be provided as --key=value or --key value.\nOutputs are always JSON."
      },
      {
        "title": "STRICT MODE (Recommended for OpenClaw)",
        "body": "OpenClaw/LLM agents may reorder arguments when generating CLI calls. To prevent confusion, enable strict mode."
      },
      {
        "title": "Enable strict mode",
        "body": "Add --strict=true to the command:\n\nnode skill.js tickers --markets=KRW-BTC,KRW-ETH --strict=true"
      },
      {
        "title": "Strict mode rules (hard requirements)",
        "body": "When --strict=true:\n\nCandle type MUST appear immediately after candles:\n\n✅ node skill.js candles minutes --market=KRW-ETH --unit=5 --strict=true\n❌ node skill.js candles --market=KRW-ETH minutes --unit=5 --strict=true\n\n\nCandle type MUST NOT be passed as an option (do not use --type= in strict mode).\nFor non-candles commands, subcommand must be omitted.\nAny unexpected positional arguments (extra words not starting with --) will cause an error.\n\nWhy strict mode helps:\n\nIt forces a single canonical command shape, making it far harder for OpenClaw/LLM to generate ambiguous or reordered invocations."
      },
      {
        "title": "1) List trading pairs (markets)",
        "body": "node skill.js pairs --details=true --strict=true"
      },
      {
        "title": "2) Candles (CRITICAL STRUCTURE)",
        "body": "Candles require a candle type immediately after candles.\n\nCanonical structure\n\nnode skill.js candles <type> --market=<MARKET> [options]\n\nWhere <type> MUST be one of:\n\nseconds\nminutes\ndays\nweeks\nmonths\nyears\n\n⚠️ <type> is NOT passed as --unit.\n⚠️ <type> must appear immediately after candles.\n\nMinutes candles (5-minute example)\n\nnode skill.js candles minutes --market=KRW-ETH --unit=5 --count=100 --strict=true\n\nAllowed minute units:\n1, 3, 5, 10, 15, 30, 60, 240\n\nOther candles\n\nnode skill.js candles seconds --market=KRW-BTC --count=200 --strict=true\nnode skill.js candles days    --market=KRW-BTC --count=50  --strict=true\nnode skill.js candles weeks   --market=KRW-BTC --count=30  --strict=true\nnode skill.js candles months  --market=KRW-BTC --count=12  --strict=true\nnode skill.js candles years   --market=KRW-BTC --count=5   --strict=true\n\nIncorrect examples (DO NOT USE)\n\n# ❌ type passed as option\nnode skill.js candles --unit=minutes --market=KRW-ETH\n\n# ❌ type after options\nnode skill.js candles --market=KRW-ETH minutes --unit=5"
      },
      {
        "title": "3) Recent trades",
        "body": "node skill.js trades --market=KRW-BTC --count=50 --strict=true"
      },
      {
        "title": "4) Tickers by trading pairs",
        "body": "node skill.js tickers --markets=KRW-BTC,KRW-ETH,KRW-SOL --strict=true"
      },
      {
        "title": "5) Tickers by quote currency",
        "body": "node skill.js quote-tickers --quote=KRW,BTC --strict=true"
      },
      {
        "title": "6) Orderbooks",
        "body": "node skill.js orderbook --markets=KRW-BTC --level=100000 --count=15 --strict=true"
      },
      {
        "title": "7) Watchlist tickers (from config)",
        "body": "node skill.js watchlist --strict=true"
      },
      {
        "title": "Error handling & rate limits",
        "body": "Upbit may respond with:\n\n429: Too Many Requests\n418: Request blocked\n400: Bad request\n\nThe skill passes Upbit error payloads (when present) under error.upbit.\n\nReference:\nhttps://docs.upbit.com/kr/reference/rest-api-guide"
      }
    ],
    "body": "Upbit Market Data Skill\n\nA CLI-based OpenClaw skill that fetches quotation/market data from the Upbit Open API.\n\nThis skill is designed to be executed via OpenClaw exec (run-once). It supports:\n\nTrading pair (market) list\nCandles (second/minute/day/week/month/year)\nRecent trades\nTickers (by trading pairs / by quote currency)\nOrderbooks\nWatchlist tickers (from config)\n\nAll responses are JSON:\n\nSuccess → stdout: { \"ok\": true, \"result\": ... }\nError → stderr: { \"ok\": false, \"error\": { ... } } and exit code 1\nRequirements\nNode.js 18+ (uses built-in fetch)\nNPM\nInstallation\nnpm install\n\nConfiguration (JSON)\n\nCreate config/config.json.\n\nExample:\n\n{\n  \"upbit\": {\n    \"baseUrl\": \"https://api.upbit.com\",\n    \"accessKey\": \"\",\n    \"secretKey\": \"\"\n  },\n  \"watchlist\": [\"KRW-BTC\", \"KRW-ETH\", \"KRW-SOL\"]\n}\n\nConfig path override\n\nDefault path:\n\nconfig/config.json\n\nOverride at runtime:\n\nnode skill.js tickers --markets=KRW-BTC --config=./config/config.json\n\nCLI Grammar\n\nGeneral format:\n\nnode skill.js <command> [subcommand] [--option=value]\n\n\nRules:\n\n<command> is required.\n[subcommand] is optional and MUST NOT start with --.\nOptions must be provided as --key=value or --key value.\nOutputs are always JSON.\nSTRICT MODE (Recommended for OpenClaw)\n\nOpenClaw/LLM agents may reorder arguments when generating CLI calls. To prevent confusion, enable strict mode.\n\nEnable strict mode\n\nAdd --strict=true to the command:\n\nnode skill.js tickers --markets=KRW-BTC,KRW-ETH --strict=true\n\nStrict mode rules (hard requirements)\n\nWhen --strict=true:\n\nCandle type MUST appear immediately after candles:\n✅ node skill.js candles minutes --market=KRW-ETH --unit=5 --strict=true\n❌ node skill.js candles --market=KRW-ETH minutes --unit=5 --strict=true\nCandle type MUST NOT be passed as an option (do not use --type= in strict mode).\nFor non-candles commands, subcommand must be omitted.\nAny unexpected positional arguments (extra words not starting with --) will cause an error.\n\nWhy strict mode helps:\n\nIt forces a single canonical command shape, making it far harder for OpenClaw/LLM to generate ambiguous or reordered invocations.\nCommands\n1) List trading pairs (markets)\nnode skill.js pairs --details=true --strict=true\n\n2) Candles (CRITICAL STRUCTURE)\n\nCandles require a candle type immediately after candles.\n\nCanonical structure\nnode skill.js candles <type> --market=<MARKET> [options]\n\n\nWhere <type> MUST be one of:\n\nseconds\nminutes\ndays\nweeks\nmonths\nyears\n\n⚠️ <type> is NOT passed as --unit.\n⚠️ <type> must appear immediately after candles.\n\nMinutes candles (5-minute example)\nnode skill.js candles minutes --market=KRW-ETH --unit=5 --count=100 --strict=true\n\n\nAllowed minute units: 1, 3, 5, 10, 15, 30, 60, 240\n\nOther candles\nnode skill.js candles seconds --market=KRW-BTC --count=200 --strict=true\nnode skill.js candles days    --market=KRW-BTC --count=50  --strict=true\nnode skill.js candles weeks   --market=KRW-BTC --count=30  --strict=true\nnode skill.js candles months  --market=KRW-BTC --count=12  --strict=true\nnode skill.js candles years   --market=KRW-BTC --count=5   --strict=true\n\nIncorrect examples (DO NOT USE)\n# ❌ type passed as option\nnode skill.js candles --unit=minutes --market=KRW-ETH\n\n# ❌ type after options\nnode skill.js candles --market=KRW-ETH minutes --unit=5\n\n3) Recent trades\nnode skill.js trades --market=KRW-BTC --count=50 --strict=true\n\n4) Tickers by trading pairs\nnode skill.js tickers --markets=KRW-BTC,KRW-ETH,KRW-SOL --strict=true\n\n5) Tickers by quote currency\nnode skill.js quote-tickers --quote=KRW,BTC --strict=true\n\n6) Orderbooks\nnode skill.js orderbook --markets=KRW-BTC --level=100000 --count=15 --strict=true\n\n7) Watchlist tickers (from config)\nnode skill.js watchlist --strict=true\n\nError handling & rate limits\n\nUpbit may respond with:\n\n429: Too Many Requests\n418: Request blocked\n400: Bad request\n\nThe skill passes Upbit error payloads (when present) under error.upbit.\n\nReference: https://docs.upbit.com/kr/reference/rest-api-guide"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/kuns9/upbit-market-data-skill",
    "publisherUrl": "https://clawhub.ai/kuns9/upbit-market-data-skill",
    "owner": "kuns9",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/upbit-market-data-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/upbit-market-data-skill",
    "agentUrl": "https://openagent3.xyz/skills/upbit-market-data-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/upbit-market-data-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/upbit-market-data-skill/agent.md"
  }
}