DEVELOPER · GUIDE

接入指南

为对接 plott LIFE Open API 的合作伙伴提供的分步指南。

PHASE 01 · 开始

从 API 密钥到开发环境设置

STEP 01

添加应用并获取 API 密钥

调用 Open API 前,需先创建应用并获取 API 客户端的 Key 与 Secret。

创建应用

  1. 应用界面在控制台填写申请表。
  2. 填写服务名称、英文名(渠道代码)与服务 URL 后提交。
  3. 运营团队审核通过后会创建私有渠道,审核结果会通过邮件通知。审核通过后,可在应用详情页按下述流程创建 API 密钥。

颁发 API 客户端

  1. 应用详情页的 API 客户端 部分中 [添加客户端] 并点击。
  2. 填写 Client ID(自由格式,最多 100 字)并选择所需 scope。
  3. 创建后立即显示的 请立即将 Client Secret 安全保存 。此值不会再次显示。

权限(Scope)

  • buildingUnit:readBUILDING_UNIT_READ房间查询
  • buildingUnit:writeBUILDING_UNIT_WRITE创建/修改房间映射
  • booking:readBOOKING_READ预订查询
  • booking:writeBOOKING_WRITE创建/修改预订
  • contract:readCONTRACT_READ合同查询
  • contract:writeCONTRACT_WRITE创建/修改合同(方式 B)
  • user:writeUSER_WRITE创建用户(方式 A · 登录联动)
  • userLoginTicket:writeUSER_LOGIN_TICKET_WRITE颁发登录票据(方式 A · 登录联动)
  • chat:readCHAT_READ聊天查询
  • chat:writeCHAT_WRITE创建/发送聊天

结果

如果已获取 Client ID 与 Client Secret,该密钥对用于所有 API 请求的Authorization: Basic … 请求头中。

STEP 02

注册测试房源并设置渠道映射

要通过 API 注册合同/预订,需先创建测试房源并设置渠道映射。

步骤

  1. 房东页面在控制台注册新房源。
  2. 渠道映射页面在已登记的房源中选择房间并设置房间级映射与房号级映射。房间级映射可选,但必须设置房号级映射才能通过 Open API 注册合同。外部物件 ID 请设为该渠道使用的房号 ID。
  3. 要在访客页面查看已注册房源, /rooms/{roomId}请访问访客页面。

备注

外部物件 ID 示例 https://www.airbnb.co.kr/rooms/1252576808547167623 1252576808547167623

STEP 03

通过 MCP 浏览文档

在 AI 编码代理(如 Claude Code、Cursor 等)中注册 plott LIFE Open API 的 MCP 服务器后,代理可以立即查看 API 规范,加快集成速度。

在 Claude Code 中注册

claude mcp add --transport http plott-life-partner \
  https://life.plott.co.kr/api/open/mcp \
  --header "Authorization: Basic {base64(clientId:clientSecret)}"

{base64(clientId:clientSecret)} 是将 Step 01 中获取的 Client ID 与 Secret clientId:clientSecret 用冒号连接并进行 base64 编码后的值。

示例:注册 MCP 服务器后,AI 编码代理浏览 plott LIFE Open API 规范示例:代理根据通过 MCP 查询的 API 规范编写对接代码

PHASE 02 · 集成

选择集成方式并实施与运营

IMPLEMENT & OPERATE

选择对接方式

根据合作方要自行处理的范围,有两种对接方式。 方式 A · 登录对接 是一种只对接房源列表和登录、将合同与支付交由 plott LIFE 处理的交接方式, 方式 B · 合同对接 另一种是对接合同 API,在合作方应用内完成销售。选择下方标签后会显示对应的实现与运营步骤。

根据合作方要自行处理的范围,从两种对接方式中选择其一。下方的实现与运营步骤将按所选方式显示。前述通用步骤(应用申请·密钥生成、测试房源与渠道映射、MCP)以及之后的公开渠道阶段,两种方式相同。

方式 A · 登录对接(交接 / SSO)

在合作方只展示房源列表,签约与付款跳转到 plott LIFE 页面。提前创建会员并发放登录票证(SSO) 后,用户可在 plott LIFE 上自动登录并继续签约。所需权限范围为 user:write, userLoginTicket:write 。

实施 · 登录对接

实现阶段

1. 房源列表对接

合作方通过 plott LIFE 查询房源(挂牌)并展示给用户的阶段。

GET /open/v1/building-unit-type 查询房源列表, GET /open/v1/building-unit-type/{id} 查询单个房源详情。列表使用 page·size 使用分页, 默认 size 为 20。无限滚动通过响应的 totalItems 字段判断是否还有更多可加载项。

  • page可选从 0 开始的页码
  • size可选 · 默认 20每页项数
  • operationStatus建议对普通用户展示时仅查询 PUBLISHED(运营中)
const res = await fetch(
  'https://life.plott.co.kr/api/open/v1/building-unit-type?page=0&size=20&operationStatus=PUBLISHED',
  { headers: { Authorization: `Basic ${credentials}` } },
);
const { items, totalItems, totalPages } = await res.json();

备注

房价计算规则(日租费分摊·折扣·管理费·押金·服务费)及存储方式(直接调用/镜像)在两种方式下均相同。详细公式与计算示例请参见 API 文档请在 API 文档中查看。

2. 用户创建对接

POST /open/v1/user 将合作方的用户创建为 plott LIFE 会员。 externalUserId 以(合作方会员标识)为依据进行幂等处理,若会员已存在则返回已有的会员 ID。

  • externalUserId必需合作方的用户标识(幂等键)
  • email必需用户邮箱
  • firstName / lastName必需名 / 姓
  • phoneCode / phoneNumber必需国家代码 / 电话号码(例:82 / 1012345678)
  • countryCode可选国家代码(例:KR)
const res = await fetch('https://life.plott.co.kr/api/open/v1/user', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: `Basic ${credentials}`,
  },
  body: JSON.stringify({
    externalUserId: 'partner-user-001',
    email: 'user@example.com',
    firstName: '길동',
    lastName: '홍',
    phoneCode: '82',
    phoneNumber: '1012345678',
    countryCode: 'KR',
  }),
});

const { id } = await res.json(); // 플라트라이프 회원 ID

3. 登录票发放对接

POST /open/v1/userLoginTicket 用于为该会员发放一次性登录票。请求中应包含 userId (会员创建响应的 id) 或 externalUserId 之一。响应中返回的 ticket 为 有效5分钟 且 仅可使用一次 因此,请在用户跳转到 plott LIFE 前发放。

  • userId从 userId / externalUserId 中选一plott LIFE 会员 ID (会员创建响应的 id)
  • externalUserId从 userId / externalUserId 中选一合作方服务的会员标识
const res = await fetch(
  'https://life.plott.co.kr/api/open/v1/userLoginTicket',
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Basic ${credentials}`,
    },
    body: JSON.stringify({ externalUserId: 'partner-user-001' }),
  },
);

const { ticket } = await res.json(); // 5분 TTL · 1회용

提示

本方式不需接入合同 API。合同与支付在 plott LIFE 页面进行,合作方只需实现房源展示与登录联动即可。

OPERATE · 登录联动

运营阶段

  1. 合作方展示房源列表。
  2. 用户选择房源后,该会员的 发放登录票据 进行(若无会员则先创建后发放)。
  3. 携带已发放的票据 https://life.plott.co.kr/rooms/{id}?ticket=<ticket> 并重定向至目标地址。plott LIFE 会交换票据 自动登录 完成登录。
  4. 之后合同与支付在 plott LIFE 页面进行,合作方无需处理合同流程。

票据有效期

登录票据在发放后仅5分钟内有效且只能使用一次。请在重定向前立即发放并传递,避免延迟。

PHASE 03 · 公开渠道

验证通过后切换为公开渠道,正式运营

PUBLIC CHANNEL

公开渠道审核申请

在私有渠道充分验证对接后,可申请切换为公开渠道,从而扩展权限以访问所有房东的房源。该步骤对两种对接方式相同。

申请方式

  1. 应用详情页在申请状态卡中 [申请切换为公开渠道] 点击该按钮。
  2. 运营团队审核后会通过电子邮件通知结果。
  3. 若被驳回,请查看原因并完善后重新申请。

PUBLIC CHANNEL

启用公开渠道

一旦成为公开渠道,无需额外操作即可通过 Open API 查询 plott LIFE 上所有房东的房源。选中要对接的房源并设置渠道映射后,即可按所选对接方式进行运营。

查看全部房源

const res = await fetch(
  'https://life.plott.co.kr/api/open/v1/building-unit-type?page=0&size=20',
  { headers: { Authorization: `Basic ${credentials}` } },
);
const { items, totalItems, totalPages } = await res.json();

默认行为

默认情况下 运营中 仅显示处于该状态的房源。若只查看自己发布的房源, isMine=true 可提出申请。

REFERENCE · 通用事项

认证、错误与速率限制说明

COMMON

认证

Open API 的所有请求均使用 HTTP Basic 认证。 应用详情页由控制台颁发的 Client ID 与 Client Secret 用冒号连接并进行 base64 编码 Authorization 放在请求头中发送。

const credentials = Buffer.from(
  `${process.env.CLIENT_ID}:${process.env.CLIENT_SECRET}`,
).toString('base64');

const res = await fetch('https://life.plott.co.kr/api/open/v1/contract-channel', {
  headers: {
    Authorization: `Basic ${credentials}`,
  },
});

Client Secret 保密

Client Secret 仅在颁发时显示一次。如遗失或被泄露, 应用详情页请在控制台立即删除该客户端并重新颁发。

COMMON

错误响应

发生错误时 RFC 9457 Problem Detail 按如下格式响应。

{
  "type": "about:blank",
  "title": "Not Found",
  "status": 404,
  "detail": "예약 매핑을 찾을 수 없습니다.",
  "instance": "/open/v1/booking"
}
  • type错误类型 URI
  • titleHTTP 状态文本
  • statusHTTP 状态码
  • detail错误详细信息
  • instance请求路径

COMMON

速率限制

为保障服务稳定与合作伙伴公平使用,Open API 实施调用频率限制。

  • 适用范围/open/** 下的所有端点
  • 限制单位房东账号
  • 上限每分钟 300 次请求
  • 恢复方式连续恢复(greedy refill)。约每 1 秒补充相当于 5 次请求的令牌。

超限响应

超出限额的请求会被立即拒绝, 429 Too Many Requests 并返回错误响应。

建议的客户端处理方式

  • 429 收到响应后 不要立刻重试 等待一段时间再重试。
  • 平均约 200 毫秒间隔 即可稳定调用。
  • 需要在短时间内发起大量请求的批处理,请增加调用间隔或实现指数回退(exponential backoff)重试。

提示

在正常使用模式下 429 如果经常出现,请联系我们,我们可评估提高配额。

DOCUMENTATION

查看端点完整规范

在一处查看请求/响应结构、参数与错误码。

前往 API 文档