Skip to main content

Initial Setup

The first sync: the vendor creates property, room type, rate plan model, and rate plan content with POST, then pushes rates and availability (ARI) to make the property sellable. Content always flows vendor → ONDA; lookups (GET) are a fallback.

Step by step

  1. Fetch the code catalogGET /gds/vendor/meta (tag codes such as _tags used when creating properties and rooms)
  2. Create the propertyPOST /gds/vendor/properties
  3. Create room typesPOST .../{vendor_property_id}/roomtypes
  4. Create rate plan modelsPOST .../{vendor_property_id}/rateplan-models
  5. Create rate plansPOST .../roomtypes/{vendor_roomtype_id}/rateplans (bound via vendor_rateplan_model_id)
  6. Push rates and business daysPOST .../ari (per rate plan)
  7. Push availabilityPOST .../ari/avails (consolidated per room type)

Checklist

  • Fetch the code catalog (_tags and similar) with GET /gds/vendor/meta and build the mapping table into your system
  • Create in order: property → room type → rate plan model → rate plan
  • Use tag codes from the meta lookup for _tags when creating properties and rooms
  • Verify the vendor_rateplan_model_id binding when creating rate plans
  • Push rates and business days per rate plan with POST .../ari, and availability per room type with POST .../ari/avails
  • Send the shared value (default) and the full per-channel declaration (channels[]) together in a single call
  • Use partial pushes: include only what changed in ari (business day is_business_day, or rates basic_price, sale_price, net_price)
  • Align ari/avails availability to room-only (room type) counts; each from-to range spans at most 730 days
  • (Optional) Verify the fallback content lookups (GET)

Using the code catalog (meta)

Code-based fields on properties and rooms (_tags and similar) must use tag codes defined by ONDA, not arbitrary strings.

  • Lookup: GET /gds/vendor/meta returns the available codes
  • Fetch meta and build the code mapping table before the first sync (content creation)
  • Reference the same code system when setting _tags on content updates
  • Establish a policy for periodically re-fetching meta so code additions and removals are picked up

Sending content in languages other than Korean

To include languages other than Korean, provide per-language values in the i18n field.

  • Applies to the i18n field on properties, room types, rate plan models, and rate plans
  • Define the set of supported language codes (for example ko, en, ja, zh)
  • Decide the per-language content mapping and the fallback language rule
  • Apply the same rules for stripping characters that cannot be displayed

Rate plan model and rate plan structure

A rate plan is a room type combined with a rate plan model. Both room types and rate plan models live beneath a property.

Rules for rate plan model type

The number you may create differs by type, per property.

  • standalone: exactly one required per property; no more than one
  • package: no limit
Channel-specific rate plans — the channels field on a rate plan model

The optional channels field on POST .../rateplan-models restricts a model to specific channels.

  • Omitted, it sells on all channels; supplied, it sells only on the channels listed in channels
  • On channel opening, rate plan mappings are created only for the channels listed in channels (and only where a room mapping exists and is open on that channel)
  • Editing it after opening
    • Adding ([131] → [131, 132]): a mapping is created for 132 only
    • Removing ([131, 132] → [131]): existing mappings are kept; rate plans created afterwards get no mapping for 132
    • Empty ([131, 132] → []): mappings are created on every eligible channel

Property default extra adult charge (settings.extra_adult_price)

A property-level default extra adult charge, sent in the settings object of the property create or update request.

  • Value: integer (KRW). Sending null clears it.
  • Legacy channels: included in occupancy-based rates on Agoda and Trip.com. Not included in per-room rates.
  • Plus channels: used as the extra occupancy charge.

Content endpoints

All paths are prefixed with /gds/vendor.

ObjectMethodPathRequired fields and notes
PropertyPOST/propertiesRequires id and i18n (ko-kr); supports settings.extra_adult_price
PropertyPATCH/properties/{vendor_property_id}Update; clear extra_adult_price with null
PropertyGET/properties · /{vendor_property_id}Fallback lookup
Room typePOST/properties/{vendor_property_id}/roomtypesRequires id and i18n (ko-kr)
Room typePATCH.../roomtypes/{vendor_roomtype_id}Update
Room typeGET.../roomtypes · /{vendor_roomtype_id}Fallback lookup
Rate plan modelPOST/properties/{vendor_property_id}/rateplan-modelsRequires id and i18n (ko-kr); optional channels
Rate plan modelPATCH.../rateplan-models/{vendor_rateplan_model_id}Update
Rate plan modelGET.../rateplan-models · /{vendor_rateplan_model_id}Fallback lookup
Rate planPOST.../roomtypes/{vendor_roomtype_id}/rateplansRequires id and vendor_rateplan_model_id
Rate planPATCH.../rateplans/{vendor_rateplan_id}Update
Rate planGET.../rateplans · /{vendor_rateplan_id}Fallback lookup
warning

When creating a rate plan, always verify that the required vendor_rateplan_model_id in the request body binds it to a rate plan model.

Pushing rates and business days (ARI) and availability (Avails)

Pushing is split into rates and business days on one side and availability on the other.

MethodPathDescription
POST.../ariRates and business days (per rate plan, vendor_rateplan_id)
POST.../ari/availsAvailability, vacancy (consolidated per room type; at most 730 days per item)

Both endpoints carry the shared value and the per-channel values (the channels[] array) in a single call. channels[] is a complete declaration of per-channel settings, so settings for channels absent from the array are deleted within the item's from-to range.

Rates and business days — overnight (overnight)

[
{
"vendor_roomtype_id": "VRT-001",
"vendor_rateplan_id": "VRP-001",
"type": "overnight",
"from": "2026-01-01",
"to": "2026-01-31",
"basic_price": 0,
"net_price": 0,
"sale_price": 12000,
"is_business_day": 0,
"channels": [
{ "channel_id": 1, "basic_price": 0, "net_price": 0, "sale_price": 10000, "is_business_day": 0 },
{ "channel_id": 2, "basic_price": 0, "net_price": 0, "sale_price": 11000 }
]
}
]

Rates and business days — day-use (dayuse)

[
{
"vendor_roomtype_id": "VRT-001",
"vendor_rateplan_id": "VRP-001",
"type": "dayuse",
"from": "2026-01-01",
"to": "2026-01-31",
"basic_price": 0,
"net_price": 0,
"sale_price": 12000,
"is_business_day": 0,
"use_from": "14:00",
"use_to": "20:00",
"use_time": 240,
"channels": [
{ "channel_id": 1, "sale_price": 10000, "use_from": "14:00", "use_to": "20:00", "use_time": 240 }
]
}
]

Availability — consolidated per room type

[
{
"vendor_roomtype_id": "VRT-001",
"from": "2026-01-01",
"to": "2026-01-31",
"vacancy": 5,
"channels": [
{ "channel_id": 1, "vacancy": 3 },
{ "channel_id": 2, "vacancy": 5 }
]
}
]
Push rules
  • POST .../ari — pushes rates and business days per rate plan. Settings for channels absent from channels are deleted within the item's range (omitting the field or sending an empty array deletes settings for all channels), and each channel object must carry at least one value field (channel_id alone returns 400). Omitted fields keep their existing values. use_from, use_to, and use_time (in minutes) may be sent only on day-use items.
  • POST .../ari/avails — applies availability as a consolidated per-room-type count. channels[] is a complete declaration of per-channel availability, so availability for channels absent from the array is deleted within the range. Each from-to range spans at most 730 days.
The type field (overnight or day-use)

Both ari and bookings (/bookings) use type to distinguish product types.

Channel typetype used
Plus channelovernight
Direct channelovernight (channels that support day-use also send dayuse)
ARI supports partial pushes
  • Partial push: include only the items you want to change
  • Fields per item: business day = is_business_day; rates = basic_price, sale_price, net_price; availability = vacancy (via ari/avails)
  • Day-use only: use_from, use_to, and use_time may be sent only for day-use
  • One call per push: shared values at the top level, per-channel values in the channels[] array
Availability policy — align to room-only (room type) counts

Channels differ in what availability is counted against.

  • Room-only (room type): Booking.com, Agoda, Trip.com
  • Rate plan: Expedia, Plus channels (with some optional cases)

ONDA counts availability per room type, so send availability aligned to room-only counts, and send package availability identical to standalone availability.