← 首页API 接入 →

接口说明

POST /ingest 调用格式与幂等规则;浏览器直达录入页

浏览器直达

直接访问 /ingest 即得网页录入页:与微信 / API 共用同一套指令,明暗主题自适应、移动端友好。带上 ?token= 可免填凭证直接记账:

https://你的域名/ingest?token=tsk_…

?token= 本身就是鉴权凭证(等效 Authorization: Bearer),页面提交会自动沿用、不写入浏览器本地存储——带 token 的链接注意保密。

请求

POST /ingest
Authorization: Bearer tsk_…   # 或省略 header,改用 URL 鉴权 ?token=tsk_…
Content-Type: application/json
字段必填说明
text✅指令文本,与使用指南一致(#ai、#日记、/撤销 等)
client_id✅幂等键,见下文

通道默认关闭(env INGEST_ENABLED),未开启时返回 404。

响应

成功返回 { kind, message },kind 与指令对应:

失败返回 HTTP 错误码与 { error }。

幂等

同一 client_id 重复提交不会重复记账,返回幂等命中:

{ "kind": "idempotent", "message": "该请求已处理,未重复记账" }

Node.js 调用(fetch)

Node.js ≥ 18 自带 fetch,无需装依赖。存为 ingest.mjs:

// 用法:INGEST_TOKEN=tsk_… node ingest.mjs "午饭 25"
// 可选:INGEST_URL=https://你的域名/ingest(缺省用下方地址)
import { randomUUID } from 'node:crypto';

const url = process.env.INGEST_URL ?? 'https://你的域名/ingest';
const text = process.argv[2] ?? '午饭 25';

const res = await fetch(url, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.INGEST_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    text,                                    // 指令文本:#ai、#日记、/撤销 均适用
    client_id: randomUUID(),                 // 每次提交取新值;超时重发沿用旧值即可避免重复记账
  }),
});

const data = await res.json().catch(() => ({}));
if (!res.ok) throw new Error(`HTTP ${res.status}: ${data.error ?? res.statusText}`);
console.log(data.message);

client_id 也可以是你自己的业务键(如订单号、任务 ID)——同键重复提交即幂等命中,天然适合脚本重试。

iOS 快捷指令

「快捷指令」三步即可:

  1. 输入:接收记账文本
  2. 获取 URL 内容 https://你的域名/ingest:方法 POST,请求头 Authorization: Bearer tsk_…,请求体 { "text": "文本", "client_id": "唯一值" }
    • client_id 每次提交取新值(如当前时间戳);超时重发沿用旧值即可避免重复记账
  3. 显示通知:取返回的 message 即可