crypto-com-app by crypto-com/crypto-agent-trading
npx skills add https://github.com/crypto-com/crypto-agent-trading --skill crypto-com-app此技能要求您的代理平台支持以下能力。如果您的平台缺少任何必需能力,该技能将无法工作。
| 能力 | 必需 | 详情 |
|---|---|---|
| Shell 命令执行 | 是 | 必须能够运行 npx tsx ./scripts/... 并捕获 stdout |
| 环境变量 | 是 | 必须从 shell 环境中读取 CDC_API_KEY 和 CDC_API_SECRET |
| JSON 解析 | 是 | 必须解析脚本 stdout 中的结构化 JSON 以提取字段 |
| 多轮对话 | 是 |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 交易使用跨越多个用户轮次的报价 → 确认流程 |
| 持久化内存 | 否 | 用于 confirmation_required 偏好设置。如果不支持,则默认为始终确认交易 |
| 耗时感知 | 否 | 用于检查报价过期(countdown 字段)。如果不支持,则始终尝试确认并优雅地处理 invalid_quotation 错误 |
对于所有 API 交互,您必须使用 TypeScript 脚本。切勿使用 curl、fetch 或任何其他 HTTP 方法直接调用 API。
脚本处理请求签名、错误处理和响应格式化。如果您绕过它们:
对于每个用户请求,找到下面匹配的命令并通过 npx tsx 运行它。读取 JSON 输出。根据它采取行动。
https://wapi.crypto.com{{env.CDC_API_KEY}}{{env.CDC_API_SECRET}}{{memory.confirmation_required}} (默认: true)SKILL.md 文件的目录。从您加载此文件的路径解析它(例如,如果您读取了 /home/user/skills/crypto-com-app/SKILL.md,那么 SKILL_DIR 就是 /home/user/skills/crypto-com-app)。在使用前,必须将 CDC_API_KEY 和 CDC_API_SECRET 都设置为环境变量。
在运行任何脚本之前,通过运行以下命令检查两个变量是否已设置:
echo "CDC_API_KEY=${CDC_API_KEY:+set}" "CDC_API_SECRET=${CDC_API_SECRET:+set}"
如果任何一个打印为空而不是 set,则提示用户:
"您的 API 凭据未配置。请先在您的终端中设置它们,我才能继续:
export CDC_API_KEY="your-api-key" export CDC_API_SECRET="your-api-secret"您可以在 https://help.crypto.com/en/articles/13843786-api-key-management 生成 API 密钥。设置好后请告诉我。"
然后停止并等待用户确认,然后再重试。
MISSING_ENV 错误,请以相同方式处理:提示用户设置变量并等待。所有 API 交互必须通过这些脚本进行。 它们处理签名、执行、过滤和错误格式化。通过 shell 运行下面适当的命令,然后解析 JSON 输出。
前提条件: npx tsx(需要 Node.js 18+;tsx 由 npx 自动获取)。
重要: 下面所有脚本路径都使用 $SKILL_DIR 作为此技能根目录的占位符。从您加载此 SKILL.md 的路径解析它,或者 cd 进入技能目录并使用 ./scripts/... 作为路径。两种方法都有效。
# 过滤非零余额(范围:fiat | crypto | all)
npx tsx $SKILL_DIR/scripts/account.ts balances [fiat|crypto|all]
# 单个代币余额查询
npx tsx $SKILL_DIR/scripts/account.ts balance <SYMBOL>
# 每周交易限额
npx tsx $SKILL_DIR/scripts/account.ts trading-limit
# 为交易类型查找已注资的源钱包
npx tsx $SKILL_DIR/scripts/account.ts resolve-source <purchase|sale|exchange>
# 紧急停止开关 — 撤销 API 密钥
npx tsx $SKILL_DIR/scripts/account.ts revoke-key
交易遵循两步流程:首先获取报价,然后确认订单。
# 步骤 1 — 获取报价(类型:purchase | sale | exchange)
npx tsx $SKILL_DIR/scripts/trade.ts quote <type> '<json-params>'
# 返回:{"ok": true, "data": {"id": "<quotation-id>", "from_amount": {...}, "to_amount": {...}, "countdown": 15, ...}}
# 步骤 2 — 确认订单:将步骤 1 中的 data.id 作为 <quotation-id> 传递
npx tsx $SKILL_DIR/scripts/trade.ts confirm <type> <quotation-id>
# 查看近期交易
npx tsx $SKILL_DIR/scripts/trade.ts history
如何将用户意图映射到交易类型:
| 用户说 | 交易类型 | 从 | 到 |
|---|---|---|---|
| "用 100 USD 购买 CRO" | purchase | USD (法币) | CRO (加密货币) |
| "卖出 0.1 BTC" | sale | BTC (加密货币) | USD (法币) |
| "将 0.1 BTC 兑换成 ETH" | exchange | BTC (加密货币) | ETH (加密货币) |
按交易类型的报价 JSON 参数:
| 类型 | JSON 字段 |
|---|---|
| purchase | {"from_currency":"USD","to_currency":"CRO","from_amount":"100"} 或使用 to_amount 代替 |
| sale | {"from_currency":"BTC","to_currency":"USD","from_amount":"0.1","fixed_side":"from"} |
| exchange | {"from_currency":"BTC","to_currency":"ETH","from_amount":"0.1","side":"buy"} |
示例 — "用 100 USD 购买 CRO":
npx tsx $SKILL_DIR/scripts/trade.ts quote purchase '{"from_currency":"USD","to_currency":"CRO","from_amount":"100"}'data.id、data.from_amount、data.to_amount、data.countdown。npx tsx $SKILL_DIR/scripts/trade.ts confirm purchase <data.id>memory.confirmation_required 为 false):跳过询问并立即运行 npx tsx $SKILL_DIR/scripts/trade.ts confirm purchase <data.id>选择加入/退出: 用户可以说 "停止询问确认" 以自动执行交易,或者说 "需要确认" 以重新启用提示。请参见下面的第 3 节。
# 搜索代币
npx tsx $SKILL_DIR/scripts/coins.ts search '{"keyword":"BTC","sort_by":"rank","sort_direction":"asc","native_currency":"USD","page_size":10}'
必需的 JSON 参数:
| 参数 | 类型 | 允许值 |
|---|---|---|
sort_by | string | rank, market_cap, alphabetical, volume, performance |
sort_direction | string | asc, desc |
native_currency | string | 大写的货币代码(例如 USD) |
keyword | string | 搜索字符串,1–100 个字符;仅匹配代币名称和符号 |
page_size | integer | 每页结果数 |
可选: page_token — 用于获取下一页的不透明令牌(参见下面的分页)。
分页: 响应包含一个 pagination 对象,其中有 has_more(布尔值)和 next_page_token(字符串)。当 has_more 为 true 时,将 next_page_token 作为 page_token 传递到下一个请求中以获取下一页。
每个代币的关键响应字段: rails_id(与交易和账户 API 中的 currency_id / currency 相同 — 使用此字段进行交叉引用)、price_native、price_usd、percent_change_*_native(过去时间范围内的价格表现,例如 percent_change_24h_native)。
每个脚本都将结构化 JSON 打印到 stdout:
成功:
{"ok": true, "data": { ... }}
错误:
{"ok": false, "error": "ERROR_CODE", "error_message": "人类可读的消息"}
ok: true。countdown 字段定义。RATE_LIMITED 错误)时:在重试同一请求前等待 60 秒。通知用户:"已达到速率限制 — 请在 60 秒后再试。"所有脚本都返回结构化错误。解析 error 字段以确定适当的响应。
这些是脚本 JSON 输出中的 error 值。它们告诉您发生了_哪一类_故障。
| 错误代码 | 含义 | 代理响应 |
|---|---|---|
MISSING_ENV | CDC_API_KEY 或 CDC_API_SECRET 未设置 | 告诉用户通过终端设置环境变量 |
API_ERROR | API 返回非 200 或 ok !== true | 报告:"交易失败:{error_message}" |
INVALID_ARGS | 错误的命令行参数 | 根据 error_message 显示正确的用法 |
QUOTATION_FAILED | API 拒绝了报价请求 | 向用户报告 error_message(参见下面的 API 错误) |
EXECUTION_FAILED | 订单确认失败 | 报告并建议:"使用 '显示近期交易' 检查订单状态" |
API_KEY_NOT_FOUND | 密钥已撤销或不存在 | "未找到 API 密钥 — 可能已被撤销。" |
RATE_LIMITED | 请求过多(HTTP 429) | "已达到速率限制 — 请在 60 秒后再试。" |
UNKNOWN | 意外错误 | 报告原始的 error_message |
规则: 当输出中 ok 为 false 时,停止当前操作,并使用上述指导向用户报告错误。失败后切勿继续下一步。
这些是出现在 QUOTATION_FAILED、EXECUTION_FAILED 或 API_ERROR 响应的 error_message 中的_具体_ API 错误代码。它们告诉您 API _为什么_拒绝请求。
error | 含义 | 恢复措施 |
|---|---|---|
not_enough_balance | 资金不足 | 检查余额,减少交易金额 |
invalid_currency | 货币代码无法识别 | 通过代币搜索验证 |
invalid_quotation | 报价已过期或已使用 | 请求新的报价 |
failed_to_create_quotation | 报价引擎错误 | 稍后重试 |
not_eligible_for_prime | 不符合 Prime 资格 | 在没有 Prime 的情况下继续 |
unauthorized | 账户未获准交易 | 联系支持 |
restricted_feature | 账户功能受限 | 向用户报告 error_message |
existing_currency_order_error | 有现有订单正在进行 | 等待或取消现有订单 |
viban_purchase_not_enabled | 法币到加密货币未启用 | 账户功能不可用 |
crypto_viban_not_enabled | 加密货币到法币未启用 | 账户功能不可用 |
bank_transfer_not_enabled | 银行转账未启用 | 账户功能不可用 |
missing_parameter | 缺少必需参数 | 脚本错误 — 报告它 |
failed_to_create_transaction | 交易创建失败 | 重试或联系支持 |
key_not_active | API 密钥已撤销或过期 | 生成新的 API 密钥,更新环境变量 |
api_key_not_found | 密钥不存在或属于其他用户 | 验证 CDC_API_KEY 中设置的是正确的密钥 |
对于动态错误(超出限额、货币禁用、冷静期等),直接将 error 和 error_message 报告给用户。有关完整详情,请参阅 references/errors.md。
首先确定交易类型:
然后解析源钱包:
npx tsx $SKILL_DIR/scripts/account.ts resolve-source purchase。脚本仅返回已注资的法币条目。npx tsx $SKILL_DIR/scripts/account.ts resolve-source sale(或 exchange)。脚本仅返回已注资的加密货币条目。结果(来自 data.status):
SELECTED → 自动选择 data.currency。AMBIGUOUS → 提示用户从 data.options 中选择。EMPTY → 通知用户"未找到已注资的钱包"并停止。"全部卖出"场景: 如果用户说"卖出所有 [TOKEN]",运行 npx tsx $SKILL_DIR/scripts/account.ts balance [TOKEN]。使用 data.available 金额(或 data.balance)作为报价的 from_amount。
当用户要求购买、出售或兑换加密货币时,始终遵循此三步流程:
步骤 A — 获取报价: 根据用户的请求构建 JSON 参数(参见交易命令中的"报价 JSON 参数"表)并运行:npx tsx $SKILL_DIR/scripts/trade.ts quote <type> '<json-params>' 从响应中读取 data.id、data.from_amount、data.to_amount 和 data.countdown。
步骤 B — 请求用户确认:
memory.confirmation_required 为 true(或未设置):
countdown 秒已过后回复"YES",则拒绝:"交易被拒绝:报价汇率已过期。请请求新的报价。"步骤 C — 执行订单: 运行:npx tsx $SKILL_DIR/scripts/trade.ts confirm <type> <data.id>,使用步骤 A 中的 id。
memory.confirmation_required 更新为 false。memory.confirmation_required 更新为 true。{{memory.*}},则将 confirmation_required 视为始终为 true(最安全的默认值)。ok 字段。成功仅定义为 ok: true。ok 为 false,请读取 error 并根据上面的错误处理表进行响应。npx tsx $SKILL_DIR/scripts/trade.ts history — 显示 data 中的条目。npx tsx $SKILL_DIR/scripts/account.ts trading-limit — 显示为:"📊 每周交易限额:{data.used} / {data.limit} USD(剩余:{data.remaining} USD)"。npx tsx $SKILL_DIR/scripts/account.ts balances fiat。npx tsx $SKILL_DIR/scripts/account.ts balances crypto。npx tsx $SKILL_DIR/scripts/account.ts balances all。关键: 首先显示法币类别,然后是加密货币余额。data.crypto)包含一个 note 字段("可用于交易")和一个 wallets 数组。始终向用户澄清这些金额是可用于交易的 — 所有产品的总持仓可能更高。portfolio_allocation 数组 — 每个条目都有一个产品 name 和 price_native(USD 价值)。将其显示为用户资产跨产品(例如 Crypto Wallet、Exchange、Earn、Staking 等)分布的摘要。balance <SYMBOL>)输出可能包含一个 product_allocation 对象 — 键是产品名称(例如 crypto_earn、staking、supercharger、crypto_basket、airdrop_arena),值是每个产品中持有的代币数量。仅包含非零产品。向用户总结这些分配以及可用于交易的金额,以便他们了解其代币的完整分布情况。memory.confirmation_required 如何,始终需要明确确认:
npx tsx $SKILL_DIR/scripts/account.ts revoke-key。ok: true): 通知:"🛑 紧急停止开关已激活。API 密钥已被撤销。所有交易已禁用。生成新的 API 密钥并更新您的环境变量以恢复。"API_KEY_NOT_FOUND 错误时: 通知:"未找到 API 密钥 — 可能已被撤销或不存在。"每周安装
72
仓库
GitHub 星标
5
首次出现
8 天前
安全审计
安装于
opencode70
github-copilot70
codex70
amp70
cline70
kimi-cli70
This skill requires your agent platform to support the following capabilities. If your platform lacks any required capability, the skill will not function.
| Capability | Required | Details |
|---|---|---|
| Shell command execution | Yes | Must be able to run npx tsx ./scripts/... and capture stdout |
| Environment variables | Yes | Must read CDC_API_KEY and CDC_API_SECRET from the shell environment |
| JSON parsing | Yes | Must parse structured JSON from script stdout to extract fields |
| Multi-turn conversation | Yes | Trading uses a quote → confirm flow that spans multiple user turns |
| Persistent memory | No | Used for confirmation_required preference. If unsupported, default to always confirming trades |
| Elapsed-time awareness | No | Used to check quote expiry (countdown field). If unsupported, always attempt confirmation and handle invalid_quotation errors gracefully |
You MUST use the TypeScript scripts for ALL API interactions. NEVER call the API directly withcurl, fetch, or any other HTTP method.
The scripts handle request signing, error handling, and response formatting. If you bypass them:
For every user request, find the matching command below and run it vianpx tsx. Read the JSON output. Act on it.
https://wapi.crypto.com{{env.CDC_API_KEY}}{{env.CDC_API_SECRET}}{{memory.confirmation_required}} (Default: true)SKILL.md file. Resolve it from the path you loaded this file from (e.g. if you read /home/user/skills/crypto-com-app/SKILL.md, then SKILL_DIR is /home/user/skills/crypto-com-app).Both CDC_API_KEY and CDC_API_SECRET must be set as environment variables before use.
Before running any script , check whether both variables are set by running:
echo "CDC_API_KEY=${CDC_API_KEY:+set}" "CDC_API_SECRET=${CDC_API_SECRET:+set}"
If either prints empty instead of set, prompt the user:
"Your API credentials are not configured. Please set them in your terminal before I can proceed:
export CDC_API_KEY="your-api-key" export CDC_API_SECRET="your-api-secret"You can generate an API key at https://help.crypto.com/en/articles/13843786-api-key-management. Let me know once you've set them."
Then stop and wait for the user to confirm before retrying.
MISSING_ENV error, treat it the same way: prompt the user to set the variables and wait.ALL API interactions MUST go through these scripts. They handle signing, execution, filtering, and error formatting. Run the appropriate command below via shell, then parse the JSON output.
Prerequisite: npx tsx (Node.js 18+ required; tsx is fetched automatically by npx).
Important: All script paths below use $SKILL_DIR as a placeholder for this skill's root directory. Resolve it from the path you loaded this SKILL.md from, or cd into the skill directory and use ./scripts/... as the path. Either approach works.
# Filtered non-zero balances (scope: fiat | crypto | all)
npx tsx $SKILL_DIR/scripts/account.ts balances [fiat|crypto|all]
# Single token balance lookup
npx tsx $SKILL_DIR/scripts/account.ts balance <SYMBOL>
# Weekly trading limit
npx tsx $SKILL_DIR/scripts/account.ts trading-limit
# Find funded source wallets for a trade type
npx tsx $SKILL_DIR/scripts/account.ts resolve-source <purchase|sale|exchange>
# Kill switch — revoke API key
npx tsx $SKILL_DIR/scripts/account.ts revoke-key
Trading follows a two-step flow : get a quotation first, then confirm the order.
# Step 1 — Get quotation (type: purchase | sale | exchange)
npx tsx $SKILL_DIR/scripts/trade.ts quote <type> '<json-params>'
# Returns: {"ok": true, "data": {"id": "<quotation-id>", "from_amount": {...}, "to_amount": {...}, "countdown": 15, ...}}
# Step 2 — Confirm order: pass the data.id from Step 1 as <quotation-id>
npx tsx $SKILL_DIR/scripts/trade.ts confirm <type> <quotation-id>
# View recent transactions
npx tsx $SKILL_DIR/scripts/trade.ts history
How to map user intent to trade type:
| User says | Trade type | From | To |
|---|---|---|---|
| "Buy CRO with 100 USD" | purchase | USD (fiat) | CRO (crypto) |
| "Sell 0.1 BTC" | sale | BTC (crypto) | USD (fiat) |
| "Swap 0.1 BTC to ETH" | exchange | BTC (crypto) | ETH (crypto) |
Quotation JSON params by trade type:
| Type | JSON fields |
|---|---|
| purchase | {"from_currency":"USD","to_currency":"CRO","from_amount":"100"} or use to_amount instead |
| sale | {"from_currency":"BTC","to_currency":"USD","from_amount":"0.1","fixed_side":"from"} |
| exchange | {"from_currency":"BTC","to_currency":"ETH","from_amount":"0.1","side":"buy"} |
Example — "Buy CRO with 100 USD":
npx tsx $SKILL_DIR/scripts/trade.ts quote purchase '{"from_currency":"USD","to_currency":"CRO","from_amount":"100"}'data.id, data.from_amount, data.to_amount, data.countdown from the response.npx tsx $SKILL_DIR/scripts/trade.ts confirm purchase <data.id>memory.confirmation_required is false): Skip asking and immediately run Opt-in / Opt-out: Users can say "stop asking for confirmation" to auto-execute trades, or "require confirmation" to re-enable the prompt. See Section 3 below.
# Search coins
npx tsx $SKILL_DIR/scripts/coins.ts search '{"keyword":"BTC","sort_by":"rank","sort_direction":"asc","native_currency":"USD","page_size":10}'
Required JSON parameters:
| Parameter | Type | Allowed values |
|---|---|---|
sort_by | string | rank, market_cap, alphabetical, volume, performance |
sort_direction | string | asc, desc |
Optional: page_token — opaque token for fetching the next page (see pagination below).
Pagination: The response includes a pagination object with has_more (boolean) and next_page_token (string). When has_more is true, pass next_page_token as page_token in the next request to fetch the next page.
Key response fields per coin: rails_id (identical to currency_id / currency in trade and account APIs — use this to cross-reference), price_native, price_usd, percent_change_*_native (price performance over past timeframes, e.g. percent_change_24h_native).
Every script prints structured JSON to stdout:
Success:
{"ok": true, "data": { ... }}
Error:
{"ok": false, "error": "ERROR_CODE", "error_message": "Human-readable message"}
ok: true in the script output.countdown field in the quotation data.RATE_LIMITED error): wait 60 seconds before retrying the same request. Inform the user: "Rate limit reached — please wait 60 seconds before trying again."All scripts return structured errors. Parse the error field to determine the appropriate response.
These are the error values in the script's JSON output. They tell you what category of failure occurred.
| Error Code | Meaning | Agent Response |
|---|---|---|
MISSING_ENV | CDC_API_KEY or CDC_API_SECRET not set | Tell user to set env vars via terminal |
API_ERROR | API returned non-200 or ok !== true | Report: "Transaction failed: {error_message}" |
INVALID_ARGS | Bad command-line arguments | Show correct usage from the error_message |
Rule: When ok is false in the output, stop the current operation and report the error to the user using the guidance above. Never proceed to the next step after a failure.
These are the specific API error codes that appear inside the error_message of QUOTATION_FAILED, EXECUTION_FAILED, or API_ERROR responses. They tell you why the API rejected the request.
error | Meaning | Recovery |
|---|---|---|
not_enough_balance | Insufficient funds | Check balances, reduce trade amount |
invalid_currency | Currency code not recognized | Verify via coin search |
invalid_quotation | Quote expired or already used | Request a new quotation |
failed_to_create_quotation | Quotation engine error | Retry shortly |
For dynamic errors (limit exceeded, currency disabled, cooling-off, etc.), report the error and error_message directly to the user. For full details, see references/errors.md.
Determine the trade type first:
Then resolve the source wallet:
npx tsx $SKILL_DIR/scripts/account.ts resolve-source purchase. The script returns only funded fiat entries.npx tsx $SKILL_DIR/scripts/account.ts resolve-source sale (or exchange). The script returns only funded crypto entries.Result (fromdata.status):
SELECTED → auto-select data.currency.AMBIGUOUS → prompt user to choose from data.options.EMPTY → inform user "No funded wallets found" and stop."Sell All" Scenario: If user says "Sell all [TOKEN]", run npx tsx $SKILL_DIR/scripts/account.ts balance [TOKEN]. Use the data.available amount (or data.balance) as from_amount for the quotation.
When the user asks to buy, sell, or swap crypto, always follow this three-step flow:
Step A — Get Quotation: Build the JSON params from the user's request (see the "Quotation JSON params" table in Trade Commands) and run: npx tsx $SKILL_DIR/scripts/trade.ts quote <type> '<json-params>' Read data.id, data.from_amount, data.to_amount, and data.countdown from the response.
Step B — Ask User to Confirm:
memory.confirmation_required is true (or unset):
memory.confirmation_required to false.memory.confirmation_required to true.{{memory.*}}, treat confirmation_required as always true (safest default).ok field. Success is defined ONLY as ok: true.ok is false, read error and respond per the Error Handling table above.npx tsx $SKILL_DIR/scripts/trade.ts history — display the entries from data.npx tsx $SKILL_DIR/scripts/account.ts trading-limit — display as: "📊 Weekly Trading Limit: {data.used} / {data.limit} USD (Remaining: {data.remaining} USD)".npx tsx $SKILL_DIR/scripts/account.ts balances fiat.npx tsx $SKILL_DIR/scripts/account.ts balances crypto.npx tsx $SKILL_DIR/scripts/account.ts balances all. Crucial: Display Fiat category first, followed by Crypto balances below.memory.confirmation_required:
npx tsx $SKILL_DIR/scripts/account.ts revoke-key.ok: true): Notify: "🛑 Kill switch activated. API key has been revoked. All trading is disabled. Generate a new API key and update your environment variables to resume."API_KEY_NOT_FOUND error: Notify: "API key not found — it may have already been revoked or does not exist."Weekly Installs
72
Repository
GitHub Stars
5
First Seen
8 days ago
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
opencode70
github-copilot70
codex70
amp70
cline70
kimi-cli70
Skills CLI 使用指南:AI Agent 技能包管理器安装与管理教程
46,600 周安装
npx tsx $SKILL_DIR/scripts/trade.ts confirm purchase <data.id>native_currency | string | Uppercase currency code (e.g. USD) |
keyword | string | Search string, 1–100 chars; matches coin name and symbol only |
page_size | integer | Number of results per page |
QUOTATION_FAILED | Quotation request rejected by API | Report the error_message to user (see API errors below) |
EXECUTION_FAILED | Order confirmation failed | Report and suggest: "Check order status with 'Show recent trades'" |
API_KEY_NOT_FOUND | Key already revoked or does not exist | "API key not found — it may have already been revoked." |
RATE_LIMITED | Too many requests (HTTP 429) | "Rate limit reached — please wait 60 seconds before trying again." |
UNKNOWN | Unexpected error | Report the raw error_message |
not_eligible_for_prime| Not eligible for Prime benefits |
| Proceed without Prime |
unauthorized | Account not approved for trading | Contact support |
restricted_feature | Feature restricted on account | Report error_message to user |
existing_currency_order_error | An existing order is in progress | Wait or cancel existing order |
viban_purchase_not_enabled | Fiat-to-crypto not enabled | Account feature not available |
crypto_viban_not_enabled | Crypto-to-fiat not enabled | Account feature not available |
bank_transfer_not_enabled | Bank transfer not enabled | Account feature not available |
missing_parameter | Required parameter missing | Script bug — report it |
failed_to_create_transaction | Transaction creation failed | Retry or contact support |
key_not_active | API key revoked or expired | Generate a new API key, update env vars |
api_key_not_found | Key doesn't exist or belongs to another user | Verify correct key is set in CDC_API_KEY |
countdownStep C — Execute Order: Run: npx tsx $SKILL_DIR/scripts/trade.ts confirm <type> <data.id> using the id from Step A.
data.cryptonotewalletsportfolio_allocation array — each entry has a product name and price_native (USD value). Display this as a summary of the user's asset distribution across products (e.g. Crypto Wallet, Exchange, Earn, Staking, etc.).balance <SYMBOL>) output may include a product_allocation object — keys are product names (e.g. crypto_earn, staking, supercharger, crypto_basket, airdrop_arena) and values are the token amounts held in each. Only non-zero products are included. Summarize these allocations to the user alongside the available-for-trading amount so they see the full picture of where their tokens are held.