# API 契约 正式契约见 [openapi.yaml](openapi.yaml)(OpenAPI 3,v1.2.0),当前 18 路径 / 24 操作: - 认证域(第一迭代冻结):注册、登录、刷新、退出、当前用户 5 个端点,统一错误信封 `{code, message, data}` 与错误码表,以及会话轮换与登录锁定策略说明。 - 埋点域(M2 第一波补录):`POST /api/v1/events` 批量上报产品事件——单批 1–50 条、202 逐条结果(accepted/duplicate/rejected)、`eventId` 幂等去重、唯一允许匿名的写端点(携带 Bearer 则完整校验)。 - 宠物健康档案域(M2 第二波冻结,12 路径;冻结报告为 iteration-2 的 19 号报告,波末入档): - 宠物 CRUD:`GET/POST /api/v1/pets`、`GET/PATCH /api/v1/pets/{petId}`(乐观锁、防枚举 404/40401、MANAGE 仅 owner) - 只读字典:`GET /api/v1/breeds`、`GET /api/v1/vaccine-catalog`(`?species=` 过滤) - 体重记录:`GET/POST /api/v1/pets/{petId}/weights`(cursor 分页正典 `{items, nextCursor, hasMore}`) - 疫苗记录:`GET/POST /api/v1/pets/{petId}/vaccinations`、`PATCH /api/v1/vaccinations/{vaccinationId}`(状态机 422/42201、剂次唯一 409/40904) - 健康事件:`GET/POST /api/v1/pets/{petId}/health-events`、`PATCH /api/v1/health-events/{eventId}`(cursor 分页、金额整数分) - 照护提醒:`GET/POST /api/v1/pets/{petId}/care-reminders`、`PATCH /api/v1/care-reminders/{reminderId}`(`?status=` 过滤、流转 422/42202) - 档案聚合:`GET /api/v1/pets/{petId}/summary`(最新体重、疫苗进度、下次接种、当月花费;`?tz=` 缺省 UTC) 权限三档 READ/WRITE/MANAGE(ADR-015 三角色)、创建返回 201、PATCH 不支持清空回 null、四个记录类 POST 支持可选 `Idempotency-Key`;错误码新增 40300/40401/40402/40902/40903/40904/42201/42202。 约定:契约变更须先改本文件目录下的 OpenAPI,再改实现(契约先行);错误码只增不改义;**pets 域已冻结(1.2.0)——冻结后任何字段变更须显著上报、两端同步**。