Skip to main content

[AirHost API] Overview of "In-house System" implementation

J
Written by Joelly See Toh

[ overview ]

This article explains the development procedure for developing an in-house system that retrieves reservation information from the AirHost API and provides functions that are not provided by AirHost PMS, such as accounting and cleaning management. 

Basically, reservation information is read-only. It is not an API for creating a check-in app. If you would like to use advance check-in or self-check-in, please use the check-in option provided by AirHost.

Note 1 : You can retrieve all reservation information including OTA reservations using AirHost API. However, you can only update reservation information created from your system via API.

Note 2: If you are planning to send messages to guests, please understand that this is difficult to achieve. The reason is that for OTAs such as Airbnb, Booking.com, and Rakuten Travel, where messages can only be sent and received via API, email address information is not included in the reservation information.

Note 3 : It is possible to obtain reservation information, but it is not possible to obtain guest information obtained during advance check-in or message exchanges with guests.

[Details]

Implementation image

Please make sure to design your system so that a copy of the facility and reservation data obtained from the AirHost API is kept in your internal database. You cannot implement a system that retrieves real-time data via API each time.

Processing Steps

  1. Initial data acquisition

    1. Call GET /properties to get information for all properties and keep a copy in the local DB.

    2. Call GET /stays to get the reservation data and keep a copy in the local DB.

  2. Keeping data up to date

    1. To keep the facility and reservation information stored in the local DB up to date, call GET /feeds at intervals such as every 5 minutes to check the "event" information and update it in the local DB as necessary.

  3. Full Scan

    1. You can ensure data consistency by retrieving all future bookings with GET /stays about once a day.

  4. Displaying information on an internal system page

    1. Please use the data in the local DB to display information on your company's internal system. If you design it to call the AirHost API every time, it will not work due to access restrictions.

  5. Creating reservation data

    1. You can also create reservations from your internal system via the API by calling POST /stays.

    2. Reservations created via POST /stays can also be updated via PUT /room_reservations/{id}. *Other reservations, such as OTA reservations, cannot be updated.

API Documentation and Available Endpoints

*The only APIs available in the "API for internal systems" package are listed below.

  • GET /properties

  • POST /stays

  • GET /feeds (all events available except availabilities.update)

  • POST /commit_feeds

  • GET /stays (gets all reservations, including OTA reservations)

  • POST /stays

  • PUT /room_reservations/{id} (only for reservations created with POST /stays)


About the RoomReservation API Guest Count Fields(2026.05.11)

The guest count fields in the RoomReservation API are mapped based on each OTA’s own guest classification and definitions.

AirHost aggregates reservation data from multiple OTAs, but each OTA defines “child,” “infant,” and child sub-categories (ChildA–D) differently.
Therefore, the API does not provide a unified semantic definition, but instead returns the result of the OTA-specific mapping as accurately as possible.

As a result, the same field may have different meanings depending on the source OTA of the reservation.

Basic Meaning of Each Field

Standard Guest Count Fields

  • adult_count
    Number of adults

  • child_count
    Number of children (excluding infants)

  • infant_count
    Number of infants

ChildA – ChildD Fields

child_a_count through child_d_count are a more detailed breakdown of child_count based on the Japanese hotel / ryokan industry age-tier convention.

  • child_a_count
    Roughly upper elementary school age (~10–12 years old, ~70% meal, adult-size bedding)

  • child_b_count
    Roughly lower elementary school age (~6–9 years old, ~50% meal, adult-size bedding)

  • child_c_count
    Preschool child with meal and futon

  • child_d_count
    Preschool child with meal only and no futon

Relationship Between child_d_count and Co-Sleeping

On some OTAs (Rakuten Travel, Ikyu, and Temairazu), child_d_count is used with the meaning of “no bedding required.”
Therefore, it is roughly treated as equivalent to “co-sleeping.”

However, because the definition differs by OTA, child_d_count cannot be considered a completely reliable indicator of co-sleeping guests.

Reasons

  • Numeric-age OTAs such as Booking.com / Expedia / Opera never generate child_d_count

  • The “no meal, no bedding (ChildF)” category in Rakuten Travel / Ikyu is dropped during normalization

  • On Temairazu, the same count may be written into both infant_count and child_d_count

  • On Rakuten Travel / Ikyu, infant_count itself may include infant categories that require bedding

For these reasons, neither infant_count nor child_d_count should be interpreted directly as “co-sleeping guest count.”

Among currently supported OTAs, Airbnb’s infant_count is the most reliable field for bedding planning purposes because it has relatively clear “Under 2 years old” semantics.

Relationship Between child_count and ChildA–D

Important Note

The following relationship does not guarantee strict equality:

child_a + child_b + child_c + child_d ≤ child_count

In practice, both < and > cases can occur.

This is because ChildA–D is not a strict partition of child_count, but rather a best-effort categorization based on OTA-provided data.

Cases Where the A–D Total Is Less Than child_count (<)

For numeric-age OTAs (Booking.com / Expedia / Opera, etc.), AirHost performs the following approximate mapping:

  • Ages 6–12 → ChildA

  • Ages 3–6 → ChildB

However, ages under 3 or over 12 are excluded from ChildA–D.

Example

  • One 5-year-old guest

  • One 13-year-old guest

Result:

  • child_count = 2

  • child_a + child_b + child_c + child_d = 1

This happens because the 13-year-old falls outside the ChildA–D mapping range and is excluded.

Cases Where the A–D Total Is Greater Than child_count (>)

On Japanese OTAs (Ikyu, Rakuten Travel, Temairazu), infant categories that are excluded from the OTA’s own child_count may still appear in the ChildA–D breakdown.

Example (Ikyu)

On Ikyu:

child_count = ChildA + ChildB

However, child_a/b/c/d_count also includes ChildC and ChildD.

As a result:

child_a + child_b + child_c + child_d > child_count

can occur.

Important Notes

  • Treat child_count as “the OTA’s own definition of children”

  • Treat child_a/b/c/d_count as a best-effort conversion into Japanese hotel industry-style child categories

  • Do not assume that these values will always match or sum consistently


Did this answer your question?