# CLAUDE.md — ONDA Vendor Partner API
# Generated for Vendor API integration. Place in your project root.

---


================================================================================
## Introduction
================================================================================

### ONDA Partner Developer Center

> Developer documentation for ONDA Hub API integration. Connect your accommodation platform quickly and easily! REST API guide for Vendor and Channel Partners, real-time integration with 25,000+ accommodation properties.

# ONDA Partner Developer Center

Welcome to the developer documentation for ONDA Hub API integration.

Expand your business with ONDA Hub's API, an integrated distribution platform connecting accommodation providers with sales channels.

## Before You Start

### What Type of Partner Are You?

ONDA Hub supports two types of partners:

#### Vendor Partner (Provider)
Do you want to supply accommodation properties to ONDA and sell through 70+ channels?
- Hotels, resorts, pensions, and other accommodation facilities
- PMS system providers
- Hotel chains and product suppliers

**→ [View Vendor API Documentation](/docs/api/vendor/vendor-api)**

#### Channel Partner (Seller)
Do you want to sell ONDA's 25,000+ accommodation properties?
- OTA (Online Travel Agency)
- Travel agencies and metasearch engines
- Accommodation booking platforms

**→ [View Channel API Documentation](/docs/api/channel/channel-api)**

## Quick Start Guide

ONDA Hub API integration follows 4 steps:

### 1. Identify Partner Type
Choose the API that fits your business model.

**→ [Partner Type Guide](/docs/getting-started)**

### 2. Contract and API Key Issuance
Receive your API key after signing a partnership agreement with ONDA.

**Contact:** contact@onda.me

### 3. API Integration Development
Average development time: **1 month (1 M/M)**

**Technical Support:** techsupport@onda.me

### 4. Testing and Launch
Launch your service after completing QA.

## Key Documentation

### Guides
- **[ONDA Hub Introduction](/docs/introduction)** - Detailed platform overview
- **[Getting Started](/docs/getting-started)** - Step-by-step integration guide
- **[Glossary](/docs/glossary)** - API terminology

### API Reference
- **[Vendor API](/docs/api/vendor/vendor-api)** - API for providers
- **[Channel API](/docs/api/channel/channel-api)** - API for sellers

### Resources
- **[Changelog](/changelog)** - API update news

## Technical Specifications

### API Endpoints
```
Production: https://gds.tport.io
Development: https://dapi.tport.dev
```

### Basic Information
- **Protocol:** HTTPS
- **Data Format:** JSON (UTF-8)
- **Authentication:** API Key / OAuth 2.0

## Technical Support

### Contact Channels
- **Technical Inquiries:** techsupport@onda.me
- **Partnership Applications:** contact@onda.me

### Support Hours
- Weekdays: 10:00 - 18:00 (KST)
- Emergency Support: 24/7

---

---

### ONDA Hub Introduction

> ONDA Hub is Korea

# ONDA Hub Introduction

ONDA Hub is **Korea's leading B2B accommodation API connectivity platform**, enabling **Vendor Partners** (hotels, PMS systems, property managers) and **Channel Partners** (OTAs, travel apps, booking platforms) to integrate with Korea's accommodation ecosystem through standardized REST APIs.

## What is ONDA Hub?

ONDA Hub is the core distribution infrastructure of the Korean accommodation industry — a central connectivity layer that links accommodation suppliers with sales channels across the full spectrum of Korean stays: hotels, resorts, pensions, motels, hanoks, pool villas, and more.

ONDA Hub provides the following core features:

- **Korean Accommodation Access**: 25,000+ properties across all Korean accommodation categories
- **Integrated Connectivity**: Connecting accommodation providers with 70+ OTAs and booking channels
- **Real-time Synchronization**: Real-time updates for content, inventory, pricing, and booking information
- **Standardized API**: Reduced complexity with consistent interfaces
- **Wide Product Categories**: Full range of Korean accommodation — from 5-star city hotels to unique stays like hanoks, pensions, and pool villas

## Partner Types

ONDA Hub partners are divided into two main categories:

### Vendor Partner (Provider)

Partners who supply accommodation products such as accommodation facilities, hotel chains, and PMS systems

**Key Features:**
- Product registration and management
- Real-time inventory/rate updates
- Booking reception and confirmation
- Settlement management

### Channel Partner (Seller)

Partners who sell accommodation products such as OTAs, travel agencies, and metasearch engines

**Key Features:**
- Sell up to 25,000+ accommodation properties
- Real-time inventory/price inquiry or updates
- Booking creation and management
- Integrated content management

## Development Timeline

Partners typically integrate ONDA Hub API in about one month of development.
(This refers to pure API integration development and may vary depending on the service the partner wants to implement.)
- **Vendor API**: Average 1 month (1 M/M)
- **Channel API**: Average 1 month (1 M/M)

## Technical Support

- **Documentation**: Detailed API documentation and guides
- **Technical Support**: Dedicated technical support team
- **Technical Inquiries**: techsupport@onda.me
- **Partnership Applications**: contact@onda.me

## Next Steps

- [Getting Started with ONDA Hub](/docs/getting-started)
- [Getting Started with Vendor API](/docs/api/vendor/vendor-api)
- [Getting Started with Channel API](/docs/api/channel/channel-api)
- [View Glossary](/docs/glossary)

---


================================================================================
## Getting Started
================================================================================

### Getting Started with ONDA Hub

> Step-by-step guide for ONDA Hub API integration. From identifying partner type to contracting, development, and launch - typically takes 1 month. Detailed instructions for Vendor API and Channel API integration.

# Getting Started with ONDA Hub

Step-by-step guide for integrating with ONDA Hub. Identify your partner type and choose the appropriate API to start your integration.

## Integration Timeline

<table style={{width: '100%'}}>
  <thead>
    <tr>
      <th style={{width: '20%'}}>Phase</th>
      <th style={{width: '20%'}}>Week 1</th>
      <th style={{width: '20%'}}>Week 2</th>
      <th style={{width: '20%'}}>Week 3</th>
      <th style={{width: '20%'}}>Week 4</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1. Identify Partner Type</td>
      <td style={{textAlign: 'center', backgroundColor: '#3578e5', color: 'white'}}></td>
      <td style={{textAlign: 'center'}}></td>
      <td style={{textAlign: 'center'}}></td>
      <td style={{textAlign: 'center'}}></td>
    </tr>
    <tr>
      <td>2. ONDA hub Contract</td>
      <td style={{textAlign: 'center', backgroundColor: '#3578e5', color: 'white'}}></td>
      <td style={{textAlign: 'center', backgroundColor: '#3578e5', color: 'white'}}></td>
      <td style={{textAlign: 'center'}}></td>
      <td style={{textAlign: 'center'}}></td>
    </tr>
    <tr>
      <td>3. Integration Development</td>
      <td style={{textAlign: 'center'}}></td>
      <td style={{textAlign: 'center', backgroundColor: '#3578e5', color: 'white'}}></td>
      <td style={{textAlign: 'center', backgroundColor: '#3578e5', color: 'white'}}></td>
      <td style={{textAlign: 'center', backgroundColor: '#3578e5', color: 'white'}}></td>
    </tr>
    <tr>
      <td>4. Prepare for Official Launch</td>
      <td style={{textAlign: 'center'}}></td>
      <td style={{textAlign: 'center'}}></td>
      <td style={{textAlign: 'center'}}></td>
      <td style={{textAlign: 'center', backgroundColor: '#3578e5', color: 'white'}}></td>
    </tr>
  </tbody>
</table>

:::warning Note
The actual schedule may vary depending on your company's circumstances and requirements.
:::

## 1. Identify Partner Type

### Are You a Supplier or a Seller? Self-Assessment

Before integrating with ONDA hub, you must first clearly understand your company's business model.
If you need to discuss with ONDA for a stronger synergy with ONDA hub, please contact us through the following channels!

**Discuss with ONDA:**
- Website inquiry: https://www.onda.me/apply-form > Select inquiry type: Partnership, Marketing inquiry
- Email inquiry: contact@onda.me

### Questions to Help You Identify Your Partner Type

Use the following flowchart to determine the appropriate API type for your company.

```mermaid
flowchart TD
    Start([ONDA Hub Partner Type Decision]) --> Q1{What kind of business<br/>do you want to do?}

    Q1 -->|Sell our accommodation products<br/>on ONDA channels| Vendor[Vendor Partner<br/>Supplier]
    Q1 -->|Sell ONDA accommodation products<br/>on our platform| Channel[Channel Partner<br/>Seller]

    Vendor --> Q2{Do you operate<br/>a CMS system?}
    Q2 -->|YES| Contact1[Separate inquiry required<br/>contact@onda.me]
    Q2 -->|NO| VendorAPI[Vendor API Integration<br/>Property/Inventory/Price/Booking Management]

    Channel --> Q3{How will you manage<br/>inventory/price data?}
    Q3 -->|Store in own DB<br/>for fast search| DBCache[DB Cache Type<br/>High-volume traffic handling]
    Q3 -->|Real-time API calls<br/>for latest data| RealTime[Real Time Type<br/>Simple implementation]

    VendorAPI --> VendorLink[View Vendor API Docs]
    DBCache --> DBLink[DB Cache Type Guide]
    RealTime --> RTLink[Real Time Type Guide]
    Contact1 --> ContactLink[Contact Partner Team]

    click VendorAPI "/docs//api/vendor/vendor-api-intro" "Go to Vendor API Docs"
    click VendorLink "/docs/api/vendor/vendor-api-intro" "Go to Vendor API Docs"
    click DBCache "/docs/api/channel/db-cache-type" "Go to DB Cache Type Guide"
    click DBLink "/docs/api/channel/db-cache-type" "Go to DB Cache Type Guide"
    click RealTime "/docs/api/channel/realtime-type" "Go to Real Time Type Guide"
    click RTLink "/docs/api/channel/realtime-type" "Go to Real Time Type Guide"
    click Contact1 "mailto:contact@onda.me" "Send email"
    click ContactLink "mailto:contact@onda.me" "Send email"

    classDef startNode stroke:#3b82f6,stroke-width:3px
    classDef partnerNode stroke:#f59e0b,stroke-width:3px
    classDef apiNode stroke:#10b981,stroke-width:3px
    classDef contactNode stroke:#ef4444,stroke-width:3px
    classDef questionNode stroke:#06b6d4,stroke-width:3px
    classDef linkNode stroke:#8b5cf6,stroke-width:2px

    class Start startNode
    class Vendor,Channel partnerNode
    class VendorAPI,DBCache,RealTime apiNode
    class Contact1 contactNode
    class Q1,Q2,Q3 questionNode
    class VendorLink,DBLink,RTLink,ContactLink linkNode
```

---

## 2. ONDA hub Contract

Once you've determined your partner type, proceed with the official contract with ONDA hub.

**Contract Process:**
1. Complete partner application form
2. Submit business registration certificate and required documents
3. Negotiate contract terms
4. Sign contract
5. Receive API credentials

**Contact:**
- Email: contact@onda.me
- Confirm contract terms through consultation with our representative

---

## 3. Integration Development

Once the contract is completed, begin the actual API integration development.

### Review API Documentation
Carefully review the API documentation for the integration you want to implement.

- **Vendor Partner:** [Vendor API Documentation](/docs/api/vendor/vendor-api)
- **Channel Partner:** [Channel API Documentation](/docs/api/channel/channel-api)

### Create Development Requirements Checklist

Before integration development, you must create a development requirements checklist to define your integration concept, synchronize service flows, determine endpoints to use, and confirm policies. This checklist will be provided separately by the ONDA technical support team after contract negotiation.

### Development Kickoff Meeting

Conduct a kickoff meeting with the ONDA technical support team:
- Discuss integration schedule
- Identify technical issues
- Issue test accounts
- Set up development environment

### Integration Development Support

For issues that arise during development, contact the ONDA technical support team:
- **Technical inquiries**: techsupport@onda.me
- **Development guide**: Refer to each API documentation
- **Sample code**: Refer to examples in API documentation

### QA (Quality Assurance)

Once development is complete, conduct QA:
1. **Unit testing**: Test each API endpoint
2. **Integration testing**: Test complete workflow
3. **Performance testing**: Load testing and response time verification
4. **Security testing**: Authentication and data security verification

---

## 4. Prepare for Official Launch

Once QA is complete, proceed with final preparations for production operation.

### Operations Discussion
- Operating hours and incident response procedures
- Monitoring and alert configuration
- Data backup policy

### Settlement Discussion
- Commission policy confirmation
- Settlement cycle and method
- Tax invoice issuance process

### CS (Customer Support) Discussion
- Customer inquiry handling process
- Booking issue resolution procedures
- Emergency response plan

---

## Development Timeline Guide

Average development time for API integration:

- **Vendor API**: Average 1 month (1 M/M)
- **Channel API**: Average 1 month (1 M/M)

:::note Note
Actual development time may vary depending on your company's system environment and implementation scope.
:::

---

## Next Steps

Start your integration by referring to the documents below according to your partner type:

### Vendor Partner (Supplier)
- [Vendor API Documentation](/docs/api/vendor/vendor-api)

### Channel Partner (Seller)
- [Channel API Documentation](/docs/api/channel/channel-api)
- [DB Cache Type Implementation Guide](/docs/api/channel/db-cache-type)
- [Real Time Type Implementation Guide](/docs/api/channel/realtime-type)

### Additional Resources
- [Glossary](/docs/glossary)

---

**Contact Us:**
- Technical inquiries: techsupport@onda.me
- Partner application: contact@onda.me

:::tip Speed up integration with AI tools

If you use AI development tools like Claude Code, Cursor, or Windsurf,
download the ONDA API context files from the [AI Tools](/ai-tools) page.
Your AI assistant will understand the full API structure and suggest more accurate code.

:::

---


================================================================================
## FAQ
================================================================================

### Frequently Asked Questions (FAQ)

> Frequently asked questions about ONDA API integration. FAQ covering API key issuance, development timeline, authentication methods, Real Time Type vs DB Cache Type, Webhook, test environment, and more

# Frequently Asked Questions (FAQ)

Here are frequently asked questions about ONDA API integration.

---

## Basic Information

<details open>
<summary><strong>Q. What is ONDA Hub?</strong></summary>

ONDA Hub is an integrated distribution platform that connects accommodation product suppliers with sales channels.

- **Vendor (Supplier)**: Supply accommodation products to ONDA and sell on 70+ channels
- **Channel (Seller)**: Sell ONDA's 25,000+ accommodation products

Through RESTful-based APIs, you can perform real-time inventory/price inquiries, booking processing, and more.

</details>

<details>
<summary><strong>Q. What is the difference between Vendor and Channel partners?</strong></summary>

**Vendor Partner (Supplier)**
- Hotels, resorts, pensions, and other accommodation facilities
- PMS system providers
- Hotel chains and product suppliers
- **Purpose**: Supply accommodation products to ONDA and sell through multiple channels

**Channel Partner (Seller)**
- OTA (Online Travel Agency)
- Travel agencies and metasearch engines
- Accommodation booking platforms
- **Purpose**: Sell ONDA's accommodation products on their own platform

</details>

<details>
<summary><strong>Q. Which partner type should I choose?</strong></summary>

Choose according to your company's business model:

- Do you **supply accommodation products**? → Use **Vendor API**
- Do you **sell accommodation products**? → Use **Channel API**

For more details, please refer to the [Getting Started](/docs/getting-started) page.

</details>

---

## Getting Started

<details>
<summary><strong>Q. How long does API integration development take?</strong></summary>

**Average Development Timeline**
- **Channel API**: Approximately 2 weeks (average)
- **Vendor API**: Approximately 1 month (1 M/M)

Actual development time may vary depending on implementation scope and development resources.

</details>

<details>
<summary><strong>Q. How do I get an API key?</strong></summary>

**Issuance Process**
1. Sign partnership contract with ONDA
2. Receive API key for development environment
3. Conduct development and testing
4. Receive API key for production environment
5. Start official service

**Contact**
- Partner application: contact@onda.me
- Technical inquiries: techsupport@onda.me

</details>

<details>
<summary><strong>Q. How do I set up the test environment?</strong></summary>

ONDA provides separate development and production environments:

**Development Environment**
- URL: `https://dapi.tport.dev`
- Purpose: API integration development and testing

**Production Environment**
- URL: `https://gds.tport.io`
- Purpose: Actual service operation

A separate API key is issued for each environment.

</details>

---

## Technical Specifications

<details>
<summary><strong>Q. What are the API endpoints?</strong></summary>

**Development Environment**
```
https://dapi.tport.dev
```

**Production Environment**
```
https://gds.tport.io
```

All APIs use the HTTPS protocol.

</details>

<details>
<summary><strong>Q. What data format is used?</strong></summary>

**Basic Information**
- **Protocol**: HTTPS
- **Data format**: JSON (UTF-8 encoding)
- **HTTP methods**: GET, POST, PUT, PATCH, DELETE
- **Content-Type**: `application/json`

All requests and responses are processed in JSON format.

</details>

<details>
<summary><strong>Q. How do I authenticate with the API?</strong></summary>

**Channel API Authentication**

You must include the following two keys in the HTTP header:

1. **Authorization Key**
   - Header: `x-api-key`
   - API authentication key issued by ONDA

2. **Channel Key**
   - Header: `x-channel-key`
   - Unique key to identify the channel

**Vendor API Authentication**

This follows the authentication method provided by ONDA, which will be explained in detail upon contract signing.

</details>

---

## Integration Methods

<details>
<summary><strong>Q. What is the difference between Real Time Type and DB Cache Type?</strong></summary>

**Real Time Type**
- Calls ONDA API in real-time whenever a customer searches
- No need to store inventory/rates in DB
- No Webhook development required
- Relatively simple implementation

**DB Cache Type**
- Stores all product inventory/rates in channel DB
- Queries own DB when customers search (fast response)
- Webhook development required (real-time updates)
- Advantageous for high-volume traffic handling

For more details, refer to:
- [Real Time Type](/docs/api/channel/realtime-type)
- [DB Cache Type](/docs/api/channel/db-cache-type)

</details>

<details>
<summary><strong>Q. What is Webhook and when is it needed?</strong></summary>

**What is Webhook?**

A push-based API that notifies channels in real-time when information changes in ONDA.

**Webhook Types**
- `contents_updated`: Property/room/package content change notification
- `status_updated`: Product addition or sales status change notification
- `inventory_updated`: Rate/inventory change notification

**When Needed**
- **Required for DB Cache Type integration**
- Optional for Real Time Type

For more details, refer to [Webhook Overview](/docs/api/channel/webhook-overview).

</details>

<details>
<summary><strong>Q. What is the difference between ONDA → Vendor and Vendor → ONDA methods?</strong></summary>

Vendor API provides two integration methods:

**ONDA → Vendor (Pull method)**
- ONDA calls the Vendor system's API
- Real-time data synchronization
- Vendor provides API and responds

**Vendor → ONDA (Push method)**
- Vendor calls ONDA API to update information
- Sends immediately when changes occur
- ONDA receives and stores data

In most cases, both methods are used together.

</details>

---

## Booking and Testing

<details>
<summary><strong>Q. How do I use test properties?</strong></summary>

**Test Property IDs**

| Property ID | Type | Includes Rateplan |
|------------|------|------------------|
| 117417 | Hotel | Included |
| 120135 | Hotel | Included |

**Important Notes**
- You cannot test with actual properties
- Booking tests must be conducted only with the above test properties
- You must complete cancellation processing after booking tests

For more details, refer to [Test Properties for Booking](/docs/api/channel/test-property).

</details>

<details>
<summary><strong>Q. Can I query actual property content?</strong></summary>

**Yes** (with conditions)

- Prior consultation with your account manager required
- You can query up to **content information** of actual properties
- However, **booking tests are strictly prohibited** (use test properties only)

Please note that creating a booking with an actual property will result in a real booking.

</details>

---

## Technical Support

<details>
<summary><strong>Q. Where should I send technical inquiries?</strong></summary>

**Contact Channels**

- **Technical inquiries**: techsupport@onda.me
- **Partner application**: contact@onda.me

**Support Hours**
- Weekdays 10:00 - 18:00 (KST)
- Emergency incidents: 24/7 response

When inquiring via email, please include the following information:
- Partner company name
- API type (Vendor/Channel)
- Environment (Development/Production)
- Specific inquiry details

</details>

<details>
<summary><strong>Q. How should I respond to API outages?</strong></summary>

**Emergency Incident Response**
- 24/7 emergency response system in operation
- Contact techsupport@onda.me immediately

**Information to Include When Reporting Incidents**
- Time of occurrence
- Error message or response code
- Request parameters (excluding sensitive information)
- Whether reproducible

Please provide specific information for faster resolution.

</details>

---

## Additional Documentation

For more detailed information, please refer to the following documents:

- [ONDA Hub Introduction](/docs/introduction)
- [Getting Started Guide](/docs/getting-started)
- [Vendor API Documentation](/docs/api/vendor/vendor-api)
- [Channel API Documentation](/docs/api/channel/channel-api)
- [API Changelog](/changelog)

---


================================================================================
## Vendor API
================================================================================

### Vendor API

> ONDA Vendor API overview and introduction

# Vendor API

The ONDA Vendor API is a RESTful API for seamless data integration between accommodation providers (vendors) and the ONDA platform.

## Overview

Through the Vendor API, accommodation providers can perform the following tasks:

- **Property Information Synchronization**: Check updated property information in ONDA
- **Room Information Management**: Synchronize room types and detailed information
- **Rate Information Integration**: Update real-time rate information
- **Availability**: Manage inventory and availability status

## API Integration Methods

The Vendor API provides two main integration methods:

### 1. ONDA → Vendor (Pull Method)
Method where ONDA requests data from the vendor system
- ONDA calls the vendor API to obtain the latest information
- Real-time data synchronization
- Requires active response from the vendor system

### 2. Vendor → ONDA (Push Method)
Method where vendors send data to the ONDA system
- Vendors call the ONDA API to update information
- Immediate transmission when changes occur
- Passive reception by the ONDA system

## Getting Started

Follow these steps to start Vendor API integration:

1. **Partnership Agreement**: Execute partnership contract with ONDA business team
2. **API Credential Issuance**: Issue API keys for development and production environments
3. **Technical Documentation Review**: Review API specifications and integration guide
4. **Development Environment Setup**: Develop API integration in test environment
5. **Testing and Validation**: Test integration functionality and verify performance
6. **Production Deployment**: Deploy to production environment and monitor

## Key Features

- **RESTful API**: Uses standard HTTP methods
- **JSON Format**: Request/response data in JSON format
- **Authentication Security**: API key-based authentication system
- **Real-time Synchronization**: Supports real-time data integration
- **Error Handling**: Provides detailed error codes and messages

---

In the next steps, check detailed guides for each integration method.

---

### Basic Integration

> Vendor API basic integration guide

# Basic Integration

<!-- Content to be added -->

---

### Integration Channel List

> List of available integration channels

# Integration Channel List

:::info Update Information
Updated August 2024
:::

## Channel List

| Vendor ID assigned by ONDA | Vendor name assigned by ONDA | Reservation prefix | Notes      |
| --------------- | -------------- | --------- | ------- |
| 1 (Test Channel)      | GDS-HUB        | TPORT     |         |
| 2               | Naver            | NV        |         |
| 11              | HotelNJoy          | MIS       |         |
| 15              | 11st           | 11ST      |         |
| 20              | Yanolja            | YP        |         |
| 24              | Airbnb          | BNB       |         |
| 31              | 11st(S)        | 11STS     |         |
| 32              | SSG            | SG        |         |
| 33              | Auction             | AU        |         |
| 34              | PaperPlane          | AJ        |         |
| 36              | Tonightbnb           | ON        |         |
| 53              | TideSquare         | SK        |         |
| 67              | 11st(Overseas)       | 11STO     | Overseas properties only |
| 71              | Hotel Package          | HPKG      |         |
| 72              | Easywell            | EZ        |         |
| 73              | Gmarket            | GM        |         |
| 74              | YeogiEottae           | YG        |         |
| 77              | Coupang             | CP        |         |
| 79              | Creatrip         | CAT       |         |
| 80              | Pet Life           | BS        |         |
| 88              | Agoda            | AGD       |         |
| 94              | Wag             | WA        |         |
| 97              | Yellow Balloon2          | YB2       |         |
| 102             | All My Tour          | AMT       |         |
| 103             | WeHome             | WH        |         |
| 106             | HotelsCombined         | HCB       |         |
| 108             | Google Hotels          | GH        |         |
| 109             | Noliui Balgyeon          | NB        |         |
| 110             | ONDA_B2E        | ONDA2     |         |
| 119             | Espresso         | SPT       |         |
| 122             | Trip.com           | TDC       |         |
| 124             | Booking Engine_B2E      | BE        |         |
| 126             | Ggle Stay           | CS        |         |
| 128             | TRIIP          | TR        |         |
| 135             | HVMI           | HVMI      |         |
| 136             | Gmidas          | GD        |         |
| 144             | The K Mall_B2E      | TK        |         |
| 152             | BookingOn_B2E       | bko       |         |
| 154             | Thank You Camping           | TC        |         |
| 155             | Socar             | SCR       |         |
| 159             | KidsNote           | KN        |         |
| 160             | Kakao_TS        | KTS       |         |
| 161             | Dolharubang           | DP        |         |
| 162             | WassupUlsan_B2E      | US        |         |
| 163             | Web Tour            | WEB       |         |
| 170             | KB Kookmin Club_B2E      | KC        |         |
| 174             | OK Cashbag_B2E     | OCB       |         |
| 175             | Tmap_B2E        | TMAP      |         |
| 176             | GyeongjuON_B2E      | GJ        |         |
| 177             | Coupang direct       | COP       |         |
| 178             | Cody_Copyright Association_B2E | CDMCA     |         |
| 179             | Cody_KCTU_B2E  | CDNOD     |         |
| 184             | RESTPL_B2E     | RE        |         |
| 185             | VideoMonster_B2E    | VM        |         |
| 186             | LifeCare_B2E     | LC        |         |
| 187             | BaeminSquare_B2E      | BM        |         |
| 188             | SBTM_B2E       | SBTM      |         |
| 189             | ONDA Welfare Mall_B2E    | ONW       |         |
| 190             | T-money GO_B2E      | TMG       |         |
| 191             | Dogmaru_B2E      | DM        |         |
| 192             | FunNC_Kangwon_B2E   | FCDP      |         |
| 194             | TheHyundai.com_B2E     | HD        |         |
| 195             | Wassong_B2E        | WS        |         |
| 197             | Podong_B2E        | PD        |         |
| 198             | Easy_GoGoYangyang_B2E  | EZGGYY    |         |
| 199             | Couple Pass_B2E      | CO        |         |
| 200             | Wassong Sota_B2E     | WSST      |         |
| 201             | Wag_Overseas         | WGG       | Overseas properties only |
| 202             | MiceLink          | ML        |         |
| 203             | TDeal_B2E      | TDL       |         |
| 205             | Prism            | PRZ       |         |

---

### ONDA > Vendor Request

> Guide for data request method from ONDA to vendor

# ONDA → Vendor Request

This is an integration guide for the Pull method where ONDA requests data from the vendor (accommodation provider) system.

## Overview

The ONDA → Vendor Request method is an integration approach where the ONDA system directly calls the vendor's API to obtain the latest information.

### Features
- **Real-time Data Acquisition**: ONDA retrieves the latest data from the vendor system when needed
- **Pull Method**: ONDA actively requests data
- **Immediacy**: Real-time access to the latest information
- **Reliability**: Obtain accurate information by directly querying the vendor system

## Integration Flow

```mermaid
sequenceDiagram
    participant ONDA Hub
    participant Vendor

    ONDA Hub->>Vendor: 1. Request data (API call)
    Vendor->>Vendor: 2. Process request and prepare data
    Vendor->>ONDA Hub: 3. Send response data
    ONDA Hub->>ONDA Hub: 4. Process and store data
```

## Main API Endpoints

Main APIs that need to be implemented in the vendor system:

### 1. Property Information Inquiry
- **Purpose**: Check updated property information
- **Call Frequency**: Once daily or as needed
- **Response Data**: Basic property information, amenities, images, etc.

### 2. Room Type Information Inquiry
- **Purpose**: Check room types and detailed information
- **Call Frequency**: Once daily or as needed
- **Response Data**: Room types, maximum occupancy, amenities, etc.

### 3. Rate Information Inquiry
- **Purpose**: Check real-time rate information
- **Call Frequency**: Real-time (upon search/reservation request)
- **Response Data**: Rates by room, discount information, cancellation policy, etc.

### 4. Availability Check
- **Purpose**: Check inventory and availability status
- **Call Frequency**: Real-time (upon search/reservation request)
- **Response Data**: Inventory by room, availability

## Authentication and Security

### API Authentication
- **Method**: API Key-based authentication
- **Header**: `Authorization: Bearer {API_KEY}`
- **Security**: HTTPS required, encrypted API key storage

### IP Whitelist
- Register ONDA server IP addresses in the vendor system
- API calls only allowed from permitted IPs
- Additional authentication layer for enhanced security

## Response Format

All API responses use JSON format:

```json
{
  "status": "success",
  "message": "Request processed successfully",
  "data": {
    // Actual data content
  },
  "timestamp": "2024-09-26T15:30:00Z"
}
```

### Error Response
```json
{
  "status": "error",
  "error_code": "INVALID_REQUEST",
  "message": "Request parameters are invalid",
  "details": "check_in date is missing",
  "timestamp": "2024-09-26T15:30:00Z"
}
```

## Development Guide

### 1. API Endpoint Implementation
The vendor system must implement API endpoints that ONDA will call.

### 2. Data Format Compliance
Must respond with data format compatible with the ONDA system.

### 3. Error Handling
Must provide appropriate HTTP status codes and error messages.

### 4. Performance Optimization
- Minimize response time (recommended: within 3 seconds)
- Improve performance with caching
- Pagination for large data volumes

## Testing Guide

### 1. Development Environment Testing
- Call vendor development API from ONDA test server
- Verify basic API responses
- Validate data format

### 2. Integration Testing
- Integration testing with actual data
- Verify performance and stability
- Test error scenarios

### 3. Pre-production Validation
- Verify production environment settings
- Configure monitoring tools
- Confirm incident response procedures

## Monitoring and Operations

### Log Management
- Record API call logs
- Monitor error logs
- Track performance metrics

### Alert Settings
- API response time delay alerts
- Error rate increase alerts
- System failure alerts

---

Next: [Vendor → ONDA Request](vendor-to-onda-request) method guide

---

### Vendor > ONDA Request

> Guide for data transmission method from vendor to ONDA

# Vendor → ONDA Request

This is an integration guide for the Push method where vendors (accommodation providers) send data to the ONDA system.

## Overview

The Vendor → ONDA Request method is an integration approach where the vendor system calls the ONDA API to update data.

### Features
- **Proactive Updates**: Vendors immediately send changes to the ONDA system when they occur
- **Push Method**: Vendors actively send data
- **Real-time Synchronization**: Changes are reflected in ONDA in real-time
- **Efficiency**: Can selectively send only changed data

## Integration Flow

```mermaid
sequenceDiagram
    participant Vendor
    participant ONDA Hub

    Vendor->>Vendor: 1. Detect data change
    Vendor->>ONDA Hub: 2. Send updated data (API call)
    ONDA Hub->>ONDA Hub: 3. Validate and process data
    ONDA Hub->>Vendor: 4. Send processing result
    Vendor->>Vendor: 5. Process result and record log
```

## Main API Endpoints

ONDA APIs called by vendors:

### 1. Property Information Update
- **Endpoint**: `PUT /api/v1/properties/{property_id}`
- **Purpose**: Update basic property information, amenities, images
- **Call Timing**: When property information changes
- **Request Data**: Changed property information

### 2. Room Type Information Update
- **Endpoint**: `PUT /api/v1/properties/{property_id}/rooms/{room_id}`
- **Purpose**: Update room types, detailed information, amenities
- **Call Timing**: When room information changes
- **Request Data**: Changed room information

### 3. Rate Information Update
- **Endpoint**: `POST /api/v1/rates/bulk-update`
- **Purpose**: Update rates by room, discount information, cancellation policy
- **Call Timing**: When rates change or periodically
- **Request Data**: Rate information by period

### 4. Inventory Information Update
- **Endpoint**: `POST /api/v1/inventory/bulk-update`
- **Purpose**: Update inventory by room, reservation restriction information
- **Call Timing**: When inventory changes or in real-time
- **Request Data**: Inventory information by date

## Authentication and Security

### API Authentication
- **Method**: Bearer Token authentication
- **Header**: `Authorization: Bearer {ACCESS_TOKEN}`
- **Token Renewal**: Automatic renewal required before expiration

### Token Acquisition
```http
POST /api/v1/auth/token
Content-Type: application/json

{
  "client_id": "your_client_id",
  "client_secret": "your_client_secret",
  "grant_type": "client_credentials"
}
```

### Security Requirements
- **HTTPS Required**: All API calls must use HTTPS
- **Token Management**: Secure token storage and periodic renewal
- **Request Limits**: Comply with rate limiting (1000 calls per hour)

## Request Format

All API requests use JSON format:

```json
{
  "timestamp": "2024-09-26T15:30:00Z",
  "data": {
    // Actual update data
  },
  "metadata": {
    "source": "vendor_system",
    "version": "1.0"
  }
}
```

### Property Information Update Example
```json
{
  "timestamp": "2024-09-26T15:30:00Z",
  "data": {
    "property_id": "PROP001",
    "name": "Hotel ONDA",
    "description": "Business hotel located in central Seoul",
    "amenities": ["wifi", "parking", "breakfast"],
    "images": [
      {
        "url": "https://example.com/image1.jpg",
        "type": "exterior",
        "order": 1
      }
    ]
  }
}
```

## Response Processing

### Success Response
```json
{
  "status": "success",
  "message": "Data updated successfully",
  "data": {
    "updated_at": "2024-09-26T15:30:05Z",
    "affected_records": 1
  }
}
```

### Error Response
```json
{
  "status": "error",
  "error_code": "VALIDATION_ERROR",
  "message": "Request data validation failed",
  "details": [
    {
      "field": "property_id",
      "error": "This field is required"
    }
  ]
}
```

## Development Guide

### 1. Using SDK (Recommended)
Easily integrate using the SDK provided by ONDA:

```javascript
// Node.js SDK example
const OndaSDK = require('@onda/vendor-sdk');

const client = new OndaSDK({
  clientId: 'your_client_id',
  clientSecret: 'your_client_secret',
  environment: 'production' // or 'sandbox'
});

// Update property information
await client.properties.update('PROP001', {
  name: 'Hotel ONDA',
  description: 'Updated description'
});
```

### 2. Direct API Calls
If SDK is not available, make direct HTTP requests:

```python
# Python example
import requests
import json

def update_property(property_id, data):
    headers = {
        'Authorization': f'Bearer {access_token}',
        'Content-Type': 'application/json'
    }

    response = requests.put(
        f'https://api.onda.kr/v1/properties/{property_id}',
        headers=headers,
        data=json.dumps(data)
    )

    return response.json()
```

### 3. Batch Processing
Use batch API for efficient processing of large amounts of data:

```json
{
  "batch_id": "BATCH001",
  "operations": [
    {
      "operation": "update",
      "resource": "property",
      "id": "PROP001",
      "data": { /* update data */ }
    },
    {
      "operation": "update",
      "resource": "room",
      "id": "ROOM001",
      "data": { /* update data */ }
    }
  ]
}
```

## Error Handling

### Retry Logic
Retry mechanism for network errors or temporary failures:

```javascript
async function retryRequest(requestFn, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await requestFn();
    } catch (error) {
      if (i === maxRetries - 1) throw error;
      await sleep(Math.pow(2, i) * 1000); // Exponential backoff
    }
  }
}
```

### Error Code Processing
- **401 Unauthorized**: Token reissuance required
- **429 Too Many Requests**: Request limit exceeded, wait briefly
- **422 Unprocessable Entity**: Data validation failed
- **500 Internal Server Error**: Server error, retry then contact support team

## Monitoring and Logging

### Log Recording
```javascript
// Log example
{
  "timestamp": "2024-09-26T15:30:00Z",
  "level": "INFO",
  "message": "Property updated successfully",
  "data": {
    "property_id": "PROP001",
    "response_time": 245,
    "status_code": 200
  }
}
```

### Metrics Tracking
- API call success rate
- Average response time
- Error rate and error types
- Data update frequency

---

Previous: [ONDA → Vendor Request](onda-to-vendor-request) method guide

---


================================================================================
## Vendor API - Property
================================================================================

### Property Creation

> Property information creation guide

# Property Creation

Receive property information from vendors and create properties in ONDA.

ONDA calls the vendor to retrieve and store the information.

:::caution Image Copyright and Legal Liability

All images synchronized from vendors to ONDA are stored in ONDA and must be free from legal or copyright issues.
Additionally, if property or room photos contain people, listing on some channels may not be possible.

:::

## Property Creation Process

To create a property, information must be provided in the following order:

### 1. Retrieve Property Information

<br />

| API | Method | Description |
|-----|--------|------|
| [Get Property List](vendor-property-list.api.mdx) | `GET` | Retrieve all property list from vendor |
| [Get Property Detail](vendor-property-detail.api.mdx) | `GET` | Retrieve detailed information of a specific property |

<br />

Provide basic property information (name, address, contact, amenities, etc.) to ONDA.

### 2. Retrieve Room Types and Rate Plans

<br />

| API | Method | Description |
|-----|--------|------|
| [Get Roomtype List](vendor-roomtype-list.api.mdx) | `GET` | Retrieve room type list of a property |
| [Get Roomtype Detail](vendor-roomtype-detail.api.mdx) | `GET` | Retrieve detailed information of a specific room type |

<br />

Provide information by room type (room name, maximum occupancy, bed information, amenities, etc.) and rate plans.

### 3. Retrieve Inventory / Rates

<br />

| API | Method | Description |
|-----|--------|------|
| [Get Avails](get-avails.api.mdx) | `GET` | Retrieve available inventory information for rooms |
| [Get Rates](get-rates.api.mdx) | `GET` | Retrieve rate information for rooms |

<br />

Provide inventory quantity and sale price information by date.

## Integration Flow

```mermaid
sequenceDiagram
    participant ONDA Hub
    participant Vendor

    Note over ONDA Hub,Vendor: 1. Collect Property Information
    ONDA Hub->>Vendor: Get Property List
    Vendor-->>ONDA Hub: Property List
    ONDA Hub->>Vendor: Get Property Detail
    Vendor-->>ONDA Hub: Property Details

    Note over ONDA Hub,Vendor: 2. Collect Room Type Information
    ONDA Hub->>Vendor: Get Roomtype List
    Vendor-->>ONDA Hub: Room Type List
    ONDA Hub->>Vendor: Get Roomtype Detail
    Vendor-->>ONDA Hub: Room Type Details
    ONDA Hub->>Vendor: Get Rateplan List & Detail
    Vendor-->>ONDA Hub: Rate Plan Information

    Note over ONDA Hub,Vendor: 3. Collect Inventory/Rate Information
    ONDA Hub->>Vendor: Get Avails
    Vendor-->>ONDA Hub: Inventory Information
    ONDA Hub->>Vendor: Get Rates
    Vendor-->>ONDA Hub: Rate Information

    Note over ONDA Hub: Property Creation Complete
```

## Key Considerations

### Required Information

Information that must be provided to create a property:

- **Basic Property Information**: Name, address, contact, check-in/check-out time
- **Room Information**: Room name, standard/maximum occupancy, bed type and quantity
- **Rate Plans**: At least one sellable rate plan
- **Inventory**: Available inventory quantity by date
- **Rates**: Sale price by date

### Image Guidelines

- High-resolution images recommended (minimum 800x600px)
- Supported formats: JPG, PNG
- Minimum 10 property representative images recommended
- Minimum 5 images per room type recommended
- **Avoid photos containing people** (listing restrictions on some channels)

### Data Consistency

- Synchronize with real-time information from vendor system
- Inventory/rate information must be kept up to date
- Room types and rate plans must be reflected immediately when changed

## Next Steps

Once property creation is complete, you can update and manage information through [Property Management](property-management.mdx).

For reservation integration, refer to the [Reservation API](reservation.mdx) documentation.

---

### Property Content

> Property content checklist

# Property Content

:::caution Special Character Restrictions

When writing **Property Description**, **Booking Information**, **Notice**, and **Cancellation & Refund Policy Information**, only the following symbols are allowed.

`! @ # $ % ^ & * ( ) { } [ ] " ' , . ? / |`

:::

## Content Writing Guide

### Property Name

- ✅ Region name + Property name **+** Property type (Example: Chuncheon ONDA Pension)
- ✅ Within 18 characters, special characters not allowed

### Property Description

- ✅ Required field - please enter detailed information.

### Booking Information

- ✅ Required field - please enter detailed information.

### Notice

- ✅ This field is only displayed on the Tmon channel.

### Cancellation & Refund Policy Information

- ✅ A full refund section must be set to be listed on channels.

---

### Information Updates

> Property information management guide

# Information Updates

Update property information in ONDA that has been changed by the vendor.

There are two ways to manage changed property information.

**Sync: ONDA calls the vendor**

- ONDA calls the vendor at scheduled times to update changed property information in ONDA. Since synchronization is performed at scheduled times, updates are not reflected immediately.

**Push: Vendor calls ONDA**

- Whenever vendors change property information, they send the changed information to ONDA.
- For property/room type and rate plan status and inventory/rates/business days, which change more frequently compared to content information, we recommend integrating the Push method as well.

---

## Sync

ONDA calls the vendor at scheduled times to perform periodic synchronization.

The schedule is determined through consultation. Examples: Once daily at 5 AM, every 30 minutes past the hour, etc.

Responds with only changed information compared to existing information based on the lastdate parameter.

:::info Information Change Determination Fields

- Status information: "status"
- Content information: All values except "status"
- Inventory/rate information: All values
- (Business day information: Only uses Push method.)

:::

### Retrieve Changed Property / Room Type and Rate Plan Status & Content

<br />

| API | Method | Description |
|-----|--------|------|
| [Get Updated Property List](vendor-changed-property-list.api.mdx) | `GET` | Retrieve changed property list |
| [Get Updated Roomtype List](vendor-updated-roomtype-list.api.mdx) | `GET` | Retrieve changed room type and rate plan list |

<br />

### Retrieve Changed Inventory / Rates / Business Days

<br />

| API | Method | Description |
|-----|--------|------|
| [Get Updated Avails](get-updated-avails.api.mdx) | `GET` | Retrieve changed inventory information |
| [Get Updated Rates](get-updated-rates.api.mdx) | `GET` | Retrieve changed rate information |

<br />

---

## Push

Vendors immediately push changed information to ONDA whenever property information is changed. *Content does not support Push method.

Changed information can be reflected in ONDA without waiting for synchronization.

Integrating the Push method can reduce reservation failure rates compared to the Sync method.

### Send Changed Property / Room Type / Rate Plan Status

:::note Reference

When property / room type / rate plan is disabled or deleted, please respond with all status items in the response as disabled.
:::

<br />

| API | Method | Description |
|-----|--------|------|
| [Update Property Status](update-property-status.api.mdx) | `PATCH` | Send property status changes |
| [Update Roomtype Status](update-roomtype-status.api.mdx) | `PATCH` | Send room type status changes |
| [Update Rateplan Status](update-rateplan-status.api.mdx) | `PATCH` | Send rate plan status changes |

<br />

### Send Changed Inventory / Rates / Business Days

<br />

| API | Method | Description |
|-----|--------|------|
| [Push Setting Avails](setting-avails.api.mdx) | `POST` | Send inventory information |
| [Push Setting Rates](setting-rates.api.mdx) | `POST` | Send rate information |
| [Push Setting Business-days](setting-business-days.api.mdx) | `POST` | Send business day information |

<br />

---

### Room Content

> Room content checklist

# Room Content

:::caution Special Character Restrictions

When writing **Room Description**, only the following symbols are allowed.

`! @ # $ % ^ & * ( ) { } [ ] " ' , . ? / |`

:::

## Content Writing Guide

### Room Name

- ✅ Within 18 characters, special characters not allowed, only `,` `()` allowed

### Room Description

- ✅ Information about additional guest fees must be included for each room.
  - If payment is made on-site when exceeding standard occupancy, please include this in the description.

#### When standard occupancy < maximum occupancy

:::note Additional Guest Fee Information Example

• Room rates are based on standard occupancy, and additional fees apply for extra guests.

• If exceeding standard occupancy, please contact the property in advance.

• Exceeding the maximum occupancy (including infants) is strictly prohibited, and non-compliance may result in forced checkout without refund.

:::

#### When standard occupancy = maximum occupancy

:::note No Additional Guests Allowed Example

• This room does not allow additional guests beyond the standard occupancy.

:::

---

### Tags

> Tag system guide

# Tags

:::warning Required for Auction, Gmarket Opening

When opening on Auction and Gmarket, at least one item marked with ✅ must be included.

:::

## Property_tags

| classifications | property_tags | facility_tags | service_tag | attraction_tags |
| --------------- | ------------- | ------------- | ----------- | --------------- |
| HANOK           | Family            | Public Facilities          | Services         | Nearby Attractions/Activities        |
| HOTEL           | Luxury/Premium        | ✅ Spa/Whirlpool       | ✅ WIFI      | Near Valley           |
| MOTEL           | Group/MT/Workshop     | ✅ Karaoke         | ✅ Pet Friendly | ✅ Near Golf Course        |
| RESORT          | Couple            | ✅ Basketball Court         | Valet Parking        | ✅ Near Fishing Area        |
| ✅ GLAMPING      | ✅ Pool Villa         | ✅ Convenience Store      | Board Games        | ✅ Near Arboretum/Recreation Forest    |
| ✅ CARAVAN       | Traditional House            | ✅ BBQ Area        | Shuttle Bus        | ✅ Water Sports          |
| PENSION         | Pet-friendly Pension          | ✅ Seminar Room        | Movie Screening        | ✅ Near Ski Resort        |
| ✅ POLLVILLA     | ✅ Kids Pension        | ✅ Swimming Pool         | ✅ Bicycle Rental     | Near Beach         |
| ✅ GUESTHOUSE    | 5-Star            | Water Slide        | ✅ Breakfast Service    | Near River/Lake         |
| CAMPING         | 4-Star            | ✅ Foot Volleyball Court         | ✅ Luggage Storage       |                 |
| RESIDENCE       | 3-Star            | Sauna           | ✅ Cooking Facilities      |                 |
|                 | 2-Star            | ✅ Soccer Field/Futsal Court     | ✅ Campfire     |                 |
|                 | 1-Star            | ✅ Cafe          | Proposal/Party/Event |                 |
|                 | Deluxe 1st Grade          | Table Tennis           | Printer Access      |                 |
|                 | Deluxe            | ✅ Fitness        | ✅ Pick-up        |                 |
|                 | 1st Grade            | Public Spa          | First Aid Kit         |                 |
|                 | Tourist            | ✅ Golf Course         | ✅ Non-smoking        |                 |
|                 | Business          | ✅ Restaurant        | In-room Smoking       |                 |
|                 | Residence          | ✅ Kids Playroom      | Personal Locker       |                 |
|                 | Boutique           | Public Shower         | Free Parking        |                 |
|                 |               | Public Restroom         | Accessible Facilities     |                 |
|                 |               | Shared Kitchen          | ✅ Airport Shuttle     |                 |
|                 |               | ✅ Water Park        | Bar/Lounge       |                 |
|                 |               | Hot Spring            | ✅ Massage       |                 |
|                 |               | ✅ Sauna         | ✅ Parking Available      |                 |
|                 |               | ✅ Banquet Hall         | Basic Seasonings        |                 |
|                 |               | Business Center        |             |                 |
|                 |               | Rooftop           |             |                 |
|                 |               | Baby Facilities          |             |                 |

## Roomtype_tags

| roomtype_tags | amenity_tags | view_tags |
| ------------- | ------------ | --------- |
| Room Type          | In-room Amenities      | Room View     |
| Dormitory Style         | Gas Range/Induction    | Ocean View     |
| Standalone House           | Private/Terrace BBQ   | Mountain View      |
| Duplex Style           | Basic Seasonings         | City View     |
| Studio Style           | Refrigerator          | Garden View     |
| Separate Style           | Iron          | Pool View    |
| Single Room           | Hair Dryer         | River View      |
| Double Room           | Mini Bar          | No Window      |
| Twin Room           | Fireplace          | Harbor View     |
| Ondol Room           | Sofa           |           |
| Triple Room          | ✅ Spa/Whirlpool      |           |
| Family Room          | Dining Table           |           |
| Suite Room          | Air Conditioning          |           |
| Penthouse         | Toiletries         |           |
| Women Only          | Bathtub           |           |
| Men Only          | Rice Cooker         |           |
| Mixed Gender          | Microwave        |           |
|               | Cooking Utensils         |           |
|               | Coffee Pot         |           |
|               | Towels           |           |
|               | TV           |           |
|               | Private Pool       |           |
|               | Bidet           |           |
|               | ✅ Smoking Allowed       |           |
|               | Party Room          |           |
|               | Toilet          |           |
|               | VOD          |           |
|               | Free Bottled Water        |           |
|               | Wi-Fi        |           |

---

### Special Characters

> Special character usage guide

# Special Characters

:::caution Allowed Special Characters

List of special characters that can be written in 'description' fields excluding property name and room name

`! @ # $ % ^ & * ( ) { } [ ] " ' , . ? / |`

:::

## Usage Guide

### Property Name, Room Name

- Special characters not allowed (room names allow only `,` `()` as exceptions)

### Description Fields

Only the above special characters can be used in the following fields:

- Property Description
- Booking Information
- Notice
- Cancellation & Refund Policy Information
- Room Description

---


================================================================================
## Vendor API - Reservation
================================================================================

### Reservation

> Reservation management guide

# Reservation

ONDA delivers reservations created through sales channels to vendors.

## Reservation Process

### Reservation Confirmation Process

Check cancellation & refund policy before reservation → Create reservation (pending) → Confirm reservation (confirm → confirmed)

### Reservation Cancellation Process

Cancel reservation (cancel → canceled)

## ONDA Hub Reservation Status

**Reservation Confirmation**

- **pending**: Reservation status created to secure inventory before confirming the reservation
- **confirm**: Reservation status waiting for confirmation of the created reservation
- **confirmed**: Reservation has been confirmed

**Reservation Cancellation**

- **cancel**: Reservation status waiting for cancellation
- **canceled**: Reservation has been canceled

## Vendor - ONDA Hub Reservation Process

### Reservation Creation/Confirmation Process

```mermaid
sequenceDiagram
    participant Vendor
    participant ONDA Hub
    participant Channel

    Note over ONDA Hub,Channel: Reservation Attempt
    Channel->>ONDA Hub: Reservation Request

    rect rgb(240, 240, 255)
        Note over Vendor,ONDA Hub: Cancellation & Refund Policy<br/>before reservation
        ONDA Hub->>Vendor: Check cancellation & refund policy before reservation
        Vendor->>ONDA Hub: Cancellation & refund policy response
    end

    ONDA Hub->>Channel: Cancellation & refund policy response
    Channel->>ONDA Hub: Reservation confirmation request

    rect rgb(255, 245, 240)
        Note over Vendor,ONDA Hub: Create Reservation API
        ONDA Hub->>Vendor: Send pending reservation

        Note over Vendor: Deduct inventory

        Vendor->>ONDA Hub: Pending reservation response

        rect rgb(255, 255, 240)
            Note over Vendor,ONDA Hub: ONDA Hub deducts inventory and<br/>requests vendor to push inventory
            Vendor->>ONDA Hub: Push inventory
        end

        Vendor->>ONDA Hub: Pending reservation response
    end

    rect rgb(240, 255, 240)
        Note over Vendor,ONDA Hub: Confirm Reservation API
        ONDA Hub->>Vendor: Send confirm reservation
        Vendor->>ONDA Hub: Confirmed response
    end

    ONDA Hub->>Channel: Reservation confirmation response
```

### Reservation Cancellation Process

```mermaid
sequenceDiagram
    participant Vendor
    participant ONDA Hub
    participant Channel

    Note over ONDA Hub,Channel: Reservation Cancellation
    Channel->>ONDA Hub: Cancel reservation

    rect rgb(255, 240, 240)
        Note over Vendor,ONDA Hub: Cancel Reservation API
        ONDA Hub->>Vendor: Send cancel reservation

        Note over Vendor: Increase inventory

        Vendor->>ONDA Hub: Canceled response

        rect rgb(255, 255, 240)
            Note over Vendor,ONDA Hub: ONDA Hub increases inventory and<br/>requests vendor to push inventory
            Vendor->>ONDA Hub: Push inventory
        end

        Vendor->>ONDA Hub: Canceled response
    end

    ONDA Hub->>Channel: Reservation cancellation response
```

## API List

### Check Actual Cancellation & Refund Policy Before Reservation

<br />

| API | Method | Description |
|-----|--------|------|
| [Cancellation & Refund Policy before reservation](cancellation-refund-policy-before-reservation.api.mdx) | `GET` | Check the actual cancellation & refund information for the rate plan at the time of reservation and send it to the sales channel. |

<br />

### Reservation Creation, Confirmation

<br />

| API | Method | Description |
|-----|--------|------|
| [Create Reservation](create-reservation.api.mdx) | `POST` | Create reservation (pending status) |
| [Confirm Reservation](confirm-reservation.api.mdx) | `PUT` | Confirm reservation (confirm → confirmed) |

<br />

:::caution Automatic Cancellation

If a failure response is received from the vendor for the reservation creation request, or if no response is received for 15 minutes, the created pending reservation will be automatically canceled.

:::

### Reservation Cancellation

<br />

| API | Method | Description |
|-----|--------|------|
| [Cancel Reservation](cancel-reservation.api.mdx) | `POST` | Cancel reservation (cancel → canceled) |

<br />

### Reservation Inquiry

<br />

| API | Method | Description |
|-----|--------|------|
| [Check Reservation](check-reservation.api.mdx) | `GET` | Retrieve reservation information |

<br />

---


================================================================================
## Vendor API — Endpoint Reference
================================================================================

### POST /bookings/{vendor_booking_number}/cancel — Cancel Reservation

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- 판매 채널에서 예약 취소 발생 시, 공급사로 예약 취소를 호출합니다.
- Create Reservation 또는 Confirm Reservation 진행 후 호출 합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_booking_number` | path | string | ✓ | Vendor reservation number |

**Request Body** (`application/json`):

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `canceled_at` | string (date) | ✓ | 해당 API의 요청을 보낸(예약 확정) 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `canceled_by` | string | ✓ | 취소 요청 주체 \| 허용값 `user` `admin` `channel` |
| `refund` | object | ✓ | 환불 정보 |
| `refund.amount` | integer |  | 환불 금액 |
| `refund.percent` | integer |  | 환불 퍼센트 (%) |
| `property_id` | string | ✓ | Vendor property ID |
| `roomtype_id` | string | ✓ | Vendor room ID |
| `rateplan_id` | string | ✓ | Vendor rate plan ID |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `reservation` | object | 공급사 예약 정보 |
| `reservation.booking_number` | string | Vendor reservation number |
| `reservation.status` | string | 허용값 `confirm` |
| `reservation.reqeusted_at` | string | `optional` 해당 API의 요청을 받은 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `reservation.updated_at` | string | `optional` 예약건이 마지막으로 변경된 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
  "error": "",
  "reservation": {
    "booking_number": "VENDOR_BOOKING_NUMBER",
    "status": "cancel",
    "reqeusted_at": "2020-12-01 21:50:04",
    "updated_at": "2020-12-01 21:50:04"
  }
}
```

**400**:

---

### GET /properties/{vendor_property_id}/roomtypes/{vendor_roomtype_id}/rateplans/{vendor_rateplan_id}/refund_policy — Cancellation & Refund Policy before reservation

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- 판매 채널에서 예약 발생시, 예약 전 공급사로 요금제의 환불 정책과 체크인/체크아웃 시간을 불러옵니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |
| `vendor_roomtype_id` | path | string | ✓ | Vendor room ID |
| `vendor_rateplan_id` | path | string | ✓ | Vendor rate plan ID |
| `checkin` | query | string | ✓ | yyyy-mm-dd hh:mm |
| `checkout` | query | string | ✓ | yyyy-mm-dd hh:mm |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `checkin` | string | 체크인 일자 및 시간 \| yyyy-mm-dd hh:mm |
| `checkout` | string | 체크 아웃 일자 및 시간 \| yyyy-mm-dd hh:mm |
| `refunds` | array | 취소 환불 정책 |
| `refunds[].type` | string | 취소 환불 타입 \| 허용값 `refund` |
| `refunds[].until` | string | 환불 시간 대 (~까지) \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `refunds[].percent` | integer | 환불 퍼센트(%) |
| `refunds[].amount` | integer | 환불 금액 |

```json
{
    "error": "",
    "checkin": "2022-07-20 00:00",
    "checkout": "2022-07-21 00:00",
    "refunds": [
        {
            "type": "refund",
            "until": "2022-07-11 17:00:00",
            "percent": 100,
            "amount": 400000
        },
        {
            "type": "refund",
            "until": "2022-07-14 17:00:00",
            "percent": 90,
            "amount": 360000
        },
        {
            "type": "refund",
            "until": "2022-07-18 17:00:00",
            "percent": 70,
            "amount": 280000
        },
        {
            "type": "refund",
            "until": "2022-07-19 17:00:00",
            "percent": 50,
            "amount": 200000
        },
        {
            "type": "refund",
            "until": "2022-07-20 23:59:59",
            "percent": 0,
            "amount": 0
        }
    ]
}
```

**400**:

---

### GET /bookings/{vendor_booking_number} — Check Reservation

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- Retrieve reservation created at vendor.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_booking_number` | path | string | ✓ | Retrieve reservation created at vendor. |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `booking_number` | string | Vendor reservation number |
| `status` | string | 허용값 `pending` `confirm` `confirmed` `cancel` `canceled` `pendingcancel` |
| `property_id` | string | Vendor property ID |
| `roomtype_id` | string | Vendor room ID |
| `rateplan_id` | string | Vendor rate plan ID |
| `checkin` | string | 체크인 일자 및 시간 \| yyyy-mm-dd hh:mm |
| `checkout` | string | 체크아웃 일자 및 시간 \| yyyy-mm-dd hh:mm |
| `currency` | string | 통화 \| default  `KRW` |
| `amount` | integer | 총 투숙 금액 |
| `guest` | object | 투숙객 정보 |
| `guest.name` | string | 투숙객 이름 |
| `guest.adults` | integer | 성인 투숙객 수 |
| `guest.children` | integer | 아동 투숙객 수 |
| `guest.infants` | integer | 유아 투숙객 수 |
| `guest.pets` | integer | `optional` 반려동물 수 |
| `guest.cars` | integer | `optional` 차량 수 |
| `booker` | object | 예약자 정보 |
| `booker.name` | string | 예약자 이름 |
| `booker.email` | string | 예약자 이메일 |
| `booker.phone` | string | 예약자 연락처 |
| `reqeusted_at` | string | `optional` 해당 API의 요청을 받은 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `updated_at` | string | `optional` 예약건이 마지막으로 변경된 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
  "error": "",
  "booking_number": "VENDOR_BOOKING_NUMBER" ,
  "status": "confirmed",
  "property_id": "VENDOR_RROPERTY_ID",
  "roomtype_id": "VENDOR_ROOMTYPE_ID",
  "rateplan_id": "VENDOR_RATEPLAN_ID",,
  "checkin": "2020-12-23 15:00:00",
  "checkout": "2020-12-24 11:00:00",
  "currency": "KRW",
  "amount": 512200,
  "guest": {
    "name": "김온다",
    "adults": 2,
    "children": 0,
    "infants": 0,
    "pets": 0,
    "cars": 0
  },
  "booker": {
    "name": "박온다",
    "email": "onda@onda.me",
    "phone": "010-1234-1234",
  },
  "reqeusted_at": "2020-12-01 21:50:04",
  "updated_at": "2020-12-01 21:50:04"
}
```

**400**:

---

### PUT /bookings/{vendor_booking_number}/confirm — Confirm Reservation

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- ONDA Hub에 생성한 pending 예약을 확정 하기 위해 공급사를 호출합니다.
- 해당 시점에서 업체 및 고객 모두 예약을 인지 할 수 있습니다.
- pending예약 요청 이후 약 15분 동안 Confirm Reservation API 까지 예약 확정이 이루어지지 않을 경우, ONDA Hub에서 해당 예약은 취소 됩니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_booking_number` | path | string | ✓ | Vendor reservation number |

**Request Body** (`application/json`):

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `confirmed_at` | string (date) | ✓ | 해당 API의 요청을 보낸(예약 확정) 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `paid_amount` | integer (int32) | ✓ | 결제 금액 |
| `property_id` | string |  | `optional` Vendor property ID |
| `roomtype_id` | string |  | `optional` Vendor room ID |
| `rateplan_id` | string |  | `optional` Vendor rate plan ID |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `reservation` | object | 공급사 예약 정보 |
| `reservation.booking_number` | string | Vendor reservation number |
| `reservation.status` | string | 허용값 `confirm` |
| `reservation.reqeusted_at` | string | `optional` 해당 API의 요청을 받은 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `reservation.updated_at` | string | `optional` 예약건이 마지막으로 변경된 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
  "error": "",
  "reservation": {
    "booking_number": "VENDOR_BOOKING_NUMBER",
    "status": "confirm",
    "reqeusted_at": "2020-12-01 21:50:50",
    "updated_at": "2020-12-01 21:50:55"
  }
}
```

**400**:

---

### POST /bookings — Create Reservation

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- 대기 예약이 아닌, 실제 재고를 차감하여 예약을 생성합니다.
- 예약이 확정 되기 전 재고를 확보하기 위해 호출 합니다.
- 공급사로 부터 Create Reservation API를 통한 pending 예약의 응답을 약 15분간 받지 못 할 경우, ONDA Hub에서 해당 예약은 취소됩니다.

**Request Body** (`application/json`):

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `channel_id` | integer | ✓ | 온다가 지정한 판매사 아이디 |
| `channel_name` | string | ✓ | 온다가 지정한 판매사 이름 |
| `channel_booking_number` | string | ✓ | 판매사 예약 번호 |
| `gds_booking_number` | string | ✓ | 온다 Hub 예약 번호 |
| `gds_sub_booking_number` | string | ✓ | 온다 Hub 서브 예약번호
-고객이 1개 상품 예약 : gds_booking_number와 gds_sub_booking_number는 동일
-고객이 n개 상품 예약 : 1개의 gds_booking_number 하위에 n개의 gds_sub_booking_number 생성 |
| `property_id` | string | ✓ | Vendor property ID |
| `roomtype_id` | string | ✓ | Vendor room ID |
| `rateplan_id` | string | ✓ | Vendor rate plan ID |
| `checkin` | string | ✓ | 체크인 시간 |
| `checkout` | string | ✓ | 체크아웃 시간 |
| `currency` | string | ✓ | 통화 \| 기본값 "KRW" |
| `total_amount` | string | ✓ | 총 투숙 금액 |
| `paid_amount` | string | ✓ | 총 결제 금액 |
| `guest` | object |  | 투숙객 정보 |
| `guest.name` | string | ✓ | 투숙객 이름 |
| `guest.adults` | integer | ✓ | 성인 투숙객 수 |
| `guest.children` | integer | ✓ | 아동 투숙객 수 |
| `guest.infants` | integer | ✓ | 유아 투숙객 수 |
| `guest.pets` | integer |  | `optional` 반려동물 수 |
| `guest.cars` | integer |  | `optional` 차량 수 |
| `booker` | array | ✓ | 예약자 정보 |
| `special_comment` | string |  | `optional` 고객 요청 사항 |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `reservation_description` | object | 예약 상세 정보 |
| `reservation_description.booking_number` | string | Vendor reservation number |
| `reservation_description.status` | string | 허용값 `pending` |
| `reservation_description.reqeusted_at` | string | `optional` 해당 API의 요청을 받은 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `reservation_description.updated_at` | string | `optional` 예약건이 마지막으로 변경된 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `reservation_description.refunds` | array | `optional` 취소 환불 정책 \| 환불 퍼센트(%), 환불 금액 중 하나는 필수 |
| `reservation_description.refunds[].type` | string | 취소 환불 타입 \| 허용값 `refund` |
| `reservation_description.refunds[].until` | string | `optional` 환불 시간 대 (~까지) \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `reservation_description.refunds[].percent` | integer | 환불 퍼센트(%) |
| `reservation_description.refunds[].amount` | integer | 환불 금액 |

```json
{
  "error": "",
  "reservation": {
    "booking_number": "VENDOR_BOOKING_NUMBER",
    "status": "pending",
    "reqeusted_at": "2020-12-01 21:50:04",
    "updated_at": "2020-12-01 21:50:04",
    "refunds": [
    {
      "type": "refund",
      "until": "2020-12-19T17:00:00.000+09:00",
      "percent": 100,
      "amount": 100000
    },
    {
      "type": "refund",
      "until": "2020-12-20T17:00:00.000+09:00",
      "percent": 60,
      "amount": 60000
    },
    {
      "type": "refund",
      "until": "2020-12-21T17:00:00.000+09:00",
      "percent": 40,
      "amount": 40000
    },
    {
      "type": "refund",
      "until": "2020-12-22T17:00:00.000+09:00",
      "percent": 10,
      "amount": 10000
    },
    {
      "type": "refund",
      "until": "2020-12-23T17:00:00.000+09:00",
      "percent": 0,
      "amount": 0
    }
  ]
}
```

**400**:

---

### GET /properties/{vendor_property_id}/roomtypes/{vendor_roomtype_id}/rateplans/{vendor_rateplan_id}/avails — Get Avails

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- 요금제의 일자별 재고를 불러옵니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |
| `vendor_roomtype_id` | path | string | ✓ | Vendor room ID |
| `vendor_rateplan_id` | path | string | ✓ | Vendor rate plan ID |
| `from` | query | string |  | yyyy-mm-dd |
| `to` | query | string |  | yyyy-mm-dd |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `avails` | array | 일자별 재고 목록 |
| `avails[].date` | string | 일자 \| yyyy-mm-dd |
| `avails[].checkin` | string | 체크인 시간 \| hh:mm |
| `avails[].checkout` | string | 체크아웃 시간 \| hh:mm |
| `avails[].property_id` | string | Vendor property ID |
| `avails[].roomtype_id` | string | Vendor room ID |
| `avails[].rateplan_id` | string | Vendor rate plan ID |
| `avails[].number_of_rooms` | integer | 총 재고 수 |
| `avails[].vacancy` | integer | 예약 가능한 재고 수 |

```json
{
    "error": "",
    "avails": [
        {
            "date": "2022-07-17",
            "checkin": "14:00",
            "checkout": "12:00",
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "number_of_rooms": 100,
            "vacancy": 50
        },
        {
            "date": "2022-07-18",
            "checkin": "14:00",
            "checkout": "12:00",
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "number_of_rooms": 100,
            "vacancy": 0
        },
        {
            "date": "2022-07-19",
            "checkin": "14:00",
            "checkout": "12:00",
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "number_of_rooms": 100,
            "vacancy": 80
        },
        {
            "date": "2022-07-20",
            "checkin": "14:00",
            "checkout": "12:00",
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "number_of_rooms": 100,
            "vacancy": 44
        }
    ]
}
```

**400**:

---

### GET /properties — Get Property List (HotelPlus)

- Vendor > ONDA (The vendor calls ONDA to save the data.)
- 호텔플러스에 만든 숙소를 공급사 PMS, CMS 등에서 맵핑하기 위해 제공 된 API 입니다.
- 공급사 PMS, CMS에서 호텔플러스의 숙소 목록을 응답받습니다.
- 이때 응답받는 숙소 아이디는 온다의 숙소 아이디입니다. 
- 공급사에서는 온다의 숙소 아이디와 동일하게 Vendor property ID를 설정 해주셔야합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `Authorization` | header | string | ✓ | 온다가 제공한 개발/라이브 환경 인증키 |

**Responses:**

**200**:

```json
[
  {
    "id": "ONDA_PROPERY_ID",
    "name": "테스트_호텔스토리_판매가",
    "status": "enabled"
  }
]
```

**400**:

---

### GET /properties/{vendor_property_id}/roomtypes/{vendor_roomtype_id}/rateplans/{vendor_rateplan_id}/rates — Get Rates

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- 요금제의 일자별 가격을 불러옵니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |
| `vendor_roomtype_id` | path | string | ✓ | Vendor room ID |
| `vendor_rateplan_id` | path | string | ✓ | Vendor rate plan ID |
| `from` | query | string |  | yyyy-mm-dd |
| `to` | query | string |  | yyyy-mm-dd |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면"" |
| `rates` | array | 일자별 요금 목록 |
| `rates[].date` | string | 일자 \| yyyy-mm-dd |
| `rates[].checkin` | string | 체크인 시간 \| hh:mm |
| `rates[].checkout` | string | 체크아웃 시간 \| hh:mm |
| `rates[].property_id` | string | Vendor property ID |
| `rates[].roomtype_id` | string | Vendor room ID |
| `rates[].rateplan_id` | string | Vendor rate plan ID |
| `rates[].basic_price` | integer | `optional` 기본 가격 |
| `rates[].sale_price` | integer | 판매 가격 (실제 판매 적용)
-기본가에 할인된 가격으로 판매가를 설정해 주실 수 있습니다. (채널에 따라 기본 가격이 미노출되는 채널도 있습니다)
-판매가로 계약하는 경우에는 필수입니다. (net_price optional) |
| `rates[].net_price` | integer | 입금 가격 (숙소가 정산 받는 금액)
-입금가로 계약하는 경우에는 필수입니다. (sale_price optional) |
| `rates[].extra_adult` | integer | `optional` 성인 인원 추가 비용 (기준 인원 초과시 추가되는 금액) |
| `rates[].extra_child` | integer | `optional` 아동 인원 추가 비용 (기준 인원 초과시 추가되는 금액) |
| `rates[].extra_infant` | integer | `optional` 유아 인원 추가 비용 (기준 인원 초과시 추가되는 금액) |
| `rates[].extra_bed` | integer | `optional` 침구 추가 비용 |

```json
{
  "error": "",
  "rates": [
    {
      "date": "2022-07-17",
      "checkin": "14:00",
      "checkout": "12:00",
      "property_id": "5",
      "roomtype_id": "28",
      "rateplan_id": "110",
      "basic_price": 600000,
      "sale_price": 512200,
      "net_price": 512200,
      "extra_adult": 0,
      "extra_child": 0,
      "extra_infant": 0,
      "extra_bed": 0
    },
    {
      "date": "2022-07-18",
      "checkin": "14:00",
      "checkout": "12:00",
      "property_id": "5",
      "roomtype_id": "28",
      "rateplan_id": "110",
      "basic_price": 600000,
      "sale_price": 512200,
      "net_price": 512200,
      "extra_adult": 0,
      "extra_child": 0,
      "extra_infant": 0,
      "extra_bed": 0
    },
    {
      "date": "2022-07-19",
      "checkin": "14:00",
      "checkout": "12:00",
      "property_id": "5",
      "roomtype_id": "28",
      "rateplan_id": "110",
      "basic_price": 600000,
      "sale_price": 512200,
      "net_price": 512200,
      "extra_adult": 0,
      "extra_child": 0,
      "extra_infant": 0,
      "extra_bed": 0
    },
    {
      "date": "2022-07-20",
      "checkin": "14:00",
      "checkout": "12:00",
      "property_id": "5",
      "roomtype_id": "28",
      "rateplan_id": "110",
      "basic_price": 600000,
      "sale_price": 512200,
      "net_price": 512200,
      "extra_adult": 0,
      "extra_child": 0,
      "extra_infant": 0,
      "extra_bed": 0
    }
  ]
}
```

**400**:

---

### GET /properties/{vendor_property_id}/roomtypes — Get Roomtype List (HotelPlus)

- Vendor > ONDA (The vendor calls ONDA to save the data.)
- 호텔플러스에 만든 숙소를 공급사 PMS, CMS 등에서 맵핑하기 위해 제공 된 API 입니다.
- 공급사 PMS, CMS에서 호텔플러스의 숙소 목록을 응답받습니다.
- 이때 응답받는 숙소 아이디는 온다의 숙소 아이디입니다. 
- 공급사에서는 온다의 숙소 아이디와 동일하게 Vendor property ID를 설정 해주셔야합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `property_id` | string | 온다 숙소 아이디 |
| `roomtypes` | array | 객실 정보 |
| `roomtypes[].id` | string | 온다 객실 아이디 |
| `roomtypes[].name` | string | 객실 이름 |
| `roomtypes[].status` | string | 객실 상태 \| `enabled` `disabled` |
| `roomtypes[].rateplan_id` | array | 요금제 정보 |
| `roomtypes[].rateplan_id[].rateplan_id` | string | 온다 요금제 아이디 |
| `roomtypes[].rateplan_id[].rateplan_name` | string | 요금제 이름 |
| `roomtypes[].rateplan_id[].rateplan_status` | string | 요금제 상태 \| `enabled` `disabled` |
| `roomtypes[].rateplan_id[].rateplan_type` | string | 요금제 타입  \| `standalone` `package` |
| `roomtypes[].rateplan_id[].rateplan_description` | string | 요금제 설명 |
| `roomtypes[].rateplan_id[].updated_at` | string | 마지막으로 요금제 정보 업데이트 된 일시 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `updated_at` | string | 마지막으로 업데이트 된 일시 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
  "error": "",
  "property_id": "ONDA_PROPERY_ID",
  "roomtypes": [
    {
      "id": "ONDA_ROOMTYPE_ID",
      "name": "standard",
      "status": "enabled",
      "rateplans": [
        {
          "rateplan_id": "ONDA_RATEPLAN_ID",
          "rateplan_name": "roomonly",
          "rateplan_status": "enabled",
          "rateplan_type": "standalone",
          "rateplan_description": "객실 기본요금 입니다.",
          "updated_at": "2022-05-10 09:43:35"
        },
        {
          "rateplan_id": "ONDA_RATEPLAN_ID",
          "rateplan_name": "promotion",
          "rateplan_status": "enabled",
          "rateplan_type": "package",
          "rateplan_description": "프로모션 요금입니다.",
          "updated_at": "2022-05-10 09:43:35"
        }
      ],
      "updated_at": "2022-05-10 09:43:35"
    },
    {
      "id": "ONDA_ROOMTYPE_ID",
      "name": "suite",
      "status": "enabled",
      "rateplans": [
        {
          "rateplan_id": "ONDA_RATEPLAN_ID",
          "rateplan_name": "roomonly",
          "rateplan_status": "enabled",
          "rateplan_type": "standalone",
          "rateplan_description": "객실 기본요금 입니다.",
          "updated_at": "2022-05-10 09:43:35"
        },
        {
          "rateplan_id": "ONDA_RATEPLAN_ID",
          "rateplan_name": "promotion",
          "rateplan_status": "enabled",
          "rateplan_type": "package",
          "rateplan_description": "프로모션 요금입니다.",
          "updated_at": "2022-05-10 09:43:35"
        }
      ],
      "updated_at": "2022-05-10 09:43:35"
    }
  ]
}
```

**400**:

---

### GET /sync/avails — Get Updated Avails

- dapi.tport.dev -&gt; 공급사가 지정한 url 위치 입니다.
- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- lastdate 부터 호출 시점까지 재고 수가 변경 된 요금제 목록을 불러옵니다.
- 정해진 주기별로 호출하며, 주기는 온다 기술 담당 매니저와 협의가 필요합니다. (기본 연동 방식 - 숙소 관리 참고)

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `lastdate` | query | string |  | 온다가 공급사를 호출한 마지막 호출 시간 입니다. \| yyyy-mm-dd hh:mm:ss |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `rateplans` | array | 재고가 변경 된 요금제 리스트 |
| `rateplans[].property_id` | string | Vendor property ID |
| `rateplans[].roomtype_id` | string | Vendor room ID |
| `rateplans[].rateplan_id` | string | Vendor rate plan ID |
| `rateplans[].updated_at` | string | 온다가 공급사를 호출한 마지막 호출 시간 입니다. \| yyyy-mm-dd hh:mm:ss |

```json
{
    "error": "",
    "rateplnas": [
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:21:15"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:21:23"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:21:30"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:21:44"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:21:55"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:22:01"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:22:06"
        }
    ]
}
```

**400**:

---

### GET /sync/rates — Get Updated Rates

- dapi.tport.dev -&gt; 공급사가 지정한 url 위치 입니다.
- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- lastdate 부터 호출 시점까지 가격이 변경 된 요금제 목록을 불러옵니다.
- 정해진 주기별로 호출하며, 주기는 온다 기술 담당 매니저와 협의가 필요합니다. (기본 연동 방식 - 숙소 관리 참고)

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `lastdate` | query | string |  | 온다가 공급사를 호출한 마지막 호출 시간 입니다. \| yyyy-mm-dd hh:mm:ss |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `rateplans` | array | 요금이 변경 된 요금제 리스트 |
| `rateplans[].property_id` | string | Vendor property ID |
| `rateplans[].roomtype_id` | string | Vendor room ID |
| `rateplans[].rateplan_id` | string | Vendor rate plan ID |
| `rateplans[].updated_at` | string | 온다가 공급사를 호출한 마지막 호출 시간 입니다. \| yyyy-mm-dd hh:mm:ss |

```json
{
    "error": "",
    "rateplans": [
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:21:15"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:21:23"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:21:30"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:21:44"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:21:55"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:22:01"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "roomtype_id": "VENDOR_ROOMTYPE_ID",
            "rateplan_id": "VENDOR_RATEPLAN_ID",
            "updated_at": "2022-07-11 13:22:06"
        }
    ]
}
```

**400**:

---

### PUT /bookings/{vendor_booking_number}/modify — Modify Reservation

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- 판매 채널에서 고객 예약정보 변경 시, 공급사로 예약 정보 수정을 호출합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_booking_number` | path | string | ✓ | Vendor reservation number |

**Request Body** (`application/json`):

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `property_id` | string | ✓ | Vendor property ID |
| `roomtype_id` | string | ✓ | Vendor room ID |
| `rateplan_id` | string | ✓ | Vendor rate plan ID |
| `guest` | object |  | 투숙객 정보 |
| `guest.name` | string | ✓ | 투숙객 이름 |
| `guest.adults` | integer | ✓ | 성인 투숙객 수 |
| `guest.children` | integer | ✓ | 아동 투숙객 수 |
| `guest.infants` | integer | ✓ | 유아 투숙객 수 |
| `guest.pets` | integer |  | `optional` 반려동물 수 |
| `guest.cars` | integer |  | `optional` 차량 수 |
| `booker` | array |  | 예약자 정보 |
| `special_comment` | string |  | `optional` 고객 요청 사항 |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `reservation` | object | 예약 수정 처리 정보 |
| `reservation.booking_number` | string | Vendor reservation number |
| `reservation.reqeusted_at` | string | `optional` 해당 API의 요청을 받은 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `reservation.updated_at` | string | `optional` 예약건이 마지막으로 변경된 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
  "error": "",
  "reservation": {
    "booking_number": "VENDOR_BOOKING_NUMBER",
    "reqeusted_at": "2023-12-11 21:50:04",
    "updated_at": "2023-12-11 21:50:04"
  }
}
```

**400**:

---

### GET /bookings/{vendor_booking_number} — Check Reservation

- 공급사 > 온다
- 공급사가 예약 정보 확인을 위해 ONDA Hub의 예약건들을 호출합니다.
- 아고다 예약건 고객 정보 누락 리스트 확인을 위해 사용할 수 있습니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_booking_number` | path | string | ✓ | Retrieve reservation created at vendor. |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `reservations` | object | 예약 정보 |
| `reservations.booking_number` | string | Vendor reservation number |
| `reservations.status` | string | 허용값 \| `pending` `confirm` `cancel` |
| `reservations.property_id` | string | Vendor property ID |
| `reservations.roomtype_id` | string | Vendor room ID |
| `reservations.checkin` | string | 체크인 일자 및 시간 \| yyyy-mm-dd hh:mm |
| `reservations.checkout` | string | 체크아웃 일자 및 시간 \| yyyy-mm-dd hh:mm |
| `reservations.currency` | string | 통화 \| default  "KRW" |
| `reservations.amount` | integer | 총 투숙 금액 |
| `reservations.guest` | object | 투숙객 정보 |
| `reservations.guest.name` | string | 투숙객 이름 |
| `reservations.guest.adults` | integer | 성인 투숙객 수 |
| `reservations.guest.children` | integer | 아동 투숙객 수 |
| `reservations.guest.infants` | integer | 유아 투숙객 수 |
| `reservations.guest.pets` | integer | `optional` 반려동물 수 |
| `reservations.guest.cars` | integer | `optional` 차량 수 |
| `reservations.booker` | array | 예약자 정보 |
| `reservations.reqeusted_at` | string | `optional` 해당 API의 요청을 받은 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `reservations.updated_at` | string | `optional` 예약건이 마지막으로 변경된 일자 및 시간 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
  error: "",
  reservation: {
    booking_number: "VENDOR_BOOKING_NUMBER",
    status: "confirm",
    property_id: "VENDOR_RROPERTY_ID",
    roomtype_id: "VENDOR_ROOMTYPE_ID",
    checkin: "2018-05-09 11:00:00",
    checkout: "2018-05-10 14:00:00",
    amount: 50000,
    guest: {
      name: "김온다",
      adults: 2
      children: 0
      infants: 0
      pets: 0,
      cars: 0
    }
    booker: {
      name: "박온다",
      email: "onda@onda.me",
      phone: "010-1234-1234",
    },
    requested_at: "2018-04-13 23:58:06",
    updated_at: "2018-04-13 23:58:06"
  }
}
```

**400**:

---

### POST /properties/{vendor_property_id}/roomtypes/{vendor_roomtype_id}/rateplans/{vendor_rateplan_id}/avails — Push Setting Avails

- 공급사 > 온다
- 연동 숙소의 요금제의 재고를 즉시 변경합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |
| `vendor_roomtype_id` | path | string | ✓ | Vendor room ID |
| `vendor_rateplan_id` | path | string | ✓ | Vendor rate plan ID |

**Request Body** (`application/json`):

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `from` | string (date) | ✓ | yyyy-mm-dd |
| `to` | string (date) | ✓ | yyyy-mm-dd \| from 값 보다 앞선 일자가 지정될 수 없습니다. 반드시 >= from 으로 지정해주세요. |
| `min_los` | integer (int32) | ✓ | `min_stay` 최소 숙박일 (1이상 부터 설정 가능) |
| `max_los` | integer (int32) | ✓ | `max_stay` 최대 숙박일 (0은 최대 숙박일 제한 없음) |
| `number_of_rooms` | integer (int32) | ✓ | 총 재고 수 |
| `vacancy` | integer (int32) | ✓ | 예약 가능한 재고 수 |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |

```json
{
  "error": ""
}
```

**400**:

---

### POST /properties/{vendor_property_id}/roomtypes/{vendor_roomtype_id}/rateplans/{vendor_rateplan_id}/business-days — Push Setting Business-days

- 공급사 > 온다
- 연동 숙소의 요금제의 판매 여부를 즉시 변경합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |
| `vendor_roomtype_id` | path | string | ✓ | Vendor room ID |
| `vendor_rateplan_id` | path | string | ✓ | Vendor rate plan ID |

**Request Body** (`application/json`):

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `from` | string (date) | ✓ | yyyy-mm-dd |
| `to` | string (date) | ✓ | yyyy-mm-dd \| from 값 보다 앞선 일자가 지정될 수 없습니다. 반드시 >= from 으로 지정해주세요. |
| `is_business_day` | integer (int32) | ✓ | 판매 유무 \| 1 = 영업 및 판매 중, 0 = 영업 및 판매 중지 또는 휴무 |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |

```json
{
  "error": ""
}
```

**400**:

---

### POST /properties/{vendor_property_id}/roomtypes/{vendor_roomtype_id}/rateplans/{vendor_rateplan_id}/rates — Push Setting Rates

- 공급사 > 온다
- 연동 숙소의 요금제의 요금을 즉시 변경합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |
| `vendor_roomtype_id` | path | string | ✓ | Vendor room ID |
| `vendor_rateplan_id` | path | string | ✓ | Vendor rate plan ID |

**Request Body** (`application/json`):

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `from` | string (date) | ✓ | yyyy-mm-dd |
| `to` | string (date) | ✓ | yyyy-mm-dd \| from 값 보다 앞선 일자가 지정될 수 없습니다. 반드시 >= from 으로 지정해주세요. |
| `basic_price` | integer (int32) |  | `optional` 기본 가격 |
| `sale_price` | integer (int32) |  | 판매 가격 (실제 판매 적용) 
-판매가로 계약하는 경우에는 필수입니다.
-기본가에 할인된 가격으로 판매가를 설정해 주실 수 있습니다. (채널에 따라 기본가가 미노출되는 채널도 있습니다)' |
| `net_price` | integer (int32) |  | 입금 가격 (숙소가 정산 받는 금액) 
-입금가로 계약하는 경우에는 필수입니다. |
| `extra_adult` | integer (int32) |  | `optional` 성인 인원 추가 비용 (기준 인원 초과시 추가되는 금액) |
| `extra_child` | integer (int32) |  | `optional` 아동 인원 추가 비용 (기준 인원 초과시 추가되는 금액) |
| `extra_infant` | integer (int32) |  | `optional` 유아 인원 추가 비용 (기준 인원 초과시 추가되는 금액) |
| `extra_bed` | integer (int32) |  | `optional` 침구 추가 비용 |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |

```json
{
  "error": ""
}
```

**400**:

---

### GET /bookings — Reservation Comparison

- 공급사 > 온다
- 공급사의 정산 대사를 위해 ONDA Hub의 예약건들을 호출합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `option` | query | string | ✓ | 허용값 `checkout` `checkin` `confirmed` `canceled` |
| `from` | query | string | ✓ | yyyy-mm-dd |
| `to` | query | string | ✓ | yyyy-mm-dd \| from 값 보다 앞선 일자가 지정될 수 없습니다. |
| `vendor_property_id` | query | string |  | `optional`  property_id 를 여러 개 호출하고 싶은 경우, params를 추가하면 됩니다.  property 구분 없이 조건에 해당하는 모든 내용을 응답받고 싶은 경우에는 해당 파라미터를 제외하고 호출합니다. |
| `offset` | query | integer | ✓ |  |
| `limit` | query | integer | ✓ | default `100`, max `500`, min `1` |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `count` | integer | 요청 범위 내 예약 수 |
| `offset` | integer | Page (starts from 0) |
| `limit` | integer | 응답시 보여지는 예약 수 |
| `reservations` | array | 예약 정보 |
| `reservations[].booking_number` | string | 온다 허브 예약 번호 |
| `reservations[].channel_booking_number` | string | 판매사 예약 번호 |
| `reservations[].status` | string | 예약 상태 |
| `reservations[].property_id` | string | 온다 숙소 아이디 |
| `reservations[].vendor_property_id` | string | Vendor property ID |
| `reservations[].checkin` | string | 체크인 일자 및 시간 \| yyyy-mm-dd hh:mm |
| `reservations[].checkout` | string | 체크아웃 일자 및 시간 \| yyyy-mm-dd hh:mm |
| `reservations[].currency` | string | 통화 \| default `KRW` |
| `reservations[].price_type` | string | 금액 타입 \| `sale` `net` |
| `reservations[].total_amount` | integer | 총 투숙 금액 |
| `reservations[].refund_amount` | integer | 환불 금액 |
| `reservations[].charged_amount` | integer | 결제 금액 |
| `reservations[].net_price` | integer | 입금가 |
| `reservations[].confirmed_at` | string | 확정 된 일시 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |
| `reservations[].canceled_at` | string | 취소 된 일시 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
  "count": 3000,
  "offset": 0,
  "limit": 100,
  "reservations": [
    {
      "booking_number": "ONDA_BOOKING_NUMBER",
      "channel_booking_number": "CHANNEL_BOOKING_NUMBER",
      "status": "confirmed",
      "property_id": "ONDA_PROPERY_ID",
      "vendor_property_id": "VENDOR_RROPERTY_ID",
      "checkin": "2022-07-04 15:00:00",
      "checkout": "2022-07-05 11:00:00",
      "currency": "KRW",
      "price_type": "net",
      "total_amount": 200000,
      "refund_amount": 0,
      "charged_amount": 200000,
      "net_price": 200000,
      "confirmed_at": "2022-07-04 22:30:33",
      "canceled_at": "2022-07-04 22:30:33"
    },
    {
      "booking_number": "ONDA_BOOKING_NUMBER",
      "channel_booking_number": "CHANNEL_BOOKING_NUMBER",
      "status": "confirmed",
      "property_id": "ONDA_PROPERY_ID",
      "vendor_property_id": "VENDOR_RROPERTY_ID",
      "checkin": "2022-07-04 15:00:00",
      "checkout": "2022-07-05 11:00:00",
      "currency": "KRW",
      "price_type": "sale",
      "total_amount": 200000,
      "refund_amount": 120000,
      "charged_amount": 8000,
      "net_price": 6800,
      "confirmed_at": "2022-07-04 22:30:33",
      "canceled_at": "2022-07-04 22:30:33"
    },
    {
      "booking_number": "ONDA_BOOKING_NUMBER",
      "channel_booking_number": "CHANNEL_BOOKING_NUMBER",
      "status": "confirmed",
      "property_id": "ONDA_PROPERY_ID",
      "vendor_property_id": "VENDOR_RROPERTY_ID",
      "checkin": "2022-07-04 15:00:00",
      "checkout": "2022-07-05 11:00:00",
      "currency": "KRW",
      "price_type": "net",
      "total_amount": 150000,
      "refund_amount": 150000,
      "charged_amount": 0,
      "net_price": 0,
      "confirmed_at": "2022-07-04 22:30:33",
      "canceled_at": "2022-07-04 22:30:33"
    },
    {
      "booking_number": "ONDA_BOOKING_NUMBER",
      "channel_booking_number": "CHANNEL_BOOKING_NUMBER",
      "status": "confirmed",
      "property_id": "ONDA_PROPERY_ID",
      "vendor_property_id": "VENDOR_RROPERTY_ID",
      "checkin": "2022-07-04 15:00:00",
      "checkout": "2022-07-05 11:00:00",
      "currency": "KRW",
      "price_type": "net",
      "total_amount": 80000,
      "refund_amount": 0,
      "charged_amount": 80000,
      "net_price": 80000,
      "confirmed_at": "2022-07-04 22:30:33",
      "canceled_at": "2022-07-04 22:30:33"
    }
  ]
}
```

**400**:

---

### PATCH /properties/{vendor_property_id} — Update Property Status

- 공급사 > 온다
- 연동 숙소의 상태를 즉시 변경 합니다.
- 비활성화 및 삭제 되었을 경우 disabled로 설정합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |

**Request Body** (`application/json`):

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `status` | string | ✓ | 공급사 숙소 상태 \| `enabled` `disabled`. Enum: `enabled`, `disabled` |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |

```json
{
  "error": ""
}
```

**400**:

---

### PATCH /properties/{vendor_property_id}/roomtypes/{vendor_roomtype_id}/rateplans/{vendor_rateplan_id} — Update Rateplan Status

- 공급사 > 온다
- 연동 숙소의 요금제 상태를 즉시 변경 합니다.
- 비활성화 및 삭제 되었을 경우 disabled로 설정합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |
| `vendor_roomtype_id` | path | string | ✓ | Vendor room ID |
| `vendor_rateplan_id` | path | string | ✓ | Vendor rate plan ID |

**Request Body** (`application/json`):

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `status` | string | ✓ | 공급사 요금제 상태 \| `enabled` `disabled`. Enum: `enabled`, `disabled` |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |

```json
{
  "error": ""
}
```

**400**:

---

### PATCH /properties/{vendor_property_id}/roomtypes/{vendor_roomtype_id} — Update Roomtype Status

- 공급사 > 온다
- 연동 숙소의 객실 상태를 즉시 변경 합니다.
- 비활성화 및 삭제 되었을 경우 disabled로 설정합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |
| `vendor_roomtype_id` | path | string | ✓ | Vendor room ID |

**Request Body** (`application/json`):

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `status` | string | ✓ | 공급사 객실 상태 \| `enabled` `disabled`. Enum: `enabled`, `disabled` |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |

```json
{
  "error": ""
}
```

**400**:

---

### GET /sync/properties — Get Updated Property List

- dapi.tport.dev -&gt; 공급사가 지정한 url 위치 입니다.
- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- 숙소 목록을 업데이트 합니다.
- lastdate 부터 호출 시점까지 컨텐츠 및 상태가 변경 된 숙소 목록을 불러옵니다.
- 정해진 주기별로 호출하며, 주기는 온다 기술 담당 매니저와 협의가 필요합니다. (기본 연동 방식 - 숙소 관리 참고)

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `lastdate` | query | string |  | 온다가 공급사를 호출한 마지막 호출 시간 입니다. \| yyyy-mm-dd hh:mm:ss |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `properties` | array | 변경 된 숙소 리스트 |
| `properties[].property_id` | string | Vendor property ID |
| `properties[].updated_at` | string | 마지막으로 업데이트 된 일시 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
    "error": "",
    "properties": [
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "updated_at": "2022-07-13 12:24:16"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "updated_at": "2022-07-13 10:41:55"
        },
        {
            "property_id": "VENDOR_RROPERTY_ID",
            "updated_at": "2022-07-13 08:58:21"
        }
    ]
}
```

**400**:

---

### GET /properties/{vendor_property_id} — Get Property Detail

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- Retrieves detailed information for a property.
- Both ID and property name are vendor-provided information.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |

**Responses:**

**200** — Successful operation:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `Property` | object |  |
| `Property.id` | string | Vendor property ID |
| `Property.status` | string | 숙소 상태 \| `enabled` `disabled` |
| `Property.name` | string | 숙소 이름 |
| `Property.address` | string | 숙소 기본 주소 |
| `Property.address_detail` | string | 숙소 상세 주소 |
| `Property.email` | string | `optional` 숙소 이메일 |
| `Property.phone` | string | 숙소 대표 전화번호 |
| `Property.sms_phone` | string | `optional` 예약 문자 수신 받을 숙소 전화번호 |
| `Property.voucher_email` | string | `optional` 예약 바우처 수신 받을 숙소 메일 주소 |
| `Property.checkin` | string | 체크인 시간 \| hh:mm |
| `Property.checkout` | string | 체크아웃 시간 \| hh:mm |
| `Property.website` | string | `optional` 숙소 홈페이지 주소 |
| `Property.classifications` | array | 공급사 숙소 유형 \| `HANOK` `HOTEL` `MOTEL` `RESORT` `GLAMPING` `CARAVAN` `PENSION` `POOLVILLA` `GUESTHOUSE` |
| `Property.photos` | array | 숙소 사진 정보 |
| `Property.photos[].url` | string | 사진 url |
| `Property.photos[].category` | string | 사진 분류 |
| `Property.photos[].description` | string | `optional` 사진 설명 ([연동 전 체크리스트 - 특수 기호] 메뉴를 확인해 주세요.) |
| `Property.photos[].order` | integer | 사진 순서
-순서는 0부터 시작해 주세요.
-0번 사진은 대표 사진으로 등록됩니다. |
| `Property.refund` | object | 숙소 환불 정책 |
| `Property.refund.0d` | integer | 체크인 당일에 대한 환불% 입니다. 
-50일 경우 50% 환불 입니다.
-(0d = 체크인 당일, 1d = 체크인 하루전) |
| `Property.refund.(number)d` | integer | 체크인으로부터 남은 날짜 {number}에 대한 환불% 입니다. 
-100% 환불 구간 설정은 필수 입니다.  |
| `Property.property_description` | string | 숙소 소개 (필수값으로 자세한 정보를 입력해 주세요.)
-[연동 전 체크리스트 - 특수 기호] 메뉴를 확인해 주세요. |
| `Property.reservation_description` | string | 예약 안내 (필수값으로 자세한 정보를 입력해 주세요.)
-[연동 전 체크리스트 - 특수 기호] 메뉴를 확인해 주세요. |
| `Property.notice_description` | string | 공지 사항 (해당 항목은 티몬 채널에만 노출됩니다.)
-[연동 전 체크리스트 - 특수 기호] 메뉴를 확인해 주세요. |
| `Property.refund_description` | string | 숙소 환불 안내 (전액 환불 구간은 필수로 설정해야 입점 가능합니다.)
-채널 마다 정보가 노출되지 않을 수 있습니다.
-reservation_description에 함께 입력해 주세요.
-[연동 전 체크리스트 - 특수 기호] 메뉴를 확인해 주세요. |
| `Property.property_tags` | array | `optional`숙소 태그 (Tags 메뉴 참조) |
| `Property.facility_tags` | array | `optional`시설 태그 (Tags 메뉴 참조) |
| `Property.service_tags` | array | `optional`서비스 태그 (Tags 메뉴 참조) |
| `Property.attraction_tags` | array | `optional`관광지, 테마 태그 (Tags 메뉴 참조) |
| `Property.update_at` | string | 마지막으로 업데이트 된 일시 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
  "error": "",
  "property": {
    "id": "VENDOR_RROPERTY_ID",
    "status": "enabled",
    "name": "AAA 리조트",
    "address": "서울특별시 강남구 테헤란로83길 49",
    "address_detail" : "피프스애비뉴"
    "email": "onda@resort.co.kr",
    "phone": "02-0000-0000",
    "sms_phone": "010-0000-0000",
    "voucher_email": "ondakim.onda.me"
    "checkin": "14:00",
    "checkout": "11:00",
    "website": "http://onda.me",
    "classifications": [
      "RESORT"
    ],
    "photos": [
      {
        "url": "http://onda.me/images/1.jpg",
        "category": "대표",
        "description": "대표",
        "order": 0
      },
      {
        "url": "http://onda.me/images/2.jpg",
        "category": "외부",
        "description": "외부",
        "order": 1
      },
      {
        "url": "http://onda.me/images/3.jpg",
        "category": "내부",
        "description": "내부",
        "order": 2
      }
    ],
    "refund": {
      "0d": 0,
      "3d": 0,
      "4d": 50,
      "5d": 70,
      "6d": 80,
      "7d": 90,
      "10d": 100
    },
    "property_description": "숙소 소개 텍스트",
    "reservation_description": "상세 예약 안내 텍스트",
    "notice_description": "공지 사항 텍스트",
    "refund_description": "숙소 환불 안내 텍스트 (전액 환불 구간은 필수로 설정해야 입점 가능합니다.)",
    "property_tags": [
      "가족",
      "4성"
    ],
    "facility_tags": [
      "스파/월풀",
      "매점/편의점",
      "수영장"
    ],
    "service_tags": [
      "짐보관",
      "반려동물 동반가능"
    ],
    "attraction_tags": [
      "수목원/휴양림 주변"
    ],
    "updated_at": "2022-07-07 15:31:27"
  }
}
```

**400** — Invalid ID supplied:

---

### GET /properties — Get Property List

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- Retrieves a complete list of properties from the vendor.
- Both ID and property name are vendor information.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `status` | query | string (all|enabled|disabled) | ✓ | 숙박시설 이용 가능 여부에 따라 구분하여 불러올 수 있습니다. |

**Responses:**

**200** — Successful operation:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `properties` | array | 숙소 상세 정보 |
| `properties[].id` | string | Vendor property ID |
| `properties[].name` | string | 공급사 숙소 이름 |
| `properties[].status` | string | 숙소 상태 \| `enabled` `disabled` |
| `properties[].classifications` | array | 숙소 유형 \| `HANOK` `HOTEL` `MOTEL` `RESORT` `GLAMPING` `CARAVAN` `PENSION` `POOLVILLA` `GUESTHOUSE` |
| `properties[].updated_at` | string (string) | 마지막으로 업데이트 된 일시 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
    "error": "",
    "properties": [
        {
            "id": "VENDOR_PROPERTY_ID",
            "name": "AAA 리조트",
            "status": "enabled",
            "classifications": [
                "RESORT"
            ],
            "updated_at": "2022-07-13 10:41:55"
        },
        {
            "id": "VENDOR_PROPERTY_ID",
            "name": "ONDA Resort",
            "status": "enabled",
            "classifications": [
                "RESORT"
            ],
            "updated_at": "2022-07-13 08:58:21"
        },
        {
            "id": "VENDOR_PROPERTY_ID",
            "name": "ONDA Hotel",
            "status": "disabled",
            "classifications": [
                "HOTEL"
            ],
            "updated_at": "2022-07-12 17:18:57"
        }
    ]
}
```

**400** — Invalid ID supplied:

---

### GET /properties/{vendor_property_id}/roomtypes/{vendor_roomtype_id} — Get Roomtype Detail

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- 객실과 객실 하위 요금제의 상세 정보를 불러옵니다.
- Both ID and room type name are vendor-provided information.
- `standalone` 정보는 숙소당 1개로, rateplan_id를 제외한 나머지 정보는 전체 객실 모두 동일한 값으로 응답해주셔야 합니다.

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |
| `vendor_roomtype_id` | path | string | ✓ | Vendor room ID |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `roomtype` | object | 객실 정보 |
| `roomtype.property_id` | string | Vendor property ID |
| `roomtype.id` | string | Vendor room ID |
| `roomtype.status` | string | 객실 상태 \| `enabled` `disabled` |
| `roomtype.name` | string | 객실 이름 |
| `roomtype.description` | string | 객실 설명
-[연동 전 체크리스트 - 특수 기호] 메뉴를 확인해 주세요. |
| `roomtype.photos` | array |  |
| `roomtype.photos[].url` | string | 사진 url |
| `roomtype.photos[].category` | string | 사진 분류 |
| `roomtype.photos[].description` | string | `optional` 사진 설명 ([연동 전 체크리스트 - 특수 기호] 메뉴를 확인해 주세요.) |
| `roomtype.photos[].order` | integer | 사진 순서
-순서는 0부터 시작해주세요. 0번 사진은 대표사진으로 등록됩니다. |
| `roomtype.min_stay` | integer | 최소 숙박일 (1이상 부터 설정 가능) |
| `roomtype.max_stay` | integer | 최대 숙박일 (0은 최대 숙박일 제한 없음) |
| `roomtype.size` | integer | 객실 크기 (m2) |
| `roomtype.standard_capacity` | integer | 객실 기준 인원 |
| `roomtype.max_capacity` | integer | 객실 최대 인원 |
| `roomtype.roomtype_tags` | array | 객실 태그 (Tags 메뉴 참조) |
| `roomtype.view_tags` | string | `optional` 전망 태그 (Tags 메뉴 참조) |
| `roomtype.amenity_tags` | array | `optional` 어메니티 태그 (Tags 메뉴 참조) |
| `roomtype.details` | object | `optional` 객실 상세 정보 |
| `roomtype.details.room` | integer | 객실 내 전체 방 수 |
| `roomtype.details.ondolroom` | integer | 객실 내 온동방 수 |
| `roomtype.details.bedroom` | integer | 객실 내 침대방 수 |
| `roomtype.details.livingroom` | integer | 객실 내 거실 수 |
| `roomtype.details.kitchen` | integer | 객실 내 주방 수 |
| `roomtype.details.bathroom` | integer | 객실 내 화장실 수 |
| `roomtype.bedtype` | object | `optional` 객실 침대 종류 |
| `roomtype.bedtype.single_beds` | integer | 싱글 침대수 |
| `roomtype.bedtype.double_beds` | integer | 더블 침대 수 |
| `roomtype.bedtype.super_single_beds` | integer | 슈퍼 싱글 침대 수 |
| `roomtype.bedtype.queen_beds` | integer | 퀸 침대 수 |
| `roomtype.bedtype.king_beds` | integer | 킹 침대 수 |
| `roomtype.bedtype.sofa_beds` | integer | 소파 베드 수 |
| `roomtype.bedtype.air_beds` | integer | 에어 베드 수 |
| `roomtype.standalone` | object | 기본 요금제 (Roomonly)
- standalone 정보는 숙소당 한 개 입니다.
- rateplan_id와 rateplan_status를 제외한 모든 값은 동일하게 주셔야합니다. |
| `roomtype.standalone.rateplan_id` | string | Vendor rate plan ID |
| `roomtype.standalone.status` | string | 공급사 요금제 상태 \| `enabled` `disabled` |
| `roomtype.standalone.rateplan_name` | string | - 요금제 이름 
- standalone 요금제 이름은 객실별로 모두 동일해야합니다.
- 동일한 값을 지정할 수 없다면 예시 응답 값 처럼 값을 고정해서 보내주세요. |
| `roomtype.standalone.rateplan_description` | string | - 요금제 설명
- standalone 요금제 설명은 객실별로 모두 동일해야합니다.
- 동일한 값을 지정할 수 없다면 예시 응답 값 처럼 값을 고정해서 보내주세요. |
| `roomtype.standalone.refundable` | boolean | 환불 가능 여부 \| `true` 값으로 고정해주세요. |
| `roomtype.rateplans` | array |  |
| `roomtype.rateplans[].rateplan_id` | string | Vendor rate plan ID |
| `roomtype.rateplans[].status` | string | 공급사 요금제 상태 \| `enabled` `disabled` |
| `roomtype.rateplans[].rateplan_name` | string | 요금제 이름 |
| `roomtype.rateplans[].rateplan_description` | string | 요금제 설명
-[연동 전 체크리스트 - 특수 기호] 메뉴를 확인해 주세요. |
| `roomtype.rateplans[].refundable` | boolean | 환불 가능 여부 \| `true` `false` |
| `roomtype.rateplans[].meals` | object | `optional` 식사 제공 여부 |
| `roomtype.rateplans[].meals.breakfast` | boolean | 조식 제공 여부 \| `true` `false` |
| `roomtype.rateplans[].meals.lunch` | boolean | 중식 제공 여부 \| `true` `false` |
| `roomtype.rateplans[].meals.dinner` | boolean | 석식 제공 여부 \| `true` `false` |
| `roomtype.updated_at` | string | 마지막으로 업데이트 된 일시 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
  "error": "",
  "roomtype": {
    "property_id": "VENDOR_RROPERTY_ID",
    "id": "VENDOR_ROOMTYPE_ID",
    "status": "enabled",
    "name": "로얄34평",
    "description": "객실 설명 텍스트",
    "photos": [
      {
        "url": "http://onda.me/2021080612594919805672.jpg",
        "category": "기타",
        "description": "로얄34평",
        "order": 1
      },
      {
        "url": "http://onda.me/2021080612594951276893.jpg",
        "category": "기타",
        "description": "로얄34평",
        "order": 2
      }
    ],
    "min_stay": 1,
    "max_stay": 5,
    "size": 0,
    "standard_capacity": 2,
    "max_capacity": 4,
    "roomtype_tags": [
      "스파",
      "노래방"
    ],
    "view_tags": [
      "바다 전망",
      "공원 전망"
    ],
    "amenity_tags": [
      "기본 양념",
      "전자레인지",
      "에어컨",
      "전기밥솥"
    ],
    "details": {
      "room": 3,
      "ondolroom": 2,
      "bedroom": 1,
      "livingroom": 0,
      "kitchen": 1,
      "bathroom": 1
    },
    "bedtype": {
      "single_beds": 1,
      "double_beds": 0
    },
    "standalone": {
      "rateplan_id": "VENDOR_RATEPLAN_ID",,
      "status": "enabled",
      "rateplan_name": "standalone",
      "rateplan_description": "",
      "refundable": true
    },
    "rateplans": [
      {
        "rateplan_id": "VENDOR_RATEPLAN_ID",,
        "status": "enabled",
        "rateplan_name": "breakfast",
        "rateplan_description": "이 패키지는 조식을 제공합니다.",
        "refundable": true,
        "meals": {
          "breakfast": true,
          "lunch": false,
          "dinner": false
        }
      },
      {
        "rateplan_id": "VENDOR_RATEPLAN_ID",,
        "status": "enabled",
        "rateplan_name": "breakfast and lunch",
        "rateplan_description": "이 패키지는 조식과 중식을 제공합니다.",
        "refundable": true,
        "meals": {
          "breakfast": true,
          "lunch": true,
          "dinner": false
        }
      },
      {
        "rateplan_id": "VENDOR_RATEPLAN_ID",,
        "status": "enabled",
        "rateplan_name": "all meals",
        "rateplan_description": "이 패키지는 조식, 중식, 석식을 제공합니다.",
        "refundable": true,
        "meals": {
          "breakfast": true,
          "lunch": true,
          "dinner": true
        }
      },
      {
        "rateplan_id": "VENDOR_RATEPLAN_ID",,
        "status": "enabled",
        "rateplan_name": "promotion price",
        "rateplan_description": "환불이 불가능한 특가 객실만을 제공합니다.",
        "refundable": false,
        "meals": {
          "breakfast": false,
          "lunch": false,
          "dinner": false
        }
      }
    ],
    "updated_at": "2020-02-20 11:27:50"
  }
}
```

**400**:

---

### GET /properties/{vendor_property_id}/roomtypes — Get Roomtype List

- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- 숙소의 전체 객실 목록을 불러옵니다.
- ID 및 객실 이름은 모두 공급사 정보입니다

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `vendor_property_id` | path | string | ✓ | Vendor property ID |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `roomtypes` | array | 객실 목록 |
| `roomtypes[].id` | string | Vendor room ID |
| `roomtypes[].property_id` | string | Vendor property ID |
| `roomtypes[].name` | string | 객실 이름 |
| `roomtypes[].status` | string | 숙소 상태 \| `enabled` `disabled` |
| `roomtypes[].updated_at` | string | 마지막으로 업데이트 된 일시 \| ISO8601 \| yyyy-mm-dd hh:mm:ss |

```json
{
    "error": "",
    "roomtypes": [
        {
            "id": "VENDOR_ROOMTYPE_ID",
            "property_id": "VENDOR_RROPERTY_ID",
            "name": "로얄34평",
            "status": "enabled",
            "updated_at": "2022-05-10 09:43:35"
        },
        {
            "id": "VENDOR_ROOMTYPE_ID",
            "property_id": "VENDOR_RROPERTY_ID",
            "name": "로얄스위트54평(2룸)",
            "status": "enabled",
            "updated_at": "2022-05-10 09:44:41"
        }
    ]
}
```

**400**:

---

### GET /sync/roomtypes — Get Updated Roomtype List

- dapi.tport.dev -&gt; 공급사가 지정한 url 위치 입니다.
- ONDA > Vendor (ONDA calls the vendor to fetch and store the data.)
- 객실 목록을 업데이트 합니다.
- lastdate 부터 호출 시점까지 객실과 요금제의 컨텐츠 및 상태가 변경 된 객실 목록을 불러옵니다.
- 정해진 주기별로 호출하며, 주기는 온다 기술 담당 매니저와 협의가 필요합니다. (기본 연동 방식 - 숙소 관리 참고)

**Parameters:**

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `lastedate` | query | string |  | 온다가 공급사를 호출한 마지막 호출 시간 입니다. \| yyyy-mm-dd hh:mm:ss |

**Responses:**

**200**:

| Field | Type | Description |
|-------|------|-------------|
| `error` | string | 에러가 있으면 에러메세지, 그렇지 않으면 "" |
| `roomtypes` | array | 변경 된 숙소 리스트 |
| `roomtypes[].property_id` | string | Vendor property ID |
| `roomtypes[].roomtype_id` | string | Vendor room ID |
| `roomtypes[].updated_at` | string | 온다가 공급사를 호출한 마지막 호출 시간 입니다. \| yyyy-mm-dd hh:mm:ss |

```json
{
  "error": "",
  "roomtypes": [
    {
      "property_id": "VENDOR_RROPERTY_ID",
      "roomtype_id": "VENDOR_ROOMTYPE_ID",
      "updated_at": "2020-09-15 23:44:00"
    },
    {
      "property_id": "VENDOR_RROPERTY_ID",
      "roomtype_id": "VENDOR_ROOMTYPE_ID",
      "updated_at": "2020-09-15 23:44:55"
    }
  ]
}
```

**400**:

---

