订阅 CRUD
订阅 API 使用 camelCase 字段。服务端管理字段会在响应中返回,但不能出现在写请求里。操作语义
AI 集成在更新或删除前,应该先查询并确认目标订阅;除非用户已经提供了准确的订阅 UUID。写操作需要带
write 权限的 API Key;只读 Key 会收到 403 insufficient_scope。
分页
GET /api/v1/subscriptions 按创建时间倒序返回,支持两个可选查询参数:
响应中包含
pagination 对象。当 hasMore 为 true 时,用 offset + limit 获取下一页。
400 invalid_pagination。
过滤与排序
GET /api/v1/subscriptions 在分页之外,还支持以下可选过滤器和排序:
将
status=active 与 expiringBefore 组合即可回答「哪些即将续费」。非法取值返回 400 invalid_query,并带 field 与 suggestedFix。
订阅对象
可写字段
idcreatedAtupdatedAt
POST 或 PATCH 请求里发送服务端管理字段。
字段规则
nextPaymentDate 是权威的订阅计划日期。月付订阅通过 billingAnchorDay 保留原始日历日期,短月份只会临时落到月末,例如:1 月 31 日 → 2 月 28/29 日 → 3 月 31 日。如果服务是固定每 30 天扣费,而不是每月固定日期,请使用 period: "custom" 和 customDate: "30"。响应中的 lastPaymentDate 只是反推得到的兼容字段,新集成不应再依赖它。
状态 vs 删除
响应中会返回只读的status(active、paused、cancelled),列表查询也可以按它过滤。公开 API 不能 通过写入 status 来取消、暂停或恢复订阅。需要移除追踪记录时使用 DELETE。
在分析端点中,只有 active 订阅计入活跃支出。
自然语言示例
新增订阅
用户意图:修改计费周期
用户意图:- 调用
GET /api/v1/subscriptions找到 Netflix 记录。 - 向用户确认具体记录和修改内容。
- 调用
PATCH /api/v1/subscriptions/{id}。
删除重复记录
用户意图:- 调用
GET /api/v1/subscriptions找到重复候选。 - 向用户确认订阅名称和 id。
- 调用
DELETE /api/v1/subscriptions/{id}。
自定义计费周期
如果不是月付或年付,把period 设为 custom,并把 customDate 设为表示天数的正整数字符串。
customDate 设为 "30";不要选择 monthly。
从 custom 改回 monthly 或 yearly 时,省略 customDate。服务端会清理旧的自定义计费数据。