Airbnb API
API Methods to works with Airbnb connection
This section contain infromation about API related to Airbnb functionality such us:
Manage listing settings
Manage Promotions, Opportunities and Checkout Tasks
Work with Inquiry, Reservation and Alteration requests
All information about creating connection between Channex and Airbnb you can find at page Channel API Examples / Airbnb.
Manage Listing settings
Listing Publishing
A listing is published (open for booking) or unpublished on Airbnb through the connection:
Publish an Airbnb listing: the listing's availability is switched on at Airbnb, and the published state is recorded on the listing's mapping. Publishing a listing that is already published succeeds without changes.
For Airbnb channel connections; other channels receive 400 Bad Request.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920The listing an action applies to.
Airbnb listing ID.
54843145465465419The request has succeeded.
JSON:API document wrapping a single resource.
The request cannot be processed in the current state.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The channel could not return the details; errors carries the reason the channel reported, or null when it gave none.
A backing service is temporarily unavailable; retry the request later.
PUT /api/v1/channels/{channel_id}/execute/publish HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 34
{
"listing_id": "54843145465465419"
}{
"data": {
"published": true
}
}Unpublish an Airbnb listing: the listing's availability is switched off at Airbnb with the given deactivation reason, and the published state is recorded on the listing's mapping. Unpublishing a listing that is already unpublished succeeds without changes.
The valid reasons come from the unpublish-reasons questionnaire — see GET /channels/{channel_id}/action/get_unpublish_reasons.
For Airbnb channel connections; other channels receive 400 Bad Request.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Unpublish parameters of an Airbnb listing.
Airbnb listing ID.
54843145465465419Reason the listing is unlisted, as Airbnb expects it — a value from the
unpublish-reasons questionnaire (see
GET /channels/{channel_id}/action/get_unpublish_reasons). Defaults to
OtherReason.
MoveOutOrSellPlaceFree-text details accompanying the reason.
The request has succeeded.
JSON:API document wrapping a single resource.
The request cannot be processed in the current state.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The channel could not return the details; errors carries the reason the channel reported, or null when it gave none.
A backing service is temporarily unavailable; retry the request later.
PUT /api/v1/channels/{channel_id}/execute/unpublish HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 107
{
"listing_id": "54843145465465419",
"deactivation_reason": "MoveOutOrSellPlace",
"deactivation_details": "text"
}{
"data": {
"published": false
}
}Unpublishing takes a deactivation reason. The valid reasons — with the question texts to show a host — come from Airbnb's questionnaire:
Retrieve Airbnb's unpublish-reasons questionnaire: the questions a host answers when unlisting, with their nested answer choices. The choice values are submitted as the deactivation_reason of an unpublish request. The questionnaire is requested from Airbnb.
For Airbnb channel connections; other channels receive 400 Bad Request.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Locale of the questionnaire texts. Defaults to en.
The request has succeeded.
JSON:API document wrapping a single resource.
The request cannot be processed in the current state.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The channel could not return the details; errors carries the reason the channel reported, or null when it gave none.
A backing service is temporarily unavailable; retry the request later.
GET /api/v1/channels/{channel_id}/action/get_unpublish_reasons HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Accept: */*
{
"data": {
"flows": [
{
"slug": "LISTING_DEACTIVATION",
"description": "Listing Deactivation Flow",
"questions": [
{
"key": "deactivation_reason",
"answer_key": "deactivation_reason",
"type": "RADIO_TIERED",
"is_required": true,
"answer_editable": true,
"description": "text",
"choices": "[Circular Reference]"
}
]
}
]
}
}Availability Settings
Manage lead time, notice, min/max stay, check-in/check-out days, turnover.
Retrieve the availability settings of a listing
Retrieve the Airbnb availability settings of a mapped listing: booking lead time, how far ahead the listing can be booked, night-count limits and check-in/check-out weekday rules.
Listings on Airbnb's standard pricing model report the check-in and check-out weekday flags; listings on the length-of-stay pricing model report default_min_nights. The settings are read as stored on the mapping — nothing is requested from Airbnb. For Airbnb channel connections.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Mapping ID — see rate_plans[].id of the channel connection.
716305c4-561a-4561-a187-7f5b8aeb5920The request has succeeded.
JSON:API document wrapping a single resource.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The request body failed validation.
A backing service is temporarily unavailable; retry the request later.
GET /api/v1/channels/{channel_id}/mappings/{id}/availability_settings HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Accept: */*
{
"data": {
"type": "airbnb_listing_availability_settings",
"id": "716305c4-561a-4561-a187-7f5b8aeb5920",
"attributes": {
"booking_lead_time": 0,
"max_days_notice": -1,
"allow_rtb_beyond_max_days_notice": false,
"default_min_nights": 1,
"default_max_nights": 0,
"allow_rtb_above_max_nights": false,
"day_of_week_check_in": [
true
],
"day_of_week_check_out": [
true
],
"day_of_week_min_nights": [
1
],
"seasonal_min_nights": [
{
"start_date": "2026-01-01",
"end_date": "2026-01-01",
"min_nights": 1
}
],
"turnover_days": 0
}
}
}Update the availability settings of a listing
Update the Airbnb availability settings of a mapped listing. The changes are pushed to Airbnb and stored on the mapping; a change of max_days_notice additionally triggers a full synchronisation of the connection. Returns the updated availability settings.
Supported for Airbnb channel connections; other channels receive 400 Bad Request.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Mapping ID — see rate_plans[].id of the channel connection.
716305c4-561a-4561-a187-7f5b8aeb5920Request body of the availability settings update.
The request has succeeded.
JSON:API document wrapping a single resource.
The request has missing or invalid arguments; details lists the reasons.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The request has missing or invalid arguments; details lists the messages per argument.
A backing service is temporarily unavailable; retry the request later.
PUT /api/v1/channels/{channel_id}/mappings/{id}/availability_settings HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 362
{
"availability_settings": {
"booking_lead_time": 0,
"max_days_notice": -1,
"allow_rtb_beyond_max_days_notice": false,
"default_min_nights": 1,
"default_max_nights": 0,
"allow_rtb_above_max_nights": false,
"day_of_week_check_in": [
true
],
"day_of_week_check_out": [
true
],
"seasonal_min_nights": [
{
"start_date": "2026-01-01",
"end_date": "2026-01-01",
"min_nights": 1
}
],
"turnover_days": 0
}
}{
"data": {
"type": "airbnb_listing_availability_settings",
"id": "716305c4-561a-4561-a187-7f5b8aeb5920",
"attributes": {
"booking_lead_time": 0,
"max_days_notice": -1,
"allow_rtb_beyond_max_days_notice": false,
"default_min_nights": 1,
"default_max_nights": 0,
"allow_rtb_above_max_nights": false,
"day_of_week_check_in": [
true
],
"day_of_week_check_out": [
true
],
"day_of_week_min_nights": [
1
],
"seasonal_min_nights": [
{
"start_date": "2026-01-01",
"end_date": "2026-01-01",
"min_nights": 1
}
],
"turnover_days": 0
}
}
}Pricing Settings
Manage currency, default and weekend prices, guest counts, fees, taxes.
Retrieve the Airbnb pricing settings of a mapped listing: currency, nightly prices, included guests, pass-through occupancy taxes, standard fees and default pricing rules. The response also reports the default and the allowed pass-through-tax collection types of the listing.
The settings are read as stored on the mapping — nothing is requested from Airbnb. For Airbnb channel connections.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Mapping ID — see rate_plans[].id of the channel connection.
716305c4-561a-4561-a187-7f5b8aeb5920The request has succeeded.
JSON:API document wrapping a single resource.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The request body failed validation.
A backing service is temporarily unavailable; retry the request later.
GET /api/v1/channels/{channel_id}/mappings/{id}/pricing_settings HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Accept: */*
{
"data": {
"type": "airbnb_listing_pricing_settings",
"id": "716305c4-561a-4561-a187-7f5b8aeb5920",
"attributes": {
"currency": "USD",
"default_daily_price": 100,
"weekend_price": 150,
"guests_included": 1,
"price_per_extra_person": 20,
"pass_through_taxes_collection_type": "NO_AIRBNB_COLLECTED_TAX",
"pass_through_taxes": [
{
"tax_type": "pass_through_hotel_tax",
"amount": 1,
"amount_type": "percent_per_reservation",
"taxable_base": [
"base_price"
],
"business_tax_id": "text",
"no_business_tax_id_declaration": true,
"tot_registration_id": "text",
"no_tot_registration_id_declaration": true,
"attestation": true,
"long_term_stay_exemption": 1,
"only_first_nights_exemption": 1,
"max_cap_per_person_per_night": 1
}
],
"standard_fees": [
{
"fee_type": "PASS_THROUGH_CLEANING_FEE",
"offline": false,
"amount_type": "flat",
"amount": 15,
"fee_unit_type": "PER_KILOWATT_HOUR",
"charge_type": "PER_GROUP",
"charge_period": "PER_BOOKING"
}
],
"default_pricing_rules": [
{
"rule_type": "STAYED_AT_LEAST_X_DAYS",
"price_change": 10,
"threshold_one": 7
}
],
"default_pass_through_taxes_collection_type": "NO_AIRBNB_COLLECTED_TAX",
"allowed_pass_through_taxes_collection_types": [
"NO_AIRBNB_COLLECTED_TAX"
]
}
}
}Update the Airbnb pricing settings of a mapped listing. The changes are pushed to Airbnb, stored on the mapping, and followed by a full synchronisation of the connection; settings identical to the stored ones are not re-sent. Returns the updated pricing settings.
Supported for Airbnb channel connections; other channels receive 400 Bad Request.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Mapping ID — see rate_plans[].id of the channel connection.
716305c4-561a-4561-a187-7f5b8aeb5920Request body of the pricing settings update.
The request has succeeded.
JSON:API document wrapping a single resource.
The request has missing or invalid arguments; details lists the reasons.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The request has missing or invalid arguments; details lists the messages per argument.
A backing service is temporarily unavailable; retry the request later.
PUT /api/v1/channels/{channel_id}/mappings/{id}/pricing_settings HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 823
{
"pricing_settings": {
"currency": "USD",
"default_daily_price": 100,
"weekend_price": 150,
"guests_included": 1,
"price_per_extra_person": 20,
"pass_through_taxes": [
{
"tax_type": "pass_through_hotel_tax",
"amount": 1,
"amount_type": "percent_per_reservation",
"taxable_base": [
"base_price"
],
"business_tax_id": "text",
"no_business_tax_id_declaration": true,
"tot_registration_id": "text",
"no_tot_registration_id_declaration": true,
"attestation": true,
"long_term_stay_exemption": 1,
"only_first_nights_exemption": 1,
"max_cap_per_person_per_night": 1
}
],
"standard_fees": [
{
"fee_type": "PASS_THROUGH_CLEANING_FEE",
"offline": false,
"amount_type": "flat",
"amount": 15,
"fee_unit_type": "PER_KILOWATT_HOUR",
"charge_type": "PER_GROUP",
"charge_period": "PER_BOOKING"
}
],
"default_pricing_rules": [
{
"rule_type": "STAYED_AT_LEAST_X_DAYS",
"price_change": 10,
"threshold_one": 7
}
]
}
}{
"data": {
"type": "airbnb_listing_pricing_settings",
"id": "716305c4-561a-4561-a187-7f5b8aeb5920",
"attributes": {
"currency": "USD",
"default_daily_price": 100,
"weekend_price": 150,
"guests_included": 1,
"price_per_extra_person": 20,
"pass_through_taxes_collection_type": "NO_AIRBNB_COLLECTED_TAX",
"pass_through_taxes": [
{
"tax_type": "pass_through_hotel_tax",
"amount": 1,
"amount_type": "percent_per_reservation",
"taxable_base": [
"base_price"
],
"business_tax_id": "text",
"no_business_tax_id_declaration": true,
"tot_registration_id": "text",
"no_tot_registration_id_declaration": true,
"attestation": true,
"long_term_stay_exemption": 1,
"only_first_nights_exemption": 1,
"max_cap_per_person_per_night": 1
}
],
"standard_fees": [
{
"fee_type": "PASS_THROUGH_CLEANING_FEE",
"offline": false,
"amount_type": "flat",
"amount": 15,
"fee_unit_type": "PER_KILOWATT_HOUR",
"charge_type": "PER_GROUP",
"charge_period": "PER_BOOKING"
}
],
"default_pricing_rules": [
{
"rule_type": "STAYED_AT_LEAST_X_DAYS",
"price_change": 10,
"threshold_one": 7
}
],
"default_pass_through_taxes_collection_type": "NO_AIRBNB_COLLECTED_TAX",
"allowed_pass_through_taxes_collection_types": [
"NO_AIRBNB_COLLECTED_TAX"
]
}
}
}Booking Settings
Instant Book rules, check-in and check-out times, cancellation policies, guest controls, listing expectations.
Update the booking settings of an Airbnb listing: Instant Book rules, check-in and check-out times, cancellation policies, guest controls, and the expectations guests must agree to before booking. The listing is addressed by the rate plan mapping given in channel_rate_plan_id.
The settings are submitted to Airbnb, merged into the settings stored on the mapping, and returned; an ARI synchronization of the mapping is performed in the background. Submitting settings identical to the stored ones succeeds without changes.
For Airbnb channel connections; other channels receive 400 Bad Request.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Booking settings update for an Airbnb listing.
716305c4-561a-4561-a187-7f5b8aeb5920The request has succeeded.
JSON:API document wrapping a single resource.
The request has missing or invalid arguments; details lists the reasons.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The request has missing or invalid arguments; details lists the messages per argument.
A backing service is temporarily unavailable; retry the request later.
PUT /api/v1/channels/{channel_id}/execute/update_booking_setting HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 695
{
"channel_rate_plan_id": "b217a47d-c282-4591-a873-7758f2883237",
"data": {
"instant_booking_allowed_category": "everyone",
"instant_book_welcome_message": "text",
"check_in_time_start": "13",
"check_in_time_end": "16",
"check_out_time": 11,
"cancellation_policy_settings": {
"cancellation_policy_category": "flexible",
"lts_cancellation_policy_id": "CANCEL_LONG_TERM_FAIR",
"non_refundable_price_factor": 1
},
"guest_controls": {
"allows_children_as_host": true,
"allows_infants_as_host": true,
"children_not_allowed_details": "text",
"allows_pets_as_host": true,
"pet_capacity": 1,
"allows_smoking_as_host": true,
"allows_events_as_host": true
},
"listing_expectations_for_guests": [
{
"type": "requires_stairs",
"added_details": "text"
}
]
}
}{
"data": {
"instant_booking_allowed_category": "everyone",
"instant_book_welcome_message": "text",
"check_in_time_start": "13",
"check_in_time_end": "16",
"check_out_time": 11,
"cancellation_policy_settings": {
"cancellation_policy_category": "flexible",
"lts_cancellation_policy_id": "CANCEL_LONG_TERM_FAIR",
"non_refundable_price_factor": 1
},
"guest_controls": {
"allows_children_as_host": true,
"allows_infants_as_host": true,
"children_not_allowed_details": "text",
"allows_pets_as_host": true,
"pet_capacity": 1,
"allows_smoking_as_host": true,
"allows_events_as_host": true
},
"listing_expectations_for_guests": [
{
"type": "requires_stairs",
"added_details": "text"
}
]
}
}Promotions
List the promotions of the connection's listings, and enable or disable one on a listing.
List the promotions of the channel connection's Airbnb listings. The promotions are requested from Airbnb for every mapped listing and merged with the promotions recorded on the connection's rate plan mappings.
For Airbnb channel connections; other channels receive 403 Forbidden.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920The request has succeeded.
A plain data-array envelope without pagination — used by reference/dictionary endpoints.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
A backing service is temporarily unavailable; retry the request later.
GET /api/v1/channels/{channel_id}/promotions HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Accept: */*
{
"data": [
{
"type": "promotion",
"attributes": {
"status": "ONGOING",
"type": "NEW_LISTING_PROMOTION",
"listing_id": "123456789"
}
}
]
}Enable a promotion on an Airbnb listing of the channel connection. The promotion is submitted to Airbnb; the response reports it as ONGOING.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Request body of the promotion enable and disable actions.
The request has succeeded.
JSON:API document wrapping a single resource.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The request has missing or invalid arguments; details lists the messages per argument.
A backing service is temporarily unavailable; retry the request later.
POST /api/v1/channels/{channel_id}/promotions/enable HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 71
{
"promotion": {
"type": "NEW_LISTING_PROMOTION",
"listing_id": "123456789"
}
}{
"data": {
"type": "promotion",
"attributes": {
"status": "ONGOING",
"type": "NEW_LISTING_PROMOTION",
"listing_id": "123456789"
}
}
}Disable a promotion on an Airbnb listing of the channel connection. The promotion is withdrawn from Airbnb; the response reports it as AVAILABLE again.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Request body of the promotion enable and disable actions.
The request has succeeded.
JSON:API document wrapping a single resource.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The request has missing or invalid arguments; details lists the messages per argument.
A backing service is temporarily unavailable; retry the request later.
POST /api/v1/channels/{channel_id}/promotions/disable HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 71
{
"promotion": {
"type": "NEW_LISTING_PROMOTION",
"listing_id": "123456789"
}
}{
"data": {
"type": "promotion",
"attributes": {
"status": "ONGOING",
"type": "NEW_LISTING_PROMOTION",
"listing_id": "123456789"
}
}
}Opportunities
Airbnb suggests per-listing improvements and discount programs — opportunities. List them and apply one to listings:
List the Airbnb opportunities available to the connection's listings: suggested improvements and discount programs, each with its input fields, their value constraints, the listings it applies to, and the share of listings that already completed it. The opportunities are requested from Airbnb, all pages included.
For Airbnb channel connections; other channels receive 400 Bad Request.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920The request has succeeded.
JSON:API document wrapping a single resource.
The request cannot be processed in the current state.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The channel could not return the details; errors carries the reason the channel reported, or null when it gave none.
A backing service is temporarily unavailable; retry the request later.
GET /api/v1/channels/{channel_id}/action/get_opportunities HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Accept: */*
{
"data": {
"opportunities": [
{
"id": "OLYMPUS_WEEKLY_DISCOUNT",
"type": "OLYMPUS_WEEKLY_DISCOUNT",
"title": "Offer weekly discounts",
"description": "text",
"input_fields": [
{
"key": "losSettings.minNights",
"key_label": "text",
"value_constraint": {
"value_type": "PERCENTAGE",
"min_value": "text",
"max_value": "text",
"options": [
"text"
]
}
}
],
"activation_modes": [
"API",
"MANUAL"
],
"activation_url": "text",
"applicable_listing_ids": [
"text"
],
"host_completion_percentage": 1
}
]
}
}Apply an Airbnb opportunity to listings of the channel connection. The application is submitted to Airbnb with the values given in input_fields, where the opportunity defines any.
For Airbnb channel connections; other channels receive 400 Bad Request.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Request payload of an opportunity application.
The request has succeeded.
JSON:API document wrapping a single resource.
Airbnb's response to the opportunity application. Reports success: true when the opportunity is applied.
The request cannot be processed in the current state.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The channel could not return the details; errors carries the reason the channel reported, or null when it gave none.
A backing service is temporarily unavailable; retry the request later.
POST /api/v1/channels/{channel_id}/action/apply_opportunity HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 95
{
"opportunity": {
"opportunity": "OLYMPUS_IRON_AMENITY",
"listing_ids": [
"text"
],
"input_fields": {}
}
}{
"data": {}
}Checkout Tasks
What departing guests are asked to do — read and update per listing:
Retrieve the checkout tasks of an Airbnb listing — what departing guests are asked to do. The tasks are requested from Airbnb and keyed by their canonical uppercase names (RETURN_KEYS, TURN_THINGS_OFF, …); tasks that were never set are absent.
For Airbnb channel connections; other channels receive 400 Bad Request.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Airbnb listing ID.
The request has succeeded.
JSON:API document wrapping a single resource.
The request cannot be processed in the current state.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The channel could not return the details; errors carries the reason the channel reported, or null when it gave none.
A backing service is temporarily unavailable; retry the request later.
GET /api/v1/channels/{channel_id}/action/get_checkout_tasks?listing_id=text HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Accept: */*
{
"data": {
"checkout_tasks": {}
}
}Update the checkout tasks of an Airbnb listing. The submitted map is sent to Airbnb as the complete set of tasks, keyed by the lowercase task names (return_keys, turn_things_off, throw_trash, lock_up, gather_towels, additional_requests); the response returns the submitted tasks.
For Airbnb channel connections; other channels receive 400 Bad Request.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Airbnb listing ID.
The checkout tasks of an Airbnb listing, keyed by task. The tasks:
return_keys, turn_things_off, throw_trash, lock_up,
gather_towels, additional_requests.
The request has succeeded.
JSON:API document wrapping a single resource.
The request cannot be processed in the current state.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The channel could not return the details; errors carries the reason the channel reported, or null when it gave none.
A backing service is temporarily unavailable; retry the request later.
POST /api/v1/channels/{channel_id}/action/update_checkout_tasks?listing_id=text HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 21
{
"checkout_tasks": {}
}{
"data": {
"checkout_tasks": {}
}
}Listing Calendar API
Retrieve the availability and pricing calendar of an Airbnb listing for a date range, day by day: availability with its type and sub-type, price, stay restrictions, and closed-to-arrival and closed-to-departure flags.
The calendar is requested from Airbnb. For Airbnb channel connections; other channels receive 400 Bad Request.
API key for programmatic access, sent in the user-api-key header.
Channel connection ID.
716305c4-561a-4561-a187-7f5b8aeb5920Airbnb listing ID.
First day of the range.
Last day of the range.
The request has succeeded.
JSON:API document wrapping a single resource.
The request cannot be processed in the current state.
Authentication credentials are missing or invalid.
The authenticated user lacks permission to perform this action.
The requested resource does not exist.
The channel could not return the details; errors carries the reason the channel reported, or null when it gave none.
A backing service is temporarily unavailable; retry the request later.
GET /api/v1/channels/{channel_id}/action/get_listing_calendar?listing_id=text&date_from=2026-01-01&date_to=2026-01-01 HTTP/1.1
Host: app.channex.io
user-api-key: YOUR_API_KEY
Accept: */*
{
"data": {
"calendar": {
"days": [
{
"date": "2026-01-01",
"availability": "unavailable",
"availability_type": "busy",
"availability_sub_type": "host_busy",
"available_count": 1,
"closed_to_arrival": true,
"closed_to_departure": true,
"daily_price": 1,
"max_nights": 1,
"min_nights": 1,
"notes": "text"
}
],
"start_date": "2026-01-01",
"end_date": "2026-01-01",
"host_id": 1,
"host_id_str": "text",
"listing_currency": "EUR",
"listing_id": 1,
"listing_id_str": "text"
},
"success": null
}
}Airbnb Booking Requests
Most Airbnb reservations are instant: the guest books, and the booking reaches you as a regular new booking. Three situations instead produce a request that waits for your decision:
Inquiry
Asked about a stay without booking it
Pre-approve or send a special offer
Reservation request
Asked to book, rather than booking instantly
Accept or decline
Alteration request
Asked to change an existing booking
Accept, decline, or cancel
All three arrive as live feed events and are answered through a single endpoint: POST /api/v1/live_feed/{id}/resolve.
Receiving requests
Requests reach you in two ways, and both refer to the same live feed event.
Webhooks
Subscribe a webhook to the event kinds you handle:
inquiry
A guest inquiry needs an answer
reservation_request
A reservation request needs a decision
alteration_request
An alteration request needs a decision
accepted_reservation
A reservation request was accepted
declined_reservation
A reservation request was declined
See the Webhooks resource for creating and testing subscriptions.
Live Feed API
Poll or re-read requests directly:
GET /api/v1/live_feed is paginated and also accepts filter[property_id], filter[channel_id], filter[group_id] and order[inserted_at]. Events are returned newest first.
Every resolvable event carries payload.resolved. Once a decision has been made, payload.resolution and payload.comment record the outcome and who made it.
Inquiries additionally appear as a system message in the guest's message thread; that message's meta carries the live_feed_event_id of the inquiry, so a messaging integration can answer an inquiry from the thread it arrived in. See the Message Threads resource.
Answering a request
Every answer is the same call — the event ID in the path, a resolution object in the body:
What goes into resolution depends on the request you are answering. All supported decisions:
Request kind
Decision
resolution
Reservation request
Accept
{"accept": true}
Reservation request
Decline
{"accept": false, "reason": "dates_not_available"}
Inquiry
Pre-approve
{"type": "preapproval", "block_instant_booking": true}
Inquiry
Send a special offer
{"type": "special_offer", "total_price": 450}
Alteration request
Accept
{"accept": "accept"}
Alteration request
Decline
{"accept": "decline"}
Alteration request
Withdraw the request
{"accept": "cancel"}
Note that accept is a boolean for reservation requests and a string for alteration requests, and that an inquiry is answered with type rather than accept. Optional fields — decline messages, block_instant_booking — are covered in the section for each request kind below.
The response is the event itself, with payload updated to reflect the decision:
Rules that apply to every kind of request:
Only the three request kinds above can be resolved. Any other event kind is rejected with
422 not_supported.A decision is final. Resolving an event that is already resolved returns it unchanged, so a decision cannot be revised afterwards.
Fields belonging to another request kind are ignored, so a stray field will not raise an error — double-check you sent the right one.
Errors
401
Missing or invalid API key
404
No live feed event with this ID is visible to you
422 bad_request
The request body is malformed
422 validation_error
The resolution was rejected
422 not_supported
This event kind cannot be resolved
503
The channel service is temporarily unavailable — retry
Reservation request
A reservation request (also called Request to Book) is a guest asking to book instead of booking instantly. You have 24 hours to answer. Airbnb blocks the requested dates for that window so the stay cannot be double-sold while you decide.
Connected listings are instant-book by default, but a request still arrives when, for example:
the guest books within 48 hours of check-in and picks a custom check-in window outside the listing's check-in times;
the guest books inside the listing's booking lead time;
the guest does not meet the guest requirements set for instant bookings;
the requested stay is longer than the maximum nights allowed for instant bookings, or longer than a seasonal rule permits;
the booking falls in an extended availability window or a period opened by an availability override;
Airbnb flags the booking as a party risk, or the listing is set up for requests only.
Event payload
bms describes the stay being requested — dates, rooms, guests and prices — in the same attribute format as a booking revision. See the Booking Revisions resource.
Accept
Accepting triggers a charge on the guest's payment method. If the charge fails, the guest gets 24 hours to fix it before the request is voided. Airbnb then re-checks availability and confirms the stay.
Two notifications follow, and they arrive at different times:
accepted_reservation— immediately, confirming your decision was passed to Airbnb.booking_new(plus the genericbookingwebhook) — once Airbnb confirms the stay, which is when the booking itself is created. Until then no booking exists in Channex.
Decline
accept
false to decline
reason
Why you are declining: dates_not_available, not_a_good_fit, waiting_for_better_reservation, not_comfortable. Defaults to not_comfortable
decline_message_to_guest
Shown to the guest
decline_message_to_airbnb
Sent to Airbnb only
Declining sends a declined_reservation webhook. No booking is created.
The dates may stay blocked. If you decline because the dates are unavailable, or let the request expire without answering, Airbnb keeps the dates blocked until you make them available again. Declines for other reasons release the dates.
Once resolved, the event's payload.resolution reads accepted or declined, and payload.comment records who decided and when.
Inquiry
An inquiry is a guest who picked dates and messaged you instead of booking. You answer it with a pre-approval or a special offer — those are the only two answers — and the guest has 24 hours to accept, which confirms the reservation immediately. To turn a guest down, leave the message unanswered.
Event payload
booking_details holds the stay the guest asked about, including guest counts and the listing currency. status carries the inquiry's status as it arrived from Airbnb; once you answer, it names what you sent instead.
Pre-approval
An invitation to book at the listing's current price, for exactly the dates and guest count in the inquiry:
type
preapproval
block_instant_booking
Blocks other guests from taking the same dates through Instant Book while the pre-approval is pending. Defaults to false
Things to know about pre-approvals:
You cannot change the price, dates or guest count — only the guest's own inquiry terms can be pre-approved.
The resulting reservation shows a single total instead of a fee breakdown; only the cleaning fee is itemised.
Because there is no breakdown, later alterations to such a reservation do not recalculate standard fees. Be careful when altering a pre-approved booking.
Special offer
A custom price for the stay, which may also differ from the inquiry in dates:
type
special_offer
total_price
Required. Total price of the whole stay as a whole number in the listing's currency
Things to know about special offers:
total_priceis a whole number in the listing's currency and must cover all nights and all standard fees, including the cleaning fee. Airbnb does not apply the listing's pricing rules to it and does not add fees on top.Do not include taxes or a security deposit.
The Airbnb service fee is deducted from this amount — you receive the price you set minus that fee.
The listing's availability rules still apply, so check them before sending the offer.
block_instant_bookingdoes not apply to special offers.A special offer carries a total guest count, not a per-category breakdown.
After you answer
An inquiry has only these two outcomes. There is no way to decline one: if you do not want the guest, leave the message unanswered and the inquiry lapses on its own.
The guest has 24 hours to accept. An offer cannot be withdrawn or changed afterwards.
If the guest accepts, the stay arrives as an ordinary new booking (
booking_new) — there is no event that ties it back to the offer.Nothing is delivered when an offer expires or the guest declines it.
If you send a second offer without the first being accepted, the guest only sees the most recent one; the earlier offer cannot be accepted and expires within 24 hours.
Sending offers for the same dates to several guests is possible; the first guest to accept gets the booking.
Once answered, the event's payload.status names what you sent (preapproval or special_offer), payload.resolution holds the resolution you submitted, and payload.comment records who answered and when.
Alteration request
An alteration request is a guest asking to change a booking that is already confirmed — its dates, guest count or price.
Event payload
bms describes the booking as it would be after the change, and carries the booking_id of the booking being altered, so you can compare it against what you hold. See the Booking Revisions resource.
Accept, decline or cancel
Unlike a reservation request, accept here takes a string:
"accept"
The change is applied
"decline"
The guest's request is refused; the booking stays as it is
"cancel"
The request is withdrawn rather than answered, which Airbnb records as CANCELED
Use decline to refuse a change a guest asked for; cancel withdraws an alteration that originated on your side.
Once resolved, the event's payload.status reports the outcome as ACCEPTED, DECLINED or CANCELED, and payload.comment records who decided and when. payload.resolution holds the value you sent — or accepted / cancelled when the request was resolved on Airbnb instead.
What follows
Accepting does not create a new booking. Once Airbnb confirms the change, the existing booking is updated with a new revision, and you receive
booking_modification(plus the genericbookingwebhook). Compare the new revision against what you hold to see what changed.Declining or cancelling sends no notification at all. The only record of the outcome is the live feed event itself, so re-read it with
GET /api/v1/live_feed/{id}to confirm your decision was stored.The guest can also withdraw the request on Airbnb before you answer. The event is then marked resolved on its own, again without a notification, so an unanswered request is worth re-reading before acting on it.
Related resources
Live Feed — listing, reading and resolving events.
Webhooks — subscribing to request notifications.
Booking Revisions — the
bmsformat used by reservation and alteration requests.Message Threads — the guest conversation an inquiry or request arrived in.
Bookings — the booking created when a request or offer is accepted.
Last updated