魔法记账个人账本与团队账本数据 API
Money Tracker-Expense & Budget 是 Horoscope365 的免费个人理财应用(包名 com.freeman.moneymanager,中文产品名「魔法记账」)。家庭与小团队登记收入、支出与账户间转账,附小票照片,设置每月总预算与分类预算,维护多本账——个人、团队、生意、项目与 AA 分摊——并把两个账号合并进同一家庭视图,按周期自动写入房租和工资,再按默认币种换算外币金额。Android 可以把其他应用的支付通知变成待确认流水;会员解锁语音与小票识别、CSV/Excel/PDF/JSON 账单导入、对话助手,以及「设置 → API」下的开发者令牌。Google Play 约 500 万次安装、约 33 万条评价、4.8 星,含广告与年费内购;同一产品在 App Store(id 6444122615)与 RuStore 上架。它和 Wallet、Spendee 等记账应用同场,面向希望把现金、卡片与共享账本放进同一本账、而不是只用银行自家 App 的用户。
个人账本流水把 amount 存在账本默认币种下,分类键为 income_expenditure_category_id;口袋实时余额是带快照时间 amount_time 的 currency_amount。共享账本用 cashbook_id 寻址,外币入账先读 user_default_currency_code 再写 currency_code。家庭损益机器人、共享账本运营台和差旅报销工具吃这些字段;openData Studio 把它们变成可调用的开放数据。
应用截图
API 端点一览
以下端点与请求/响应示例均依据应用界面推导重构,为示意说明,并非实际抓包。
读取个人账本流水
POST
/v1/ledger/entries/searchopenfinance列出当前用户个人账本流水。默认按 server_update_time(秒)倒序最多 50 条;传入 start_date/end_date/offset/type/category_id/account_id 进入查询模式,按 date_time(毫秒)过滤并返回 meta。type 1 收入 2 支出;省略 type 时可能混入转账(3)、余额调整(4) 与 AA 记录(5/6)。
认证方式: 从 App「设置 → API」复制会员 API token(需登录且开通年费会员),以 application/x-www-form-urlencoded 表单字段 token 传递,不要使用 Authorization 头。普通的应用内登录会话不被接受。重新生成后旧 token 立即失效。
- id
- user_id
- type
- income_expenditure_category_id
- from_account_id
- to_account_id
- date_time
- year
- month
- day
- amount
- remark
- add_time
- update_time
- server_add_time
- server_update_time
- is_server_delete
- meta.total
- meta.has_more
POST /v1/ledger/entries/search HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=YOUR_API_TOKEN&start_date=2026-01-01&end_date=2026-01-31&limit=500&offset=0&type=2{ "status": "ok", "data": [ { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "user_id": 12345, "type": 2, "income_expenditure_category_id": "1f7cca17-c34f-4fe2-9f63-01fa494ef008", "from_account_id": "", "to_account_id": "", "date_time": 1737475200000, "year": 2026, "month": 1, "day": 21, "amount": 35.5, "remark": "Lunch", "add_time": 1737500000000, "update_time": 1737500000000, "server_add_time": 1737500000, "server_update_time": 1737500000, "is_server_delete": 0 } ], "meta": { "mode": "query", "total": 128, "limit": 500, "offset": 0, "has_more": false, "start_date": "2026-01-01", "end_date": "2026-01-31" } }写入个人账本流水
POST
/v1/ledger/entries/createopenfinance向个人账本写入一笔收入(type=1)或支出(type=2)。amount 为入账币种金额;可选 currency_code(取自货币列表的 ISO 4217)按用户默认币种换算。不能创建转账、余额调整或 AA 记录。
认证方式: 从 App「设置 → API」复制会员 API token(需登录且开通年费会员),以 application/x-www-form-urlencoded 表单字段 token 传递,不要使用 Authorization 头。普通的应用内登录会话不被接受。重新生成后旧 token 立即失效。
- id
- user_id
- type
- amount
- category_id
- account_id
- to_account_id
- date
- date_time
- year
- month
- day
- remark
- currency_code
- add_time
- server_add_time
POST /v1/ledger/entries/create HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=YOUR_API_TOKEN&type=2&amount=35.50&category_id=1f7cca17-c34f-4fe2-9f63-01fa494ef008&date=2026-01-21&remark=Lunch{ "status": "ok", "data": { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "user_id": 12345, "type": 2, "to_account_id": "", "date_time": 1737475200000, "year": 2026, "month": 1, "day": 21, "amount": 35.5, "remark": "Lunch", "add_time": 1737500000000, "update_time": 1737500000000, "server_add_time": 1737500000, "server_update_time": 1737500000, "is_server_delete": 0, "category_id": "1f7cca17-c34f-4fe2-9f63-01fa494ef008", "account_id": "" } }读取个人分类
POST
/v1/ledger/categories/listopendata返回个人收入(type=1)与支出(type=2)分类,含系统默认项。title 常为 i18n 键(如 category_food)而非本地化文案;写入/筛选流水请用 id。
认证方式: 从 App「设置 → API」复制会员 API token(需登录且开通年费会员),以 application/x-www-form-urlencoded 表单字段 token 传递,不要使用 Authorization 头。普通的应用内登录会话不被接受。重新生成后旧 token 立即失效。
- id
- title
- type
POST /v1/ledger/categories/list HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=YOUR_API_TOKEN{ "status": "ok", "data": [ { "id": "1f7cca17-c34f-4fe2-9f63-01fa494ef008", "title": "category_food", "type": 2 }, { "id": "c9e2b1aa-1111-4aaa-8bbb-0123456789ab", "title": "category_salary", "type": 1 } ] }读取个人账户余额
POST
/v1/ledger/wallets/listopenbanking列出个人现金、银行卡、虚拟、投资与债务账户。currency_amount 为实时余额(快照加上 amount_time 之后的流水,公式与 App 一致);响应里的 amount_time 为当前毫秒时间,不会写回。
认证方式: 从 App「设置 → API」复制会员 API token(需登录且开通年费会员),以 application/x-www-form-urlencoded 表单字段 token 传递,不要使用 Authorization 头。普通的应用内登录会话不被接受。重新生成后旧 token 立即失效。
- id
- name
- currency_id
- currency_code
- currency_amount
- amount_time
POST /v1/ledger/wallets/list HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=YOUR_API_TOKEN{ "status": "ok", "data": [ { "id": "acc-uuid-example", "name": "Cash", "currency_id": "cur-uuid", "currency_code": "CNY", "currency_amount": 1234.56, "amount_time": 1737500000000 } ] }列出已加入账本
POST
/v1/books/listopendata返回当前用户已加入的共享账本(家庭、团队、生意、项目、AA)。后续所有账本类调用都需要这里的 cashbook_id。
认证方式: 从 App「设置 → API」复制会员 API token(需登录且开通年费会员),以 application/x-www-form-urlencoded 表单字段 token 传递,不要使用 Authorization 头。普通的应用内登录会话不被接受。重新生成后旧 token 立即失效。
- id
- name
POST /v1/books/list HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=YOUR_API_TOKEN{ "status": "ok", "data": [ { "id": "1001", "name": "Family" }, { "id": "1002", "name": "Trip AA" } ] }读取共享账本流水
POST
/v1/books/entries/searchopenfinance与个人流水查询相同的语义,限定在用户所属的 cashbook_id。省略 type 时可能混入 AA 分摊支出(5) 与 AA 结算(6),其 from_account_id/to_account_id 可能是成员 id。
认证方式: 从 App「设置 → API」复制会员 API token(需登录且开通年费会员),以 application/x-www-form-urlencoded 表单字段 token 传递,不要使用 Authorization 头。普通的应用内登录会话不被接受。重新生成后旧 token 立即失效。
- cashbook_id
- id
- user_id
- type
- income_expenditure_category_id
- from_account_id
- to_account_id
- date_time
- amount
- remark
- server_update_time
- is_server_delete
- meta.total
- meta.has_more
POST /v1/books/entries/search HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=YOUR_API_TOKEN&cashbook_id=1001&start_date=2026-01-01&end_date=2026-03-31&limit=500&offset=0{ "status": "ok", "data": [ { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "user_id": 12345, "type": 2, "income_expenditure_category_id": "1f7cca17-c34f-4fe2-9f63-01fa494ef008", "from_account_id": "", "to_account_id": "", "date_time": 1737475200000, "year": 2026, "month": 1, "day": 21, "amount": 35.5, "remark": "Lunch", "add_time": 1737500000000, "update_time": 1737500000000, "server_add_time": 1737500000, "server_update_time": 1737500000, "is_server_delete": 0 } ], "meta": { "mode": "query", "total": 42, "limit": 500, "offset": 0, "has_more": false, "start_date": "2026-01-01", "end_date": "2026-03-31" } }写入共享账本流水
POST
/v1/books/entries/createopenfinance向用户所属共享账本写入一笔收入或支出。cashbook_id 不在用户已加入账本列表中时返回非账本成员错误。可选 currency_code 按账本默认币种换算。
认证方式: 从 App「设置 → API」复制会员 API token(需登录且开通年费会员),以 application/x-www-form-urlencoded 表单字段 token 传递,不要使用 Authorization 头。普通的应用内登录会话不被接受。重新生成后旧 token 立即失效。
- cashbook_id
- id
- user_id
- type
- amount
- category_id
- account_id
- date
- currency_code
- date_time
- remark
- server_add_time
POST /v1/books/entries/create HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=YOUR_API_TOKEN&cashbook_id=1001&type=2&amount=120.00&category_id=372f1424-2945-48d4-bf2c-15ede07a725b&date=2026-01-15{ "status": "ok", "data": { "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901", "user_id": 12345, "type": 2, "amount": 120.0, "category_id": "372f1424-2945-48d4-bf2c-15ede07a725b", "account_id": "", "date_time": 1736899200000, "year": 2026, "month": 1, "day": 15, "remark": "", "server_add_time": 1737500000, "server_update_time": 1737500000, "is_server_delete": 0 } }读取共享账本分类
POST
/v1/books/categories/listopendata返回某一共享账本的收支分类。title 可能是 i18n 键;写入流水时把 id 作为 category_id。
认证方式: 从 App「设置 → API」复制会员 API token(需登录且开通年费会员),以 application/x-www-form-urlencoded 表单字段 token 传递,不要使用 Authorization 头。普通的应用内登录会话不被接受。重新生成后旧 token 立即失效。
- id
- title
- type
POST /v1/books/categories/list HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=YOUR_API_TOKEN&cashbook_id=1001{ "status": "ok", "data": [ { "id": "372f1424-2945-48d4-bf2c-15ede07a725b", "title": "category_shopping", "type": 2 } ] }读取共享账本账户余额
POST
/v1/books/wallets/listopenbanking列出某一共享账本内的账户,供写入共享账本流水时的可选 account_id。currency_amount 仅为该账本内的实时余额;amount_time 为当前毫秒时间,不落库。
认证方式: 从 App「设置 → API」复制会员 API token(需登录且开通年费会员),以 application/x-www-form-urlencoded 表单字段 token 传递,不要使用 Authorization 头。普通的应用内登录会话不被接受。重新生成后旧 token 立即失效。
- id
- name
- currency_id
- currency_code
- currency_amount
- amount_time
POST /v1/books/wallets/list HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=YOUR_API_TOKEN&cashbook_id=1001{ "status": "ok", "data": [ { "id": "acc-cashbook-uuid", "name": "Team wallet", "currency_id": "cur-uuid", "currency_code": "CNY", "currency_amount": 860.0, "amount_time": 1737500000000 } ] }读取支持的货币
POST
/v1/currencies/listopendata返回账本支持的全部 ISO 4217 货币。写入流水时传 code 作为 currency_code,不要传货币表 UUID。
认证方式: 从 App「设置 → API」复制会员 API token(需登录且开通年费会员),以 application/x-www-form-urlencoded 表单字段 token 传递,不要使用 Authorization 头。普通的应用内登录会话不被接受。重新生成后旧 token 立即失效。
- code
- currency_name
- display_symbol
POST /v1/currencies/list HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=YOUR_API_TOKEN{ "status": "ok", "data": [ { "code": "CNY", "currency_name": "Chinese Yuan", "display_symbol": "¥" }, { "code": "USD", "currency_name": "US Dollar", "display_symbol": "$" }, { "code": "EUR", "currency_name": "Euro", "display_symbol": "€" } ] }读取默认币种
POST
/v1/currencies/defaultsopenfinance读取用户默认币种;传入 cashbook_id 时同时返回该账本默认币种。写入流水时 amount 存成账本默认币;若需要换算但默认币未配置则请求失败。
认证方式: 从 App「设置 → API」复制会员 API token(需登录且开通年费会员),以 application/x-www-form-urlencoded 表单字段 token 传递,不要使用 Authorization 头。普通的应用内登录会话不被接受。重新生成后旧 token 立即失效。
- user_default_currency_id
- user_default_currency_code
- cashbook_default_currency_id
- cashbook_default_currency_code
POST /v1/currencies/defaults HTTP/1.1 Content-Type: application/x-www-form-urlencoded token=YOUR_API_TOKEN&cashbook_id=1001{ "status": "ok", "data": { "user_default_currency_id": "uuid-or-null", "user_default_currency_code": "CNY", "cashbook_default_currency_id": "uuid-or-null", "cashbook_default_currency_code": "USD" } }
数据类别
- 流水
- 账户
- 余额
- 分类
- 账本
- 货币
- 默认币种
数据使用场景与案例
家庭月度损益
预算机器人按 start_date/end_date、limit=500 分页调用个人流水查询(POST /v1/ledger/entries/search),只对 type 为 1 或 2 的 amount 求和,并按 income_expenditure_category_id 分组,从而把转账(3) 与余额调整(4,amount 恒为 0) 排除在损益之外。
共享账本运营台
家庭或店铺集成先 POST /v1/books/list,再用该 cashbook_id 与 POST /v1/books/categories/list 的 category_id 调用 POST /v1/books/entries/create 记账;持有人不是成员时请求失败。
净资产快照
财富看板读取 POST /v1/ledger/wallets/list 与 POST /v1/books/wallets/list,把 currency_amount 当作实时口袋余额(快照加上 amount_time 之后的流水),与设备上账户视图一致,而不是用首页流水结余。
外币入账
差旅报销工具从 POST /v1/currencies/defaults 读取 user_default_currency_code(及 cashbook_default_currency_code),用 POST /v1/currencies/list 核对 ISO 代码,再写入 amount 与 currency_code,由服务端存成账本默认币金额。
常见问题
魔法记账的开发者 API 如何鉴权?
会员在「设置 → API」复制长期 token,每次 POST 都以 application/x-www-form-urlencoded 表单字段 token 传递。普通的应用内登录会话不被接受。在 App 内重新生成后旧 token 立即失效。同一 IP 每小时最多 1000 次。
API 能创建转账或 AA 分摊吗?
不能。个人账本与共享账本的写入流水接口都只接受 type 1(收入)或 2(支出)。若流水是在 App 里创建的,流水查询接口仍可能返回 type 3(转账)、4(账户余额调整,amount 恒为 0,应读 account_currency_amount)、5(AA 分摊支出)和 6(AA 结算)。
个人账本和共享账本有何区别?
个人账本接口(流水查询、写入流水、分类列表、账户列表)覆盖当前登录用户自己的账,不要传 cashbook_id。家庭/团队/生意/项目/AA 共享账本先调用账本列表,再走必须带 cashbook_id 的账本类接口。两人数据合并展示的「家庭共享」与多人共维同一账本不是一回事。
实时账户余额在哪些字段?
个人与共享账本的账户列表返回的 currency_amount 是 currency_code 下的实时余额,公式与 App 一致(快照加上 amount_time 之后的流水)。响应里的 amount_time 为当前毫秒时间,不落库。首页的月余额/总余额是流水结余,不是这套账户汇总。
与 Money Tracker-Expense & Budget 相似的应用
- Wallet: Budget Expense Tracker — BudgetBakers 的 Wallet 是个人与家庭理财应用,把支出记录、预算规划和银行同步放在同一个 App 里。
- Spendee — Spendee 是理财应用,可记录现金、银行账户、电子钱包和加密钱包,设置分类预算,并为情侣、家庭和室友提供共享钱包。
- Money Manager Expense & Budget — Realbyte 的 Money Manager Expense & Budget 是个人理财应用,用于记录支出、按分类设置月度预算、保存收据照片,并查看周度和月度汇总。
- AndroMoney — AndroMoney 是覆盖手机与网页的个人理财工具,可记录日常支出、按分类设置月度预算并在超支时提醒,同时支持多账户与多币种。
- YNAB — YNAB(You Need a Budget)是基于信封预算法的在线个人预算程序,可通过网页或手机应用使用。
- Goodbudget — Goodbudget 是覆盖网页、Android 和 iPhone 的家庭预算工具,用虚拟信封法让家庭一起记账、储蓄并共享预算。
- Toshl Finance — Toshl Finance 是覆盖 Android、iOS 和网页的个人理财应用,可记录支出、整理账单与预算,并能连接金融账户或导入文件。
- PocketGuard — PocketGuard 是理财应用,通过关联账户跟踪支出、生成个性化预算,并显示支付账单、还债和储蓄之后还剩多少可花。
相关主题
- 魔法记账 API
- Money Tracker API
- 记账流水
- 账本
- currency_amount
- income_expenditure_category_id
- Horoscope365
- 开放金融
需要集成这个 App 的数据 API?
我们可为任意指定 App 交付定制集成——源码交付 USD 500 起,或托管 API 按调用计费。告诉我们您需要的数据即可。
- 每个项目均签 NDA 与 SOW
- 3–7 天交付
- 验收通过后才付款
- 仅在授权范围内作业