ClearBook透明账本

开放平台

把透明账本的能力开放给开发者:查询 API 免鉴权、写入 API 凭密钥、Excel 批量导入——
让捐赠平台、业主看板、研究分析都能接上同一本透明的账。

curl https://www.clearbook.com.cn/api/v1/stats
🔍 查询 API 公开免鉴权 · JSON · CORS ✍️ 写入 API API 密钥 · POST 记一笔 📥 Excel 导入 模板契约 · 逐行校验 💡 应用场景 捐赠平台 / 业主看板 / 数据研究

基础信息

Base URL/api/v1(本站域名下)
数据格式JSON(请求与响应);金额一律为元,两位小数字符串,如 "2880.50"
跨域支持 CORS(Access-Control-Allow-Origin: *),浏览器可直连
隐私口径打码姓名、隐藏经手人与网页完全一致;内部公开团体受门禁保护

认证:API 密钥

Authorization: Bearer cbk_你的密钥
# 或
X-Api-Key: cbk_你的密钥

查询端点(公开)

GET/api/v1/stats

平台统计。响应示例:

{
  "data": { "orgs": 5, "ledgers": 6, "entries": 51, "questions_answered": 7 }
}
GET/api/v1/orgs

团体搜索。参数:

参数说明
q关键词(匹配名称/地区/简介)
type场景过滤:公益机构 / 社区/业委会 / 班级/家委会 / 社团 / 临时活动 / 互助小组

响应(节选)——内部公开团体会返回 visibility:"internal",其内容端点需门禁(见内部公开访问):

{
  "data": [{
    "slug": "wutong", "name": "梧桐社区互助会",
    "org_type": "公益机构", "region": "江苏 · 南京 · 梧桐街道",
    "visibility": "public", "verified": true,
    "ledger_count": 2, "entry_count": 16, "url": "/org/wutong"
  }],
  "meta": { "q": "互助", "type": null }
}
GET/api/v1/orgs/:slug

团体详情:汇总收支、账本列表(每个账本带 entries_url)。响应(节选):

{
  "data": {
    "slug": "wutong", "name": "梧桐社区互助会", "visibility": "public",
    "totals": { "income": "47032.50", "expense": "16424.50", "balance": "30608.00" },
    "ledgers": [{
      "id": 1, "name": "社区老人关爱基金", "status": "open",
      "goal": "50000.00", "income": "47032.50", "expense": "16424.50",
      "entries_url": "/api/v1/orgs/wutong/ledgers/1/entries"
    }]
  }
}
GET/api/v1/orgs/:slug/ledgers/:id/entries

账本流水分页查询——本平台最常用的端点。参数:

参数说明
month按月过滤,如 2026-09
kindincome / expense
q关键词(匹配摘要/备注/来源去向/分类)
page · per_page分页,默认 1 · 50,per_page 上限 200
orderasc / desc(按日期+编号,默认 desc)

响应(节选)——每笔带 balance_after 逐笔结余,meta.summary 为全账本汇总:

{
  "data": [{
    "id": 15, "seq": 15, "date": "2026-09-10",
    "kind": "expense", "kind_label": "支出",
    "title": "中秋慰问礼包(米 10 斤、油 5L、月饼)52 份",
    "category": "物资采购", "amount": "7488.00",
    "counterparty": "惠民超市(梧桐店)", "handler": "志愿者 周芸",
    "status": "normal", "balance_after": "3202.00",
    "url": "/org/wutong/ledger/1#entry-15"
  }],
  "meta": {
    "total": 16, "page": 1, "per_page": 50,
    "summary": { "income": "47032.50", "expense": "16424.50", "balance": "30608.00" }
  }
}
GET/api/v1/entries/:id

单笔详情:凭证图片 URL、公开问答、修改/作废留痕——完整信任链数据。响应(节选):

{
  "data": {
    "id": 15, "title": "中秋慰问礼包……", "amount": "7488.00",
    "attachments": [{ "url": "/uploads/seed-fapiao-zhongqiu.svg", "name": "惠民超市-中秋礼包发票.svg" }],
    "questions": [{ "asker": "陈阿姨(社区居民)", "question": "礼包里的月饼是什么牌子、单价多少?",
                    "answer": "是本地老字号的散装广式月饼,18 元/盒……" }],
    "revisions": [{ "action": "edit", "reason": "与超市按实际结算价开票,金额由 7,696.00 更正为 7,488.00" }]
  }
}

写入端点(API 密钥)

GET/api/v1/ledgers

列出自己团体的账本(获取 ledger_id 用)。

POST/api/v1/entries

API 记一笔——保存即公开,与手工记录同规则(连续编号、可修正不可删除)。参数:

字段必填说明
ledger_id✓账本 id(GET /ledgers 获取)
kind✓income / expense(也接受 收入/支出)
title✓事项摘要 4~100 字,请写清楚为谁、买了什么
amount✓金额(元),最多两位小数
category✓分类,须在系统分类表内(见下方分类表)
date—YYYY-MM-DD,缺省为当天
counterparty—来源/去向
mask_counterparty—true 时对公众打码显示;缺省跟随团体设置
handler · note—经手人 / 备注

成功响应 201(节选);字段错误返回 400 并逐字段说明:

# 请求
curl -X POST /api/v1/entries \
  -H "Authorization: Bearer cbk_你的密钥" -H "Content-Type: application/json" \
  -d '{
    "ledger_id": 1, "kind": "income", "date": "2026-09-29",
    "title": "线上捐赠(小程序渠道,23 人)",
    "amount": "1268.50", "category": "个人捐赠",
    "counterparty": "23 位爱心网友", "mask_counterparty": true
  }'

# 201 成功
{ "data": { "id": 17, "seq": 17, "amount": "1268.50", "url": "/org/wutong/ledger/1#entry-17" },
  "message": "已记入「社区老人关爱基金」第 17 笔,保存即公开" }

# 400 字段错误
{ "error": "bad_request", "message": "参数校验未通过",
  "fields": { "title": "事项摘要需 4~100 字", "category": "分类不在收入分类表内" } }

分类表——收入:成员缴费/AA、个人捐赠、企业/单位捐赠、公共收益/租金、活动/义卖收入、基金会/政府资助、利息及其他;支出:物资采购、餐饮聚餐、活动执行、场地租赁、交通差旅、补助/慰问金、对外捐赠、宣传印刷、押金/退款、运营杂费、其他。

内部公开团体的访问

业主基金、班费等内部公开团体,其 orgs/:slug、entries 端点默认返回 403。两种合法访问方式:

  1. 先在网页端输入访问口令解锁(/org/:slug/unlock),之后带 Cookie 请求 API(30 天有效);
  2. 每次请求携带口令头:X-View-Password: 访问口令(口令由团体发到成员群)。
curl -H "X-View-Password: 业主群内发布的口令" /api/v1/orgs/cuihu/ledgers/4/entries

请勿用爬虫绕过门禁抓取内部公开数据——门禁是团体隐私边界的一部分。

错误码与限流

状态码error含义
400bad_request参数校验未通过(fields 逐字段说明)
401unauthorized缺少/无效 API 密钥
403forbidden内部公开团体未解锁
404not_found团体/账本/记录不存在
429rate_limited超限流:公开 120 次/分钟/IP,密钥 60 次/分钟

Excel / CSV 批量导入

适合历史账目补录与表格迁移(在工作台 → 管理流水 → 📥 Excel 导入操作):下载 CSV/XLSX 模板 → 上传后逐行校验预览(错误定位到行)→ 确认导入。模板列契约:

列名必填规则
日期✓2026-09-01(也接受 2026/9/1、2026年9月1日)
类型✓收入 / 支出
事项摘要✓4~100 字
分类✓须在系统分类表内(同上)
金额(元)✓数字,最多两位小数
来源/去向—≤80 字
姓名打码—是 / 否 / 留空(跟随团体默认)
经手人 · 备注—≤40 字 / ≤300 字

限制:单次 ≤500 行、≤2MB;CSV 需 UTF-8。导入记录与手工记录无差别——没有「批量后门」。

应用场景

使用规范