版本
主版本号在路径中:/api/v1。在 v1 内我们不会破坏现有集成。合约的当前版本是 /openapi.json 中的 info.version,每次变更都会递增。
可能不经通知的变更
以下变更是兼容的,您的客户端应能处理:
- 新的操作和工具;
- 新的可选请求字段;
- 新的响应字段;
- 响应枚举中的新值(状态、代码)、
title中的新错误码、新的 webhook 事件类型; detail文本的修改;- 更高的限制。
如何编写客户端
- 忽略未知的响应字段。
- 把未知的枚举值、错误码或事件类型视为「其他」,而不是故障。
- 根据
status、title和code分支处理,而不是detail文本。 - 不要依赖字段顺序或 ID 长度。
- 以任务的
state为准,而不是工具的原始status。
什么算破坏性变更
删除或重命名操作、字段、权限范围或事件;新增必填请求字段;改变字段的类型或含义;对同一情况改变状态码;缩小允许的取值范围。我们不会在 v1 中不经通知做这些变更:操作会先在 /openapi.json 和本日志中标记为 deprecated,并至少继续工作 6 个月。修复安全漏洞除外。
使响应与本文档一致的修复不属于破坏性变更。
变更日志
2026-10-03:版本 1.16
变更:
429带有code:minute_limit或daily_limit(密钥的每日上限,00:00 UTC 重置)。- 使用机构密钥写入的房源归属机构;机构房源和线索的
object.*、lead.*webhook 也会发送到机构的地址。 - 房源照片:各类型最多 50 张,与后台一致。
- SDK 1.7.2:流中的空分块不再切断聊天事件。
修复:
PUT /objects/{kind}/{id}会保留房源的审核状态、isSold和发布状态;之前会重置它们(普通编辑会让已发布房源下架)。GET /objects不再列出被停用房主的房源;对访客隐藏的卡片按 ID 也不会返回。PATCH /leads/{id}:无合同线索的发送方可以像在后台一样修改其状态;状态变更和归档会写入线索历史。
2026-10-03:版本 1.15
变更:
PATCH /leads/{id}(状态)和DELETE /leads/{id}遵循后台规则:结案、佣金收取、生效的合同或协议:返回422,原因见code。?expand=history不再包含内部元数据(令牌、其他用户的 ID)。- 免费聊天的每日上限返回
code: free_daily_limit,以及到 00:00 UTC 为止的Retry-After。 GET /works:previewUrl、link和object.photoUrl是供GET /artifacts/{path}使用的/files/...路径;最后一页的nextCursor为null。- 创建线索:未知字段会被丢弃(而不是被拒绝);规范中写明了服务校验的长度;
pool: true会把线索交给平台池。 - SDK 1.7.1:
jobs.wait会等待429结束;chat.stream能处理被分块切开的 CRLF;artifact()接受signal。
修复:
- 音乐预览:超出文件末尾的
Range返回416(之前返回404);文件服务故障返回502而不是404。 POST /uploads中超过 15 MB 的文件返回413。被拒绝的strictPhotos房源会列出未能获取的照片(code: photo_fetch_failed)。- 内容包的拒绝会指出
form.media.photos。沙盒:报告审核会取任意名称的第一个文件;租金中的字符串和照片的内部键不会被拒绝。
2026-10-03:版本 1.14
变更:
- 使用同一个
Idempotency-Key重复快速估价现在完全免费:API 调用也不扣费。 GET /works:不是nextCursor的cursor返回400(之前列表会静默地从头开始)。POST /webhooks/{id}/test:不在列表中的eventType返回400(之前会发送通用测试)。- Swipe Match:
reasonCode只接受列出的原因,与服务一直以来的要求一致;线索的kind可以是pool。 - SDK 1.7.0:
jobs.wait可承受单次轮询失败;artifact()接受range;chat.stream能读取 CRLF 流,并且每个事件调用一次。
修复:
- 音乐预览:
bytes=-N返回最后 N 个字节,超出文件末尾的Range返回416。 - 在请求发出前连接超时会释放
Idempotency-Key。 - 沙盒:服务能读取的任意字段名下的视频照片、以字符串传入的租金数字、符合声明尺寸的海报 PNG。
2026-10-03:版本 1.13
新增:
GET /works返回后台为每个结果显示的内容:street、streetNumber、previewUrl、link、repeatIndex、error以及房源(object)。GET /chat/sessions记录了其参数:limit、cursor、q、projectId、archivedOnly、sort。- 规范中的
Problem.title包含range_not_satisfiable;webhook 列表带有requestId。 - SDK 1.6.1:
chat.listSessions接受列表参数。
变更:
- 规范写明了生产环境早已执行的限制:头像
scriptText最多 1200 字符,海报formats最多 3 个、layouts最多 5 个,海报contacts字段长度,照片seed最大 2147483647,照片data中不得有未知键。 - 快速估价:网关只拒绝完全没有面积且没有房产类型的请求;
landPlotArea是否计作面积由服务决定(在propertyType或apartmentType中写明为土地的同样计入)。
修复:
- 沙盒与生产环境一样拒绝照片(JPEG、PNG 或 WebP,最大 25 MB:
JOB_CREATE_FAILED;在 cleanup 之外使用蒙版:MASK_NOT_SUPPORTED),并接受生产环境会截断或替换的内容(视频标题、音量、片尾和结束语选项、落地页语言、超过 20 张的内容照片、租金中以文字给出的furnished)。估价报告任务在running之后不再显示pending。 - 被拒绝的下载重定向会如实说明,而不是报超时;比文件更长的
Range后缀返回整个文件。 - SDK 1.6.1:
verifyWebhookSignature可在 Node 18 中运行。
2026-10-03:版本 1.12
新增:
416 range_not_satisfiable作为 RFC 9457 问题返回(之前是空响应体)。- 照片优化启动时返回
priceMinor:本次调用的扣费金额,与后台显示一致。 - SDK 1.6.0:
works接受from/to,chat.history接受limit/cursor,chat.sendMessage接受style。
变更:
GET /match/leads:limit超过 50 或page超过 1000 返回400(它们从未被截断)。POST /match/leads/{id}/events:格式不符的Idempotency-Key返回400,不再被静默丢弃。- 海报拒绝的字段返回带字段名的
400 validation(之前为422)。 - 同一个
Idempotency-Key下付款仍在预留中的调用返回409 idempotency_conflict(之前为422)。 - 快速估价:与服务一致,
landPlotArea仅对land计作面积。 - 超时、连接被重置或在响应中途关闭的套接字会让
Idempotency-Key保持占用;只有从未到达服务的请求才会释放它。 - SDK 1.6.0:上传在
503后从不重试;每次等待后都会移除取消监听器。
修复:
- PDF 和落地页的拒绝会带上原因:
402加INSUFFICIENT_FUNDS或QUOTA_EXCEEDED(之前为不带code的422)。 - 沙盒与生产环境拒绝的内容完全一致:上传文件的类型和大小;文本会被截断而不是被拒绝;未知的视频
length、aspect和language回退为默认值;海报代码不区分大小写;草稿可以不带type。余额不足模拟返回生产环境实际发送的INSUFFICIENT_FUNDS。 limit和page由网关自己截断到范围内(GET /chat/history?limit=500之前返回400;limit=0之前返回 20 而不是 1)。
2026-10-03:版本 1.11
新增:
- 任务结果包含后台显示的字段:内容包、文案和视频带有
progress、masterProfile(文案和配音所依据的故事大纲)以及失败任务的error;照片带有metadata.error;户型图带有rooms[].stable、rooms[].placement、sourceFileId。 - 浏览器(CORS)可以读取
RateLimit-*、Retry-After、Grem-Sandbox、X-Request-Id和Content-Range响应头。
变更:
- Webhooks:测试密钥只能创建和管理沙盒地址;这些地址只接收沙盒任务的事件,正式地址永远不会收到它们。
- 超出范围的
limit和page会被限制到范围内,不再返回400;GET /objects中的kind不区分大小写;rooms可以是小数。 Idempotency-Key归属于 API 密钥、方法和实际路径(POST /objects/property与POST /objects/rental是不同的操作)。超时后,创建房源和线索会像工具一样保留该键 15 分钟;没有到达服务的请求会释放该键。text/generate:customDirection截断为 500 个字符。- SDK 1.5.1:写入的
503仅在带Idempotency-Key时重试;超过 30 秒的Retry-After不会等待;maxRetries最大为 10;您的AbortSignal会取消等待;消息 ID 在 Node 18 中可用。
修复:
- 沙盒与生产环境一致:校验
multipart字段、按类别校验报告字段、独栋房屋的供暖取值、商业类apartmentType和住宅综合体;文件仅限已完成的任务、该工具自己的路径和已知的产物 ID;检查密钥之前给出的响应也带Grem-Sandbox;Grem-Simulate不区分大小写。 - 没有密钥时,无效的查询参数先返回
401。 - 绑定到经纪人的机构密钥不再能读取用机构通用密钥启动的任务。
- 此前以其他端口保存的 webhook 地址会继续接收投递。
- 无法满足的
Range返回416而不是404;报告审核接受最大 40 MB 的文档。
2026-10-03:版本 1.10
新增:
- 错误代码
conflict(409):资源当前的状态不允许该操作(错误)。 POST /video/create中的视频结束语字段:ctaMode、ctaIntent、ctaText、ctaMarket;GET /video/endings的选项带有intent和text。GET /works:from和to筛选条件。- SDK 1.5.0:
maxRetries选项,429和503在Retry-After之后重试。
变更:
- 查询参数会被校验:已知参数的值无效时返回
400 validation并指出字段名。 - Webhook:只允许 443 端口上的
https,URL 中不能有凭据;第 11 个地址返回422;机构的 Webhook 只能由整个机构的密钥管理。 Idempotency-Key归属于 API 密钥和操作;工具超时后该键保留 15 分钟。- 与资金相关的拒绝(额度、欠款、合理使用、余额)均为带
code的402 insufficient_funds。 - 机构中绑定经纪人的密钥只能看到自己的任务和文件。
- 文件下载计入频率限制。
修复:
- 所有错误(包括过大或格式错误的请求体)都以 RFC 9457
application/problem+json返回;超过上限的请求体返回413 payload_too_large。 - 视频字段
ending从未被读取;请使用ctaIntent或ctaText。 - SDK:使用正式密钥时
simulate抛出错误,而不是执行调用。
2026-10-03:版本 1.8-1.9
新增:
- 可比房源:快速估价中的
estimate.analogs、完整报告中的analogs、租金估算中的comps- 与控制台和 PDF 中一致。 - 已完成任务的字段已完整描述:报告数据使用真实字段名(
potPrice、priceRangeLow、priceRangeHigh…)、报告审查、户型图、照片、传单、草稿。 - SDK 1.4.0:
Analog类型。
变更:
- 工具响应只包含已描述的字段;以前漏出的内部字段不再返回。
GET /tools/status显示不可用的工具在扣费前返回503 service_unavailable(以前仅限内容包、文本和视频)。- 报告审查确认响应只包含任务字段(
jobId、state、status);不再返回已弃用的_id。
修复:
- 头像视频:
artifacts包含下载链接所需的 id。 - 租赁的
checkIn/checkOut描述为一天中的小时。
2026-10-02:版本 1.7
新增:
- 沙盒:测试密钥(
gsk_test)模拟工具且不收费;Grem-Simulate请求头选择结果。 - 快速估价中的
estimate.confidenceScore。
变更:
- 启动工具的调用最多等待 5 分钟,而不是 60 秒。
- 使用同一个
Idempotency-Key重试快速估价时,返回已完成的结果且不会再次扣费,超时后也一样。
修复:
- 快速估价的
estimate.confidence之前始终为null。 - 户型图响应不再包含内部字段。
- 不带
kind的GET /objects以及房源和线索的拒绝现在会在detail中说明原因。
2026-10-02:版本 1.6
变更:
- 每个任务响应都包含同一个
jobId字段。原先各工具的名称id、_id、contentGenJobId仍会返回,但已弃用。 - SDK 1.2.0:
Job.jobId始终存在。
2026-10-02:版本 1.2 至 1.5
新增:
GET /voices、GET /avatar/avatars、GET /video/music、GET /video/endings:工具所需的 ID(参考数据)。GET /tools/status:工具可用性;GET /works:作品历史。POST /flyer/create:个人传单,权限范围tools:flyer。POST /valuation/review/jobs/{id}/confirm:确认报告审核数据。- 每个任务响应中的
state字段。 - 错误中的
code和errors字段,以及forbidden、payload_too_large、service_unavailable错误码。 - API 描述中:每个工具的完整请求和响应架构、按类型划分的完整房源写入合约、每个操作的计费类别(
x-grem-billing)、权限范围和事件列表。 - 记录了
scope(房源)和pool(线索)参数。
变更:
- 因缺少数据而拒绝(例如没有描述或城市的文案)现在返回带原因和代码的
422 business_rule。此前为502 provider_error。 - 因资源权限而拒绝现在返回带原因的
403 forbidden。此前为500。 - 工具的 webhook 测试投递与真实投递格式相同:
{ jobId, status, state }。
修复:
- 机构密钥可用于所有工具、对话和文件下载。
- 报告审核和户型图:可以用响应中的 ID 获取任务状态,webhooks 能正常到达。
- 内容包、文案和视频文件的下载仅对任务所有者开放。