StructurrAI
API Reference

StructurrAI Documentation

Programmatic access to the StructurrAI canonical hotel and room mapping catalog. Pull static inventory, sync incremental changes, and resolve supplier room descriptions to canonical room codes. One api-key header authenticates every call.

What you can do

Real-time mapping updates
Standardised hotels across all major suppliers
Paginated hotel search and by-ID lookups of up to 1,000 hotels per call
Incremental added / updated / deleted sync APIs
Room mapping with explainable extractions

Endpoint groups

Geography2 endpoints

Look up the country and city codes that every other endpoint expects.

Bulk City Search2 endpoints

Pull every StructurrAI hotel in a city in one unpaginated response, with either supplier mappings or static content. StructurrAI offers two ways to fetch the same hotel data, because integrations differ: some customers prefer to pull a whole city in a single call, others prefer to page through results. Use this bulk option or Paginated Queries, whichever fits your system.

Keep a local copy of the catalog in sync. Pull the ids of hotels added, updated, or deleted since your last sync, then fetch their details with Hotel Static Data by IDs and Hotel Provider Data by IDs.

Page through the hotel ids in a city (1 city per call), then fetch static content or supplier mappings for up to 1,000 ids per call. This is the page-by-page alternative to Bulk City Search. Both return the same hotel data; choose whichever way of fetching suits your integration.

Room Mapping2 endpoints

Resolve a list of supplier room descriptions to StructurrAI canonical room codes.

Authentication

From your API key to your first API call in three steps.

Your api_key authenticates every endpoint on this page. Send it in theapi-keyheader and you’re live.

01

Receive your API key

Issued by the StructurrAI team after onboarding. Long-lived, one per account.

02

api-key header

api-key: <your_api_key> on every request. Missing or invalid returns 401.

03

Response envelope

All responses wrap in { success, message, data, errors }. HTTP status is the source of truth.

Base URL
https://api.structurrai.com
Auth header (every request)
api-key: <your_api_key>
Scroll down for every API, or jump straight to a section using the sidebar.

Geography

Look up the country and city codes that every other endpoint expects.

Fetch Countries

GET/api/v2/countriesOpen in Postman

Returns every country StructurrAI supports, along with its StructurrAI country_code. Example country codes: SI-IN for India, SI-AE for the United Arab Emirates. Call this once on first integration to discover the available regions.

Request

No parameters required.

Response

• country_code is the value to pass as country_id to Fetch Cities.

Fetch Cities

GET/api/v2/citiesOpen in Postman

Returns every city StructurrAI maps within a country. Each city has a city_code that every hotel endpoint accepts. Cities also carry synonyms (alternate names the city is known by) and a parent_city_code for satellite cities, e.g. Ghaziabad points to Delhi. Whether a search on the parent city should include its satellites is up to your implementation.

Request

Parameters
  • country_idrequiredstringquery

    StructurrAI country code from Fetch Countries, e.g. SI-IN. country_code is accepted as an alias. Unknown or missing codes return 404 "Country not found".

    country_id=SI-IN

Response

• parent_city_code is set only for satellite cities; otherwise null. • synonyms can be an empty list.

Change Data Capture (CDC)

Keep a local copy of the catalog in sync. Pull the ids of hotels added, updated, or deleted since your last sync, then fetch their details with Hotel Static Data by IDs and Hotel Provider Data by IDs.

Fetch Added Hotels

GET/api/v2/addedhotelsOpen in Postman

Returns the ids of hotels newly added to the StructurrAI catalog since a given date. Pass the date of your last successful sync to pull only the delta. Note: this endpoint is enabled once your account is in production and integrated for periodic updates.

Request

Parameters
  • last_updated_daterequiredstring (YYYY-MM-DD)query

    Lower bound for the date filter, in ISO YYYY-MM-DD format. Pass the date of your last successful sync to fetch only the delta. Missing or malformed dates return 422.

    last_updated_date=2025-09-24
  • pageoptionalintegerquery

    Zero-based page number. Defaults to 0.

    page=0
  • page_sizeoptionalintegerquery

    How many hotel ids to return per page, 1 to 100. Defaults to 50. Values outside that range return 422. Keep incrementing page until a page returns fewer ids than page_size.

    page_size=50

Response

• hotel_ids holds the ids on this page. Keep paging until a page returns fewer ids than page_size. • last_updated_date echoes the date you sent.

Fetch Updated Hotels

GET/api/v2/updatedhotelsOpen in Postman

Returns the ids of hotels whose canonical attributes (name, address, geo, supplier mappings) changed since a given date. Re-fetch those hotels to get their current state. Note: this endpoint is enabled once your account is in production and integrated for periodic updates.

Request

Parameters
  • last_updated_daterequiredstring (YYYY-MM-DD)query

    Lower bound for the date filter, in ISO YYYY-MM-DD format. Pass the date of your last successful sync to fetch only the delta. Missing or malformed dates return 422.

    last_updated_date=2025-09-24
  • pageoptionalintegerquery

    Zero-based page number. Defaults to 0.

    page=0
  • page_sizeoptionalintegerquery

    How many hotel ids to return per page, 1 to 100. Defaults to 50. Values outside that range return 422. Keep incrementing page until a page returns fewer ids than page_size.

    page_size=50

Response

• hotel_ids holds the ids on this page. Keep paging until a page returns fewer ids than page_size. • last_updated_date echoes the date you sent.

Fetch Deleted Hotels

GET/api/v2/deletedhotelsOpen in Postman

Returns the ids of hotels removed from the StructurrAI catalog since a given date. Remove the matching rows from your inventory before serving search results. Note: this endpoint is enabled once your account is in production and integrated for periodic updates.

Request

Parameters
  • last_updated_daterequiredstring (YYYY-MM-DD)query

    Lower bound for the date filter, in ISO YYYY-MM-DD format. Pass the date of your last successful sync to fetch only the delta. Missing or malformed dates return 422.

    last_updated_date=2025-09-24
  • pageoptionalintegerquery

    Zero-based page number. Defaults to 0.

    page=0
  • page_sizeoptionalintegerquery

    How many hotel ids to return per page, 1 to 100. Defaults to 50. Values outside that range return 422. Keep incrementing page until a page returns fewer ids than page_size.

    page_size=50

Response

• hotel_ids holds the ids on this page. Keep paging until a page returns fewer ids than page_size. • last_updated_date echoes the date you sent.

Paginated Queries

Page through the hotel ids in a city (1 city per call), then fetch static content or supplier mappings for up to 1,000 ids per call. This is the page-by-page alternative to Bulk City Search. Both return the same hotel data; choose whichever way of fetching suits your integration.

Hotel Static Data by IDs

POST/api/v2/hotel/data/staticOpen in Postman

Returns enriched static content for specific StructurrAI hotels: canonical name and address, geo coordinates, description, hero and gallery images, star rating, review rating, nearby attractions, amenities, and check-in/check-out times.

Request

Parameters
  • standardized_hotel_idsrequiredarray of stringsbody

    A list of 1 to 1000 StructurrAI hotel ids, as returned by Paginated Hotel Search or the CDC endpoints. Empty lists and lists over 1000 ids return 422. Unknown ids are silently skipped, so the response may contain fewer entries than you sent.

Request body
{
  "standardized_hotel_ids": ["2127320", "2127744", "2129299"]
}

Response

• latitude / longitude are returned as decimal strings, and can be null if the hotel isn't geocoded yet. • Content fields (description, images, ratings, times, lists) can be null or empty when the content isn't available. • star_rating is 1–5; review_rating is a guest score on a 0–5 scale. • nearby_attractions and amenities_facilities are ";"-separated strings. Split on ";" to get individual entries. • check_in_time / check_out_time use 24-hour HH:mm.

Hotel Provider Data by IDs

POST/api/v2/hotel/data/providerOpen in Postman

Returns the canonical record and every mapped supplier hotel for specific StructurrAI hotels. Use it to join your supplier feeds to StructurrAI hotel ids.

Request

Parameters
  • standardized_hotel_idsrequiredarray of stringsbody

    A list of 1 to 1000 StructurrAI hotel ids, as returned by Paginated Hotel Search or the CDC endpoints. Empty lists and lists over 1000 ids return 422. Unknown ids are silently skipped, so the response may contain fewer entries than you sent.

Request body
{
  "standardized_hotel_ids": ["2127320"]
}

Response

• standardized_hotel_id is the stable key for a hotel. Use it with every other endpoint. • latitude / longitude are returned as decimal strings, and can be null if the hotel isn't geocoded yet. • provider_details lists every supplier hotel mapped into this hotel. supplier_hotel_id is the hotel's id in that supplier's system. • supplier_city_code and supplier_city can be null when the supplier doesn't send them.

Room Mapping

Resolve a list of supplier room descriptions to StructurrAI canonical room codes.

Website Room Match

POST/api/v2/room-mappings/website-matchOpen in Postman

Different suppliers describe the same physical room differently. This endpoint goes beyond reconciling those supplier descriptions: it matches each supplier room against the actual rooms the hotel publishes on its own website, then groups them under a single canonical StructurrAI room code. Each supplier room is also matched against StructurrAI's website-grade rooms, which further improves mapping accuracy. Use it when you want supplier rooms resolved to the canonical rooms a hotel actually publishes on its own website, for the highest-fidelity mapping and richer official metadata. The API returns one entry per canonical room. Each entry carries the structured attributes plus a list of every input room (with its original index, and when supplied, supplier_name and hotel_id) that was matched into that group. Important: A single API call must contain rooms belonging to one unique hotel. Send a separate request per hotel. Mixing rooms from multiple hotels in one request is not supported and will produce incorrect groupings.

Request

Parameters
  • roomsrequiredarray of objectsbody

    The list of supplier rooms to map. Send at least 1 room. Each object has the four fields documented underneath.

    Object fields
    • namerequiredstring

      The exact room description as it appears in the supplier's inventory. This is the raw text the API extracts attributes from. Pass it verbatim, no manual cleanup or normalization needed. Examples: "Deluxe King Room with City View, Non-Smoking", "Superior Double - Sea View", "Standard Twin Room". Any non-empty string is accepted. Longer, more descriptive strings tend to produce more accurate mappings because the extractor has more signal to work with.

    • hotel_idrequiredstring

      Required. The StructurrAI hotel id (structurrai_hotel_id) whose website rooms this call matches against. It tells StructurrAI which hotel website listing to resolve each supplier room to, so it must be present on every room. The value flows through unchanged into the response. Pass it as a string even if the underlying id is numeric. A single call must contain rooms from one unique hotel, so send the same hotel_id on every room.

    • supplier_nameoptionalstring

      Optional. The supplier the room came from, for example "supplier1" or "supplier2". Use a stable identifier per supplier across calls. When provided, the response carries supplier_name verbatim, so downstream consumers can re-attribute each grouped room back to its origin. Omit when you do not need supplier attribution in the response.

    • indexrequiredinteger

      A unique sequential identifier for this room within the request. Must be 1 for the first room, 2 for the second, and so on up to N for the last. Strictly ascending, no gaps, no duplicates. Requests where indexes are missing, repeated, or out of order are rejected with 400. Why: index is your handle for correlating request rooms with response groups. Every room in the response carries its original index, so you can stitch the mapped output back to your original input list without depending on the room name (which may have been reformatted) or on the position in the response array (which is reordered by clustering).

Request body
{
  "rooms": [
    { "name": "Deluxe Room, 1 King Bed (City View)",                "index": 1,  "hotel_id": "9054312", "supplier_name": "supplier1" },
    { "name": "Deluxe Room, 1 King Bed (City View),NonSmoking",     "index": 2,  "hotel_id": "9054312", "supplier_name": "supplier1" },
    { "name": "Deluxe Room, 1 King Bed (Family),NonSmoking",        "index": 3,  "hotel_id": "9054312", "supplier_name": "supplier1" },
    { "name": "Deluxe Room, 1 King Bed (Grand),NonSmoking",         "index": 4,  "hotel_id": "9054312", "supplier_name": "supplier1" },
    { "name": "Deluxe Room, 1 King Bed (High Floor),NonSmoking",    "index": 5,  "hotel_id": "9054312", "supplier_name": "supplier1" },
    { "name": "Deluxe Room, 1 King Bed (with sofa bed)",            "index": 6,  "hotel_id": "9054312", "supplier_name": "supplier1" },
    { "name": "Deluxe Room, 1 King Bed (with sofa bed),NonSmoking", "index": 7,  "hotel_id": "9054312", "supplier_name": "supplier1" },
    { "name": "Deluxe Room, 1 King Bed, Balcony",                   "index": 8,  "hotel_id": "9054312", "supplier_name": "supplier1" },
    { "name": "Deluxe Room, 1 King Bed, Balcony,NonSmoking",        "index": 9,  "hotel_id": "9054312", "supplier_name": "supplier1" },
    { "name": "Deluxe Room, 1 King Bed, Bay View,NonSmoking",       "index": 10, "hotel_id": "9054312", "supplier_name": "supplier1" }
  ]
}

Response

data.results contains one entry per canonical room group. Each entry carries the structured attributes plus a rooms[] array listing every input room that was clustered into that group. To stitch results back to your input list, look up by the index field.

Response fields
  • successboolean

    True when the call completed without error.

  • messagestring

    Human-readable status text. Useful for log lines.

  • data.hotel_idinteger

    Currently a placeholder reserved for future use. Always returns 0. The real hotel_id for each grouped room is on data.results[].rooms[].hotel_id.

  • data.results[]array of objects

    One entry per canonical room group. The number of entries depends on how many distinct rooms StructurrAI detected in your input.

  • data.results[].structurrai_room_codestring

    The canonical room id assigned by StructurrAI. Stable across calls. Use this as the primary key when storing or pricing rooms.

  • data.results[].room_namestring

    The cleaned canonical room name (e.g. "Deluxe King Room"). Distilled from the supplier descriptions.

  • data.results[].type_of_accomodationstring

    The kind of unit. Typical values: "Room", "Suite", "Villa", "Apartment".

  • data.results[].room_categorystring

    The quality tier extracted from supplier text (e.g. "Standard", "Superior", "Deluxe", "Premium", "Executive").

  • data.results[].bed_typestring

    The bed configuration (e.g. "King", "Queen", "Twin", "Double"). Null when the supplier text did not specify a bed type.

  • data.results[].view_typestring

    The view descriptor (e.g. "City View", "Sea View", "Pool View", "Garden View"). Null when no view was specified.

  • data.results[].bed_countstring

    Number of beds in the room, returned as a string (e.g. "1", "2", or "1 or 2" when the supplier description was non-numeric).

  • data.results[].bedroom_countinteger or null

    Number of separate bedrooms in the unit. Relevant for suites, villas, and apartments. Null when the supplier text did not specify.

  • data.results[].family_roomboolean

    True when the unit is marketed as a family room.

  • data.results[].family_suiteboolean

    True when the unit is marketed as a family suite.

  • data.results[].family_villaboolean

    True when the unit is marketed as a family villa.

  • data.results[].guest_roomboolean

    True when the unit is explicitly described as a guest room.

  • data.results[].master_suiteboolean

    True when the unit is a master suite.

  • data.results[].business_classboolean

    True when the room is a business-class / executive-class unit.

  • data.results[].duplexboolean

    True when the unit is a duplex (two-storey).

  • data.results[].connecting_roomsboolean

    True when the unit is offered as a connecting / inter-connecting room.

  • data.results[].balconyboolean

    True when the room has a balcony.

  • data.results[].terrace_accessboolean

    True when the room has terrace access.

  • data.results[].pool_accessboolean

    True when the room has direct pool access (e.g. swim-up or private pool).

  • data.results[].spaboolean

    True when the room includes in-room spa features or spa-suite access.

  • data.results[].jacuzziboolean

    True when the room features a jacuzzi, hot tub, or whirlpool bath.

  • data.results[].saunaboolean

    True when the room has an in-room sauna.

  • data.results[].kitchenetteboolean

    True when the room has a kitchenette or full kitchen.

  • data.results[].bathtubboolean

    True when the room has a bathtub (as opposed to shower-only).

  • data.results[].barboolean

    True when the room includes a wet bar / in-room bar.

  • data.results[].living_roomboolean

    True when the unit has a separate living room area.

  • data.results[].club_lounge_accessboolean

    True when the booking includes club lounge / executive lounge access.

  • data.results[].high_floorboolean

    True when the room is explicitly on a high floor.

  • data.results[].low_floorboolean

    True when the room is explicitly on a low floor.

  • data.results[].windowlessboolean

    True when the room has no window (interior / inside room).

  • data.results[].smoking_allowedboolean

    True when smoking is allowed in the room. False indicates a non-smoking room.

  • data.results[].extra_bedboolean

    True when the rate includes an extra bed / rollaway.

  • data.results[].room_descriptionstring or null

    Long-form description of the room, when available. Null when no description was extracted.

  • data.results[].room_size_sqmnumber or null

    Room size in square metres. Null when the supplier text did not specify.

  • data.results[].room_size_sqftnumber or null

    Room size in square feet. Null when the supplier text did not specify.

  • data.results[].image_urlsarray of strings

    Image URLs for the canonical room, when available. May be empty.

  • data.results[].rooms[]array of objects

    Every input room from your request that was clustered into this canonical group. Iterate this array to know which of your inputs map to this canonical code.

  • data.results[].rooms[].indexinteger

    The original index field you sent in the request. Use this to correlate the response group back to a specific row in your input array.

  • data.results[].rooms[].room_namestring

    The exact room description you sent in the request. Returned verbatim.

  • data.results[].rooms[].hotel_idstring

    The hotel_id you sent in the request. Returned verbatim.

  • data.results[].rooms[].supplier_namestring

    The supplier_name you sent in the request. Returned verbatim.

  • data.results[].fine_tuned_statusstring

    Trace of how the canonical mapping was produced. Values: "fine_tuned_not_triggered" (the base extractor was confident, no fine-tuned call was made), "fine_tuned_triggered_responded" (the base extractor deferred and the fine-tuned model produced the answer). Useful when debugging unexpected groupings or comparing extractor coverage.

  • errorsarray of strings or null

    Null on success. On failure, contains a list of human-readable error messages.

Website Rate Match

POST/api/v2/room-mappings/website-rate-matchOpen in Postman

Website Room Match plus rate grouping. Each supplier room is matched to the canonical room the hotel publishes on its own website, exactly as in Website Room Match, and is also matched against StructurrAI's website-grade rooms to further improve mapping accuracy. In addition, every supplier rate carries its own meal_plan and cancellation_policy text, which StructurrAI normalizes and uses to group the matched rooms into rate codes under each canonical room. Use it when the same physical room is sold under several rate plans (room only vs breakfast, refundable vs non-refundable) and you need one canonical room with one row per distinct rate, instead of one flat list of supplier rooms. The API returns one entry per canonical room. Each entry carries the structured room attributes plus a rate_code[] array. Each rate code has a stable structurrai_rate_index, the normalized meal_plan and cancellation_policy, and the list of input rooms (with their original index and echoed fields) that fall under that rate. Important: A single API call must contain rooms belonging to one unique hotel. Send a separate request per hotel.

Request

Parameters
  • roomsrequiredarray of objectsbody

    The list of supplier rates to map. Send at least 1 room. Each object has the six fields documented underneath.

    Object fields
    • namerequiredstring

      The exact room description as it appears in the supplier's inventory. Pass it verbatim, no manual cleanup or normalization needed. Examples: "Apartment City View One Bedroom", "Superior Double - Sea View".

    • hotel_idrequiredstring

      Required. The StructurrAI hotel id (structurrai_hotel_id) whose website rooms this call matches against. Send the same hotel_id on every room. Pass it as a string even if the underlying id is numeric.

    • supplier_nameoptionalstring

      Optional. The supplier the rate came from, for example "supplier1" or "supplier2". Echoed verbatim in the response.

    • indexrequiredinteger

      A unique sequential identifier for this rate within the request. Must be 1 for the first room, 2 for the second, and so on up to N. Strictly ascending, no gaps, no duplicates. Requests where indexes are missing, repeated, or out of order are rejected with 400. Every room in the response carries its original index, so you can stitch results back to your input list.

    • meal_planoptionalstring

      Optional. The supplier's raw meal plan text for this rate, for example "Bed & Breakfast", "BB", "Room Only", "Half Board". Pass it verbatim. StructurrAI normalizes it (e.g. "Bed & Breakfast" and "BB" both become breakfast). Text that cannot be recognized is returned as unmapped.

    • cancellation_policyoptionalstring

      Optional. The supplier's raw cancellation policy text for this rate, for example "Non-Refundable", "NRF", "Free cancellation until 12 Oct", "50% Refundable". Pass it verbatim. StructurrAI normalizes it (e.g. "Non-Refundable" and "NRF" both become non_refundable).

Request body
{
  "rooms": [
    { "name": "Apartment City View One Bedroom",  "index": 1, "hotel_id": "1613271", "supplier_name": "supplier1", "meal_plan": "Bed & Breakfast", "cancellation_policy": "Non-Refundable" },
    { "name": "Apartment City View One Bedroom",  "index": 2, "hotel_id": "1613271", "supplier_name": "supplier1", "meal_plan": "Room Only",       "cancellation_policy": "Free cancellation until 12 Oct" },
    { "name": "Apartment City View One Bedroom",  "index": 3, "hotel_id": "1613271", "supplier_name": "supplier1", "meal_plan": "BB",              "cancellation_policy": "NRF" },
    { "name": "Apartment Capacity 1 One Bedroom", "index": 4, "hotel_id": "1613271", "supplier_name": "supplier1", "meal_plan": "Half Board",      "cancellation_policy": "50% Refundable" },
    { "name": "Apartment One Bedroom",            "index": 5, "hotel_id": "1613271", "supplier_name": "supplier1", "meal_plan": "Room Only",       "cancellation_policy": "Non-Refundable" },
    { "name": "Apartment One Bedroom",            "index": 6, "hotel_id": "1613271", "supplier_name": "supplier1", "meal_plan": "Special Package", "cancellation_policy": "Non-Refundable" }
  ]
}

Response

data.results contains one entry per canonical room. Each entry carries the structured attributes plus a rate_code[] array: one rate code per distinct (meal_plan, cancellation_policy) pair, each listing the input rooms that fall under it. To stitch results back to your input list, look up by the index field.

Response fields
  • successboolean

    True when the call completed without error.

  • messagestring

    Human-readable status text. Useful for log lines.

  • data.hotel_idstring

    The hotel_id the rooms were matched against.

  • data.results[]array of objects

    One entry per canonical room.

  • data.results[].structurrai_room_codestring

    The canonical room id assigned by StructurrAI. Stable across calls. Use this as the primary key when storing or pricing rooms.

  • data.results[].room_namestring

    The cleaned canonical room name (e.g. "Deluxe King Room"). Distilled from the supplier descriptions.

  • data.results[].type_of_accomodationstring

    The kind of unit. Typical values: "Room", "Suite", "Villa", "Apartment".

  • data.results[].room_categorystring

    The quality tier extracted from supplier text (e.g. "Standard", "Superior", "Deluxe", "Premium", "Executive").

  • data.results[].bed_typestring

    The bed configuration (e.g. "King", "Queen", "Twin", "Double"). Null when the supplier text did not specify a bed type.

  • data.results[].view_typestring

    The view descriptor (e.g. "City View", "Sea View", "Pool View", "Garden View"). Null when no view was specified.

  • data.results[].bed_countstring

    Number of beds in the room, returned as a string (e.g. "1", "2", or "1 or 2" when the supplier description was non-numeric).

  • data.results[].bedroom_countinteger or null

    Number of separate bedrooms in the unit. Relevant for suites, villas, and apartments. Null when the supplier text did not specify.

  • data.results[].family_roomboolean

    True when the unit is marketed as a family room.

  • data.results[].family_suiteboolean

    True when the unit is marketed as a family suite.

  • data.results[].family_villaboolean

    True when the unit is marketed as a family villa.

  • data.results[].guest_roomboolean

    True when the unit is explicitly described as a guest room.

  • data.results[].master_suiteboolean

    True when the unit is a master suite.

  • data.results[].business_classboolean

    True when the room is a business-class / executive-class unit.

  • data.results[].duplexboolean

    True when the unit is a duplex (two-storey).

  • data.results[].connecting_roomsboolean

    True when the unit is offered as a connecting / inter-connecting room.

  • data.results[].balconyboolean

    True when the room has a balcony.

  • data.results[].terrace_accessboolean

    True when the room has terrace access.

  • data.results[].pool_accessboolean

    True when the room has direct pool access (e.g. swim-up or private pool).

  • data.results[].spaboolean

    True when the room includes in-room spa features or spa-suite access.

  • data.results[].jacuzziboolean

    True when the room features a jacuzzi, hot tub, or whirlpool bath.

  • data.results[].saunaboolean

    True when the room has an in-room sauna.

  • data.results[].kitchenetteboolean

    True when the room has a kitchenette or full kitchen.

  • data.results[].bathtubboolean

    True when the room has a bathtub (as opposed to shower-only).

  • data.results[].barboolean

    True when the room includes a wet bar / in-room bar.

  • data.results[].living_roomboolean

    True when the unit has a separate living room area.

  • data.results[].club_lounge_accessboolean

    True when the booking includes club lounge / executive lounge access.

  • data.results[].high_floorboolean

    True when the room is explicitly on a high floor.

  • data.results[].low_floorboolean

    True when the room is explicitly on a low floor.

  • data.results[].windowlessboolean

    True when the room has no window (interior / inside room).

  • data.results[].smoking_allowedboolean

    True when smoking is allowed in the room. False indicates a non-smoking room.

  • data.results[].extra_bedboolean

    True when the rate includes an extra bed / rollaway.

  • data.results[].room_descriptionstring or null

    Long-form description of the room, when available. Null when no description was extracted.

  • data.results[].room_size_sqmnumber or null

    Room size in square metres. Null when the supplier text did not specify.

  • data.results[].room_size_sqftnumber or null

    Room size in square feet. Null when the supplier text did not specify.

  • data.results[].image_urlsarray of strings

    Image URLs for the canonical room, when available. May be empty.

  • data.results[].staystring or null

    Stay type extracted from the room text (e.g. "Full Stay").

  • data.results[].durationstring or null

    Stay duration, when the room text specified one. Null otherwise.

  • data.results[].occupancystring or null

    Occupancy extracted from the room text (e.g. "1" from "Capacity 1"). Null when not specified.

  • data.results[].rate_code[]array of objects

    One entry per distinct normalized (meal_plan, cancellation_policy) pair among the input rooms matched to this canonical room.

  • data.results[].rate_code[].structurrai_rate_indexstring

    The canonical rate id, formed as <structurrai_room_code>_<n>. Use it as the primary key for a room + rate combination.

  • data.results[].rate_code[].meal_planstring

    Normalized meal plan. Values include "room_only", "breakfast", "half_board", and "unmapped" when the input text could not be recognized.

  • data.results[].rate_code[].cancellation_policystring

    Normalized cancellation policy. Values include "free_cancellation", "fully_refundable", "non_refundable".

  • data.results[].rate_code[].rooms[]array of objects

    Every input room grouped under this rate code.

  • data.results[].rate_code[].rooms[].indexinteger

    The original index you sent in the request.

  • data.results[].rate_code[].rooms[].room_namestring

    The room name you sent in the request. Returned verbatim.

  • data.results[].rate_code[].rooms[].hotel_idstring

    The hotel_id you sent in the request. Returned verbatim.

  • data.results[].rate_code[].rooms[].supplier_namestring

    The supplier_name you sent in the request. Returned verbatim.

  • data.results[].rate_code[].rooms[].meal_planstring

    The raw meal_plan you sent in the request. Returned verbatim.

  • data.results[].rate_code[].rooms[].cancellation_policystring

    The raw cancellation_policy you sent in the request. Returned verbatim.

  • errorsarray of strings or null

    Null on success. On failure, contains a list of human-readable error messages.

Need help?

Reach the integrations team at vasu.goenka@structurrai.com for API access, schema questions, or onboarding support.