Ledger Quote API

个人记账 App 使用的行情聚合 API。App 本地保存资产、账单和借款;Cloudflare 只负责汇率、股票、ETF、A股、A股 ETF、黄金白银、虚拟币估值。

Cloudflare Pages Functionsv1.9.0-pages-docs-ashare美股 / ETFA股 / A股ETFFXCryptoMetal

App 设置页填写

API 地址:你的 Cloudflare Pages 域名
API Token:你的 APP_API_TOKEN
默认估值货币:CNY / USD / HKD / SGD / EUR / JPY / USDT

设置了 APP_API_TOKEN 后,App 请求会带 x-api-token。浏览器临时测试也可以在 URL 里加 ?token=...

在线测试

Token 只存在当前浏览器 localStorage,方便你直接在主域名测试 API。

等待测试...

接口总览

分类方法路径 / 示例说明
健康检查GET/api/health确认接口是否在线。
配置GET/api/config返回支持的资产类型、搜索类型、接口示例。
环境检查GET/api/debug/env只返回 Key 是否存在,不泄露密钥。
全链路自检GET/api/debug/self-test?quote=CNY测试 FX、虚拟币、贵金属、美股、A股、A股ETF。
虚拟币调试GET/api/debug/crypto?ids=bitcoin,solana&quote=CNY等价于 crypto 调试入口。
汇率GET/api/fx?base=USD&quote=CNY&amount=700返回汇率和换算金额。
换算GET/api/convert?from=HKD&to=CNY&amount=1000和 /api/fx 类似,参数名更适合换汇。
虚拟币GET/api/crypto?ids=solana,bitcoin,tether&quote=CNY支持 CoinGecko ID,也支持 BTC/ETH/SOL/USDT/USDC 常见代码。
贵金属GET/api/metal?symbol=XAU&unit=gram&quote=CNYXAU/XAG/XPT/XPD,单位 gram 或 troy_ounce。
美股GET/api/stock?symbol=AAPL&quote=CNYTwelve Data。
美股 ETFGET/api/stock?symbol=SGOV&quote=CNYETF 同样走 /api/stock。
A股GET/api/cn-stock?symbol=600519&quote=CNY别名:/api/ashare。/api/stock 也兼容 A 股代码。
A股 ETFGET/api/cn-stock?symbol=510050&quote=CNY场内基金 / ETF,例如 510050、159915。
搜索GET/api/search?type=stock&q=appletype 支持 stock/etf/crypto/metal/cn_stock/cn_etf/a_stock/a_etf。
组合估值POST/api/portfolio/valuateFlutter App 主要调用这个接口。

A股 / A股 ETF 输入格式

下面这些写法都可以,App 里使用 cn_stockcn_etf 类型即可。场内 ETF 也用同一个行情接口。

A股例子

/api/cn-stock?symbol=600519"e=CNY
/api/cn-stock?symbol=SH600519"e=CNY
/api/cn-stock?symbol=600519.SH"e=CNY
/api/cn-stock?symbol=000001.SZ"e=CNY

A股 ETF / 场内基金例子

/api/cn-stock?symbol=510050"e=CNY
/api/cn-stock?symbol=SH510050"e=CNY
/api/cn-stock?symbol=159915.SZ"e=CNY
/api/ashare?symbol=159740"e=HKD

A股行情源使用东方财富 / 腾讯公开行情作为低频兜底,适合个人记账估值,不建议用于高频交易或撮合系统。

Flutter 主要调用:组合估值

POST https://你的域名/api/portfolio/valuate
Header:
content-type: application/json
x-api-token: 你的 APP_API_TOKEN

Body:
{
  "defaultCurrency": "CNY",
  "assets": [
    {"id":"cash-1","type":"cash","name":"招商银行卡","quantity":1000,"currency":"CNY"},
    {"id":"btc-1","type":"crypto","name":"BTC","symbol":"bitcoin","quantity":0.01},
    {"id":"aapl-1","type":"stock","name":"Apple","symbol":"AAPL","quantity":1},
    {"id":"sgov-1","type":"etf","name":"SGOV","symbol":"SGOV","quantity":21},
    {"id":"cn-stock-1","type":"cn_stock","name":"邮储银行","symbol":"601658","quantity":1400},
    {"id":"cn-etf-1","type":"cn_etf","name":"上证50ETF","symbol":"510050","quantity":1000},
    {"id":"gold-1","type":"metal","name":"黄金","symbol":"XAU","quantity":50,"unit":"gram"}
  ],
  "liabilities": [
    {"id":"loan-1","name":"我欠朋友","direction":"payable","amount":500,"currency":"CNY"},
    {"id":"receive-1","name":"朋友欠我","direction":"receivable","amount":100,"currency":"USD"}
  ]
}

部署检查

  1. Cloudflare Pages 必须用 Wrangler 或 Git 构建部署;只拖 zip 作为静态资源时,/functions 不会运行。
  2. 环境变量建议至少设置 APP_API_TOKENTWELVE_DATA_API_KEY
  3. 部署后先测 /api/debug/env,再测 /api/debug/self-test
  4. 如果 CoinGecko 偶尔 403/429,可选加 COINGECKO_DEMO_API_KEY
curl "/api/debug/env" -H "x-api-token: 你的_APP_API_TOKEN"
curl "/api/debug/self-test?quote=CNY" -H "x-api-token: 你的_APP_API_TOKEN"