DEVELOPER · GUIDE

연동 가이드

플라트라이프 Open API를 연동하는 파트너사를 위한 단계별 안내입니다.

PHASE 01 · 시작

API 키 발급부터 개발 환경 세팅까지

STEP 01

앱 추가 및 API 키 발급

Open API를 호출하려면 먼저 앱을 만들고 API 클라이언트 키와 시크릿을 발급받아야 합니다.

앱 만들기

  1. 앱 화면에서 신청서를 작성합니다.
  2. 서비스 이름, 서비스 영문 이름(채널 코드), 서비스 URL을 입력하고 제출합니다.
  3. 운영팀 검토 후 비공개 채널이 생성되며, 검토 결과는 이메일로 안내됩니다. 승인되면 아래 절차에 따라 앱 상세 페이지에서 직접 API 키를 생성할 수 있습니다.

API 클라이언트 발급

  1. 앱 상세 페이지API 클라이언트 섹션에서 [클라이언트 추가]를 클릭합니다.
  2. Client ID(자유 형식, 최대 100자)와 사용할 스코프를 선택합니다.
  3. 생성 직후 표시되는 Client Secret을 즉시 안전한 곳에 저장하세요. 이 값은 다시 표시되지 않습니다.

스코프

  • 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 등)에 플라트라이프 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 코딩 에이전트에서 플라트라이프 Open API 명세를 탐색하는 예시MCP를 통해 조회한 API 명세를 바탕으로 에이전트가 연동 코드를 작성하는 예시

PHASE 02 · 연동

연동 방식을 선택하고 구현·운영을 진행

IMPLEMENT & OPERATE

연동 방식 선택

파트너 서비스에서 어디까지 직접 다룰지에 따라 두 가지 연동 방식이 있습니다. 방식 A · 로그인 연동은 방 목록과 로그인까지만 연동하고 계약·결제는 플라트라이프로 넘기는 핸드오프 방식이며, 방식 B · 계약 연동은 계약 API까지 연동해 파트너 앱 안에서 판매를 완결하는 방식입니다. 아래 탭에서 방식을 선택하면 그에 맞는 구현·운영 단계가 표시됩니다.

파트너 서비스에서 어디까지 직접 다룰지에 따라 두 가지 연동 방식 중 하나를 선택합니다. 아래 구현·운영 단계는 선택한 방식에 맞춰 표시됩니다. 앞선 공통 단계(앱 신청·키 생성, 테스트 방·채널 매핑, MCP)와 이후 공개 채널 단계는 두 방식 모두 동일합니다.

방식 A · 로그인 연동 (핸드오프)

파트너 서비스에는 방 목록까지만 노출하고, 계약·결제는 플라트라이프 페이지로 넘깁니다. 회원을 미리 생성해 두고 로그인 티켓(SSO)을 발급해 넘기면, 사용자는 플라트라이프에서 자동 로그인된 상태로 계약을 이어갈 수 있습니다. 필요한 스코프는 user:write, userLoginTicket:write 입니다.

IMPLEMENT · 로그인 연동

구현 단계

1. 방 목록 연동

파트너 서비스에서 플라트라이프 방(매물)을 조회해 사용자에게 노출하는 단계입니다.

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 문서에서 확인하세요.

2. 회원 생성 연동

POST /open/v1/user로 파트너 서비스 회원을 플라트라이프 회원으로 생성합니다. 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 중 하나를 담습니다. 응답으로 받은 ticket5분간 유효하며 1회만 사용할 수 있으므로, 사용자가 플라트라이프로 넘어가기 직전에 발급하세요.

  • userIduserId / externalUserId 중 택1플라트라이프 회원 ID (회원 생성 응답의 id)
  • externalUserIduserId / externalUserId 중 택1파트너 서비스의 회원 식별자
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를 연동하지 않습니다. 계약·결제는 플라트라이프 페이지에서 진행되므로, 파트너 서비스는 방 목록 노출과 로그인 연동까지만 구현하면 됩니다.

OPERATE · 로그인 연동

운영 단계

  1. 파트너 서비스에서 방 목록을 노출합니다.
  2. 사용자가 방을 선택하면 해당 회원의 로그인 티켓을 발급합니다 (회원이 없으면 회원 생성 후 발급).
  3. 발급한 티켓을 담아 https://life.plott.co.kr/rooms/{id}?ticket=<ticket> 로 리다이렉트합니다. 플라트라이프가 티켓을 교환해 자동 로그인시킵니다.
  4. 이후 계약·결제는 플라트라이프 페이지에서 진행됩니다. 파트너 서비스는 계약 흐름을 직접 다루지 않습니다.

티켓 수명

로그인 티켓은 발급 후 5분간만 유효하고 1회만 사용할 수 있습니다. 리다이렉트 직전에 발급해 지연 없이 전달하세요.

PHASE 03 · 공개 채널

검증을 마치면 공개 채널로 전환해 본격 운영

PUBLIC CHANNEL

공개 채널 심사 요청

비공개 채널에서 충분히 연동을 검증했다면, 공개 채널 전환을 요청해 모든 호스트의 방에 접근할 수 있도록 권한을 확장합니다. 이 단계는 두 연동 방식 모두 동일합니다.

요청 방법

  1. 앱 상세 페이지의 신청 상태 카드에서 [공개 채널 전환 신청]을 클릭합니다.
  2. 운영팀이 검토 후 결과를 이메일로 안내합니다.
  3. 반려된 경우 사유를 확인하고 보완 후 다시 신청할 수 있습니다.

PUBLIC CHANNEL

공개 채널 활성화

공개 채널이 되면 별도 작업 없이도 플라트라이프에 등록된 모든 호스트의 방을 Open API로 조회할 수 있습니다. 조회한 방 중 다룰 방을 선택해 채널 매핑을 설정하면, 선택한 연동 방식의 흐름으로 그대로 운영할 수 있습니다.

방 전체 목록 조회

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 · 공통 사항

인증·에러·Rate Limit 참고 사항

COMMON

인증

Open API의 모든 요청은 HTTP Basic 인증을 사용합니다. 앱 상세 페이지에서 발급받은 Client IDClient 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

Rate Limit

서비스 안정성과 모든 파트너의 공평한 사용을 위해 Open API에는 호출량 제한이 적용됩니다.

  • 적용 범위/open/** 의 모든 엔드포인트
  • 제한 단위호스트 계정
  • 한도분당 300 요청
  • 회복 방식연속 회복(greedy refill). 약 1초마다 5회 분량씩 토큰이 다시 채워집니다.

한도 초과 응답

한도를 초과한 요청은 즉시 거부되며 429 Too Many Requests 가 반환됩니다.

권장 클라이언트 처리

  • 429 응답을 받으면 즉시 재시도하지 말고 일정 시간 대기 후 재시도하세요.
  • 평균 약 200ms 간격이면 안정적으로 호출할 수 있습니다.
  • 짧은 시간 안에 다수 요청이 필요한 배치 작업은 호출 간격을 두거나 지수 백오프(exponential backoff) 재시도를 구현하세요.

정상 사용 패턴에서 429가 자주 발생한다면 한도 상향 검토가 가능하니 별도로 문의해주세요.

DOCUMENTATION

엔드포인트 전체 명세 보기

요청·응답 스키마, 파라미터, 에러 코드까지 한곳에서 확인하세요.

API 문서로 이동