Airbnb on Channex
Airbnb connects differently from Booking.com: instead of a single create with a hotel_id, it uses an
OAuth flow, the channel is created asynchronously, and listings are mapped one at a time.
ChannexAirbnbService / ChannexAirbnbController expose it under /api/v1/admin/channex/airbnb.
channelId is our channel holding the Channex API key; {id} in the path is the Channex channel UUID
created by the OAuth flow.
Connection flow
1. Get the OAuth link POST …/airbnb/connection-link?channelId=chnl_X (body: ["prop_…"])
→ returns data.attributes.url — the host opens it and authorizes on Airbnb
2. Channex creates the channel asynchronously
Poll for it GET …/airbnb/channels?channelId=chnl_X&propertyId=prop_…
3. Read listings/rates POST …/airbnb/{id}/mapping-details?channelId=chnl_X&accessToken=…&userId=…
(authenticated by the channel's OAuth tokens, from its settings.tokens)
4. Map each listing POST …/airbnb/{id}/mappings?channelId=chnl_X&ratePlanId=rp_…&listingId=<airbnb id>
5. Activate POST …/airbnb/{id}/activate?channelId=chnl_X
6. Pull future reservations POST …/airbnb/{id}/load-future-reservations?channelId=chnl_X[&airbnbListingId=…]
load_future_reservations just asks Channex to push existing Airbnb reservations — they then arrive
through the same revisions feed and become PMS bookings (source = Airbnb). Inbound Airbnb
bookings need no separate code.
Per-mapping settings & promotions
Airbnb exposes extra per-listing controls (each scoped to a channel + mapping):
| Method | Path | Purpose |
|---|---|---|
GET / PUT | …/airbnb/{id}/mappings/{mappingId}/pricing-settings | Airbnb pricing settings |
GET / PUT | …/airbnb/{id}/mappings/{mappingId}/availability-settings | Airbnb availability settings |
GET | …/airbnb/{id}/promotions | list promotions |
POST | …/airbnb/{id}/promotions/enable · /disable | toggle a promotion |
GET | …/airbnb/performance/{resource} | performance dashboard passthrough (stats, listings, views, …) |
group_id
connection-link requires a group_id; it defaults to the channel's configured channexGroupId when not
supplied.
Bard also has a separate, direct Livbnb integration in
crs(an Airbnb-style channel reached without Channex). The Airbnb-on-Channex flow described here is distinct from that.