Direct Legacy Channel Opening
How to open a legacy direct channel (Booking.com, Agoda, Expedia, Trip.com, and so on) among the channel_type=cms channels. Unlike Plus channels, these require channel settings and mapping.
Branching before mapping
What you do before mapping depends on the requires_cms_authorization value in the channel metadata.
requires_cms_authorization | Step before mapping | Example channels |
|---|---|---|
false | Look up the property on the channel side — GET /gds/vendor/channels/{channel_id}/properties/{channel_property_id} | Booking.com, Agoda, Expedia, Trip.com |
true | OAuth authorization — GET /gds/vendor/channels/{channel_id}/authorization; see Airbnb Authorization for the implementation | Airbnb |
Step by step
- Discover channels —
GET /gds/vendor/channels - Submit an ON request —
POST .../channels/{channel_id}with{ "request_type": "on" } - Pre-mapping step — look up the channel-side property, or run OAuth authorization, per the branch table above
- Per-channel settings —
PATCH .../channels/{channel_id}/settings(RFC 7396 Merge Patch) - Mapping —
PATCH .../mappings(property → room type → rate plan) - Push rates and business days —
POST .../ari(type: overnight) - Push availability —
POST .../ari/avails
Checklist
- Read
requires_cms_authorizationfrom the channel metadata and branch the pre-mapping step - Collect candidate
channel_roomtype_idandchannel_rateplan_idvalues from the channel-side property - Complete property → room type → rate plan mapping
- Airbnb: map rate plans to
0, since Airbnb has no concept of rate plans - Handle the
processing_modebranch after the ON request (auto_approveorexternal_review) - Push rates and business days with
POST .../ari(type: overnight) - Push availability with
POST .../ari/avails(consolidated per room type, up to 730 days) - Availability is room-only (per room type) — send
packageavailability aligned tostandalone
Airbnb has no concept of rate plans, so map channel_rateplan_id to 0.
Opening request body
{
"request_type": "on",
"channel_property_id": "CP-001",
"note": "Opening request agreed with the channel manager."
}
| Field | Description |
|---|---|
request_type | on to open, off to stop |
channel_property_id | Channel-side property ID (optional). Can be sent when requesting a processing_mode=external_review channel such as Booking.com. Allowed only with request_type: "on"; sending it with off returns 400. If another property already uses the ID on the same channel, it returns 409. When submitted, it is applied to the property mapping at request time. |
note | Requester's note (optional, up to 16,000 characters). Allowed on both on and off; use it for information the operator should see. |
Extra occupancy charges per channel
Per-channel options are configured through the channel settings endpoint (RFC 7396 Merge Patch). Support for extra occupancy charges, and how they are configured, differs by channel.
| Channel | Extra occupancy charge | How it is configured |
|---|---|---|
| Expedia | Not supported | — |
| Booking.com | Not supported | — |
| Trip.com | Supported | pricing_model in the property-level settings — OBP (occupancy based) or Standard (per room). With OBP, the property's settings.extra_adult_price is included in the rate. |
| Agoda | Supported | Rates are sent per occupancy (occupancy based). Amounts for occupancy above the standard are sent to the channel, including the property's settings.extra_adult_price. |
| Airbnb | Supported | The property's settings.extra_adult_price is applied automatically when configured per room. |
Room-level channel settings (.../roomtypes/{vendor_roomtype_id}/channels/{channel_id}/settings) are Airbnb only. Calling them for another channel returns an error.
Parent rate plans (channel_parent_rateplan_id)
The rateplans object in the GET /gds/vendor/channels/{channel_id}/properties/{channel_property_id} response carries the parent rate plan ID.
- Such a rate plan can be linked, but rates sent to it are not forwarded to the channel
- Its rate follows the parent rate plan pointed to by
channel_parent_rateplan_idand changes automatically - Supported on Booking.com and Agoda
Opening conditions
The full list of checks is the same as in the Plus channel guide.
Legacy channels (requires_cms_authorization=false) skip the property image, category, and room image checks when opening.
Endpoints
All paths are prefixed with /gds/vendor.
Channel discovery and authorization
| Method | Path | Description |
|---|---|---|
GET | /channels | Channel metadata |
GET | /properties/{vendor_property_id}/channels | Channels available for the property, with request status |
GET | /channels/{channel_id}/properties/{channel_property_id} | Channel-side property info; the response includes channel_parent_rateplan_id |
GET | /channels/{channel_id}/authorization | OAuth authorization URL — only for channels with requires_cms_authorization=true (implementation guide) |
Channel mapping
| Scope | Method | Path |
|---|---|---|
| Property | GET · PATCH | /properties/{vendor_property_id}/channels/{channel_id}/mappings |
| Room type | GET · PATCH | .../roomtypes/{vendor_roomtype_id}/channels/{channel_id}/mappings |
| Rate plan | GET · PATCH | .../rateplans/{vendor_rateplan_id}/channels/{channel_id}/mappings |
Opening requests
| Method | Path | Description |
|---|---|---|
POST | /properties/{vendor_property_id}/channels/{channel_id} | ON and OFF requests |
GET | /properties/{vendor_property_id}/channels/{channel_id} | Request status and history |