Skip to main content
Glama

chucho — Book Direct

Find vacation homes

search_properties

Search currently published properties. Use geographicArea for continents/subregions returned by get_filters(kind:geography), countries for an explicit ISO country union, and country/region/city for specific destinations. Filters combine with AND; unknown or hidden facts never satisfy a filter. Use organization with a returned organization.slug for its entire portfolio, or relatedTo with a published property ID for other homes from that organization, same locality first. Optional quoteMode:exact with arrival, departure and guests adds host availability/prices; quoteMode:estimate with explicit flexible bounds, nights and guests adds a labeled sample stay found across up to four near-term/future-month windows (explicit window, nights and guests required). Quote enrichment waits at most 2.5 seconds, may be pending/not_checked/limited, and does not filter or rank homes by availability. Use get_stay_estimate with stayQuote.estimate to finish a flexible sample, or get_stay_quote with stayQuote.request for exact dates. Unknown is not available; a sample is not availability for the traveler's actual dates. Inspect actual currency, completeness, checkedAt and expiresAt. Quotes reserve nothing. Omit quoteMode for pure catalog discovery.Price requests require a supplied party size and stay context. Exact dates use arrival/departure/guests. Flexible travel uses quoteMode:estimate with explicit estimateWindowStart/estimateWindowEnd, estimateNights and guests; resolve a supplied month into bounds and ask only for missing details before requesting or displaying any price. A brief clarification may come before catalog search; budget is optional in the same question. With sufficient inputs, complete bounded shortlisted checks without asking permission. Without these inputs, discover homes without quoteMode; a returned rateEstimate may still be mentioned as a labelled rough nightly estimate (for a supplied month, that month's nightlyTypical; otherwise from the lowest), never as a stay total, a quote, availability or a confirmed budget match. Never invent dates, stay length or party size. When price is requested, first inspect already-ready quotes on the displayed cards (render_properties prices its cards when searchContext carries quoteMode; displayedPropertyIds identifies inline search cards when supplied). Join pending checks for promising displayed homes before starting not_checked homes or off-screen alternatives, using the returned request or estimate. Make at most three follow-up checks in total; never check every card. A pending search quote can finish independently in the cards, so resolve selected pending checks before giving a budget conclusion. Compare confirmed available, complete stay totals in the requested currency against the budget; do not reject a supported match. When a supported budget match is found, recommend it with any material qualification; omit failed or unchecked alternatives unless a comparison is requested. If no match is confirmed and selected checks remain unresolved, say that briefly rather than claiming no home fits the budget or is available. Make status claims per returned quote evidence; never blanket-label other cards unchecked or unavailable, since they update separately. Inspect terminal ready failures and sample diagnostics internally; briefly state only material unknown price or availability, and stop unchanged retries. Catalog totals count matching published homes, never confirmed available or affordable homes. Sample diagnostic reasons describe attempted stays only, never the whole window. Returns compact comparison summaries with IDs, public facts and citations; use get_property for complete facts and photos. Follow nextPage with the same filters. With semantic, results are up to 20 unranked candidates (retrieval order, not fit) with compact public facts and, for each requested need, evidence a verifier read from listing text and photos: supported or contradicted (with citations), unknown (checked; neither established nor contradicted) or unchecked (the check did not run). Unknown and unchecked are uncertainty, never a rejection or confirmed absence; weigh contradicted requirements heavily. A semantic search shows no cards: compare the homes against the whole conversation, choose up to six, best first, and display every home you recommend, even a single one, with one render_properties call after your comparison and any checks are done (each call replaces the visible cards; never render provisional picks; a single home opens as its full details), passing these search arguments as searchContext so dates and quoteMode price the shown cards. Semantic candidates carry no prices. Without semantic, search shows its own cards and quoteMode enriches them as before.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "search_properties"
  }
}

Input Schema

NameRequiredDescriptionDefault
qNoSearch public property names, locations and approved introduction text.
cityNoSpecific destination locality, not a nearby radius. Resolve ambiguous names before choosing a country; use the area tools for nearby discovery.
pageNo
poolNo
placeNoPlace key from the live filter catalog.
boundsNoMap viewport as south,west,north,east in degrees; keeps homes whose public area center is inside it. West greater than east crosses the antimeridian.
guestsNoTotal occupancy, adults plus children. Rentals: minimum sleeping capacity. Boutique hotels: everyone in one room for a one-room quote, priced as adults, with occupancy unconfirmed until that quote succeeds.
localeNoen
regionNoPublished region name. Resolve informal areas such as south of France with get_filters before searching; an invented region label can return no homes.
arrivalNo
countryNoDestination country established by the traveler or unambiguous trip context. Ask before choosing a country for an ambiguous place name.
featureNoCollection key from the filter catalog.
childrenNoHow many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.
currencyNoPreferred ISO 4217 currency, e.g. USD, EUR or NOK. Rough nightly estimates use approximate conversions (USD by default) when a fresh rate is supported; otherwise retain the host currency. Dated quotes depend on host support: always inspect the returned currency. May be supplied without dates for browsing.
semanticNoRank indexed, eligible homes by text and photo similarity. Does not establish hard facts; no lexical fallback when unavailable.
amenitiesNoComma-separated keys from: air-conditioning, wifi, workspace, parking, pets, kitchen, washer, step-free. Every requested key must be explicitly present. Other details (for example pool heating) belong in semantic preferences or requirements, not invented keys.
childAgesNoEach child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.
countriesNoExplicit union of ISO 3166-1 alpha-2 country/territory codes, e.g. [CR, PA]. A home must match one selected country; combines with geographicArea, country and every other filter using AND. Use available codes from get_filters; never silently substitute a narrower country for an area.
departureNo
quoteModeNoOptional price/availability enrichment. exact uses supplied dates and guests; estimate requires estimateWindowStart, estimateWindowEnd, estimateNights and guests for a clearly labeled sample within supplied flexible bounds. Search does not wait for every host or filter unknown homes out.
relatedToNoPublished property ID. Find other homes from its organization, same locality first, then region/country and other locations. Excludes the source property. Additional filters still combine with AND.
minBedroomsNo
minBathroomsNo
organizationNoExact organization slug returned on a property or in get_filters. Restricts results to that organization, across destinations.
estimateNightsNoSample-stay nights, required. Only with quoteMode:estimate.
geographicAreaNoExact geographic area key from get_filters(kind:geography), including continents and subregions. Americas includes North/Central/South America and the Caribbean. north-america includes Northern America, Central America and Caribbean; northern-america is the narrower UN M49 subregion. Filters by public ISO country/territory code; unknown locations never match. Combines with all other filters using AND.
accommodationTypeNoFilter by reviewed accommodation type. Hotel results represent one establishment; guest count requires a quote for one suitable room, never total hotel capacity.
estimateWindowEndNoLatest sample departure (YYYY-MM-DD), paired with estimateWindowStart. Window must fit estimateNights (required), at most 150 days.
estimateWindowStartNoEarliest sample arrival (YYYY-MM-DD), paired with estimateWindowEnd. Only with quoteMode:estimate. Preserve the traveler's flexible month or date range.
reassessPropertyIdsNoUp to four previously discussed public property IDs to reassess against this semantic request alongside fresh matches. Use when refining or comparing earlier suggestions. This reserves comparison slots only: current factual filters, indexed source ownership and every essential requirement still apply. It does not keep an old recommendation or establish fit. Omit for a new search without earlier candidates to reassess.
semanticPreferencesNoIndividual experiential preferences, each copied verbatim from semantic. Interpret the traveler in context: separate requested preferences without adding needs. Keep related words together when they describe one room, view or relationship. These are questions to assess, not property facts; omit for factual-only searches.
semanticRequirementsNoEssential trip requirements, each copied verbatim from semantic with all relationship and provenance qualifiers. With semantic, each is checked per candidate and reported as supported, contradicted, unknown or unchecked; candidates are not filtered by these states, so weigh them when ranking. Preserve them from the conversation; ordinary preferences belong in semanticPreferences. Omit when no essential experiential requirements were stated. Interpret semanticRequirements as conditions the accommodation or its setting must satisfy. Preserve essential support for the traveler's primary activity and access needs, including when expressed indirectly. Preserve the traveler's complete context in semantic. When the traveler states an explicit offering condition together with their own plans, circumstances or reasons, copy the complete offering condition as the essential; do not create an additional standalone proof obligation for the traveler's plan or circumstance. Keep any context necessary to understand the condition, its scope and relationships. Do not broaden a specific access requirement into proof of every aspect of the trip, and do not drop an actual offering condition because it is motivated by a traveler's circumstances. When a circumstance leaves the required accommodation or access condition ambiguous, ask one short clarifying question before searching; do not submit the circumstance itself as a property-proof requirement. If the offering condition itself is ambiguous, clarify it in the real conversation instead of inventing a stricter condition.

Output Schema

NameRequiredDescriptionDefault
pageNo
totalNo
localeNo
coverageNo
nextPageNo
pageSizeNo
semanticNo
relatedToNo
candidatesNo
missingIdsNo
propertiesNo
limitationsNo
organizationNo
displayedPropertyIdsNoProperty IDs in the initial inline photo cards, in display order; the explorer can display more homes. Only supplied for ChatGPT search_properties; prioritize their pending quote follow-ups.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedInput schema / properties / currency / description
      Added value: +"Preferred ISO 4217 currency, e.g. USD, EUR or NOK. Rough nightly estimates use approximate conversions (USD by default) when a fresh rate is supported; otherwise retain the host currency. Dated quotes depend on host support: always inspect the returned currency. May be supplied without dates for browsing."
    • removedInput schema / properties / currency / enum
      Removed value: -[
      -  "USD",
      -  "EUR",
      -  "GBP",
      -  "CRC",
      -  "MXN",
      -  "COP",
      -  "PEN",
      -  "BRL",
      -  "AUD",
      -  "NZD"
      -]
    • addedInput schema / properties / currency / pattern
      Added value: +"^[A-Z]{3}$"
    • changedOutput schema / properties / candidates / items / properties / rateEstimate / description
      Previous value: -"Rough nightly rate per month from earlier host prices, in the host's currency. A per-night estimate only: never a stay total, a quote or availability. stay_derived months divide a quoted stay total by its nights (fees spread in, taxes possibly excluded) for partyBasis; calendar_nightly months use the host calendar's nightly rate. Use quoteMode or get_stay_quote for an actual price."New value: +"Rough nightly rate per month from earlier host prices, in the host's currency. Optional display contains approximate nightly comparison amounts in the requested currency (USD by default), with an exchange-rate date and expiry; original amounts are unchanged. A per-night estimate only: never a stay total, a quote or availability. stay_derived months divide a quoted stay total by its nights (fees spread in, taxes possibly excluded) for partyBasis; calendar_nightly months use the host calendar's nightly rate. Use quoteMode or get_stay_quote for an actual price."
    • addedOutput schema / properties / candidates / items / properties / rateEstimate / properties / display
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "approximate": {
      +      "const": true,
      +      "type": "boolean"
      +    },
      +    "currency": {
      +      "pattern": "^[A-Z]{3}$",
      +      "type": "string"
      +    },
      +    "expiresAt": {
      +      "type": "string"
      +    },
      +    "nightlyTypical": {
      +      "additionalProperties": {
      +        "exclusiveMinimum": 0,
      +        "type": "number"
      +      },
      +      "propertyNames": {
      +        "pattern": "^\\d{4}-\\d{2}$",
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "rateDate": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "currency",
      +    "nightlyTypical",
      +    "approximate",
      +    "rateDate",
      +    "expiresAt"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / properties / items / properties / rateEstimate / description
      Previous value: -"Rough nightly rate per month from earlier host prices, in the host's currency. A per-night estimate only: never a stay total, a quote or availability. stay_derived months divide a quoted stay total by its nights (fees spread in, taxes possibly excluded) for partyBasis; calendar_nightly months use the host calendar's nightly rate. Use quoteMode or get_stay_quote for an actual price."New value: +"Rough nightly rate per month from earlier host prices, in the host's currency. Optional display contains approximate nightly comparison amounts in the requested currency (USD by default), with an exchange-rate date and expiry; original amounts are unchanged. A per-night estimate only: never a stay total, a quote or availability. stay_derived months divide a quoted stay total by its nights (fees spread in, taxes possibly excluded) for partyBasis; calendar_nightly months use the host calendar's nightly rate. Use quoteMode or get_stay_quote for an actual price."
    • addedOutput schema / properties / properties / items / properties / rateEstimate / properties / display
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "approximate": {
      +      "const": true,
      +      "type": "boolean"
      +    },
      +    "currency": {
      +      "pattern": "^[A-Z]{3}$",
      +      "type": "string"
      +    },
      +    "expiresAt": {
      +      "type": "string"
      +    },
      +    "nightlyTypical": {
      +      "additionalProperties": {
      +        "exclusiveMinimum": 0,
      +        "type": "number"
      +      },
      +      "propertyNames": {
      +        "pattern": "^\\d{4}-\\d{2}$",
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "rateDate": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "currency",
      +    "nightlyTypical",
      +    "approximate",
      +    "rateDate",
      +    "expiresAt"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / properties / items / properties / stayQuote / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "basis": {
      -        "const": "exact",
      -        "type": "string"
      -      },
      -      "quote": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "arrival": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "availability": {
      -                "enum": [
      -                  "available",
      -                  "unavailable",
      -                  "unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "bookingUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "checkedAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "departure": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "expiresAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "guests": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "held": {
      -                "const": false,
      -                "type": "boolean"
      -              },
      -              "minimumNights": {
      -                "anyOf": [
      -                  {
      -                    "exclusiveMinimum": 0,
      -                    "maximum": 9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "nights": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "partyBasis": {
      -                "const": "all_adults",
      -                "type": "string"
      -              },
      -              "price": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "breakdown": {
      -                        "items": {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "amount": {
      -                              "type": "number"
      -                            },
      -                            "label": {
      -                              "maxLength": 160,
      -                              "minLength": 1,
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "label",
      -                            "amount"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        "maxItems": 30,
      -                        "type": "array"
      -                      },
      -                      "completeness": {
      -                        "enum": [
      -                          "total",
      -                          "partial"
      -                        ],
      -                        "type": "string"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      },
      -                      "taxesIncluded": {
      -                        "anyOf": [
      -                          {
      -                            "type": "boolean"
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "total": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "total",
      -                      "breakdown",
      -                      "completeness",
      -                      "taxesIncluded"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "propertyId": {
      -                "type": "string"
      -              },
      -              "reason": {
      -                "enum": [
      -                  "checked",
      -                  "blocked_dates",
      -                  "minimum_stay",
      -                  "maximum_stay",
      -                  "arrival_departure_rules",
      -                  "advance_notice",
      -                  "capacity",
      -                  "unsupported_host",
      -                  "browser_unconfigured",
      -                  "upstream_unavailable",
      -                  "date_range_unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "roomSelection": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "averageNightlyPrice": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "amount": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "amount"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  "name": {
      -                    "maxLength": 200,
      -                    "minLength": 1,
      -                    "type": "string"
      -                  },
      -                  "ratePlan": {
      -                    "maxLength": 200,
      -                    "type": "string"
      -                  },
      -                  "rooms": {
      -                    "const": 1,
      -                    "type": "number"
      -                  }
      -                },
      -                "required": [
      -                  "name",
      -                  "rooms"
      -                ],
      -                "type": "object"
      -              },
      -              "sourceUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "startingNightlyPrice": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "amount": {
      -                    "minimum": 0,
      -                    "type": "number"
      -                  },
      -                  "currency": {
      -                    "pattern": "^[A-Z]{3}$",
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "currency",
      -                  "amount"
      -                ],
      -                "type": "object"
      -              },
      -              "terms": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "cancellation": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "freeUntil": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "nonRefundable": {
      -                        "type": "boolean"
      -                      },
      -                      "policyText": {
      -                        "maxLength": 2000,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      },
      -                      "refundWindows": {
      -                        "items": {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "from": {
      -                              "format": "date-time",
      -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                              "type": "string"
      -                            },
      -                            "refundPercent": {
      -                              "maximum": 100,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            },
      -                            "until": {
      -                              "format": "date-time",
      -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "refundPercent"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        "maxItems": 20,
      -                        "type": "array"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  "payment": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "balanceDue": {
      -                        "additionalProperties": false,
      -                        "properties": {
      -                          "amount": {
      -                            "minimum": 0,
      -                            "type": "number"
      -                          },
      -                          "currency": {
      -                            "pattern": "^[A-Z]{3}$",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "amount",
      -                          "currency"
      -                        ],
      -                        "type": "object"
      -                      },
      -                      "balanceDueAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "chargedBy": {
      -                        "enum": [
      -                          "host",
      -                          "booking_engine"
      -                        ],
      -                        "type": "string"
      -                      },
      -                      "depositAmount": {
      -                        "additionalProperties": false,
      -                        "properties": {
      -                          "amount": {
      -                            "minimum": 0,
      -                            "type": "number"
      -                          },
      -                          "currency": {
      -                            "pattern": "^[A-Z]{3}$",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "amount",
      -                          "currency"
      -                        ],
      -                        "type": "object"
      -                      },
      -                      "depositDueAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "depositPercent": {
      -                        "maximum": 100,
      -                        "minimum": 0,
      -                        "type": "number"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  "provenance": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "fetchedAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "rawSourceField": {
      -                        "maxLength": 200,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      },
      -                      "reader": {
      -                        "maxLength": 100,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "reader",
      -                      "rawSourceField",
      -                      "fetchedAt"
      -                    ],
      -                    "type": "object"
      -                  }
      -                },
      -                "required": [
      -                  "provenance"
      -                ],
      -                "type": "object"
      -              }
      -            },
      -            "required": [
      -              "propertyId",
      -              "arrival",
      -              "departure",
      -              "guests",
      -              "nights",
      -              "availability",
      -              "reason",
      -              "minimumNights",
      -              "price",
      -              "checkedAt",
      -              "expiresAt",
      -              "sourceUrl",
      -              "bookingUrl",
      -              "held"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "request": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "arrival": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "childAges": {
      -            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      -            "items": {
      -              "maximum": 17,
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "maxItems": 199,
      -            "type": "array"
      -          },
      -          "children": {
      -            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      -            "maximum": 199,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "currency": {
      -            "enum": [
      -              "USD",
      -              "EUR",
      -              "GBP",
      -              "CRC",
      -              "MXN",
      -              "COP",
      -              "PEN",
      -              "BRL",
      -              "AUD",
      -              "NZD"
      -            ],
      -            "type": "string"
      -          },
      -          "departure": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "execution": {
      -            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      -            "enum": [
      -              "auto",
      -              "browser"
      -            ],
      -            "type": "string"
      -          },
      -          "guests": {
      -            "maximum": 200,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "id": {
      -            "maxLength": 160,
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "arrival",
      -          "departure",
      -          "guests"
      -        ],
      -        "type": "object"
      -      },
      -      "status": {
      -        "enum": [
      -          "ready",
      -          "pending",
      -          "not_checked",
      -          "limited"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "basis",
      -      "status",
      -      "request",
      -      "quote"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "basis": {
      -        "const": "sample",
      -        "type": "string"
      -      },
      -      "diagnostics": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "attemptedStays": {
      -            "maximum": 4,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          "reason": {
      -            "description": "Last sampled observation when no dated total was selected. Applies only to attempted stays; blocked samples never establish that the whole window is sold out. Terminal unsupported_host/upstream_unavailable evidence should be explained, not retried unchanged.",
      -            "enum": [
      -              "checked",
      -              "blocked_dates",
      -              "minimum_stay",
      -              "maximum_stay",
      -              "arrival_departure_rules",
      -              "advance_notice",
      -              "capacity",
      -              "unsupported_host",
      -              "browser_unconfigured",
      -              "upstream_unavailable",
      -              "date_range_unknown"
      -            ],
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "attemptedStays"
      -        ],
      -        "type": "object"
      -      },
      -      "estimate": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "childAges": {
      -            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      -            "items": {
      -              "maximum": 17,
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "maxItems": 199,
      -            "type": "array"
      -          },
      -          "children": {
      -            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      -            "maximum": 199,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "currency": {
      -            "enum": [
      -              "USD",
      -              "EUR",
      -              "GBP",
      -              "CRC",
      -              "MXN",
      -              "COP",
      -              "PEN",
      -              "BRL",
      -              "AUD",
      -              "NZD"
      -            ],
      -            "type": "string"
      -          },
      -          "guests": {
      -            "maximum": 200,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "id": {
      -            "maxLength": 160,
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "nights": {
      -            "maximum": 30,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "windowEnd": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "windowStart": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "windowStart",
      -          "windowEnd",
      -          "nights",
      -          "guests"
      -        ],
      -        "type": "object"
      -      },
      -      "quote": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "arrival": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "availability": {
      -                "enum": [
      -                  "available",
      -                  "unavailable",
      -                  "unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "bookingUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "checkedAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "departure": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "expiresAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "guests": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "held": {
      -                "const": false,
      -                "type": "boolean"
      -              },
      -              "minimumNights": {
      -                "anyOf": [
      -                  {
      -                    "exclusiveMinimum": 0,
      -                    "maximum": 9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "nights": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "partyBasis": {
      -                "const": "all_adults",
      -                "type": "string"
      -              },
      -              "price": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "breakdown": {
      -                        "items": {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "amount": {
      -                              "type": "number"
      -                            },
      -                            "label": {
      -                              "maxLength": 160,
      -                              "minLength": 1,
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "label",
      -                            "amount"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        "maxItems": 30,
      -                        "type": "array"
      -                      },
      -                      "completeness": {
      -                        "enum": [
      -                          "total",
      -                          "partial"
      -                        ],
      -                        "type": "string"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      },
      -                      "taxesIncluded": {
      -                        "anyOf": [
      -                          {
      -                            "type": "boolean"
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "total": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "total",
      -                      "breakdown",
      -                      "completeness",
      -                      "taxesIncluded"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "propertyId": {
      -                "type": "string"
      -              },
      -              "reason": {
      -                "enum": [
      -                  "checked",
      -                  "blocked_dates",
      -                  "minimum_stay",
      -                  "maximum_stay",
      -                  "arrival_departure_rules",
      -                  "advance_notice",
      -                  "capacity",
      -                  "unsupported_host",
      -                  "browser_unconfigured",
      -                  "upstream_unavailable",
      -                  "date_range_unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "roomSelection": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "averageNightlyPrice": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "amount": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "amount"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  "name": {
      -                    "maxLength": 200,
      -                    "minLength": 1,
      -                    "type": "string"
      -                  },
      -                  "ratePlan": {
      -                    "maxLength": 200,
      -                    "type": "string"
      -                  },
      -                  "rooms": {
      -                    "const": 1,
      -                    "type": "number"
      -                  }
      -                },
      -                "required": [
      -                  "name",
      -                  "rooms"
      -                ],
      -                "type": "object"
      -              },
      -              "sourceUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "startingNightlyPrice": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "amount": {
      -                    "minimum": 0,
      -                    "type": "number"
      -                  },
      -                  "currency": {
      -                    "pattern": "^[A-Z]{3}$",
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "currency",
      -                  "amount"
      -                ],
      -                "type": "object"
      -              },
      -              "terms": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "cancellation": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "freeUntil": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "nonRefundable": {
      -                        "type": "boolean"
      -                      },
      -                      "policyText": {
      -                        "maxLength": 2000,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      },
      -                      "refundWindows": {
      -                        "items": {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "from": {
      -                              "format": "date-time",
      -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                              "type": "string"
      -                            },
      -                            "refundPercent": {
      -                              "maximum": 100,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            },
      -                            "until": {
      -                              "format": "date-time",
      -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "refundPercent"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        "maxItems": 20,
      -                        "type": "array"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  "payment": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "balanceDue": {
      -                        "additionalProperties": false,
      -                        "properties": {
      -                          "amount": {
      -                            "minimum": 0,
      -                            "type": "number"
      -                          },
      -                          "currency": {
      -                            "pattern": "^[A-Z]{3}$",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "amount",
      -                          "currency"
      -                        ],
      -                        "type": "object"
      -                      },
      -                      "balanceDueAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "chargedBy": {
      -                        "enum": [
      -                          "host",
      -                          "booking_engine"
      -                        ],
      -                        "type": "string"
      -                      },
      -                      "depositAmount": {
      -                        "additionalProperties": false,
      -                        "properties": {
      -                          "amount": {
      -                            "minimum": 0,
      -                            "type": "number"
      -                          },
      -                          "currency": {
      -                            "pattern": "^[A-Z]{3}$",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "amount",
      -                          "currency"
      -                        ],
      -                        "type": "object"
      -                      },
      -                      "depositDueAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "depositPercent": {
      -                        "maximum": 100,
      -                        "minimum": 0,
      -                        "type": "number"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  "provenance": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "fetchedAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "rawSourceField": {
      -                        "maxLength": 200,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      },
      -                      "reader": {
      -                        "maxLength": 100,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "reader",
      -                      "rawSourceField",
      -                      "fetchedAt"
      -                    ],
      -                    "type": "object"
      -                  }
      -                },
      -                "required": [
      -                  "provenance"
      -                ],
      -                "type": "object"
      -              }
      -            },
      -            "required": [
      -              "propertyId",
      -              "arrival",
      -              "departure",
      -              "guests",
      -              "nights",
      -              "availability",
      -              "reason",
      -              "minimumNights",
      -              "price",
      -              "checkedAt",
      -              "expiresAt",
      -              "sourceUrl",
      -              "bookingUrl",
      -              "held"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "request": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "arrival": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "childAges": {
      -            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      -            "items": {
      -              "maximum": 17,
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "maxItems": 199,
      -            "type": "array"
      -          },
      -          "children": {
      -            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      -            "maximum": 199,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "currency": {
      -            "enum": [
      -              "USD",
      -              "EUR",
      -              "GBP",
      -              "CRC",
      -              "MXN",
      -              "COP",
      -              "PEN",
      -              "BRL",
      -              "AUD",
      -              "NZD"
      -            ],
      -            "type": "string"
      -          },
      -          "departure": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "execution": {
      -            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      -            "enum": [
      -              "auto",
      -              "browser"
      -            ],
      -            "type": "string"
      -          },
      -          "guests": {
      -            "maximum": 200,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "id": {
      -            "maxLength": 160,
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "arrival",
      -          "departure",
      -          "guests"
      -        ],
      -        "type": "object"
      -      },
      -      "status": {
      -        "enum": [
      -          "ready",
      -          "pending",
      -          "not_checked",
      -          "limited"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "basis",
      -      "status",
      -      "request",
      -      "quote",
      -      "estimate"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "basis": {
      +        "const": "exact",
      +        "type": "string"
      +      },
      +      "quote": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "arrival": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "availability": {
      +                "enum": [
      +                  "available",
      +                  "unavailable",
      +                  "unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "bookingUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "checkedAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "departure": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "expiresAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "guests": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "held": {
      +                "const": false,
      +                "type": "boolean"
      +              },
      +              "minimumNights": {
      +                "anyOf": [
      +                  {
      +                    "exclusiveMinimum": 0,
      +                    "maximum": 9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "nights": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "partyBasis": {
      +                "const": "all_adults",
      +                "type": "string"
      +              },
      +              "price": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "breakdown": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "amount": {
      +                              "type": "number"
      +                            },
      +                            "label": {
      +                              "maxLength": 160,
      +                              "minLength": 1,
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "label",
      +                            "amount"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 30,
      +                        "type": "array"
      +                      },
      +                      "completeness": {
      +                        "enum": [
      +                          "total",
      +                          "partial"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      },
      +                      "taxesIncluded": {
      +                        "anyOf": [
      +                          {
      +                            "type": "boolean"
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "total": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "total",
      +                      "breakdown",
      +                      "completeness",
      +                      "taxesIncluded"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "propertyId": {
      +                "type": "string"
      +              },
      +              "reason": {
      +                "enum": [
      +                  "checked",
      +                  "blocked_dates",
      +                  "minimum_stay",
      +                  "maximum_stay",
      +                  "arrival_departure_rules",
      +                  "advance_notice",
      +                  "capacity",
      +                  "unsupported_host",
      +                  "browser_unconfigured",
      +                  "upstream_unavailable",
      +                  "date_range_unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "roomSelection": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "averageNightlyPrice": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "amount": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "amount"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "name": {
      +                    "maxLength": 200,
      +                    "minLength": 1,
      +                    "type": "string"
      +                  },
      +                  "ratePlan": {
      +                    "maxLength": 200,
      +                    "type": "string"
      +                  },
      +                  "rooms": {
      +                    "const": 1,
      +                    "type": "number"
      +                  }
      +                },
      +                "required": [
      +                  "name",
      +                  "rooms"
      +                ],
      +                "type": "object"
      +              },
      +              "sourceUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "startingNightlyPrice": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "amount": {
      +                    "minimum": 0,
      +                    "type": "number"
      +                  },
      +                  "currency": {
      +                    "pattern": "^[A-Z]{3}$",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "currency",
      +                  "amount"
      +                ],
      +                "type": "object"
      +              },
      +              "terms": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "cancellation": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "freeUntil": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "nonRefundable": {
      +                        "type": "boolean"
      +                      },
      +                      "policyText": {
      +                        "maxLength": 2000,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "refundWindows": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "from": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            },
      +                            "refundPercent": {
      +                              "maximum": 100,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            },
      +                            "until": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "refundPercent"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 20,
      +                        "type": "array"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "payment": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "balanceDue": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "balanceDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "chargedBy": {
      +                        "enum": [
      +                          "host",
      +                          "booking_engine"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "depositAmount": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "depositDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "depositPercent": {
      +                        "maximum": 100,
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "provenance": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "fetchedAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "rawSourceField": {
      +                        "maxLength": 200,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "reader": {
      +                        "maxLength": 100,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "reader",
      +                      "rawSourceField",
      +                      "fetchedAt"
      +                    ],
      +                    "type": "object"
      +                  }
      +                },
      +                "required": [
      +                  "provenance"
      +                ],
      +                "type": "object"
      +              }
      +            },
      +            "required": [
      +              "propertyId",
      +              "arrival",
      +              "departure",
      +              "guests",
      +              "nights",
      +              "availability",
      +              "reason",
      +              "minimumNights",
      +              "price",
      +              "checkedAt",
      +              "expiresAt",
      +              "sourceUrl",
      +              "bookingUrl",
      +              "held"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "request": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "arrival": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "childAges": {
      +            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      +            "items": {
      +              "maximum": 17,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "maxItems": 199,
      +            "type": "array"
      +          },
      +          "children": {
      +            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      +            "maximum": 199,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "currency": {
      +            "description": "Preferred ISO 4217 currency, e.g. USD, EUR or NOK. Rough nightly estimates use approximate conversions (USD by default) when a fresh rate is supported; otherwise retain the host currency. Dated quotes depend on host support: always inspect the returned currency. May be supplied without dates for browsing.",
      +            "pattern": "^[A-Z]{3}$",
      +            "type": "string"
      +          },
      +          "departure": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "execution": {
      +            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      +            "enum": [
      +              "auto",
      +              "browser"
      +            ],
      +            "type": "string"
      +          },
      +          "guests": {
      +            "maximum": 200,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "id": {
      +            "maxLength": 160,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "arrival",
      +          "departure",
      +          "guests"
      +        ],
      +        "type": "object"
      +      },
      +      "status": {
      +        "enum": [
      +          "ready",
      +          "pending",
      +          "not_checked",
      +          "limited"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "basis",
      +      "status",
      +      "request",
      +      "quote"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "basis": {
      +        "const": "sample",
      +        "type": "string"
      +      },
      +      "diagnostics": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "attemptedStays": {
      +            "maximum": 4,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "reason": {
      +            "description": "Last sampled observation when no dated total was selected. Applies only to attempted stays; blocked samples never establish that the whole window is sold out. Terminal unsupported_host/upstream_unavailable evidence should be explained, not retried unchanged.",
      +            "enum": [
      +              "checked",
      +              "blocked_dates",
      +              "minimum_stay",
      +              "maximum_stay",
      +              "arrival_departure_rules",
      +              "advance_notice",
      +              "capacity",
      +              "unsupported_host",
      +              "browser_unconfigured",
      +              "upstream_unavailable",
      +              "date_range_unknown"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "attemptedStays"
      +        ],
      +        "type": "object"
      +      },
      +      "estimate": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "childAges": {
      +            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      +            "items": {
      +              "maximum": 17,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "maxItems": 199,
      +            "type": "array"
      +          },
      +          "children": {
      +            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      +            "maximum": 199,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "currency": {
      +            "description": "Preferred ISO 4217 currency, e.g. USD, EUR or NOK. Rough nightly estimates use approximate conversions (USD by default) when a fresh rate is supported; otherwise retain the host currency. Dated quotes depend on host support: always inspect the returned currency. May be supplied without dates for browsing.",
      +            "pattern": "^[A-Z]{3}$",
      +            "type": "string"
      +          },
      +          "guests": {
      +            "maximum": 200,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "id": {
      +            "maxLength": 160,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "nights": {
      +            "maximum": 30,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "windowEnd": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "windowStart": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "windowStart",
      +          "windowEnd",
      +          "nights",
      +          "guests"
      +        ],
      +        "type": "object"
      +      },
      +      "quote": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "arrival": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "availability": {
      +                "enum": [
      +                  "available",
      +                  "unavailable",
      +                  "unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "bookingUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "checkedAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "departure": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "expiresAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "guests": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "held": {
      +                "const": false,
      +                "type": "boolean"
      +              },
      +              "minimumNights": {
      +                "anyOf": [
      +                  {
      +                    "exclusiveMinimum": 0,
      +                    "maximum": 9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "nights": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "partyBasis": {
      +                "const": "all_adults",
      +                "type": "string"
      +              },
      +              "price": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "breakdown": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "amount": {
      +                              "type": "number"
      +                            },
      +                            "label": {
      +                              "maxLength": 160,
      +                              "minLength": 1,
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "label",
      +                            "amount"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 30,
      +                        "type": "array"
      +                      },
      +                      "completeness": {
      +                        "enum": [
      +                          "total",
      +                          "partial"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      },
      +                      "taxesIncluded": {
      +                        "anyOf": [
      +                          {
      +                            "type": "boolean"
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "total": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "total",
      +                      "breakdown",
      +                      "completeness",
      +                      "taxesIncluded"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "propertyId": {
      +                "type": "string"
      +              },
      +              "reason": {
      +                "enum": [
      +                  "checked",
      +                  "blocked_dates",
      +                  "minimum_stay",
      +                  "maximum_stay",
      +                  "arrival_departure_rules",
      +                  "advance_notice",
      +                  "capacity",
      +                  "unsupported_host",
      +                  "browser_unconfigured",
      +                  "upstream_unavailable",
      +                  "date_range_unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "roomSelection": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "averageNightlyPrice": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "amount": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "amount"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "name": {
      +                    "maxLength": 200,
      +                    "minLength": 1,
      +                    "type": "string"
      +                  },
      +                  "ratePlan": {
      +                    "maxLength": 200,
      +                    "type": "string"
      +                  },
      +                  "rooms": {
      +                    "const": 1,
      +                    "type": "number"
      +                  }
      +                },
      +                "required": [
      +                  "name",
      +                  "rooms"
      +                ],
      +                "type": "object"
      +              },
      +              "sourceUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "startingNightlyPrice": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "amount": {
      +                    "minimum": 0,
      +                    "type": "number"
      +                  },
      +                  "currency": {
      +                    "pattern": "^[A-Z]{3}$",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "currency",
      +                  "amount"
      +                ],
      +                "type": "object"
      +              },
      +              "terms": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "cancellation": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "freeUntil": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "nonRefundable": {
      +                        "type": "boolean"
      +                      },
      +                      "policyText": {
      +                        "maxLength": 2000,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "refundWindows": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "from": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            },
      +                            "refundPercent": {
      +                              "maximum": 100,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            },
      +                            "until": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "refundPercent"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 20,
      +                        "type": "array"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "payment": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "balanceDue": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "balanceDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "chargedBy": {
      +                        "enum": [
      +                          "host",
      +                          "booking_engine"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "depositAmount": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "depositDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "depositPercent": {
      +                        "maximum": 100,
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "provenance": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "fetchedAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "rawSourceField": {
      +                        "maxLength": 200,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "reader": {
      +                        "maxLength": 100,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "reader",
      +                      "rawSourceField",
      +                      "fetchedAt"
      +                    ],
      +                    "type": "object"
      +                  }
      +                },
      +                "required": [
      +                  "provenance"
      +                ],
      +                "type": "object"
      +              }
      +            },
      +            "required": [
      +              "propertyId",
      +              "arrival",
      +              "departure",
      +              "guests",
      +              "nights",
      +              "availability",
      +              "reason",
      +              "minimumNights",
      +              "price",
      +              "checkedAt",
      +              "expiresAt",
      +              "sourceUrl",
      +              "bookingUrl",
      +              "held"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "request": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "arrival": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "childAges": {
      +            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      +            "items": {
      +              "maximum": 17,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "maxItems": 199,
      +            "type": "array"
      +          },
      +          "children": {
      +            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      +            "maximum": 199,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "currency": {
      +            "description": "Preferred ISO 4217 currency, e.g. USD, EUR or NOK. Rough nightly estimates use approximate conversions (USD by default) when a fresh rate is supported; otherwise retain the host currency. Dated quotes depend on host support: always inspect the returned currency. May be supplied without dates for browsing.",
      +            "pattern": "^[A-Z]{3}$",
      +            "type": "string"
      +          },
      +          "departure": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "execution": {
      +            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      +            "enum": [
      +              "auto",
      +              "browser"
      +            ],
      +            "type": "string"
      +          },
      +          "guests": {
      +            "maximum": 200,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "id": {
      +            "maxLength": 160,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "arrival",
      +          "departure",
      +          "guests"
      +        ],
      +        "type": "object"
      +      },
      +      "status": {
      +        "enum": [
      +          "ready",
      +          "pending",
      +          "not_checked",
      +          "limited"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "basis",
      +      "status",
      +      "request",
      +      "quote",
      +      "estimate"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed2 schema fields changed
    • changedInput schema / properties / currency / enum
      Previous value: -[
      -  "USD",
      -  "EUR",
      -  "GBP",
      -  "CRC",
      -  "MXN",
      -  "COP",
      -  "PEN",
      -  "BRL",
      -  "AUD"
      -]New value: +[
      +  "USD",
      +  "EUR",
      +  "GBP",
      +  "CRC",
      +  "MXN",
      +  "COP",
      +  "PEN",
      +  "BRL",
      +  "AUD",
      +  "NZD"
      +]
    • changedOutput schema / properties / properties / items / properties / stayQuote / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "basis": {
      -        "const": "exact",
      -        "type": "string"
      -      },
      -      "quote": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "arrival": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "availability": {
      -                "enum": [
      -                  "available",
      -                  "unavailable",
      -                  "unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "bookingUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "checkedAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "departure": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "expiresAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "guests": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "held": {
      -                "const": false,
      -                "type": "boolean"
      -              },
      -              "minimumNights": {
      -                "anyOf": [
      -                  {
      -                    "exclusiveMinimum": 0,
      -                    "maximum": 9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "nights": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "partyBasis": {
      -                "const": "all_adults",
      -                "type": "string"
      -              },
      -              "price": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "breakdown": {
      -                        "items": {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "amount": {
      -                              "type": "number"
      -                            },
      -                            "label": {
      -                              "maxLength": 160,
      -                              "minLength": 1,
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "label",
      -                            "amount"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        "maxItems": 30,
      -                        "type": "array"
      -                      },
      -                      "completeness": {
      -                        "enum": [
      -                          "total",
      -                          "partial"
      -                        ],
      -                        "type": "string"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      },
      -                      "taxesIncluded": {
      -                        "anyOf": [
      -                          {
      -                            "type": "boolean"
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "total": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "total",
      -                      "breakdown",
      -                      "completeness",
      -                      "taxesIncluded"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "propertyId": {
      -                "type": "string"
      -              },
      -              "reason": {
      -                "enum": [
      -                  "checked",
      -                  "blocked_dates",
      -                  "minimum_stay",
      -                  "maximum_stay",
      -                  "arrival_departure_rules",
      -                  "advance_notice",
      -                  "capacity",
      -                  "unsupported_host",
      -                  "browser_unconfigured",
      -                  "upstream_unavailable",
      -                  "date_range_unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "roomSelection": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "averageNightlyPrice": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "amount": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "amount"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  "name": {
      -                    "maxLength": 200,
      -                    "minLength": 1,
      -                    "type": "string"
      -                  },
      -                  "ratePlan": {
      -                    "maxLength": 200,
      -                    "type": "string"
      -                  },
      -                  "rooms": {
      -                    "const": 1,
      -                    "type": "number"
      -                  }
      -                },
      -                "required": [
      -                  "name",
      -                  "rooms"
      -                ],
      -                "type": "object"
      -              },
      -              "sourceUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "startingNightlyPrice": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "amount": {
      -                    "minimum": 0,
      -                    "type": "number"
      -                  },
      -                  "currency": {
      -                    "pattern": "^[A-Z]{3}$",
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "currency",
      -                  "amount"
      -                ],
      -                "type": "object"
      -              },
      -              "terms": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "cancellation": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "freeUntil": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "nonRefundable": {
      -                        "type": "boolean"
      -                      },
      -                      "policyText": {
      -                        "maxLength": 2000,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      },
      -                      "refundWindows": {
      -                        "items": {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "from": {
      -                              "format": "date-time",
      -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                              "type": "string"
      -                            },
      -                            "refundPercent": {
      -                              "maximum": 100,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            },
      -                            "until": {
      -                              "format": "date-time",
      -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "refundPercent"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        "maxItems": 20,
      -                        "type": "array"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  "payment": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "balanceDue": {
      -                        "additionalProperties": false,
      -                        "properties": {
      -                          "amount": {
      -                            "minimum": 0,
      -                            "type": "number"
      -                          },
      -                          "currency": {
      -                            "pattern": "^[A-Z]{3}$",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "amount",
      -                          "currency"
      -                        ],
      -                        "type": "object"
      -                      },
      -                      "balanceDueAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "chargedBy": {
      -                        "enum": [
      -                          "host",
      -                          "booking_engine"
      -                        ],
      -                        "type": "string"
      -                      },
      -                      "depositAmount": {
      -                        "additionalProperties": false,
      -                        "properties": {
      -                          "amount": {
      -                            "minimum": 0,
      -                            "type": "number"
      -                          },
      -                          "currency": {
      -                            "pattern": "^[A-Z]{3}$",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "amount",
      -                          "currency"
      -                        ],
      -                        "type": "object"
      -                      },
      -                      "depositDueAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "depositPercent": {
      -                        "maximum": 100,
      -                        "minimum": 0,
      -                        "type": "number"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  "provenance": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "fetchedAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "rawSourceField": {
      -                        "maxLength": 200,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      },
      -                      "reader": {
      -                        "maxLength": 100,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "reader",
      -                      "rawSourceField",
      -                      "fetchedAt"
      -                    ],
      -                    "type": "object"
      -                  }
      -                },
      -                "required": [
      -                  "provenance"
      -                ],
      -                "type": "object"
      -              }
      -            },
      -            "required": [
      -              "propertyId",
      -              "arrival",
      -              "departure",
      -              "guests",
      -              "nights",
      -              "availability",
      -              "reason",
      -              "minimumNights",
      -              "price",
      -              "checkedAt",
      -              "expiresAt",
      -              "sourceUrl",
      -              "bookingUrl",
      -              "held"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "request": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "arrival": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "childAges": {
      -            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      -            "items": {
      -              "maximum": 17,
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "maxItems": 199,
      -            "type": "array"
      -          },
      -          "children": {
      -            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      -            "maximum": 199,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "currency": {
      -            "enum": [
      -              "USD",
      -              "EUR",
      -              "GBP",
      -              "CRC",
      -              "MXN",
      -              "COP",
      -              "PEN",
      -              "BRL",
      -              "AUD"
      -            ],
      -            "type": "string"
      -          },
      -          "departure": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "execution": {
      -            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      -            "enum": [
      -              "auto",
      -              "browser"
      -            ],
      -            "type": "string"
      -          },
      -          "guests": {
      -            "maximum": 200,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "id": {
      -            "maxLength": 160,
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "arrival",
      -          "departure",
      -          "guests"
      -        ],
      -        "type": "object"
      -      },
      -      "status": {
      -        "enum": [
      -          "ready",
      -          "pending",
      -          "not_checked",
      -          "limited"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "basis",
      -      "status",
      -      "request",
      -      "quote"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "basis": {
      -        "const": "sample",
      -        "type": "string"
      -      },
      -      "diagnostics": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "attemptedStays": {
      -            "maximum": 4,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          "reason": {
      -            "description": "Last sampled observation when no dated total was selected. Applies only to attempted stays; blocked samples never establish that the whole window is sold out. Terminal unsupported_host/upstream_unavailable evidence should be explained, not retried unchanged.",
      -            "enum": [
      -              "checked",
      -              "blocked_dates",
      -              "minimum_stay",
      -              "maximum_stay",
      -              "arrival_departure_rules",
      -              "advance_notice",
      -              "capacity",
      -              "unsupported_host",
      -              "browser_unconfigured",
      -              "upstream_unavailable",
      -              "date_range_unknown"
      -            ],
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "attemptedStays"
      -        ],
      -        "type": "object"
      -      },
      -      "estimate": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "childAges": {
      -            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      -            "items": {
      -              "maximum": 17,
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "maxItems": 199,
      -            "type": "array"
      -          },
      -          "children": {
      -            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      -            "maximum": 199,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "currency": {
      -            "enum": [
      -              "USD",
      -              "EUR",
      -              "GBP",
      -              "CRC",
      -              "MXN",
      -              "COP",
      -              "PEN",
      -              "BRL",
      -              "AUD"
      -            ],
      -            "type": "string"
      -          },
      -          "guests": {
      -            "maximum": 200,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "id": {
      -            "maxLength": 160,
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "nights": {
      -            "maximum": 30,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "windowEnd": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "windowStart": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "windowStart",
      -          "windowEnd",
      -          "nights",
      -          "guests"
      -        ],
      -        "type": "object"
      -      },
      -      "quote": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "arrival": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "availability": {
      -                "enum": [
      -                  "available",
      -                  "unavailable",
      -                  "unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "bookingUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "checkedAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "departure": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "expiresAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "guests": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "held": {
      -                "const": false,
      -                "type": "boolean"
      -              },
      -              "minimumNights": {
      -                "anyOf": [
      -                  {
      -                    "exclusiveMinimum": 0,
      -                    "maximum": 9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "nights": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "partyBasis": {
      -                "const": "all_adults",
      -                "type": "string"
      -              },
      -              "price": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "breakdown": {
      -                        "items": {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "amount": {
      -                              "type": "number"
      -                            },
      -                            "label": {
      -                              "maxLength": 160,
      -                              "minLength": 1,
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "label",
      -                            "amount"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        "maxItems": 30,
      -                        "type": "array"
      -                      },
      -                      "completeness": {
      -                        "enum": [
      -                          "total",
      -                          "partial"
      -                        ],
      -                        "type": "string"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      },
      -                      "taxesIncluded": {
      -                        "anyOf": [
      -                          {
      -                            "type": "boolean"
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "total": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "total",
      -                      "breakdown",
      -                      "completeness",
      -                      "taxesIncluded"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "propertyId": {
      -                "type": "string"
      -              },
      -              "reason": {
      -                "enum": [
      -                  "checked",
      -                  "blocked_dates",
      -                  "minimum_stay",
      -                  "maximum_stay",
      -                  "arrival_departure_rules",
      -                  "advance_notice",
      -                  "capacity",
      -                  "unsupported_host",
      -                  "browser_unconfigured",
      -                  "upstream_unavailable",
      -                  "date_range_unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "roomSelection": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "averageNightlyPrice": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "amount": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "amount"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  "name": {
      -                    "maxLength": 200,
      -                    "minLength": 1,
      -                    "type": "string"
      -                  },
      -                  "ratePlan": {
      -                    "maxLength": 200,
      -                    "type": "string"
      -                  },
      -                  "rooms": {
      -                    "const": 1,
      -                    "type": "number"
      -                  }
      -                },
      -                "required": [
      -                  "name",
      -                  "rooms"
      -                ],
      -                "type": "object"
      -              },
      -              "sourceUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "startingNightlyPrice": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "amount": {
      -                    "minimum": 0,
      -                    "type": "number"
      -                  },
      -                  "currency": {
      -                    "pattern": "^[A-Z]{3}$",
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "currency",
      -                  "amount"
      -                ],
      -                "type": "object"
      -              },
      -              "terms": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "cancellation": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "freeUntil": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "nonRefundable": {
      -                        "type": "boolean"
      -                      },
      -                      "policyText": {
      -                        "maxLength": 2000,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      },
      -                      "refundWindows": {
      -                        "items": {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "from": {
      -                              "format": "date-time",
      -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                              "type": "string"
      -                            },
      -                            "refundPercent": {
      -                              "maximum": 100,
      -                              "minimum": 0,
      -                              "type": "number"
      -                            },
      -                            "until": {
      -                              "format": "date-time",
      -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "refundPercent"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        "maxItems": 20,
      -                        "type": "array"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  "payment": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "balanceDue": {
      -                        "additionalProperties": false,
      -                        "properties": {
      -                          "amount": {
      -                            "minimum": 0,
      -                            "type": "number"
      -                          },
      -                          "currency": {
      -                            "pattern": "^[A-Z]{3}$",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "amount",
      -                          "currency"
      -                        ],
      -                        "type": "object"
      -                      },
      -                      "balanceDueAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "chargedBy": {
      -                        "enum": [
      -                          "host",
      -                          "booking_engine"
      -                        ],
      -                        "type": "string"
      -                      },
      -                      "depositAmount": {
      -                        "additionalProperties": false,
      -                        "properties": {
      -                          "amount": {
      -                            "minimum": 0,
      -                            "type": "number"
      -                          },
      -                          "currency": {
      -                            "pattern": "^[A-Z]{3}$",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "amount",
      -                          "currency"
      -                        ],
      -                        "type": "object"
      -                      },
      -                      "depositDueAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "depositPercent": {
      -                        "maximum": 100,
      -                        "minimum": 0,
      -                        "type": "number"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  "provenance": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "fetchedAt": {
      -                        "format": "date-time",
      -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                        "type": "string"
      -                      },
      -                      "rawSourceField": {
      -                        "maxLength": 200,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      },
      -                      "reader": {
      -                        "maxLength": 100,
      -                        "minLength": 1,
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "reader",
      -                      "rawSourceField",
      -                      "fetchedAt"
      -                    ],
      -                    "type": "object"
      -                  }
      -                },
      -                "required": [
      -                  "provenance"
      -                ],
      -                "type": "object"
      -              }
      -            },
      -            "required": [
      -              "propertyId",
      -              "arrival",
      -              "departure",
      -              "guests",
      -              "nights",
      -              "availability",
      -              "reason",
      -              "minimumNights",
      -              "price",
      -              "checkedAt",
      -              "expiresAt",
      -              "sourceUrl",
      -              "bookingUrl",
      -              "held"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "request": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "arrival": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "childAges": {
      -            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      -            "items": {
      -              "maximum": 17,
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "maxItems": 199,
      -            "type": "array"
      -          },
      -          "children": {
      -            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      -            "maximum": 199,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "currency": {
      -            "enum": [
      -              "USD",
      -              "EUR",
      -              "GBP",
      -              "CRC",
      -              "MXN",
      -              "COP",
      -              "PEN",
      -              "BRL",
      -              "AUD"
      -            ],
      -            "type": "string"
      -          },
      -          "departure": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "execution": {
      -            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      -            "enum": [
      -              "auto",
      -              "browser"
      -            ],
      -            "type": "string"
      -          },
      -          "guests": {
      -            "maximum": 200,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "id": {
      -            "maxLength": 160,
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "arrival",
      -          "departure",
      -          "guests"
      -        ],
      -        "type": "object"
      -      },
      -      "status": {
      -        "enum": [
      -          "ready",
      -          "pending",
      -          "not_checked",
      -          "limited"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "basis",
      -      "status",
      -      "request",
      -      "quote",
      -      "estimate"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "basis": {
      +        "const": "exact",
      +        "type": "string"
      +      },
      +      "quote": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "arrival": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "availability": {
      +                "enum": [
      +                  "available",
      +                  "unavailable",
      +                  "unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "bookingUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "checkedAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "departure": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "expiresAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "guests": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "held": {
      +                "const": false,
      +                "type": "boolean"
      +              },
      +              "minimumNights": {
      +                "anyOf": [
      +                  {
      +                    "exclusiveMinimum": 0,
      +                    "maximum": 9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "nights": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "partyBasis": {
      +                "const": "all_adults",
      +                "type": "string"
      +              },
      +              "price": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "breakdown": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "amount": {
      +                              "type": "number"
      +                            },
      +                            "label": {
      +                              "maxLength": 160,
      +                              "minLength": 1,
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "label",
      +                            "amount"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 30,
      +                        "type": "array"
      +                      },
      +                      "completeness": {
      +                        "enum": [
      +                          "total",
      +                          "partial"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      },
      +                      "taxesIncluded": {
      +                        "anyOf": [
      +                          {
      +                            "type": "boolean"
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "total": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "total",
      +                      "breakdown",
      +                      "completeness",
      +                      "taxesIncluded"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "propertyId": {
      +                "type": "string"
      +              },
      +              "reason": {
      +                "enum": [
      +                  "checked",
      +                  "blocked_dates",
      +                  "minimum_stay",
      +                  "maximum_stay",
      +                  "arrival_departure_rules",
      +                  "advance_notice",
      +                  "capacity",
      +                  "unsupported_host",
      +                  "browser_unconfigured",
      +                  "upstream_unavailable",
      +                  "date_range_unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "roomSelection": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "averageNightlyPrice": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "amount": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "amount"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "name": {
      +                    "maxLength": 200,
      +                    "minLength": 1,
      +                    "type": "string"
      +                  },
      +                  "ratePlan": {
      +                    "maxLength": 200,
      +                    "type": "string"
      +                  },
      +                  "rooms": {
      +                    "const": 1,
      +                    "type": "number"
      +                  }
      +                },
      +                "required": [
      +                  "name",
      +                  "rooms"
      +                ],
      +                "type": "object"
      +              },
      +              "sourceUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "startingNightlyPrice": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "amount": {
      +                    "minimum": 0,
      +                    "type": "number"
      +                  },
      +                  "currency": {
      +                    "pattern": "^[A-Z]{3}$",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "currency",
      +                  "amount"
      +                ],
      +                "type": "object"
      +              },
      +              "terms": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "cancellation": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "freeUntil": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "nonRefundable": {
      +                        "type": "boolean"
      +                      },
      +                      "policyText": {
      +                        "maxLength": 2000,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "refundWindows": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "from": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            },
      +                            "refundPercent": {
      +                              "maximum": 100,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            },
      +                            "until": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "refundPercent"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 20,
      +                        "type": "array"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "payment": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "balanceDue": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "balanceDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "chargedBy": {
      +                        "enum": [
      +                          "host",
      +                          "booking_engine"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "depositAmount": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "depositDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "depositPercent": {
      +                        "maximum": 100,
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "provenance": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "fetchedAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "rawSourceField": {
      +                        "maxLength": 200,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "reader": {
      +                        "maxLength": 100,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "reader",
      +                      "rawSourceField",
      +                      "fetchedAt"
      +                    ],
      +                    "type": "object"
      +                  }
      +                },
      +                "required": [
      +                  "provenance"
      +                ],
      +                "type": "object"
      +              }
      +            },
      +            "required": [
      +              "propertyId",
      +              "arrival",
      +              "departure",
      +              "guests",
      +              "nights",
      +              "availability",
      +              "reason",
      +              "minimumNights",
      +              "price",
      +              "checkedAt",
      +              "expiresAt",
      +              "sourceUrl",
      +              "bookingUrl",
      +              "held"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "request": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "arrival": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "childAges": {
      +            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      +            "items": {
      +              "maximum": 17,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "maxItems": 199,
      +            "type": "array"
      +          },
      +          "children": {
      +            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      +            "maximum": 199,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "currency": {
      +            "enum": [
      +              "USD",
      +              "EUR",
      +              "GBP",
      +              "CRC",
      +              "MXN",
      +              "COP",
      +              "PEN",
      +              "BRL",
      +              "AUD",
      +              "NZD"
      +            ],
      +            "type": "string"
      +          },
      +          "departure": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "execution": {
      +            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      +            "enum": [
      +              "auto",
      +              "browser"
      +            ],
      +            "type": "string"
      +          },
      +          "guests": {
      +            "maximum": 200,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "id": {
      +            "maxLength": 160,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "arrival",
      +          "departure",
      +          "guests"
      +        ],
      +        "type": "object"
      +      },
      +      "status": {
      +        "enum": [
      +          "ready",
      +          "pending",
      +          "not_checked",
      +          "limited"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "basis",
      +      "status",
      +      "request",
      +      "quote"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "basis": {
      +        "const": "sample",
      +        "type": "string"
      +      },
      +      "diagnostics": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "attemptedStays": {
      +            "maximum": 4,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "reason": {
      +            "description": "Last sampled observation when no dated total was selected. Applies only to attempted stays; blocked samples never establish that the whole window is sold out. Terminal unsupported_host/upstream_unavailable evidence should be explained, not retried unchanged.",
      +            "enum": [
      +              "checked",
      +              "blocked_dates",
      +              "minimum_stay",
      +              "maximum_stay",
      +              "arrival_departure_rules",
      +              "advance_notice",
      +              "capacity",
      +              "unsupported_host",
      +              "browser_unconfigured",
      +              "upstream_unavailable",
      +              "date_range_unknown"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "attemptedStays"
      +        ],
      +        "type": "object"
      +      },
      +      "estimate": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "childAges": {
      +            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      +            "items": {
      +              "maximum": 17,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "maxItems": 199,
      +            "type": "array"
      +          },
      +          "children": {
      +            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      +            "maximum": 199,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "currency": {
      +            "enum": [
      +              "USD",
      +              "EUR",
      +              "GBP",
      +              "CRC",
      +              "MXN",
      +              "COP",
      +              "PEN",
      +              "BRL",
      +              "AUD",
      +              "NZD"
      +            ],
      +            "type": "string"
      +          },
      +          "guests": {
      +            "maximum": 200,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "id": {
      +            "maxLength": 160,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "nights": {
      +            "maximum": 30,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "windowEnd": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "windowStart": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "windowStart",
      +          "windowEnd",
      +          "nights",
      +          "guests"
      +        ],
      +        "type": "object"
      +      },
      +      "quote": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "arrival": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "availability": {
      +                "enum": [
      +                  "available",
      +                  "unavailable",
      +                  "unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "bookingUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "checkedAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "departure": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "expiresAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "guests": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "held": {
      +                "const": false,
      +                "type": "boolean"
      +              },
      +              "minimumNights": {
      +                "anyOf": [
      +                  {
      +                    "exclusiveMinimum": 0,
      +                    "maximum": 9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "nights": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "partyBasis": {
      +                "const": "all_adults",
      +                "type": "string"
      +              },
      +              "price": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "breakdown": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "amount": {
      +                              "type": "number"
      +                            },
      +                            "label": {
      +                              "maxLength": 160,
      +                              "minLength": 1,
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "label",
      +                            "amount"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 30,
      +                        "type": "array"
      +                      },
      +                      "completeness": {
      +                        "enum": [
      +                          "total",
      +                          "partial"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      },
      +                      "taxesIncluded": {
      +                        "anyOf": [
      +                          {
      +                            "type": "boolean"
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "total": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "total",
      +                      "breakdown",
      +                      "completeness",
      +                      "taxesIncluded"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "propertyId": {
      +                "type": "string"
      +              },
      +              "reason": {
      +                "enum": [
      +                  "checked",
      +                  "blocked_dates",
      +                  "minimum_stay",
      +                  "maximum_stay",
      +                  "arrival_departure_rules",
      +                  "advance_notice",
      +                  "capacity",
      +                  "unsupported_host",
      +                  "browser_unconfigured",
      +                  "upstream_unavailable",
      +                  "date_range_unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "roomSelection": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "averageNightlyPrice": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "amount": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "amount"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "name": {
      +                    "maxLength": 200,
      +                    "minLength": 1,
      +                    "type": "string"
      +                  },
      +                  "ratePlan": {
      +                    "maxLength": 200,
      +                    "type": "string"
      +                  },
      +                  "rooms": {
      +                    "const": 1,
      +                    "type": "number"
      +                  }
      +                },
      +                "required": [
      +                  "name",
      +                  "rooms"
      +                ],
      +                "type": "object"
      +              },
      +              "sourceUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "startingNightlyPrice": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "amount": {
      +                    "minimum": 0,
      +                    "type": "number"
      +                  },
      +                  "currency": {
      +                    "pattern": "^[A-Z]{3}$",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "currency",
      +                  "amount"
      +                ],
      +                "type": "object"
      +              },
      +              "terms": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "cancellation": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "freeUntil": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "nonRefundable": {
      +                        "type": "boolean"
      +                      },
      +                      "policyText": {
      +                        "maxLength": 2000,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "refundWindows": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "from": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            },
      +                            "refundPercent": {
      +                              "maximum": 100,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            },
      +                            "until": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "refundPercent"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 20,
      +                        "type": "array"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "payment": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "balanceDue": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "balanceDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "chargedBy": {
      +                        "enum": [
      +                          "host",
      +                          "booking_engine"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "depositAmount": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "depositDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "depositPercent": {
      +                        "maximum": 100,
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "provenance": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "fetchedAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "rawSourceField": {
      +                        "maxLength": 200,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "reader": {
      +                        "maxLength": 100,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "reader",
      +                      "rawSourceField",
      +                      "fetchedAt"
      +                    ],
      +                    "type": "object"
      +                  }
      +                },
      +                "required": [
      +                  "provenance"
      +                ],
      +                "type": "object"
      +              }
      +            },
      +            "required": [
      +              "propertyId",
      +              "arrival",
      +              "departure",
      +              "guests",
      +              "nights",
      +              "availability",
      +              "reason",
      +              "minimumNights",
      +              "price",
      +              "checkedAt",
      +              "expiresAt",
      +              "sourceUrl",
      +              "bookingUrl",
      +              "held"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "request": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "arrival": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "childAges": {
      +            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      +            "items": {
      +              "maximum": 17,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "maxItems": 199,
      +            "type": "array"
      +          },
      +          "children": {
      +            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      +            "maximum": 199,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "currency": {
      +            "enum": [
      +              "USD",
      +              "EUR",
      +              "GBP",
      +              "CRC",
      +              "MXN",
      +              "COP",
      +              "PEN",
      +              "BRL",
      +              "AUD",
      +              "NZD"
      +            ],
      +            "type": "string"
      +          },
      +          "departure": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "execution": {
      +            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      +            "enum": [
      +              "auto",
      +              "browser"
      +            ],
      +            "type": "string"
      +          },
      +          "guests": {
      +            "maximum": 200,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "id": {
      +            "maxLength": 160,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "arrival",
      +          "departure",
      +          "guests"
      +        ],
      +        "type": "object"
      +      },
      +      "status": {
      +        "enum": [
      +          "ready",
      +          "pending",
      +          "not_checked",
      +          "limited"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "basis",
      +      "status",
      +      "request",
      +      "quote",
      +      "estimate"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed4 schema fields changed
    • addedInput schema / properties / childAges
      Added value: +{
      +  "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      +  "items": {
      +    "maximum": 17,
      +    "minimum": 0,
      +    "type": "integer"
      +  },
      +  "maxItems": 199,
      +  "type": "array"
      +}
    • addedInput schema / properties / children
      Added value: +{
      +  "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      +  "maximum": 199,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedInput schema / properties / guests / description
      Previous value: -"Rental minimum sleeping capacity; for boutique hotels, actual adults for a one-room quote, with occupancy unconfirmed until that quote succeeds."New value: +"Total occupancy, adults plus children. Rentals: minimum sleeping capacity. Boutique hotels: everyone in one room for a one-room quote, priced as adults, with occupancy unconfirmed until that quote succeeds."
    • changedOutput schema / properties / properties / items / properties / stayQuote / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "basis": {
      -        "const": "exact",
      -        "type": "string"
      -      },
      -      "quote": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "arrival": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "availability": {
      -                "enum": [
      -                  "available",
      -                  "unavailable",
      -                  "unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "bookingUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "checkedAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "departure": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "expiresAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "guests": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "held": {
      -                "const": false,
      -                "type": "boolean"
      -              },
      -              "minimumNights": {
      -                "anyOf": [
      -                  {
      -                    "exclusiveMinimum": 0,
      -                    "maximum": 9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "nights": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "partyBasis": {
      -                "const": "all_adults",
      -                "type": "string"
      -              },
      -              "price": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "breakdown": {
      -                        "items": {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "amount": {
      -                              "type": "number"
      -                            },
      -                            "label": {
      -                              "maxLength": 160,
      -                              "minLength": 1,
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "label",
      -                            "amount"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        "maxItems": 30,
      -                        "type": "array"
      -                      },
      -                      "completeness": {
      -                        "enum": [
      -                          "total",
      -                          "partial"
      -                        ],
      -                        "type": "string"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      },
      -                      "taxesIncluded": {
      -                        "anyOf": [
      -                          {
      -                            "type": "boolean"
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "total": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "total",
      -                      "breakdown",
      -                      "completeness",
      -                      "taxesIncluded"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "propertyId": {
      -                "type": "string"
      -              },
      -              "reason": {
      -                "enum": [
      -                  "checked",
      -                  "blocked_dates",
      -                  "minimum_stay",
      -                  "maximum_stay",
      -                  "arrival_departure_rules",
      -                  "advance_notice",
      -                  "capacity",
      -                  "unsupported_host",
      -                  "browser_unconfigured",
      -                  "upstream_unavailable",
      -                  "date_range_unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "roomSelection": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "averageNightlyPrice": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "amount": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "amount"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  "name": {
      -                    "maxLength": 200,
      -                    "minLength": 1,
      -                    "type": "string"
      -                  },
      -                  "ratePlan": {
      -                    "maxLength": 200,
      -                    "type": "string"
      -                  },
      -                  "rooms": {
      -                    "const": 1,
      -                    "type": "number"
      -                  }
      -                },
      -                "required": [
      -                  "name",
      -                  "rooms"
      -                ],
      -                "type": "object"
      -              },
      -              "sourceUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "startingNightlyPrice": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "amount": {
      -                    "minimum": 0,
      -                    "type": "number"
      -                  },
      -                  "currency": {
      -                    "pattern": "^[A-Z]{3}$",
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "currency",
      -                  "amount"
      -                ],
      -                "type": "object"
      -              }
      -            },
      -            "required": [
      -              "propertyId",
      -              "arrival",
      -              "departure",
      -              "guests",
      -              "nights",
      -              "availability",
      -              "reason",
      -              "minimumNights",
      -              "price",
      -              "checkedAt",
      -              "expiresAt",
      -              "sourceUrl",
      -              "bookingUrl",
      -              "held"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "request": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "arrival": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "currency": {
      -            "enum": [
      -              "USD",
      -              "EUR",
      -              "GBP",
      -              "CRC",
      -              "MXN",
      -              "COP",
      -              "PEN",
      -              "BRL",
      -              "AUD"
      -            ],
      -            "type": "string"
      -          },
      -          "departure": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "execution": {
      -            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      -            "enum": [
      -              "auto",
      -              "browser"
      -            ],
      -            "type": "string"
      -          },
      -          "guests": {
      -            "maximum": 200,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "id": {
      -            "maxLength": 160,
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "arrival",
      -          "departure",
      -          "guests"
      -        ],
      -        "type": "object"
      -      },
      -      "status": {
      -        "enum": [
      -          "ready",
      -          "pending",
      -          "not_checked",
      -          "limited"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "basis",
      -      "status",
      -      "request",
      -      "quote"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "basis": {
      -        "const": "sample",
      -        "type": "string"
      -      },
      -      "diagnostics": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "attemptedStays": {
      -            "maximum": 4,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          "reason": {
      -            "description": "Last sampled observation when no dated total was selected. Applies only to attempted stays; blocked samples never establish that the whole window is sold out. Terminal unsupported_host/upstream_unavailable evidence should be explained, not retried unchanged.",
      -            "enum": [
      -              "checked",
      -              "blocked_dates",
      -              "minimum_stay",
      -              "maximum_stay",
      -              "arrival_departure_rules",
      -              "advance_notice",
      -              "capacity",
      -              "unsupported_host",
      -              "browser_unconfigured",
      -              "upstream_unavailable",
      -              "date_range_unknown"
      -            ],
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "attemptedStays"
      -        ],
      -        "type": "object"
      -      },
      -      "estimate": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "currency": {
      -            "enum": [
      -              "USD",
      -              "EUR",
      -              "GBP",
      -              "CRC",
      -              "MXN",
      -              "COP",
      -              "PEN",
      -              "BRL",
      -              "AUD"
      -            ],
      -            "type": "string"
      -          },
      -          "guests": {
      -            "maximum": 200,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "id": {
      -            "maxLength": 160,
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "nights": {
      -            "maximum": 30,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "windowEnd": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "windowStart": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "windowStart",
      -          "windowEnd",
      -          "nights",
      -          "guests"
      -        ],
      -        "type": "object"
      -      },
      -      "quote": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "arrival": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "availability": {
      -                "enum": [
      -                  "available",
      -                  "unavailable",
      -                  "unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "bookingUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "checkedAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "departure": {
      -                "format": "date",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -                "type": "string"
      -              },
      -              "expiresAt": {
      -                "format": "date-time",
      -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      -                "type": "string"
      -              },
      -              "guests": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "held": {
      -                "const": false,
      -                "type": "boolean"
      -              },
      -              "minimumNights": {
      -                "anyOf": [
      -                  {
      -                    "exclusiveMinimum": 0,
      -                    "maximum": 9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "nights": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "partyBasis": {
      -                "const": "all_adults",
      -                "type": "string"
      -              },
      -              "price": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "breakdown": {
      -                        "items": {
      -                          "additionalProperties": false,
      -                          "properties": {
      -                            "amount": {
      -                              "type": "number"
      -                            },
      -                            "label": {
      -                              "maxLength": 160,
      -                              "minLength": 1,
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "label",
      -                            "amount"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        "maxItems": 30,
      -                        "type": "array"
      -                      },
      -                      "completeness": {
      -                        "enum": [
      -                          "total",
      -                          "partial"
      -                        ],
      -                        "type": "string"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      },
      -                      "taxesIncluded": {
      -                        "anyOf": [
      -                          {
      -                            "type": "boolean"
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "total": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "total",
      -                      "breakdown",
      -                      "completeness",
      -                      "taxesIncluded"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "propertyId": {
      -                "type": "string"
      -              },
      -              "reason": {
      -                "enum": [
      -                  "checked",
      -                  "blocked_dates",
      -                  "minimum_stay",
      -                  "maximum_stay",
      -                  "arrival_departure_rules",
      -                  "advance_notice",
      -                  "capacity",
      -                  "unsupported_host",
      -                  "browser_unconfigured",
      -                  "upstream_unavailable",
      -                  "date_range_unknown"
      -                ],
      -                "type": "string"
      -              },
      -              "roomSelection": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "averageNightlyPrice": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "amount": {
      -                        "minimum": 0,
      -                        "type": "number"
      -                      },
      -                      "currency": {
      -                        "pattern": "^[A-Z]{3}$",
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "currency",
      -                      "amount"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  "name": {
      -                    "maxLength": 200,
      -                    "minLength": 1,
      -                    "type": "string"
      -                  },
      -                  "ratePlan": {
      -                    "maxLength": 200,
      -                    "type": "string"
      -                  },
      -                  "rooms": {
      -                    "const": 1,
      -                    "type": "number"
      -                  }
      -                },
      -                "required": [
      -                  "name",
      -                  "rooms"
      -                ],
      -                "type": "object"
      -              },
      -              "sourceUrl": {
      -                "format": "uri",
      -                "type": "string"
      -              },
      -              "startingNightlyPrice": {
      -                "additionalProperties": false,
      -                "properties": {
      -                  "amount": {
      -                    "minimum": 0,
      -                    "type": "number"
      -                  },
      -                  "currency": {
      -                    "pattern": "^[A-Z]{3}$",
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "currency",
      -                  "amount"
      -                ],
      -                "type": "object"
      -              }
      -            },
      -            "required": [
      -              "propertyId",
      -              "arrival",
      -              "departure",
      -              "guests",
      -              "nights",
      -              "availability",
      -              "reason",
      -              "minimumNights",
      -              "price",
      -              "checkedAt",
      -              "expiresAt",
      -              "sourceUrl",
      -              "bookingUrl",
      -              "held"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "request": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "arrival": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "currency": {
      -            "enum": [
      -              "USD",
      -              "EUR",
      -              "GBP",
      -              "CRC",
      -              "MXN",
      -              "COP",
      -              "PEN",
      -              "BRL",
      -              "AUD"
      -            ],
      -            "type": "string"
      -          },
      -          "departure": {
      -            "format": "date",
      -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -            "type": "string"
      -          },
      -          "execution": {
      -            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      -            "enum": [
      -              "auto",
      -              "browser"
      -            ],
      -            "type": "string"
      -          },
      -          "guests": {
      -            "maximum": 200,
      -            "minimum": 1,
      -            "type": "integer"
      -          },
      -          "id": {
      -            "maxLength": 160,
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "arrival",
      -          "departure",
      -          "guests"
      -        ],
      -        "type": "object"
      -      },
      -      "status": {
      -        "enum": [
      -          "ready",
      -          "pending",
      -          "not_checked",
      -          "limited"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "basis",
      -      "status",
      -      "request",
      -      "quote",
      -      "estimate"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "basis": {
      +        "const": "exact",
      +        "type": "string"
      +      },
      +      "quote": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "arrival": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "availability": {
      +                "enum": [
      +                  "available",
      +                  "unavailable",
      +                  "unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "bookingUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "checkedAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "departure": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "expiresAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "guests": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "held": {
      +                "const": false,
      +                "type": "boolean"
      +              },
      +              "minimumNights": {
      +                "anyOf": [
      +                  {
      +                    "exclusiveMinimum": 0,
      +                    "maximum": 9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "nights": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "partyBasis": {
      +                "const": "all_adults",
      +                "type": "string"
      +              },
      +              "price": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "breakdown": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "amount": {
      +                              "type": "number"
      +                            },
      +                            "label": {
      +                              "maxLength": 160,
      +                              "minLength": 1,
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "label",
      +                            "amount"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 30,
      +                        "type": "array"
      +                      },
      +                      "completeness": {
      +                        "enum": [
      +                          "total",
      +                          "partial"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      },
      +                      "taxesIncluded": {
      +                        "anyOf": [
      +                          {
      +                            "type": "boolean"
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "total": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "total",
      +                      "breakdown",
      +                      "completeness",
      +                      "taxesIncluded"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "propertyId": {
      +                "type": "string"
      +              },
      +              "reason": {
      +                "enum": [
      +                  "checked",
      +                  "blocked_dates",
      +                  "minimum_stay",
      +                  "maximum_stay",
      +                  "arrival_departure_rules",
      +                  "advance_notice",
      +                  "capacity",
      +                  "unsupported_host",
      +                  "browser_unconfigured",
      +                  "upstream_unavailable",
      +                  "date_range_unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "roomSelection": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "averageNightlyPrice": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "amount": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "amount"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "name": {
      +                    "maxLength": 200,
      +                    "minLength": 1,
      +                    "type": "string"
      +                  },
      +                  "ratePlan": {
      +                    "maxLength": 200,
      +                    "type": "string"
      +                  },
      +                  "rooms": {
      +                    "const": 1,
      +                    "type": "number"
      +                  }
      +                },
      +                "required": [
      +                  "name",
      +                  "rooms"
      +                ],
      +                "type": "object"
      +              },
      +              "sourceUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "startingNightlyPrice": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "amount": {
      +                    "minimum": 0,
      +                    "type": "number"
      +                  },
      +                  "currency": {
      +                    "pattern": "^[A-Z]{3}$",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "currency",
      +                  "amount"
      +                ],
      +                "type": "object"
      +              },
      +              "terms": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "cancellation": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "freeUntil": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "nonRefundable": {
      +                        "type": "boolean"
      +                      },
      +                      "policyText": {
      +                        "maxLength": 2000,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "refundWindows": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "from": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            },
      +                            "refundPercent": {
      +                              "maximum": 100,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            },
      +                            "until": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "refundPercent"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 20,
      +                        "type": "array"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "payment": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "balanceDue": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "balanceDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "chargedBy": {
      +                        "enum": [
      +                          "host",
      +                          "booking_engine"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "depositAmount": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "depositDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "depositPercent": {
      +                        "maximum": 100,
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "provenance": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "fetchedAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "rawSourceField": {
      +                        "maxLength": 200,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "reader": {
      +                        "maxLength": 100,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "reader",
      +                      "rawSourceField",
      +                      "fetchedAt"
      +                    ],
      +                    "type": "object"
      +                  }
      +                },
      +                "required": [
      +                  "provenance"
      +                ],
      +                "type": "object"
      +              }
      +            },
      +            "required": [
      +              "propertyId",
      +              "arrival",
      +              "departure",
      +              "guests",
      +              "nights",
      +              "availability",
      +              "reason",
      +              "minimumNights",
      +              "price",
      +              "checkedAt",
      +              "expiresAt",
      +              "sourceUrl",
      +              "bookingUrl",
      +              "held"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "request": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "arrival": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "childAges": {
      +            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      +            "items": {
      +              "maximum": 17,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "maxItems": 199,
      +            "type": "array"
      +          },
      +          "children": {
      +            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      +            "maximum": 199,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "currency": {
      +            "enum": [
      +              "USD",
      +              "EUR",
      +              "GBP",
      +              "CRC",
      +              "MXN",
      +              "COP",
      +              "PEN",
      +              "BRL",
      +              "AUD"
      +            ],
      +            "type": "string"
      +          },
      +          "departure": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "execution": {
      +            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      +            "enum": [
      +              "auto",
      +              "browser"
      +            ],
      +            "type": "string"
      +          },
      +          "guests": {
      +            "maximum": 200,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "id": {
      +            "maxLength": 160,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "arrival",
      +          "departure",
      +          "guests"
      +        ],
      +        "type": "object"
      +      },
      +      "status": {
      +        "enum": [
      +          "ready",
      +          "pending",
      +          "not_checked",
      +          "limited"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "basis",
      +      "status",
      +      "request",
      +      "quote"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "basis": {
      +        "const": "sample",
      +        "type": "string"
      +      },
      +      "diagnostics": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "attemptedStays": {
      +            "maximum": 4,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "reason": {
      +            "description": "Last sampled observation when no dated total was selected. Applies only to attempted stays; blocked samples never establish that the whole window is sold out. Terminal unsupported_host/upstream_unavailable evidence should be explained, not retried unchanged.",
      +            "enum": [
      +              "checked",
      +              "blocked_dates",
      +              "minimum_stay",
      +              "maximum_stay",
      +              "arrival_departure_rules",
      +              "advance_notice",
      +              "capacity",
      +              "unsupported_host",
      +              "browser_unconfigured",
      +              "upstream_unavailable",
      +              "date_range_unknown"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "attemptedStays"
      +        ],
      +        "type": "object"
      +      },
      +      "estimate": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "childAges": {
      +            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      +            "items": {
      +              "maximum": 17,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "maxItems": 199,
      +            "type": "array"
      +          },
      +          "children": {
      +            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      +            "maximum": 199,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "currency": {
      +            "enum": [
      +              "USD",
      +              "EUR",
      +              "GBP",
      +              "CRC",
      +              "MXN",
      +              "COP",
      +              "PEN",
      +              "BRL",
      +              "AUD"
      +            ],
      +            "type": "string"
      +          },
      +          "guests": {
      +            "maximum": 200,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "id": {
      +            "maxLength": 160,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "nights": {
      +            "maximum": 30,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "windowEnd": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "windowStart": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "windowStart",
      +          "windowEnd",
      +          "nights",
      +          "guests"
      +        ],
      +        "type": "object"
      +      },
      +      "quote": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "arrival": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "availability": {
      +                "enum": [
      +                  "available",
      +                  "unavailable",
      +                  "unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "bookingUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "checkedAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "departure": {
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "expiresAt": {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                "type": "string"
      +              },
      +              "guests": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "held": {
      +                "const": false,
      +                "type": "boolean"
      +              },
      +              "minimumNights": {
      +                "anyOf": [
      +                  {
      +                    "exclusiveMinimum": 0,
      +                    "maximum": 9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "nights": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "partyBasis": {
      +                "const": "all_adults",
      +                "type": "string"
      +              },
      +              "price": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "breakdown": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "amount": {
      +                              "type": "number"
      +                            },
      +                            "label": {
      +                              "maxLength": 160,
      +                              "minLength": 1,
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "label",
      +                            "amount"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 30,
      +                        "type": "array"
      +                      },
      +                      "completeness": {
      +                        "enum": [
      +                          "total",
      +                          "partial"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      },
      +                      "taxesIncluded": {
      +                        "anyOf": [
      +                          {
      +                            "type": "boolean"
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "total": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "total",
      +                      "breakdown",
      +                      "completeness",
      +                      "taxesIncluded"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "propertyId": {
      +                "type": "string"
      +              },
      +              "reason": {
      +                "enum": [
      +                  "checked",
      +                  "blocked_dates",
      +                  "minimum_stay",
      +                  "maximum_stay",
      +                  "arrival_departure_rules",
      +                  "advance_notice",
      +                  "capacity",
      +                  "unsupported_host",
      +                  "browser_unconfigured",
      +                  "upstream_unavailable",
      +                  "date_range_unknown"
      +                ],
      +                "type": "string"
      +              },
      +              "roomSelection": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "averageNightlyPrice": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "amount": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      },
      +                      "currency": {
      +                        "pattern": "^[A-Z]{3}$",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "currency",
      +                      "amount"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "name": {
      +                    "maxLength": 200,
      +                    "minLength": 1,
      +                    "type": "string"
      +                  },
      +                  "ratePlan": {
      +                    "maxLength": 200,
      +                    "type": "string"
      +                  },
      +                  "rooms": {
      +                    "const": 1,
      +                    "type": "number"
      +                  }
      +                },
      +                "required": [
      +                  "name",
      +                  "rooms"
      +                ],
      +                "type": "object"
      +              },
      +              "sourceUrl": {
      +                "format": "uri",
      +                "type": "string"
      +              },
      +              "startingNightlyPrice": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "amount": {
      +                    "minimum": 0,
      +                    "type": "number"
      +                  },
      +                  "currency": {
      +                    "pattern": "^[A-Z]{3}$",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "currency",
      +                  "amount"
      +                ],
      +                "type": "object"
      +              },
      +              "terms": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "cancellation": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "freeUntil": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "nonRefundable": {
      +                        "type": "boolean"
      +                      },
      +                      "policyText": {
      +                        "maxLength": 2000,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "refundWindows": {
      +                        "items": {
      +                          "additionalProperties": false,
      +                          "properties": {
      +                            "from": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            },
      +                            "refundPercent": {
      +                              "maximum": 100,
      +                              "minimum": 0,
      +                              "type": "number"
      +                            },
      +                            "until": {
      +                              "format": "date-time",
      +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "refundPercent"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        "maxItems": 20,
      +                        "type": "array"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "payment": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "balanceDue": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "balanceDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "chargedBy": {
      +                        "enum": [
      +                          "host",
      +                          "booking_engine"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "depositAmount": {
      +                        "additionalProperties": false,
      +                        "properties": {
      +                          "amount": {
      +                            "minimum": 0,
      +                            "type": "number"
      +                          },
      +                          "currency": {
      +                            "pattern": "^[A-Z]{3}$",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "amount",
      +                          "currency"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "depositDueAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "depositPercent": {
      +                        "maximum": 100,
      +                        "minimum": 0,
      +                        "type": "number"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "provenance": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "fetchedAt": {
      +                        "format": "date-time",
      +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +                        "type": "string"
      +                      },
      +                      "rawSourceField": {
      +                        "maxLength": 200,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "reader": {
      +                        "maxLength": 100,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "reader",
      +                      "rawSourceField",
      +                      "fetchedAt"
      +                    ],
      +                    "type": "object"
      +                  }
      +                },
      +                "required": [
      +                  "provenance"
      +                ],
      +                "type": "object"
      +              }
      +            },
      +            "required": [
      +              "propertyId",
      +              "arrival",
      +              "departure",
      +              "guests",
      +              "nights",
      +              "availability",
      +              "reason",
      +              "minimumNights",
      +              "price",
      +              "checkedAt",
      +              "expiresAt",
      +              "sourceUrl",
      +              "bookingUrl",
      +              "held"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "request": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "arrival": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "childAges": {
      +            "description": "Each child's age at check-out, one entry per child (exactly children entries). Retained and disclosed; the host confirms child rates.",
      +            "items": {
      +              "maximum": 17,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "maxItems": 199,
      +            "type": "array"
      +          },
      +          "children": {
      +            "description": "How many of guests are children (under 18). guests stays total occupancy, so it must exceed children; capacity counts everyone. No reader prices child ages yet.",
      +            "maximum": 199,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "currency": {
      +            "enum": [
      +              "USD",
      +              "EUR",
      +              "GBP",
      +              "CRC",
      +              "MXN",
      +              "COP",
      +              "PEN",
      +              "BRL",
      +              "AUD"
      +            ],
      +            "type": "string"
      +          },
      +          "departure": {
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "execution": {
      +            "description": "Selected-home execution only. Default auto prefers the fast supported reader. browser requests the slower experimental quote-only agent on reviewed Stays sites; unsupported sites return unknown. Search never starts this agent.",
      +            "enum": [
      +              "auto",
      +              "browser"
      +            ],
      +            "type": "string"
      +          },
      +          "guests": {
      +            "maximum": 200,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "id": {
      +            "maxLength": 160,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "arrival",
      +          "departure",
      +          "guests"
      +        ],
      +        "type": "object"
      +      },
      +      "status": {
      +        "enum": [
      +          "ready",
      +          "pending",
      +          "not_checked",
      +          "limited"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "basis",
      +      "status",
      +      "request",
      +      "quote",
      +      "estimate"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Changed5 schema fields changed
    • changedInput schema / properties / semanticRequirements / description
      Previous value: -"Essential trip requirements, each copied verbatim from semantic with all relationship and provenance qualifiers. Every one must have source-backed support before a home is returned. Preserve these from the conversation; ordinary preferences belong in semanticPreferences. Omit when no essential experiential requirements were stated. Interpret semanticRequirements as conditions the accommodation or its setting must satisfy. Preserve essential support for the traveler's primary activity and access needs, including when expressed indirectly. Preserve the traveler's complete context in semantic. When the traveler states an explicit offering condition together with their own plans, circumstances or reasons, copy the complete offering condition as the essential; do not create an additional standalone proof obligation for the traveler's plan or circumstance. Keep any context necessary to understand the condition, its scope and relationships. Do not broaden a specific access requirement into proof of every aspect of the trip, and do not drop an actual offering condition because it is motivated by a traveler's circumstances. When a circumstance leaves the required accommodation or access condition ambiguous, ask one short clarifying question before searching; do not submit the circumstance itself as a property-proof requirement. If the offering condition itself is ambiguous, clarify it in the real conversation instead of inventing a stricter condition."New value: +"Essential trip requirements, each copied verbatim from semantic with all relationship and provenance qualifiers. With semantic, each is checked per candidate and reported as supported, contradicted, unknown or unchecked; candidates are not filtered by these states, so weigh them when ranking. Preserve them from the conversation; ordinary preferences belong in semanticPreferences. Omit when no essential experiential requirements were stated. Interpret semanticRequirements as conditions the accommodation or its setting must satisfy. Preserve essential support for the traveler's primary activity and access needs, including when expressed indirectly. Preserve the traveler's complete context in semantic. When the traveler states an explicit offering condition together with their own plans, circumstances or reasons, copy the complete offering condition as the essential; do not create an additional standalone proof obligation for the traveler's plan or circumstance. Keep any context necessary to understand the condition, its scope and relationships. Do not broaden a specific access requirement into proof of every aspect of the trip, and do not drop an actual offering condition because it is motivated by a traveler's circumstances. When a circumstance leaves the required accommodation or access condition ambiguous, ask one short clarifying question before searching; do not submit the circumstance itself as a property-proof requirement. If the offering condition itself is ambiguous, clarify it in the real conversation instead of inventing a stricter condition."
    • addedOutput schema / properties / candidates
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "accommodationType": {
      +        "enum": [
      +          "vacation_rental",
      +          "boutique_hotel"
      +        ],
      +        "type": "string"
      +      },
      +      "amenities": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "bathrooms": {
      +        "type": "number"
      +      },
      +      "bedrooms": {
      +        "type": "number"
      +      },
      +      "beds": {
      +        "type": "number"
      +      },
      +      "canonicalUrl": {
      +        "type": "string"
      +      },
      +      "capacity": {
      +        "type": "number"
      +      },
      +      "constraint": {
      +        "maxLength": 160,
      +        "type": "string"
      +      },
      +      "evidence": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "facts": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "basis": {
      +                  "type": "string"
      +                },
      +                "citations": {
      +                  "items": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "excerpt": {
      +                        "type": "string"
      +                      },
      +                      "kind": {
      +                        "enum": [
      +                          "text",
      +                          "image"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "scope": {
      +                        "type": "string"
      +                      },
      +                      "url": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "kind",
      +                      "url"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "type": "array"
      +                },
      +                "limitations": {
      +                  "type": "string"
      +                },
      +                "text": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "text",
      +                "basis",
      +                "citations"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "needs": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "basis": {
      +                  "type": "string"
      +                },
      +                "citations": {
      +                  "items": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "excerpt": {
      +                        "type": "string"
      +                      },
      +                      "kind": {
      +                        "enum": [
      +                          "text",
      +                          "image"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      "scope": {
      +                        "type": "string"
      +                      },
      +                      "url": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "kind",
      +                      "url"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "type": "array"
      +                },
      +                "kind": {
      +                  "enum": [
      +                    "requirement",
      +                    "preference"
      +                  ],
      +                  "type": "string"
      +                },
      +                "need": {
      +                  "type": "string"
      +                },
      +                "state": {
      +                  "enum": [
      +                    "supported",
      +                    "contradicted",
      +                    "unknown",
      +                    "unchecked"
      +                  ],
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "need",
      +                "kind",
      +                "state",
      +                "citations"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "reason": {
      +            "type": "string"
      +          },
      +          "status": {
      +            "enum": [
      +              "checked",
      +              "unchecked"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "status",
      +          "needs",
      +          "facts"
      +        ],
      +        "type": "object"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "organization": {
      +        "type": "string"
      +      },
      +      "place": {
      +        "type": "string"
      +      },
      +      "pool": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "present": {
      +            "type": "boolean"
      +          },
      +          "privacy": {
      +            "enum": [
      +              "private",
      +              "shared"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "present"
      +        ],
      +        "type": "object"
      +      },
      +      "rateEstimate": {
      +        "additionalProperties": false,
      +        "description": "Rough nightly rate per month from earlier host prices, in the host's currency. A per-night estimate only: never a stay total, a quote or availability. stay_derived months divide a quoted stay total by its nights (fees spread in, taxes possibly excluded) for partyBasis; calendar_nightly months use the host calendar's nightly rate. Use quoteMode or get_stay_quote for an actual price.",
      +        "properties": {
      +          "currency": {
      +            "maxLength": 3,
      +            "minLength": 3,
      +            "type": "string"
      +          },
      +          "expiresAt": {
      +            "type": "string"
      +          },
      +          "months": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "basis": {
      +                  "enum": [
      +                    "calendar_nightly",
      +                    "stay_derived"
      +                  ],
      +                  "type": "string"
      +                },
      +                "month": {
      +                  "pattern": "^\\d{4}-\\d{2}$",
      +                  "type": "string"
      +                },
      +                "nightlyHigh": {
      +                  "exclusiveMinimum": 0,
      +                  "type": "number"
      +                },
      +                "nightlyLow": {
      +                  "exclusiveMinimum": 0,
      +                  "type": "number"
      +                },
      +                "nightlyTypical": {
      +                  "exclusiveMinimum": 0,
      +                  "type": "number"
      +                },
      +                "partyBasis": {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "guests": {
      +                      "exclusiveMinimum": 0,
      +                      "maximum": 9007199254740991,
      +                      "type": "integer"
      +                    },
      +                    "nights": {
      +                      "exclusiveMinimum": 0,
      +                      "maximum": 9007199254740991,
      +                      "type": "integer"
      +                    }
      +                  },
      +                  "required": [
      +                    "guests",
      +                    "nights"
      +                  ],
      +                  "type": "object"
      +                },
      +                "samples": {
      +                  "exclusiveMinimum": 0,
      +                  "maximum": 9007199254740991,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "month",
      +                "nightlyLow",
      +                "nightlyTypical",
      +                "nightlyHigh",
      +                "samples",
      +                "basis"
      +              ],
      +              "type": "object"
      +            },
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "observedAt": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "currency",
      +          "months",
      +          "observedAt",
      +          "expiresAt"
      +        ],
      +        "type": "object"
      +      },
      +      "retrievalRank": {
      +        "maximum": 20,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "summary": {
      +        "maxLength": 240,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "name",
      +      "place",
      +      "amenities",
      +      "canonicalUrl",
      +      "retrievalRank",
      +      "evidence"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / coverage
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "checkedCount": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "eligibleCount": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "indexedEligibleCount": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "eligibleCount",
      +    "indexedEligibleCount",
      +    "checkedCount"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / limitations
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "properties",
      -  "locale",
      -  "organization",
      -  "relatedTo",
      -  "total",
      -  "page",
      -  "pageSize",
      -  "nextPage"
      -]
  5. Changed4 schema fields changed
    • changedInput schema / properties / amenities / description
      Previous value: -"Comma-separated amenity keys; every requested amenity must be explicitly present."New value: +"Comma-separated keys from: air-conditioning, wifi, workspace, parking, pets, kitchen, washer, step-free. Every requested key must be explicitly present. Other details (for example pool heating) belong in semantic preferences or requirements, not invented keys."
    • addedInput schema / properties / city / description
      Added value: +"Specific destination locality, not a nearby radius. Resolve ambiguous names before choosing a country; use the area tools for nearby discovery."
    • addedInput schema / properties / country / description
      Added value: +"Destination country established by the traveler or unambiguous trip context. Ask before choosing a country for an ambiguous place name."
    • addedInput schema / properties / region / description
      Added value: +"Published region name. Resolve informal areas such as south of France with get_filters before searching; an invented region label can return no homes."
  6. Changed1 schema field changed
    • addedOutput schema / properties / properties / items / properties / rateEstimate
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Rough nightly rate per month from earlier host prices, in the host's currency. A per-night estimate only: never a stay total, a quote or availability. stay_derived months divide a quoted stay total by its nights (fees spread in, taxes possibly excluded) for partyBasis; calendar_nightly months use the host calendar's nightly rate. Use quoteMode or get_stay_quote for an actual price.",
      +  "properties": {
      +    "currency": {
      +      "maxLength": 3,
      +      "minLength": 3,
      +      "type": "string"
      +    },
      +    "expiresAt": {
      +      "type": "string"
      +    },
      +    "months": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "basis": {
      +            "enum": [
      +              "calendar_nightly",
      +              "stay_derived"
      +            ],
      +            "type": "string"
      +          },
      +          "month": {
      +            "pattern": "^\\d{4}-\\d{2}$",
      +            "type": "string"
      +          },
      +          "nightlyHigh": {
      +            "exclusiveMinimum": 0,
      +            "type": "number"
      +          },
      +          "nightlyLow": {
      +            "exclusiveMinimum": 0,
      +            "type": "number"
      +          },
      +          "nightlyTypical": {
      +            "exclusiveMinimum": 0,
      +            "type": "number"
      +          },
      +          "partyBasis": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "guests": {
      +                "exclusiveMinimum": 0,
      +                "maximum": 9007199254740991,
      +                "type": "integer"
      +              },
      +              "nights": {
      +                "exclusiveMinimum": 0,
      +                "maximum": 9007199254740991,
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "guests",
      +              "nights"
      +            ],
      +            "type": "object"
      +          },
      +          "samples": {
      +            "exclusiveMinimum": 0,
      +            "maximum": 9007199254740991,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "month",
      +          "nightlyLow",
      +          "nightlyTypical",
      +          "nightlyHigh",
      +          "samples",
      +          "basis"
      +        ],
      +        "type": "object"
      +      },
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "observedAt": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "currency",
      +    "months",
      +    "observedAt",
      +    "expiresAt"
      +  ],
      +  "type": "object"
      +}
  7. Changed2 schema fields changed
    • changedOutput schema / properties / semantic / properties / matches / items / properties / assessment / properties / essentialNeeds / items / properties / basis / enum
      Previous value: -[
      -  "source_claim",
      -  "observed_visual"
      -]New value: +[
      +  "source_claim",
      +  "observed_visual",
      +  "photo_description",
      +  "nearby_places"
      +]
    • changedOutput schema / properties / semantic / properties / matches / items / properties / assessment / properties / references / items / properties / basis / enum
      Previous value: -[
      -  "source_claim",
      -  "observed_visual"
      -]New value: +[
      +  "source_claim",
      +  "observed_visual",
      +  "photo_description",
      +  "nearby_places"
      +]
  8. First observed

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Well beyond the annotations, it discloses that quote enrichment waits at most 2.5s, can return pending/not_checked/limited, never filters or ranks by availability, and reserves nothing. It also discloses that catalog totals are matching published homes rather than confirmed-available homes, and that semantic mode returns up to 20 unranked candidates with per-requirement evidence states. These are exactly the non-obvious traits an agent must know before acting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single monolithic paragraph of roughly 700 words mixing purpose, filter semantics, quote policy, ranking policy, card-rendering workflow and status-claim etiquette. The purpose is front-loaded, but the volume of workflow prescription buries the decision-relevant content and makes it hard to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 32-parameter tool with an output schema, the description still covers the hard cases: semantic vs catalog mode, pagination via nextPage, quote lifecycle and diagnostics, and the mandatory render_properties follow-up with searchContext. Nothing an agent needs in order to call it correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 78%, and the description still adds substantial meaning: how geographicArea, countries, country/region/city and organization compose, that filters AND together and unknown facts never satisfy a filter, and how arrival/departure/guests versus estimateWindow*/estimateNights/quoteMode interlock. This is genuine semantics, not restatement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource ("Search currently published properties") and later contrasts itself with get_property, get_stay_estimate, get_stay_quote and render_properties. It never differentiates itself from near-neighbour siblings such as explore_nearby or search_nearby_properties, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance exists for the biggest branching decision: omit quoteMode for pure catalog discovery, add it only with dates/guests or explicit estimate windows, and use semantic only for experiential queries. It also states when to resolve geography via get_filters first. However, the guidance is embedded in narrative prose and says nothing about when to prefer the nearby/area tools over this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.