Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "tp_assess_stay", "tp_get_availability_calendar", "tp_get_park_capabilities" and 1 more
before
{"properties":{"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public park address for traveller-facing disambiguation."},"constraints":{"items":{"properties":{"class":{"description":"How the result is acted on by an agent.","enum":["hard_physical","hard_policy","soft_preference"],"type":"string"},"code":{"description":"Stable machine-readable constraint code.","type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Omitted when status is unknown."},"detail":{"additionalProperties":true,"type":"object"},"provenance":{"anyOf":[{"enum":["pms","tp_structured","feature_flag","ai_extracted","scraped"],"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["code","class","status"],"type":"object"},"type":"array"},"options":{"items":{"properties":{"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"constraints":{"items":{"properties":{"class":{"description":"How the result is acted on by an agent.","enum":["hard_physical","hard_policy","soft_preference"],"type":"string"},"code":{"description":"Stable machine-readable constraint code.","type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Omitted when status is unknown."},"detail":{"additionalProperties":true,"type":"object"},"provenance":{"anyOf":[{"enum":["pms","tp_structured","feature_flag","ai_extracted","scraped"],"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["code","class","status"],"type":"object"},"type":"array"},"is_preferred_match":{"default":false,"description":"True when this option best matches a room/site type the traveller explicitly asked for (via preferred_room_type). Lead with this option in traveller-facing answers.","type":"boolean"},"matched_option_facets":{"description":"Canonical requested option facets confirmed or inferred on this option.","items":{"description":"Traveller-facing inventory-option facts at room/site scope.","enum":["powered","unpowered","ensuite","drive_through","slab","tent_only","accessible","spa","pet_friendly","family","pet_fee_applies","no_pet_fee","declaration_required"],"type":"string"},"type":"array"},"presentation":{"anyOf":[{"properties":{"badges":{"items":{"type":"string"},"type":"array"},"caveats":{"items":{"type":"string"},"type":"array"},"highlights":{"items":{"type":"string"},"type":"array"},"primary_cta":{"anyOf":[{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},{"type":"null"}],"default":null},"secondary_ctas":{"items":{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},"type":"array"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"suggested_next_tool":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"title":{"type":"string"}},"required":["title"],"type":"object"},{"type":"null"}],"default":null},"quote":{"anyOf":[{"properties":{"accommodation_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"currency":{"default":"AUD","type":"string"},"grand_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"nightly_rates":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"pet_fee_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"pricing_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools, e.g. 'victoria/example-park/rooms/powered-site'.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"service_fee":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"verified_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null}},"required":["room_type_ref"],"type":"object"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"verdict":{"enum":["bookable","blocked","unconfirmed"],"type":"string"}},"required":["room_type_ref","verdict"],"type":"object"},"type":"array"},"options_page":{"properties":{"candidate_eval_capped":{"default":false,"description":"True when anonymous broad assess evaluated fewer candidates than candidates_total.","type":"boolean"},"candidates_total":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Matching room types before any anonymous broad-assessment evaluation cap."},"has_more":{"default":false,"type":"boolean"},"limit":{"default":5,"maximum":25,"minimum":1,"type":"integer"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"returned":{"default":0,"minimum":0,"type":"integer"},"total":{"default":0,"minimum":0,"type":"integer"},"truncated":{"default":false,"type":"boolean"},"verdict_counts":{"additionalProperties":{"type":"integer"},"type":"object"}},"type":"object"},"presentation":{"anyOf":[{"properties":{"badges":{"items":{"type":"string"},"type":"array"},"caveats":{"items":{"type":"string"},"type":"array"},"highlights":{"items":{"type":"string"},"type":"array"},"primary_cta":{"anyOf":[{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},{"type":"null"}],"default":null},"secondary_ctas":{"items":{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},"type":"array"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"suggested_next_tool":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"title":{"type":"string"}},"required":["title"],"type":"object"},{"type":"null"}],"default":null},"property_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public property reference accepted by MCP tools."},"property_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for the property."},"quote":{"anyOf":[{"properties":{"accommodation_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"currency":{"default":"AUD","type":"string"},"grand_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"nightly_rates":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"pet_fee_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"pricing_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools, e.g. 'victoria/example-park/rooms/powered-site'.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"service_fee":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"verified_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null}},"required":["room_type_ref"],"type":"object"},{"type":"null"}],"default":null},"verdict":{"enum":["bookable","blocked","unconfirmed"],"type":"string"}},"required":["verdict"],"type":"object"}after
{"properties":{"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public park address for traveller-facing disambiguation."},"constraints":{"items":{"properties":{"class":{"description":"How the result is acted on by an agent.","enum":["hard_physical","hard_policy","soft_preference"],"type":"string"},"code":{"description":"Stable machine-readable constraint code.","type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Omitted when status is unknown."},"detail":{"additionalProperties":true,"type":"object"},"provenance":{"anyOf":[{"enum":["pms","tp_structured","feature_flag","ai_extracted","scraped"],"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["code","class","status"],"type":"object"},"type":"array"},"options":{"items":{"properties":{"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"constraints":{"items":{"properties":{"class":{"description":"How the result is acted on by an agent.","enum":["hard_physical","hard_policy","soft_preference"],"type":"string"},"code":{"description":"Stable machine-readable constraint code.","type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Omitted when status is unknown."},"detail":{"additionalProperties":true,"type":"object"},"provenance":{"anyOf":[{"enum":["pms","tp_structured","feature_flag","ai_extracted","scraped"],"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["code","class","status"],"type":"object"},"type":"array"},"is_preferred_match":{"default":false,"description":"True when this option best matches a room/site type the traveller explicitly asked for (via preferred_room_type). Lead with this option in traveller-facing answers.","type":"boolean"},"matched_option_facets":{"description":"Canonical requested option facets confirmed or inferred on this option.","items":{"description":"Traveller-facing inventory-option facts at room/site scope.","enum":["powered","unpowered","ensuite","drive_through","slab","tent_only","accessible","spa","pet_friendly","family","pet_fee_applies","no_pet_fee","declaration_required"],"type":"string"},"type":"array"},"presentation":{"anyOf":[{"properties":{"badges":{"items":{"type":"string"},"type":"array"},"caveats":{"items":{"type":"string"},"type":"array"},"highlights":{"items":{"type":"string"},"type":"array"},"primary_cta":{"anyOf":[{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},{"type":"null"}],"default":null},"secondary_ctas":{"items":{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},"type":"array"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"suggested_next_tool":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"title":{"type":"string"}},"required":["title"],"type":"object"},{"type":"null"}],"default":null},"quote":{"anyOf":[{"properties":{"accommodation_total":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"currency":{"default":"AUD","type":"string"},"grand_total":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"nightly_rates":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"pet_fee_total":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"pricing_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools, e.g. 'victoria/example-park/rooms/powered-site'.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"service_fee":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"verified_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null}},"required":["room_type_ref"],"type":"object"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"verdict":{"enum":["bookable","blocked","unconfirmed"],"type":"string"}},"required":["room_type_ref","verdict"],"type":"object"},"type":"array"},"options_page":{"properties":{"candidate_eval_capped":{"default":false,"description":"True when anonymous broad assess evaluated fewer candidates than candidates_total.","type":"boolean"},"candidates_total":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Matching room types before any anonymous broad-assessment evaluation cap."},"has_more":{"default":false,"type":"boolean"},"limit":{"default":5,"maximum":25,"minimum":1,"type":"integer"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"returned":{"default":0,"minimum":0,"type":"integer"},"total":{"default":0,"minimum":0,"type":"integer"},"truncated":{"default":false,"type":"boolean"},"verdict_counts":{"additionalProperties":{"type":"integer"},"type":"object"}},"type":"object"},"presentation":{"anyOf":[{"properties":{"badges":{"items":{"type":"string"},"type":"array"},"caveats":{"items":{"type":"string"},"type":"array"},"highlights":{"items":{"type":"string"},"type":"array"},"primary_cta":{"anyOf":[{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},{"type":"null"}],"default":null},"secondary_ctas":{"items":{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},"type":"array"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"suggested_next_tool":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"title":{"type":"string"}},"required":["title"],"type":"object"},{"type":"null"}],"default":null},"property_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public property reference accepted by MCP tools."},"property_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for the property."},"quote":{"anyOf":[{"properties":{"accommodation_total":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"currency":{"default":"AUD","type":"string"},"grand_total":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"nightly_rates":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"pet_fee_total":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"pricing_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools, e.g. 'victoria/example-park/rooms/powered-site'.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"service_fee":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"verified_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null}},"required":["room_type_ref"],"type":"object"},{"type":"null"}],"default":null},"verdict":{"enum":["bookable","blocked","unconfirmed"],"type":"string"}},"required":["verdict"],"type":"object"}⟨85 unchanged words⟩ boolean"},"base_rate":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null" ⟨21 unchanged words⟩ string"},"guest_charges":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"indicative_rate":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null" ⟨691 unchanged words⟩ "integer"},"cheapest_indicative_rate":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null ⟨104 unchanged words⟩
⟨24 unchanged words⟩ ,"both"],"type":"string"},"pet_rules_note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"property_ref":{"type":"string"},"property_url" ⟨529 unchanged words⟩
⟨215 unchanged words⟩ :null},"pet_fee_amount":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null" ⟨429 unchanged words⟩
Changed the definition of "tp_search_stays"
⟨1257 unchanged words⟩ ,"tent","swag","car_ute","fifth_wheeler","boat_trailer"],"type":"string"},{"type": ⟨1098 unchanged words⟩
Changed the definition of "tp_assess_stay", "tp_search_parks" and "tp_search_stays"
⟨383 unchanged words⟩ link to review, change details, and book. When actions.start_watch_url is present, the stay is sold out: after free alternatives, one paid availability watch link may be offered for that park. Say paid, not a price. The link does not hold a site and is not a booking. Follow-up calls may pass returned property_url or room_type_url ⟨85 unchanged words⟩
before
{"properties":{"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."}},"type":"object"},{"type":"null"}],"default":null},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public park address for traveller-facing disambiguation."},"constraints":{"items":{"properties":{"class":{"description":"How the result is acted on by an agent.","enum":["hard_physical","hard_policy","soft_preference"],"type":"string"},"code":{"description":"Stable machine-readable constraint code.","type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Omitted when status is unknown."},"detail":{"additionalProperties":true,"type":"object"},"provenance":{"anyOf":[{"enum":["pms","tp_structured","feature_flag","ai_extracted","scraped"],"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["code","class","status"],"type":"object"},"type":"array"},"options":{"items":{"properties":{"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."}},"type":"object"},{"type":"null"}],"default":null},"constraints":{"items":{"properties":{"class":{"description":"How the result is acted on by an agent.","enum":["hard_physical","hard_policy","soft_preference"],"type":"string"},"code":{"description":"Stable machine-readable constraint code.","type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Omitted when status is unknown."},"detail":{"additionalProperties":true,"type":"object"},"provenance":{"anyOf":[{"enum":["pms","tp_structured","feature_flag","ai_extracted","scraped"],"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["code","class","status"],"type":"object"},"type":"array"},"is_preferred_match":{"default":false,"description":"True when this option best matches a room/site type the traveller explicitly asked for (via preferred_room_type). Lead with this option in traveller-facing answers.","type":"boolean"},"matched_option_facets":{"description":"Canonical requested option facets confirmed or inferred on this option.","items":{"description":"Traveller-facing inventory-option facts at room/site scope.","enum":["powered","unpowered","ensuite","drive_through","slab","tent_only","accessible","spa","pet_friendly","family","pet_fee_applies","no_pet_fee","declaration_required"],"type":"string"},"type":"array"},"presentation":{"anyOf":[{"properties":{"badges":{"items":{"type":"string"},"type":"array"},"caveats":{"items":{"type":"string"},"type":"array"},"highlights":{"items":{"type":"string"},"type":"array"},"primary_cta":{"anyOf":[{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},{"type":"null"}],"default":null},"secondary_ctas":{"items":{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},"type":"array"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"suggested_next_tool":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"title":{"type":"string"}},"required":["title"],"type":"object"},{"type":"null"}],"default":null},"quote":{"anyOf":[{"properties":{"accommodation_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."}},"type":"object"},{"type":"null"}],"default":null},"currency":{"default":"AUD","type":"string"},"grand_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"nightly_rates":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"pet_fee_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"pricing_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools, e.g. 'victoria/example-park/rooms/powered-site'.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"service_fee":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"verified_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null}},"required":["room_type_ref"],"type":"object"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"verdict":{"enum":["bookable","blocked","unconfirmed"],"type":"string"}},"required":["room_type_ref","verdict"],"type":"object"},"type":"array"},"options_page":{"properties":{"candidate_eval_capped":{"default":false,"description":"True when anonymous broad assess evaluated fewer candidates than candidates_total.","type":"boolean"},"candidates_total":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Matching room types before any anonymous broad-assessment evaluation cap."},"has_more":{"default":false,"type":"boolean"},"limit":{"default":5,"maximum":25,"minimum":1,"type":"integer"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"returned":{"default":0,"minimum":0,"type":"integer"},"total":{"default":0,"minimum":0,"type":"integer"},"truncated":{"default":false,"type":"boolean"},"verdict_counts":{"additionalProperties":{"type":"integer"},"type":"object"}},"type":"object"},"presentation":{"anyOf":[{"properties":{"badges":{"items":{"type":"string"},"type":"array"},"caveats":{"items":{"type":"string"},"type":"array"},"highlights":{"items":{"type":"string"},"type":"array"},"primary_cta":{"anyOf":[{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},{"type":"null"}],"default":null},"secondary_ctas":{"items":{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},"type":"array"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"suggested_next_tool":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"title":{"type":"string"}},"required":["title"],"type":"object"},{"type":"null"}],"default":null},"property_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public property reference accepted by MCP tools."},"property_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for the property."},"quote":{"anyOf":[{"properties":{"accommodation_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."}},"type":"object"},{"type":"null"}],"default":null},"currency":{"default":"AUD","type":"string"},"grand_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"nightly_rates":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"pet_fee_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"pricing_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools, e.g. 'victoria/example-park/rooms/powered-site'.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"service_fee":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"verified_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null}},"required":["room_type_ref"],"type":"object"},{"type":"null"}],"default":null},"verdict":{"enum":["bookable","blocked","unconfirmed"],"type":"string"}},"required":["verdict"],"type":"object"}Changed the definition of "tp_assess_stay", "tp_check_equipment_fit", "tp_get_availability_calendar" and 5 more
⟨681 unchanged words⟩ this or property_url over internal IDs. Example:'vic/aireys-inlet-holiday-park'.'victoria/big4-aireys-inlet'.","examples":["vic/aireys-inlet-holiday-parkvictoria/big4-aireys-inlet"]},"property_url":{"anyOf":[{" ⟨18 unchanged words⟩ as an alias of property_ref. Example: 'https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park'.//totalparks.com.au/victoria/big4-aireys-inlet'.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park//totalparks.com.au/victoria/big4-aireys-inlet"]},"room_type_id":{"anyOf":[{" ⟨33 unchanged words⟩ ref returned by search or tp_assess_stay. Example:'vic/aireys-inlet-holiday-park/powered-ensuite'.'victoria/big4-aireys-inlet/rooms/cosy-cottage-4-person'.","examples":["
Changed the definition of "tp_assess_stay", "tp_check_equipment_fit", "tp_get_availability_calendar" and 8 more
⟨5 unchanged words⟩ {"type":"null"}],"default":null,"description":"Stay-kind filter: 'site' for caravan/camping sites, 'accommodation' for cabins and other roofed stays. Natural words such as 'cabins' or 'powered sites' are also accepted.","examples":["site"]},"adults":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Number of adults in the party. Default 2 when omitted. Example: 2.","examples":[2]},"breed":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Alias of pet_breed. Guest-supplied breed name or slug.","examples":["staffordshire-bull-terrier"]},"check_in":{"anyOf":[{"format" ⟨3 unchanged words⟩ {"type":"null"}],"default":null,"description":"Stay check-in date (YYYY-MM-DD). Pair with check_out. Example: '2026-10-03'.","examples":["2026-10-03"]},"check_out":{"anyOf":[{"format" ⟨3 unchanged words⟩ {"type":"null"}],"default":null,"description":"Stay check-out date (YYYY-MM-DD). Must be after check_in. Example: '2026-10-06'.","examples":["2026-10-06"]},"children":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Number of children in the party, excluding infants. Default 0 when omitted.","examples":[0]
Certificate recorded, valid to 2026-12-29
Authorization not required
First tool surface recorded: 11 tools (server version 2.14.7)
Showing the latest 8 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
after
{"properties":{"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public park address for traveller-facing disambiguation."},"constraints":{"items":{"properties":{"class":{"description":"How the result is acted on by an agent.","enum":["hard_physical","hard_policy","soft_preference"],"type":"string"},"code":{"description":"Stable machine-readable constraint code.","type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Omitted when status is unknown."},"detail":{"additionalProperties":true,"type":"object"},"provenance":{"anyOf":[{"enum":["pms","tp_structured","feature_flag","ai_extracted","scraped"],"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["code","class","status"],"type":"object"},"type":"array"},"options":{"items":{"properties":{"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"constraints":{"items":{"properties":{"class":{"description":"How the result is acted on by an agent.","enum":["hard_physical","hard_policy","soft_preference"],"type":"string"},"code":{"description":"Stable machine-readable constraint code.","type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Omitted when status is unknown."},"detail":{"additionalProperties":true,"type":"object"},"provenance":{"anyOf":[{"enum":["pms","tp_structured","feature_flag","ai_extracted","scraped"],"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["code","class","status"],"type":"object"},"type":"array"},"is_preferred_match":{"default":false,"description":"True when this option best matches a room/site type the traveller explicitly asked for (via preferred_room_type). Lead with this option in traveller-facing answers.","type":"boolean"},"matched_option_facets":{"description":"Canonical requested option facets confirmed or inferred on this option.","items":{"description":"Traveller-facing inventory-option facts at room/site scope.","enum":["powered","unpowered","ensuite","drive_through","slab","tent_only","accessible","spa","pet_friendly","family","pet_fee_applies","no_pet_fee","declaration_required"],"type":"string"},"type":"array"},"presentation":{"anyOf":[{"properties":{"badges":{"items":{"type":"string"},"type":"array"},"caveats":{"items":{"type":"string"},"type":"array"},"highlights":{"items":{"type":"string"},"type":"array"},"primary_cta":{"anyOf":[{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},{"type":"null"}],"default":null},"secondary_ctas":{"items":{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},"type":"array"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"suggested_next_tool":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"title":{"type":"string"}},"required":["title"],"type":"object"},{"type":"null"}],"default":null},"quote":{"anyOf":[{"properties":{"accommodation_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"currency":{"default":"AUD","type":"string"},"grand_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"nightly_rates":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"pet_fee_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"pricing_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools, e.g. 'victoria/example-park/rooms/powered-site'.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"service_fee":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"verified_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null}},"required":["room_type_ref"],"type":"object"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"verdict":{"enum":["bookable","blocked","unconfirmed"],"type":"string"}},"required":["room_type_ref","verdict"],"type":"object"},"type":"array"},"options_page":{"properties":{"candidate_eval_capped":{"default":false,"description":"True when anonymous broad assess evaluated fewer candidates than candidates_total.","type":"boolean"},"candidates_total":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Matching room types before any anonymous broad-assessment evaluation cap."},"has_more":{"default":false,"type":"boolean"},"limit":{"default":5,"maximum":25,"minimum":1,"type":"integer"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"recovery_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"returned":{"default":0,"minimum":0,"type":"integer"},"total":{"default":0,"minimum":0,"type":"integer"},"truncated":{"default":false,"type":"boolean"},"verdict_counts":{"additionalProperties":{"type":"integer"},"type":"object"}},"type":"object"},"presentation":{"anyOf":[{"properties":{"badges":{"items":{"type":"string"},"type":"array"},"caveats":{"items":{"type":"string"},"type":"array"},"highlights":{"items":{"type":"string"},"type":"array"},"primary_cta":{"anyOf":[{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},{"type":"null"}],"default":null},"secondary_ctas":{"items":{"properties":{"kind":{"default":"primary","enum":["primary","secondary"],"type":"string"},"label":{"type":"string"},"tool_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional MCP tool name that should usually precede this CTA."},"url":{"type":"string"}},"required":["label","url"],"type":"object"},"type":"array"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"suggested_next_tool":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"title":{"type":"string"}},"required":["title"],"type":"object"},{"type":"null"}],"default":null},"property_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public property reference accepted by MCP tools."},"property_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for the property."},"quote":{"anyOf":[{"properties":{"accommodation_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"actions":{"anyOf":[{"properties":{"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link for this stay intent. Opening this URL starts the normal room-page checkout path; it does not create a cart, reserve inventory, or grant transaction authority. When present for a stay the traveller is considering, present the URL prominently as the next step to review, change details, and book. Do not expose raw field names or internal implementation jargon in traveller-facing prose."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review and pay for a paid availability watch when this stay is sold out. Opening it does not create a watch, hold a site, or take payment in chat. Mention it only after free alternatives, and only if the traveller still wants this park. Say paid, not a dollar amount."}},"type":"object"},{"type":"null"}],"default":null},"currency":{"default":"AUD","type":"string"},"grand_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"nightly_rates":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"pet_fee_total":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"pricing_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"room_type_ref":{"description":"Public room/site reference accepted by MCP tools, e.g. 'victoria/example-park/rooms/powered-site'.","type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks URL for this room/site type."},"service_fee":{"anyOf":[{"pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","type":"string"},{"type":"null"}],"default":null},"verified_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null}},"required":["room_type_ref"],"type":"object"},{"type":"null"}],"default":null},"verdict":{"enum":["bookable","blocked","unconfirmed"],"type":"string"}},"required":["verdict"],"type":"object"}before
{"description":"Versioned response envelope for the unified search primitive.","properties":{"candidates":{"description":"Ranked, tiered primary candidate results.","items":{"description":"Lightweight search result; deep judgement lives in assess tools.","properties":{"actions":{"anyOf":[{"description":"Optional handoff links for a candidate.","properties":{"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Request-to-Book form for an eligible request-only property. A submitted request is not a confirmed booking."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link when a specific option is ready for checkout handoff. It does not reserve inventory."}},"type":"object"},{"type":"null"}],"default":null,"description":"Optional Total Parks handoff URLs."},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for grounded result summaries."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"image_urls":{"description":"Approved public property image URLs in display order.","items":{"type":"string"},"type":"array"},"indicative_pricing":{"anyOf":[{"description":"Separate indicative price summaries for supported stay kinds.","properties":{"accommodation":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative cabin/accommodation stay price when complete cached rates exist."},"site":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative site stay price when complete cached rates exist."}},"type":"object"},{"type":"null"}],"default":null,"description":"Cache-only indicative pricing split by stay kind. Omitted when search did not run dated/flexible planning, rates are incomplete, or the candidate is discovery-only."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned map pins when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location, e.g. 'Lakes Entrance, VIC'."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned map pins when known."},"management_ids":{"description":"Management group IDs for logo lookup on result cards.","items":{"type":"integer"},"type":"array"},"matched_signals":{"description":"Lane-specific annotations; not full constraint results.","items":{"description":"One lane-specific reason a candidate matched the structured query.","properties":{"code":{"description":"Stable machine-readable match code.","maxLength":100,"minLength":1,"type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Confidence for this annotation when applicable."},"detail":{"additionalProperties":true,"description":"Optional structured detail for clients that need it.","type":"object"},"label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Short traveller-facing match label."},"lane":{"description":"Search lane that produced this annotation.","enum":["geo","filter","vibe","intent"],"type":"string"},"provenance":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Source class for the matched signal when known."}},"required":["lane","code"],"type":"object"},"type":"array"},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning":{"anyOf":[{"description":"Freshness/provenance wrapper for planning-tier availability facts.","properties":{"checkout_note":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Traveller/agent-facing note: availability comes from live Total Parks inventory and is confirmed at checkout before payment.","type":"string"},"last_updated":{"description":"Most recent source timestamp contributing to this status.","format":"date-time","type":"string"},"planning_tier_caveat":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Deprecated alias of checkout_note. Emitted for ChatGPT plugin / MCP compatibility until the next directory release; prefer checkout_note. See docs/features/CHATGPT_PLUGIN.md.","type":"string"},"provenance":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Total Parks live inventory source (PMS-synced ARI). Search reads this replica rather than issuing per-candidate PMS round-trips.","type":"string"},"status":{"description":"Live inventory availability status from Total Parks ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},"status_label":{"default":"","description":"Traveller-facing availability phrase derived from status. Render this in answers instead of the raw status enum.","type":"string"}},"required":["status","last_updated"],"type":"object"},{"type":"null"}],"default":null,"description":"Planning-tier availability envelope when intent was supplied."},"property_id":{"description":"Internal property ID for list/map sync and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight cards and agent summaries."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing room/site URL when the candidate is option-specific."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_ref","property_url","property_id","tier","channel_state","confidence"],"type":"object"},"type":"array"},"contract_version":{"const":"search.v1","default":"search.v1","description":"Stable search contract version.","type":"string"},"facets":{"anyOf":[{"description":"Filter-lane facet counts for the current search result set.","properties":{"accessible":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"accommodation_kind":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"booking_enabled":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"channel_state":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"feature_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"highlight_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"management_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"option_facets":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"pet_friendly":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"setting":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"states":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"traveller_appeal":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"}},"type":"object"},{"type":"null"}],"default":null,"description":"Filter facet counts for the primary result set."},"map_candidates":{"description":"Compact unpaginated marker projection for every primary candidate matching the canonical query. List pagination does not apply to this field.","items":{"description":"Compact, unpaginated marker state for search map projections.","properties":{"bookable_option_count":{"default":0,"description":"Matching bookable room options for the dated planning request.","minimum":0,"type":"integer"},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for map popovers."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"headline_price":{"anyOf":[{"description":"Single compact headline price for map marker labels.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind"],"type":"object"},{"type":"null"}],"default":null,"description":"Single cache-only headline price for marker labels."},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Single approved cover image URL for map popovers."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned pin geometry when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location for map popovers."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned pin geometry when known."},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning_status":{"anyOf":[{"description":"Live Total Parks inventory status from PMS-synced ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},{"type":"null"}],"default":null,"description":"Planning status for marker colour, when intent was supplied."},"planning_status_label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing planning label for marker popovers."},"property_id":{"description":"Internal property ID for map pins and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight map popovers."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing request form for an eligible request-only property."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing booking handoff URL when available."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_id","property_ref","property_url","tier","channel_state","confidence"],"type":"object"},"type":"array"},"nearby_candidates":{"description":"Ranked, tiered candidates outside the primary search envelope but within the request's nearby radius. Not included in paging totals or facet counts.","items":{"description":"Lightweight search result; deep judgement lives in assess tools.","properties":{"actions":{"anyOf":[{"description":"Optional handoff links for a candidate.","properties":{"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Request-to-Book form for an eligible request-only property. A submitted request is not a confirmed booking."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link when a specific option is ready for checkout handoff. It does not reserve inventory."}},"type":"object"},{"type":"null"}],"default":null,"description":"Optional Total Parks handoff URLs."},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for grounded result summaries."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"image_urls":{"description":"Approved public property image URLs in display order.","items":{"type":"string"},"type":"array"},"indicative_pricing":{"anyOf":[{"description":"Separate indicative price summaries for supported stay kinds.","properties":{"accommodation":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative cabin/accommodation stay price when complete cached rates exist."},"site":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative site stay price when complete cached rates exist."}},"type":"object"},{"type":"null"}],"default":null,"description":"Cache-only indicative pricing split by stay kind. Omitted when search did not run dated/flexible planning, rates are incomplete, or the candidate is discovery-only."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned map pins when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location, e.g. 'Lakes Entrance, VIC'."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned map pins when known."},"management_ids":{"description":"Management group IDs for logo lookup on result cards.","items":{"type":"integer"},"type":"array"},"matched_signals":{"description":"Lane-specific annotations; not full constraint results.","items":{"description":"One lane-specific reason a candidate matched the structured query.","properties":{"code":{"description":"Stable machine-readable match code.","maxLength":100,"minLength":1,"type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Confidence for this annotation when applicable."},"detail":{"additionalProperties":true,"description":"Optional structured detail for clients that need it.","type":"object"},"label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Short traveller-facing match label."},"lane":{"description":"Search lane that produced this annotation.","enum":["geo","filter","vibe","intent"],"type":"string"},"provenance":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Source class for the matched signal when known."}},"required":["lane","code"],"type":"object"},"type":"array"},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning":{"anyOf":[{"description":"Freshness/provenance wrapper for planning-tier availability facts.","properties":{"checkout_note":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Traveller/agent-facing note: availability comes from live Total Parks inventory and is confirmed at checkout before payment.","type":"string"},"last_updated":{"description":"Most recent source timestamp contributing to this status.","format":"date-time","type":"string"},"planning_tier_caveat":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Deprecated alias of checkout_note. Emitted for ChatGPT plugin / MCP compatibility until the next directory release; prefer checkout_note. See docs/features/CHATGPT_PLUGIN.md.","type":"string"},"provenance":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Total Parks live inventory source (PMS-synced ARI). Search reads this replica rather than issuing per-candidate PMS round-trips.","type":"string"},"status":{"description":"Live inventory availability status from Total Parks ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},"status_label":{"default":"","description":"Traveller-facing availability phrase derived from status. Render this in answers instead of the raw status enum.","type":"string"}},"required":["status","last_updated"],"type":"object"},{"type":"null"}],"default":null,"description":"Planning-tier availability envelope when intent was supplied."},"property_id":{"description":"Internal property ID for list/map sync and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight cards and agent summaries."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing room/site URL when the candidate is option-specific."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_ref","property_url","property_id","tier","channel_state","confidence"],"type":"object"},"type":"array"},"paging":{"description":"Pagination metadata for primary candidates only.","properties":{"has_more":{"default":false,"description":"Whether another page is available.","type":"boolean"},"limit":{"description":"Page size used for the response.","maximum":100,"minimum":1,"type":"integer"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor for the next page, when has_more is true."},"returned":{"description":"Number of candidates returned.","minimum":0,"type":"integer"},"total":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Total matching candidates when cheaply known."}},"required":["limit","returned"],"type":"object"},"warnings":{"description":"Query-level warnings, refusals, or coverage caveats.","items":{"description":"Non-fatal warning or query-level limitation.","properties":{"code":{"maxLength":100,"minLength":1,"type":"string"},"message":{"maxLength":500,"minLength":1,"type":"string"},"recovery_hint":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null}},"required":["code","message"],"type":"object"},"type":"array"}},"required":["paging"],"type":"object"}after
{"description":"Versioned response envelope for the unified search primitive.","properties":{"candidates":{"description":"Ranked, tiered primary candidate results.","items":{"description":"Lightweight search result; deep judgement lives in assess tools.","properties":{"actions":{"anyOf":[{"description":"Optional handoff links for a candidate.","properties":{"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Request-to-Book form for an eligible request-only property. A submitted request is not a confirmed booking."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link when a specific option is ready for checkout handoff. It does not reserve inventory."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review a paid availability watch for this sold-out stay. It does not hold a site, create a watch, or take payment."}},"type":"object"},{"type":"null"}],"default":null,"description":"Optional Total Parks handoff URLs."},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for grounded result summaries."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"image_urls":{"description":"Approved public property image URLs in display order.","items":{"type":"string"},"type":"array"},"indicative_pricing":{"anyOf":[{"description":"Separate indicative price summaries for supported stay kinds.","properties":{"accommodation":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative cabin/accommodation stay price when complete cached rates exist."},"site":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative site stay price when complete cached rates exist."}},"type":"object"},{"type":"null"}],"default":null,"description":"Cache-only indicative pricing split by stay kind. Omitted when search did not run dated/flexible planning, rates are incomplete, or the candidate is discovery-only."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned map pins when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location, e.g. 'Lakes Entrance, VIC'."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned map pins when known."},"management_ids":{"description":"Management group IDs for logo lookup on result cards.","items":{"type":"integer"},"type":"array"},"matched_signals":{"description":"Lane-specific annotations; not full constraint results.","items":{"description":"One lane-specific reason a candidate matched the structured query.","properties":{"code":{"description":"Stable machine-readable match code.","maxLength":100,"minLength":1,"type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Confidence for this annotation when applicable."},"detail":{"additionalProperties":true,"description":"Optional structured detail for clients that need it.","type":"object"},"label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Short traveller-facing match label."},"lane":{"description":"Search lane that produced this annotation.","enum":["geo","filter","vibe","intent"],"type":"string"},"provenance":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Source class for the matched signal when known."}},"required":["lane","code"],"type":"object"},"type":"array"},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning":{"anyOf":[{"description":"Freshness/provenance wrapper for planning-tier availability facts.","properties":{"checkout_note":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Traveller/agent-facing note: availability comes from live Total Parks inventory and is confirmed at checkout before payment.","type":"string"},"last_updated":{"description":"Most recent source timestamp contributing to this status.","format":"date-time","type":"string"},"planning_tier_caveat":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Deprecated alias of checkout_note. Emitted for ChatGPT plugin / MCP compatibility until the next directory release; prefer checkout_note. See docs/features/CHATGPT_PLUGIN.md.","type":"string"},"provenance":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Total Parks live inventory source (PMS-synced ARI). Search reads this replica rather than issuing per-candidate PMS round-trips.","type":"string"},"status":{"description":"Live inventory availability status from Total Parks ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},"status_label":{"default":"","description":"Traveller-facing availability phrase derived from status. Render this in answers instead of the raw status enum.","type":"string"}},"required":["status","last_updated"],"type":"object"},{"type":"null"}],"default":null,"description":"Planning-tier availability envelope when intent was supplied."},"property_id":{"description":"Internal property ID for list/map sync and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight cards and agent summaries."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing room/site URL when the candidate is option-specific."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_ref","property_url","property_id","tier","channel_state","confidence"],"type":"object"},"type":"array"},"contract_version":{"const":"search.v1","default":"search.v1","description":"Stable search contract version.","type":"string"},"facets":{"anyOf":[{"description":"Filter-lane facet counts for the current search result set.","properties":{"accessible":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"accommodation_kind":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"booking_enabled":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"channel_state":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"feature_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"highlight_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"management_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"option_facets":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"pet_friendly":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"setting":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"states":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"traveller_appeal":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"}},"type":"object"},{"type":"null"}],"default":null,"description":"Filter facet counts for the primary result set."},"map_candidates":{"description":"Compact unpaginated marker projection for every primary candidate matching the canonical query. List pagination does not apply to this field.","items":{"description":"Compact, unpaginated marker state for search map projections.","properties":{"bookable_option_count":{"default":0,"description":"Matching bookable room options for the dated planning request.","minimum":0,"type":"integer"},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for map popovers."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"headline_price":{"anyOf":[{"description":"Single compact headline price for map marker labels.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind"],"type":"object"},{"type":"null"}],"default":null,"description":"Single cache-only headline price for marker labels."},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Single approved cover image URL for map popovers."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned pin geometry when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location for map popovers."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned pin geometry when known."},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning_status":{"anyOf":[{"description":"Live Total Parks inventory status from PMS-synced ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},{"type":"null"}],"default":null,"description":"Planning status for marker colour, when intent was supplied."},"planning_status_label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing planning label for marker popovers."},"property_id":{"description":"Internal property ID for map pins and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight map popovers."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing request form for an eligible request-only property."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing booking handoff URL when available."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_id","property_ref","property_url","tier","channel_state","confidence"],"type":"object"},"type":"array"},"nearby_candidates":{"description":"Ranked, tiered candidates outside the primary search envelope but within the request's nearby radius. Not included in paging totals or facet counts.","items":{"description":"Lightweight search result; deep judgement lives in assess tools.","properties":{"actions":{"anyOf":[{"description":"Optional handoff links for a candidate.","properties":{"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Request-to-Book form for an eligible request-only property. A submitted request is not a confirmed booking."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link when a specific option is ready for checkout handoff. It does not reserve inventory."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review a paid availability watch for this sold-out stay. It does not hold a site, create a watch, or take payment."}},"type":"object"},{"type":"null"}],"default":null,"description":"Optional Total Parks handoff URLs."},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for grounded result summaries."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"image_urls":{"description":"Approved public property image URLs in display order.","items":{"type":"string"},"type":"array"},"indicative_pricing":{"anyOf":[{"description":"Separate indicative price summaries for supported stay kinds.","properties":{"accommodation":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative cabin/accommodation stay price when complete cached rates exist."},"site":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative site stay price when complete cached rates exist."}},"type":"object"},{"type":"null"}],"default":null,"description":"Cache-only indicative pricing split by stay kind. Omitted when search did not run dated/flexible planning, rates are incomplete, or the candidate is discovery-only."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned map pins when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location, e.g. 'Lakes Entrance, VIC'."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned map pins when known."},"management_ids":{"description":"Management group IDs for logo lookup on result cards.","items":{"type":"integer"},"type":"array"},"matched_signals":{"description":"Lane-specific annotations; not full constraint results.","items":{"description":"One lane-specific reason a candidate matched the structured query.","properties":{"code":{"description":"Stable machine-readable match code.","maxLength":100,"minLength":1,"type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Confidence for this annotation when applicable."},"detail":{"additionalProperties":true,"description":"Optional structured detail for clients that need it.","type":"object"},"label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Short traveller-facing match label."},"lane":{"description":"Search lane that produced this annotation.","enum":["geo","filter","vibe","intent"],"type":"string"},"provenance":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Source class for the matched signal when known."}},"required":["lane","code"],"type":"object"},"type":"array"},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning":{"anyOf":[{"description":"Freshness/provenance wrapper for planning-tier availability facts.","properties":{"checkout_note":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Traveller/agent-facing note: availability comes from live Total Parks inventory and is confirmed at checkout before payment.","type":"string"},"last_updated":{"description":"Most recent source timestamp contributing to this status.","format":"date-time","type":"string"},"planning_tier_caveat":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Deprecated alias of checkout_note. Emitted for ChatGPT plugin / MCP compatibility until the next directory release; prefer checkout_note. See docs/features/CHATGPT_PLUGIN.md.","type":"string"},"provenance":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Total Parks live inventory source (PMS-synced ARI). Search reads this replica rather than issuing per-candidate PMS round-trips.","type":"string"},"status":{"description":"Live inventory availability status from Total Parks ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},"status_label":{"default":"","description":"Traveller-facing availability phrase derived from status. Render this in answers instead of the raw status enum.","type":"string"}},"required":["status","last_updated"],"type":"object"},{"type":"null"}],"default":null,"description":"Planning-tier availability envelope when intent was supplied."},"property_id":{"description":"Internal property ID for list/map sync and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight cards and agent summaries."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing room/site URL when the candidate is option-specific."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_ref","property_url","property_id","tier","channel_state","confidence"],"type":"object"},"type":"array"},"paging":{"description":"Pagination metadata for primary candidates only.","properties":{"has_more":{"default":false,"description":"Whether another page is available.","type":"boolean"},"limit":{"description":"Page size used for the response.","maximum":100,"minimum":1,"type":"integer"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor for the next page, when has_more is true."},"returned":{"description":"Number of candidates returned.","minimum":0,"type":"integer"},"total":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Total matching candidates when cheaply known."}},"required":["limit","returned"],"type":"object"},"warnings":{"description":"Query-level warnings, refusals, or coverage caveats.","items":{"description":"Non-fatal warning or query-level limitation.","properties":{"code":{"maxLength":100,"minLength":1,"type":"string"},"message":{"maxLength":500,"minLength":1,"type":"string"},"recovery_hint":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null}},"required":["code","message"],"type":"object"},"type":"array"}},"required":["paging"],"type":"object"}⟨362 unchanged words⟩ stay verdict on pets, restrictions, and quote. When a sold-out live-booking park includes actions.start_watch_url, mention a paid availability watch only after free alternatives, and only for the park the traveller still wants. Say paid, not a price. To filter on amenities or curated highlights, call ⟨295 unchanged words⟩
before
{"description":"Versioned response envelope for the unified search primitive.","properties":{"candidates":{"description":"Ranked, tiered primary candidate results.","items":{"description":"Lightweight search result; deep judgement lives in assess tools.","properties":{"actions":{"anyOf":[{"description":"Optional handoff links for a candidate.","properties":{"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Request-to-Book form for an eligible request-only property. A submitted request is not a confirmed booking."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link when a specific option is ready for checkout handoff. It does not reserve inventory."}},"type":"object"},{"type":"null"}],"default":null,"description":"Optional Total Parks handoff URLs."},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for grounded result summaries."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"image_urls":{"description":"Approved public property image URLs in display order.","items":{"type":"string"},"type":"array"},"indicative_pricing":{"anyOf":[{"description":"Separate indicative price summaries for supported stay kinds.","properties":{"accommodation":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative cabin/accommodation stay price when complete cached rates exist."},"site":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative site stay price when complete cached rates exist."}},"type":"object"},{"type":"null"}],"default":null,"description":"Cache-only indicative pricing split by stay kind. Omitted when search did not run dated/flexible planning, rates are incomplete, or the candidate is discovery-only."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned map pins when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location, e.g. 'Lakes Entrance, VIC'."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned map pins when known."},"management_ids":{"description":"Management group IDs for logo lookup on result cards.","items":{"type":"integer"},"type":"array"},"matched_signals":{"description":"Lane-specific annotations; not full constraint results.","items":{"description":"One lane-specific reason a candidate matched the structured query.","properties":{"code":{"description":"Stable machine-readable match code.","maxLength":100,"minLength":1,"type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Confidence for this annotation when applicable."},"detail":{"additionalProperties":true,"description":"Optional structured detail for clients that need it.","type":"object"},"label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Short traveller-facing match label."},"lane":{"description":"Search lane that produced this annotation.","enum":["geo","filter","vibe","intent"],"type":"string"},"provenance":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Source class for the matched signal when known."}},"required":["lane","code"],"type":"object"},"type":"array"},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning":{"anyOf":[{"description":"Freshness/provenance wrapper for planning-tier availability facts.","properties":{"checkout_note":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Traveller/agent-facing note: availability comes from live Total Parks inventory and is confirmed at checkout before payment.","type":"string"},"last_updated":{"description":"Most recent source timestamp contributing to this status.","format":"date-time","type":"string"},"planning_tier_caveat":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Deprecated alias of checkout_note. Emitted for ChatGPT plugin / MCP compatibility until the next directory release; prefer checkout_note. See docs/features/CHATGPT_PLUGIN.md.","type":"string"},"provenance":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Total Parks live inventory source (PMS-synced ARI). Search reads this replica rather than issuing per-candidate PMS round-trips.","type":"string"},"status":{"description":"Live inventory availability status from Total Parks ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},"status_label":{"default":"","description":"Traveller-facing availability phrase derived from status. Render this in answers instead of the raw status enum.","type":"string"}},"required":["status","last_updated"],"type":"object"},{"type":"null"}],"default":null,"description":"Planning-tier availability envelope when intent was supplied."},"property_id":{"description":"Internal property ID for list/map sync and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight cards and agent summaries."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing room/site URL when the candidate is option-specific."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_ref","property_url","property_id","tier","channel_state","confidence"],"type":"object"},"type":"array"},"contract_version":{"const":"search.v1","default":"search.v1","description":"Stable search contract version.","type":"string"},"facets":{"anyOf":[{"description":"Filter-lane facet counts for the current search result set.","properties":{"accessible":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"accommodation_kind":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"booking_enabled":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"channel_state":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"feature_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"highlight_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"management_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"option_facets":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"pet_friendly":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"setting":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"states":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"traveller_appeal":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"}},"type":"object"},{"type":"null"}],"default":null,"description":"Filter facet counts for the primary result set."},"map_candidates":{"description":"Compact unpaginated marker projection for every primary candidate matching the canonical query. List pagination does not apply to this field.","items":{"description":"Compact, unpaginated marker state for search map projections.","properties":{"bookable_option_count":{"default":0,"description":"Matching bookable room options for the dated planning request.","minimum":0,"type":"integer"},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for map popovers."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"headline_price":{"anyOf":[{"description":"Single compact headline price for map marker labels.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind"],"type":"object"},{"type":"null"}],"default":null,"description":"Single cache-only headline price for marker labels."},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Single approved cover image URL for map popovers."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned pin geometry when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location for map popovers."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned pin geometry when known."},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning_status":{"anyOf":[{"description":"Live Total Parks inventory status from PMS-synced ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},{"type":"null"}],"default":null,"description":"Planning status for marker colour, when intent was supplied."},"planning_status_label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing planning label for marker popovers."},"property_id":{"description":"Internal property ID for map pins and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight map popovers."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing request form for an eligible request-only property."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing booking handoff URL when available."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_id","property_ref","property_url","tier","channel_state","confidence"],"type":"object"},"type":"array"},"nearby_candidates":{"description":"Ranked, tiered candidates outside the primary search envelope but within the request's nearby radius. Not included in paging totals or facet counts.","items":{"description":"Lightweight search result; deep judgement lives in assess tools.","properties":{"actions":{"anyOf":[{"description":"Optional handoff links for a candidate.","properties":{"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Request-to-Book form for an eligible request-only property. A submitted request is not a confirmed booking."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link when a specific option is ready for checkout handoff. It does not reserve inventory."}},"type":"object"},{"type":"null"}],"default":null,"description":"Optional Total Parks handoff URLs."},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for grounded result summaries."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"image_urls":{"description":"Approved public property image URLs in display order.","items":{"type":"string"},"type":"array"},"indicative_pricing":{"anyOf":[{"description":"Separate indicative price summaries for supported stay kinds.","properties":{"accommodation":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative cabin/accommodation stay price when complete cached rates exist."},"site":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative site stay price when complete cached rates exist."}},"type":"object"},{"type":"null"}],"default":null,"description":"Cache-only indicative pricing split by stay kind. Omitted when search did not run dated/flexible planning, rates are incomplete, or the candidate is discovery-only."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned map pins when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location, e.g. 'Lakes Entrance, VIC'."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned map pins when known."},"management_ids":{"description":"Management group IDs for logo lookup on result cards.","items":{"type":"integer"},"type":"array"},"matched_signals":{"description":"Lane-specific annotations; not full constraint results.","items":{"description":"One lane-specific reason a candidate matched the structured query.","properties":{"code":{"description":"Stable machine-readable match code.","maxLength":100,"minLength":1,"type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Confidence for this annotation when applicable."},"detail":{"additionalProperties":true,"description":"Optional structured detail for clients that need it.","type":"object"},"label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Short traveller-facing match label."},"lane":{"description":"Search lane that produced this annotation.","enum":["geo","filter","vibe","intent"],"type":"string"},"provenance":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Source class for the matched signal when known."}},"required":["lane","code"],"type":"object"},"type":"array"},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning":{"anyOf":[{"description":"Freshness/provenance wrapper for planning-tier availability facts.","properties":{"checkout_note":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Traveller/agent-facing note: availability comes from live Total Parks inventory and is confirmed at checkout before payment.","type":"string"},"last_updated":{"description":"Most recent source timestamp contributing to this status.","format":"date-time","type":"string"},"planning_tier_caveat":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Deprecated alias of checkout_note. Emitted for ChatGPT plugin / MCP compatibility until the next directory release; prefer checkout_note. See docs/features/CHATGPT_PLUGIN.md.","type":"string"},"provenance":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Total Parks live inventory source (PMS-synced ARI). Search reads this replica rather than issuing per-candidate PMS round-trips.","type":"string"},"status":{"description":"Live inventory availability status from Total Parks ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},"status_label":{"default":"","description":"Traveller-facing availability phrase derived from status. Render this in answers instead of the raw status enum.","type":"string"}},"required":["status","last_updated"],"type":"object"},{"type":"null"}],"default":null,"description":"Planning-tier availability envelope when intent was supplied."},"property_id":{"description":"Internal property ID for list/map sync and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight cards and agent summaries."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing room/site URL when the candidate is option-specific."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_ref","property_url","property_id","tier","channel_state","confidence"],"type":"object"},"type":"array"},"paging":{"description":"Pagination metadata for primary candidates only.","properties":{"has_more":{"default":false,"description":"Whether another page is available.","type":"boolean"},"limit":{"description":"Page size used for the response.","maximum":100,"minimum":1,"type":"integer"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor for the next page, when has_more is true."},"returned":{"description":"Number of candidates returned.","minimum":0,"type":"integer"},"total":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Total matching candidates when cheaply known."}},"required":["limit","returned"],"type":"object"},"warnings":{"description":"Query-level warnings, refusals, or coverage caveats.","items":{"description":"Non-fatal warning or query-level limitation.","properties":{"code":{"maxLength":100,"minLength":1,"type":"string"},"message":{"maxLength":500,"minLength":1,"type":"string"},"recovery_hint":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null}},"required":["code","message"],"type":"object"},"type":"array"}},"required":["paging"],"type":"object"}after
{"description":"Versioned response envelope for the unified search primitive.","properties":{"candidates":{"description":"Ranked, tiered primary candidate results.","items":{"description":"Lightweight search result; deep judgement lives in assess tools.","properties":{"actions":{"anyOf":[{"description":"Optional handoff links for a candidate.","properties":{"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Request-to-Book form for an eligible request-only property. A submitted request is not a confirmed booking."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link when a specific option is ready for checkout handoff. It does not reserve inventory."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review a paid availability watch for this sold-out stay. It does not hold a site, create a watch, or take payment."}},"type":"object"},{"type":"null"}],"default":null,"description":"Optional Total Parks handoff URLs."},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for grounded result summaries."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"image_urls":{"description":"Approved public property image URLs in display order.","items":{"type":"string"},"type":"array"},"indicative_pricing":{"anyOf":[{"description":"Separate indicative price summaries for supported stay kinds.","properties":{"accommodation":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative cabin/accommodation stay price when complete cached rates exist."},"site":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative site stay price when complete cached rates exist."}},"type":"object"},{"type":"null"}],"default":null,"description":"Cache-only indicative pricing split by stay kind. Omitted when search did not run dated/flexible planning, rates are incomplete, or the candidate is discovery-only."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned map pins when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location, e.g. 'Lakes Entrance, VIC'."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned map pins when known."},"management_ids":{"description":"Management group IDs for logo lookup on result cards.","items":{"type":"integer"},"type":"array"},"matched_signals":{"description":"Lane-specific annotations; not full constraint results.","items":{"description":"One lane-specific reason a candidate matched the structured query.","properties":{"code":{"description":"Stable machine-readable match code.","maxLength":100,"minLength":1,"type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Confidence for this annotation when applicable."},"detail":{"additionalProperties":true,"description":"Optional structured detail for clients that need it.","type":"object"},"label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Short traveller-facing match label."},"lane":{"description":"Search lane that produced this annotation.","enum":["geo","filter","vibe","intent"],"type":"string"},"provenance":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Source class for the matched signal when known."}},"required":["lane","code"],"type":"object"},"type":"array"},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning":{"anyOf":[{"description":"Freshness/provenance wrapper for planning-tier availability facts.","properties":{"checkout_note":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Traveller/agent-facing note: availability comes from live Total Parks inventory and is confirmed at checkout before payment.","type":"string"},"last_updated":{"description":"Most recent source timestamp contributing to this status.","format":"date-time","type":"string"},"planning_tier_caveat":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Deprecated alias of checkout_note. Emitted for ChatGPT plugin / MCP compatibility until the next directory release; prefer checkout_note. See docs/features/CHATGPT_PLUGIN.md.","type":"string"},"provenance":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Total Parks live inventory source (PMS-synced ARI). Search reads this replica rather than issuing per-candidate PMS round-trips.","type":"string"},"status":{"description":"Live inventory availability status from Total Parks ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},"status_label":{"default":"","description":"Traveller-facing availability phrase derived from status. Render this in answers instead of the raw status enum.","type":"string"}},"required":["status","last_updated"],"type":"object"},{"type":"null"}],"default":null,"description":"Planning-tier availability envelope when intent was supplied."},"property_id":{"description":"Internal property ID for list/map sync and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight cards and agent summaries."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing room/site URL when the candidate is option-specific."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_ref","property_url","property_id","tier","channel_state","confidence"],"type":"object"},"type":"array"},"contract_version":{"const":"search.v1","default":"search.v1","description":"Stable search contract version.","type":"string"},"facets":{"anyOf":[{"description":"Filter-lane facet counts for the current search result set.","properties":{"accessible":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"accommodation_kind":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"booking_enabled":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"channel_state":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"feature_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"highlight_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"management_ids":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"option_facets":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"pet_friendly":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"setting":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"states":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"},"traveller_appeal":{"items":{"description":"Count for one search filter value in the current result set.","properties":{"count":{"description":"Number of current candidates with this value.","minimum":0,"type":"integer"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"}],"description":"Filter value represented by this facet."}},"required":["value","count"],"type":"object"},"type":"array"}},"type":"object"},{"type":"null"}],"default":null,"description":"Filter facet counts for the primary result set."},"map_candidates":{"description":"Compact unpaginated marker projection for every primary candidate matching the canonical query. List pagination does not apply to this field.","items":{"description":"Compact, unpaginated marker state for search map projections.","properties":{"bookable_option_count":{"default":0,"description":"Matching bookable room options for the dated planning request.","minimum":0,"type":"integer"},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for map popovers."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"headline_price":{"anyOf":[{"description":"Single compact headline price for map marker labels.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind"],"type":"object"},{"type":"null"}],"default":null,"description":"Single cache-only headline price for marker labels."},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Single approved cover image URL for map popovers."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned pin geometry when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location for map popovers."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned pin geometry when known."},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning_status":{"anyOf":[{"description":"Live Total Parks inventory status from PMS-synced ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},{"type":"null"}],"default":null,"description":"Planning status for marker colour, when intent was supplied."},"planning_status_label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing planning label for marker popovers."},"property_id":{"description":"Internal property ID for map pins and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight map popovers."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing request form for an eligible request-only property."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing booking handoff URL when available."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_id","property_ref","property_url","tier","channel_state","confidence"],"type":"object"},"type":"array"},"nearby_candidates":{"description":"Ranked, tiered candidates outside the primary search envelope but within the request's nearby radius. Not included in paging totals or facet counts.","items":{"description":"Lightweight search result; deep judgement lives in assess tools.","properties":{"actions":{"anyOf":[{"description":"Optional handoff links for a candidate.","properties":{"request_to_book_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Request-to-Book form for an eligible request-only property. A submitted request is not a confirmed booking."},"start_booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks booking link when a specific option is ready for checkout handoff. It does not reserve inventory."},"start_watch_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks link to review a paid availability watch for this sold-out stay. It does not hold a site, create a watch, or take payment."}},"type":"object"},{"type":"null"}],"default":null,"description":"Optional Total Parks handoff URLs."},"channel_state":{"description":"Server-authoritative booking channel; separate from candidate tier.","enum":["live_booking","request_only","directory_only"],"type":"string"},"confidence":{"description":"Orthogonal confidence axis for the candidate tier.","enum":["confirmed","inferred"],"type":"string"},"google_rating":{"anyOf":[{"maximum":5,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cached Google star rating for grounded result summaries."},"google_user_rating_count":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cached Google review count associated with google_rating."},"image_urls":{"description":"Approved public property image URLs in display order.","items":{"type":"string"},"type":"array"},"indicative_pricing":{"anyOf":[{"description":"Separate indicative price summaries for supported stay kinds.","properties":{"accommodation":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative cabin/accommodation stay price when complete cached rates exist."},"site":{"anyOf":[{"description":"Cache-backed public ARI price summary safe for search result cards.","properties":{"amount":{"description":"Indicative cached stay total.","minimum":0,"type":"number"},"currency":{"default":"AUD","maxLength":3,"minLength":3,"type":"string"},"last_updated":{"description":"Most recent ARI timestamp contributing to the stay check.","format":"date-time","type":"string"},"nights":{"description":"Number of sleeping nights priced.","minimum":1,"type":"integer"},"recheck_caveat":{"description":"Traveller/agent-facing note: rates come from live inventory and are confirmed at checkout before payment.","type":"string"},"source":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Pricing source: Total Parks live inventory (PMS-synced ARI).","type":"string"},"stay_kind":{"description":"Stay-kind lane this indicative price applies to.","enum":["site","accommodation"],"type":"string"}},"required":["amount","nights","stay_kind","last_updated","recheck_caveat"],"type":"object"},{"type":"null"}],"default":null,"description":"Indicative site stay price when complete cached rates exist."}},"type":"object"},{"type":"null"}],"default":null,"description":"Cache-only indicative pricing split by stay kind. Omitted when search did not run dated/flexible planning, rates are incomplete, or the candidate is discovery-only."},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 latitude for search-owned map pins when known."},"location_label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Compact traveller-facing location, e.g. 'Lakes Entrance, VIC'."},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"WGS84 longitude for search-owned map pins when known."},"management_ids":{"description":"Management group IDs for logo lookup on result cards.","items":{"type":"integer"},"type":"array"},"matched_signals":{"description":"Lane-specific annotations; not full constraint results.","items":{"description":"One lane-specific reason a candidate matched the structured query.","properties":{"code":{"description":"Stable machine-readable match code.","maxLength":100,"minLength":1,"type":"string"},"confidence":{"anyOf":[{"enum":["confirmed","inferred"],"type":"string"},{"type":"null"}],"default":null,"description":"Confidence for this annotation when applicable."},"detail":{"additionalProperties":true,"description":"Optional structured detail for clients that need it.","type":"object"},"label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Short traveller-facing match label."},"lane":{"description":"Search lane that produced this annotation.","enum":["geo","filter","vibe","intent"],"type":"string"},"provenance":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Source class for the matched signal when known."}},"required":["lane","code"],"type":"object"},"type":"array"},"pet_friendly":{"default":false,"description":"True when the property-level pet-friendly feature is set.","type":"boolean"},"planning":{"anyOf":[{"description":"Freshness/provenance wrapper for planning-tier availability facts.","properties":{"checkout_note":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Traveller/agent-facing note: availability comes from live Total Parks inventory and is confirmed at checkout before payment.","type":"string"},"last_updated":{"description":"Most recent source timestamp contributing to this status.","format":"date-time","type":"string"},"planning_tier_caveat":{"default":"Availability and rates from Total Parks live inventory, kept current by park PMS sync. Confirmed at checkout before payment.","description":"Deprecated alias of checkout_note. Emitted for ChatGPT plugin / MCP compatibility until the next directory release; prefer checkout_note. See docs/features/CHATGPT_PLUGIN.md.","type":"string"},"provenance":{"const":"tp_cached_ari","default":"tp_cached_ari","description":"Total Parks live inventory source (PMS-synced ARI). Search reads this replica rather than issuing per-candidate PMS round-trips.","type":"string"},"status":{"description":"Live inventory availability status from Total Parks ARI.","enum":["available","limited","unavailable","unknown"],"type":"string"},"status_label":{"default":"","description":"Traveller-facing availability phrase derived from status. Render this in answers instead of the raw status enum.","type":"string"}},"required":["status","last_updated"],"type":"object"},{"type":"null"}],"default":null,"description":"Planning-tier availability envelope when intent was supplied."},"property_id":{"description":"Internal property ID for list/map sync and conversion.","minimum":1,"type":"integer"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Display name for lightweight cards and agent summaries."},"property_ref":{"description":"Public property reference accepted by MCP/search consumers.","minLength":1,"type":"string"},"property_url":{"description":"Traveller-facing Total Parks URL for the property.","minLength":1,"type":"string"},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing room/site URL when the candidate is option-specific."},"tier":{"description":"Outer candidate tier: bookable, likely, or discovery.","enum":["bookable","likely","discovery"],"type":"string"}},"required":["property_ref","property_url","property_id","tier","channel_state","confidence"],"type":"object"},"type":"array"},"paging":{"description":"Pagination metadata for primary candidates only.","properties":{"has_more":{"default":false,"description":"Whether another page is available.","type":"boolean"},"limit":{"description":"Page size used for the response.","maximum":100,"minimum":1,"type":"integer"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor for the next page, when has_more is true."},"returned":{"description":"Number of candidates returned.","minimum":0,"type":"integer"},"total":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Total matching candidates when cheaply known."}},"required":["limit","returned"],"type":"object"},"warnings":{"description":"Query-level warnings, refusals, or coverage caveats.","items":{"description":"Non-fatal warning or query-level limitation.","properties":{"code":{"maxLength":100,"minLength":1,"type":"string"},"message":{"maxLength":500,"minLength":1,"type":"string"},"recovery_hint":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null}},"required":["code","message"],"type":"object"},"type":"array"}},"required":["paging"],"type":"object"}⟨186 unchanged words⟩ this or property_url over internal IDs. Example:'vic/aireys-inlet-holiday-park'.'victoria/big4-aireys-inlet'.","examples":["vic/aireys-inlet-holiday-parkvictoria/big4-aireys-inlet"]},"property_url":{"anyOf":[{" ⟨18 unchanged words⟩ as an alias of property_ref. Example: 'https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park'.//totalparks.com.au/victoria/big4-aireys-inlet'.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park//totalparks.com.au/victoria/big4-aireys-inlet"]},"room_type_id":{"anyOf":[{" ⟨33 unchanged words⟩ ref returned by search or tp_assess_stay. Example:'vic/aireys-inlet-holiday-park/powered-ensuite'.'victoria/big4-aireys-inlet/rooms/cosy-cottage-4-person'.","examples":["vic/aireys-inlet-holiday-park/powered-ensuitevictoria/big4-aireys-inlet/rooms/cosy-cottage-4-person"]},"room_type_url":{"anyOf":[{" ⟨20 unchanged words⟩ alias of room_type_ref.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park/rooms/powered-ensuite//totalparks.com.au/victoria/big4-aireys-inlet/rooms/cosy-cottage-4-person"]},"width_m":{"anyOf":[{" ⟨20 unchanged words⟩
⟨349 unchanged words⟩ this or property_url over internal IDs. Example:'vic/aireys-inlet-holiday-park'.'victoria/big4-aireys-inlet'.","examples":["vic/aireys-inlet-holiday-parkvictoria/big4-aireys-inlet"]},"property_url":{"anyOf":[{" ⟨18 unchanged words⟩ as an alias of property_ref. Example: 'https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park'.//totalparks.com.au/victoria/big4-aireys-inlet'.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park//totalparks.com.au/victoria/big4-aireys-inlet"]},"room_type_id":{"anyOf":[{" ⟨33 unchanged words⟩ ref returned by search or tp_assess_stay. Example:'vic/aireys-inlet-holiday-park/powered-ensuite'.'victoria/big4-aireys-inlet/rooms/cosy-cottage-4-person'.","examples":["vic/aireys-inlet-holiday-park/powered-ensuitevictoria/big4-aireys-inlet/rooms/cosy-cottage-4-person"]},"room_type_url":{"anyOf":[{" ⟨20 unchanged words⟩ alias of room_type_ref.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park/rooms/powered-ensuite//totalparks.com.au/victoria/big4-aireys-inlet/rooms/cosy-cottage-4-person"]},"start_date":{"anyOf":[{" ⟨43 unchanged words⟩
⟨77 unchanged words⟩ this or property_url over internal IDs. Example:'vic/aireys-inlet-holiday-park'.'victoria/big4-aireys-inlet'.","examples":["vic/aireys-inlet-holiday-parkvictoria/big4-aireys-inlet"]},"property_url":{"anyOf":[{" ⟨18 unchanged words⟩ as an alias of property_ref. Example: 'https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park'.//totalparks.com.au/victoria/big4-aireys-inlet'.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park//totalparks.com.au/victoria/big4-aireys-inlet"]}},"type":"object"}
⟨131 unchanged words⟩ this or property_url over internal IDs. Example:'vic/aireys-inlet-holiday-park'.'victoria/big4-aireys-inlet'.","examples":["vic/aireys-inlet-holiday-parkvictoria/big4-aireys-inlet"]},"property_url":{"anyOf":[{" ⟨18 unchanged words⟩ as an alias of property_ref. Example: 'https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park'.//totalparks.com.au/victoria/big4-aireys-inlet'.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park//totalparks.com.au/victoria/big4-aireys-inlet"]},"start":{"anyOf":[{" ⟨30 unchanged words⟩
⟨50 unchanged words⟩ this or property_url over internal IDs. Example:'vic/aireys-inlet-holiday-park'.'victoria/big4-aireys-inlet'.","examples":["vic/aireys-inlet-holiday-parkvictoria/big4-aireys-inlet"]},"property_url":{"anyOf":[{" ⟨18 unchanged words⟩ as an alias of property_ref. Example: 'https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park'.//totalparks.com.au/victoria/big4-aireys-inlet'.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park//totalparks.com.au/victoria/big4-aireys-inlet"]},"room_type_id":{"anyOf":[{" ⟨33 unchanged words⟩ ref returned by search or tp_assess_stay. Example:'vic/aireys-inlet-holiday-park/powered-ensuite'.'victoria/big4-aireys-inlet/rooms/cosy-cottage-4-person'.","examples":["vic/aireys-inlet-holiday-park/powered-ensuitevictoria/big4-aireys-inlet/rooms/cosy-cottage-4-person"]},"room_type_url":{"anyOf":[{" ⟨20 unchanged words⟩ alias of room_type_ref.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park/rooms/powered-ensuite//totalparks.com.au/victoria/big4-aireys-inlet/rooms/cosy-cottage-4-person"]}},"type":"object"}
⟨70 unchanged words⟩ to use as compact fallback cards. Example: ['vic/aireys-inlet-holiday-park''victoria/big4-aireys-inlet'].","examples":[["vic/aireys-inlet-holiday-parkvictoria/big4-aireys-inlet"]]},"include_nearby":{"default":false, ⟨104 unchanged words⟩
⟨69 unchanged words⟩ when you already know the listing. Example:'aireys-inlet-holiday-park'.'big4-aireys-inlet'.","examples":["aireys-inlet-holiday-parkbig4-aireys-inlet"]},"state":{"anyOf":[{" ⟨29 unchanged words⟩
⟨5 unchanged words⟩ {"type":"null"}],"default":null,"description":"Alias of equipment_length_m. Rig length in metres. Example: 7.5.","examples":[7.5]},"equipment_length_m":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Rig length in metres. Canonical name; aliases equipment_length and length_m are also accepted. Example: 7.5.","examples":[7.5]},"equipment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Canonical rig type such as caravan, camper, motorhome, or tent. Example: 'caravan'.","examples":["caravan"]},"equipment_width":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Alias of equipment_width_m. Rig width in metres. Example: 2.5.","examples":[2.5]},"equipment_width_m":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Optional rig width in metres. Canonical name; aliases equipment_width and width_m are also accepted. Example: 2.5.","examples":[2.5]},"length_m":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Alias of equipment_length_m. Rig length in metres. Example: 7.5.","examples":[7.5]},"property_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Internal property ID. Compatibility only; prefer property_ref or property_url from a previous Total Parks tool result."},"property_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public property ref from tp_resolve_property or search, formatted as '{state}/{slug}'. Prefer this or property_url over internal IDs. Example: 'vic/aireys-inlet-holiday-park'.","examples":["vic/aireys-inlet-holiday-park"]},"property_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks property URL returned by a previous tool. Accepted as an alias of property_ref. Example: 'https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park'.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park"]},"room_type_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Internal room/site type ID. Compatibility only; prefer room_type_ref or room_type_url from a previous tool result."},"room_type_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public room/site ref returned by search or tp_assess_stay. Example: 'vic/aireys-inlet-holiday-park/powered-ensuite'.","examples":["vic/aireys-inlet-holiday-park/powered-ensuite"]},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks room/site URL returned by a previous tool. Accepted as an alias of room_type_ref.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park/rooms/powered-ensuite"]},"width_m":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Alias of equipment_width_m. Rig width in metres. Example: 2.5.","examples":[2.5]}},"type":"object"}
⟨5 unchanged words⟩ {"type":"null"}],"default":null,"description":"Stay-kind filter: 'site' for caravan/camping sites, 'accommodation' for cabins and other roofed stays. Natural words such as 'cabins' or 'powered sites' are also accepted.","examples":["site"]},"adults":{"default":2,"description":"Number of adults in the party. Default 2. Example: 2.","examples":[2],"type":"integer"},"check_in":{"anyOf" ⟨4 unchanged words⟩ {"type":"null"}],"default":null,"description":"Stay check-in date (YYYY-MM-DD). Pair with check_out. Example: '2026-10-03'.","examples":["2026-10-03"]},"check_out":{"anyOf":[{"format" ⟨3 unchanged words⟩ {"type":"null"}],"default":null,"description":"Stay check-out date (YYYY-MM-DD). Must be after check_in. Example: '2026-10-06'.","examples":["2026-10-06"]},"children":{"default":0,"description":"Number of children in the party, excluding infants. Default 0.","examples":[0],"type":"integer"},"end_date":{"anyOf" ⟨4 unchanged words⟩ {"type":"null"}],"default":null,"description":"Alias of check_out/end. Exclusive or last date depending on the tool; pair with start/start_date. Example: '2026-10-06'.","examples":["2026-10-06"]},"equipment_length":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Alias of equipment_length_m. Rig length in metres. Example: 7.5.","examples":[7.5]},"equipment_length_m":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Rig length in metres. Canonical name; aliases equipment_length and length_m are also accepted. Example: 7.5.","examples":[7.5]},"equipment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Canonical rig type such as caravan, camper, motorhome, or tent. Example: 'caravan'.","examples":["caravan"]},"equipment_width":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Alias of equipment_width_m. Rig width in metres. Example: 2.5.","examples":[2.5]},"equipment_width_m":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Optional rig width in metres. Canonical name; aliases equipment_width and width_m are also accepted. Example: 2.5.","examples":[2.5]},"infants":{"default":0,"description":"Number of infants in the party. Default 0.","examples":[0],"type":"integer"},"length_m":{"anyOf" ⟨2 unchanged words⟩ {"type":"null"}],"default":null,"description":"Alias of equipment_length_m. Rig length in metres. Example: 7.5.","examples":[7.5]},"property_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Internal property ID. Compatibility only; prefer property_ref or property_url from a previous Total Parks tool result."},"property_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public property ref from tp_resolve_property or search, formatted as '{state}/{slug}'. Prefer this or property_url over internal IDs. Example: 'vic/aireys-inlet-holiday-park'.","examples":["vic/aireys-inlet-holiday-park"]},"property_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks property URL returned by a previous tool. Accepted as an alias of property_ref. Example: 'https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park'.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park"]},"room_type_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Internal room/site type ID. Compatibility only; prefer room_type_ref or room_type_url from a previous tool result."},"room_type_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public room/site ref returned by search or tp_assess_stay. Example: 'vic/aireys-inlet-holiday-park/powered-ensuite'.","examples":["vic/aireys-inlet-holiday-park/powered-ensuite"]},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks room/site URL returned by a previous tool. Accepted as an alias of room_type_ref.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park/rooms/powered-ensuite"]},"start_date":{"anyOf":[{"format" ⟨3 unchanged words⟩ {"type":"null"}],"default":null,"description":"Alias of check_in/start. Inclusive first date (YYYY-MM-DD). Example: '2026-10-03'.","examples":["2026-10-03"]},"width_m":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Alias of equipment_width_m. Rig width in metres. Example: 2.5.","examples":[2.5]}},"type":"object"}
{"properties":{"include":{"default":"both","description":"Which capability records to return: 'raw' source signals, 'summary' winning values, or 'both' (default).","enum":["raw","summary","both"],"examples":["both"],"type":"string"},"property_id":{"anyOf" ⟨2 unchanged words⟩ {"type":"null"}],"default":null,"description":"Internal property ID. Compatibility only; prefer property_ref or property_url from a previous Total Parks tool result."},"property_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public property ref from tp_resolve_property or search, formatted as '{state}/{slug}'. Prefer this or property_url over internal IDs. Example: 'vic/aireys-inlet-holiday-park'.","examples":["vic/aireys-inlet-holiday-park"]},"property_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks property URL returned by a previous tool. Accepted as an alias of property_ref. Example: 'https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park'.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park"]}},"type":"object"}
⟨7 unchanged words⟩ {"type":"null"}],"default":null,"description":"Stay check-in date (YYYY-MM-DD). Pair with check_out. Example: '2026-10-03'.","examples":["2026-10-03"]},"check_out":{"anyOf":[{"format" ⟨3 unchanged words⟩ {"type":"null"}],"default":null,"description":"Stay check-out date (YYYY-MM-DD). Must be after check_in. Example: '2026-10-06'.","examples":["2026-10-06"]},"end":{"anyOf":[{"format" ⟨3 unchanged words⟩ {"type":"null"}],"default":null,"description":"Last date of the stay window to check for pet blockouts (YYYY-MM-DD). Must be after start. Alias: check_out. Example: '2026-04-07'.","examples":["2026-04-07"]},"property_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Internal property ID. Compatibility only; prefer property_ref or property_url from a previous Total Parks tool result."},"property_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public property ref from tp_resolve_property or search, formatted as '{state}/{slug}'. Prefer this or property_url over internal IDs. Example: 'vic/aireys-inlet-holiday-park'.","examples":["vic/aireys-inlet-holiday-park"]},"property_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks property URL returned by a previous tool. Accepted as an alias of property_ref. Example: 'https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park'.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park"]},"start":{"anyOf":[{"format" ⟨3 unchanged words⟩ {"type":"null"}],"default":null,"description":"First date of the stay window to check for pet blockouts (YYYY-MM-DD). Alias: check_in. Example: '2026-04-03'.","examples":["2026-04-03"]}},"type":"object"}
⟨5 unchanged words⟩ {"type":"null"}],"default":null,"description":"Internal property ID. Compatibility only; prefer property_ref or property_url from a previous Total Parks tool result."},"property_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public property ref from tp_resolve_property or search, formatted as '{state}/{slug}'. Prefer this or property_url over internal IDs. Example: 'vic/aireys-inlet-holiday-park'.","examples":["vic/aireys-inlet-holiday-park"]},"property_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks property URL returned by a previous tool. Accepted as an alias of property_ref. Example: 'https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park'.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park"]},"room_type_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Internal room/site type ID. Compatibility only; prefer room_type_ref or room_type_url from a previous tool result."},"room_type_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Public room/site ref returned by search or tp_assess_stay. Example: 'vic/aireys-inlet-holiday-park/powered-ensuite'.","examples":["vic/aireys-inlet-holiday-park/powered-ensuite"]},"room_type_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Traveller-facing Total Parks room/site URL returned by a previous tool. Accepted as an alias of room_type_ref.","examples":["https://totalparks.com.au/parks/vic/aireys-inlet-holiday-park/rooms/powered-ensuite"]}},"type":"object"}
⟨7 unchanged words⟩ {"type":"null"}],"default":null,"description":"Prior tp_assess_stay JSON payload. Pass the previous tool result unchanged when rendering the chosen park's room/site cards."},"fallback_limit":{"default":3,"description" ⟨6 unchanged words⟩ a composite stay shortlist. Zero hides fallbacks.","examples":[3],"maximum":3,"minimum":0,"type":" ⟨8 unchanged words⟩ {"type":"null"}],"default":null,"description":"Optional public property_ref values to use as compact fallback cards. Example: ['vic/aireys-inlet-holiday-park'].","examples":[["vic/aireys-inlet-holiday-park"]]},"include_nearby":{"default":false,"description":"When true, include compact nearby fallback park cards in a composite stay shortlist. Default false.","examples":[false],"type":"boolean"},"preferred_stay_kind":{"anyOf" ⟨5 unchanged words⟩ {"type":"null"}],"default":null,"description":"Optional stay-kind hint for composite shortlists: 'site' for caravan/camping, 'accommodation' for cabins and other roofed stays.","examples":["site"]},"search_response":{"anyOf":[{"additionalProperties" ⟨3 unchanged words⟩ {"type":"null"}],"default":null,"description":"Prior tp_search_parks or tp_search_stays JSON payload. Pass the previous tool result unchanged when rendering cards."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional heading for the rendered card set. Example: 'Parks near Lakes Entrance'.","examples":["Parks near Lakes Entrance"]}},"type":"object"}
{"properties":{"limit":{"default":5,"description":"Maximum number of property matches to return. Default 5. Example: 3.","examples":[5],"type":"integer"},"query":{"anyOf" ⟨2 unchanged words⟩ {"type":"null"}],"default":null,"description":"Park name or natural-language lookup text when you do not yet have a public property_ref. Example: 'BIG4 Aireys Inlet'.","examples":["BIG4 Aireys Inlet"]},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Exact Total Parks property slug. Pair with state when you already know the listing. Example: 'aireys-inlet-holiday-park'.","examples":["aireys-inlet-holiday-park"]},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Australian state or territory code or name used with slug for an exact lookup. Example: 'vic' or 'Victoria'.","examples":["vic"]}},"type":"object"}
⟨10 unchanged words⟩ {"type":"null"}],"default":null,"description":"Optional catalog kinds to return, such as 'feature' or 'highlight'. Accepts one kind or a list. Omit for all kinds.","examples":["highlight"]},"limit":{"default":50,"description":"Maximum catalog entries to return. Default 50. Example: 20.","examples":[50],"type":"integer"},"query":{"anyOf" ⟨2 unchanged words⟩ {"type":"null"}],"default":null,"description":"Optional text to filter the amenity/highlight catalog, such as 'campfire', 'pool', or 'pet'. Omit to list the full catalog page.","examples":["campfire"]}},"type":"object"}
⟨775 unchanged words⟩ {"type":"null"}],"default":null,"description":"search.v1 hard filters applied before vibe ranking: states, features, highlights, pet_friendly, option_facets, and local_proximity. Discover names via tp_search_filter_options. Example: {\"states\":[\"TASMANIA\"],\"pet_friendly\":true}.","examples":[{"pet_friendly":true,"states":["TASMANIA"]}]},"geo":{"anyOf":[{"discriminator":{" ⟨129 unchanged words⟩ region bounds.","properties":{"east":{"description":"Eastern longitude bound in WGS84.","maximum":180,"minimum":-180,"type":"number"},"north":{"description":"Northern latitude bound in WGS84.","maximum":90,"minimum":-90,"type":"number"},"south":{"description":"Southern latitude bound in WGS84.","maximum":90,"minimum":-90,"type":" ⟨6 unchanged words⟩ ,"type":"string"},"west":{"description":"Western longitude bound in WGS84.","maximum":180,"minimum":-180,"type":" ⟨67 unchanged words⟩ {"type":"null"}],"default":null,"description":"search.v1 geo gate. Prefer a place object or a place-name string. Do not invent geo.type='state'; use filter.states for a whole Australian state. Example: {\"type\":\"place\",\"query\":\"Aireys Inlet\"}.","examples":[{"query":"Aireys Inlet","type":"place"}]},"natural_language":{"anyOf":[{"maxLength":500, ⟨59 unchanged words⟩ clarification because stored local distances are straight-line only.","examples":["powered sites near Lakes Entrance with a dump point nearby"]},"paging":{"anyOf":[{"description" ⟨49 unchanged words⟩ {"type":"null"}],"default":null,"description":"search.v1 cursor pagination. Example: {\"limit\":20}.","examples":[{"limit":20}]},"vibe":{"anyOf":[{"description":"Soft ⟨114 unchanged words⟩ {"type":"null"}],"default":null,"description":"search.v1 soft ranking signals such as vibe.query or traveller_appeal=['families']. Does not hard-gate candidates. Example: {\"traveller_appeal\":[\"families\"]}.","examples":[{"traveller_appeal":["families"]}]}},"type":"object"}
before
{"properties":{"filter":{"anyOf":[{"description":"Authoritative structured filters applied before vibe ranking.","properties":{"accessible":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Optional accessibility-oriented filter signal."},"accommodation_kind":{"anyOf":[{"enum":["site","accommodation"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional stay-kind filter: use site for caravan, campervan, motorhome, fifth-wheeler, tent, camping, powered-site, unpowered-site, ensuite-site, slab-site, and drive-through-site requests; use accommodation for cabins, villas, cottages, glamping, and similar roofed stays."},"any_of":{"description":"OR-groups: each group is satisfied when a candidate has any listed feature, highlight, or confirmed local-proximity match. Groups are ANDed together; members within a group are ORed.","items":{"description":"An OR-group of on-property and/or off-site structured facts.\n\nA candidate satisfies the group when it has *any* of the listed feature IDs\nor highlight IDs (overlap, not contains-all), or satisfies any listed local\nproximity constraint. Groups let a single real-world concept represented in\ndifferent source stores — e.g. on-site EV charging or a confirmed charger\nnearby — match without merging those stores.\n\nMultiple groups on a filter are ANDed together; members *within* a group are\nORed.","properties":{"feature_ids":{"description":"Feature IDs; matching any one satisfies this group.","items":{"type":"integer"},"type":"array"},"highlight_ids":{"description":"Highlight IDs; matching any one satisfies this group.","items":{"type":"string"},"type":"array"},"local_proximity":{"description":"Independent off-site topic/distance alternatives; matching any one satisfies this group.","items":{"description":"One confirmed off-site topic required within a straight-line bound.","properties":{"max_distance_km":{"description":"Required maximum straight-line distance in kilometres. REST and GUI callers and explicit MCP arguments must provide a bound; the controlled MCP natural-language adapter may fill an audited topic default for clear 'near' or 'close' wording.","exclusiveMinimum":0,"type":"number"},"topic":{"description":"Allowlisted off-site topic: supermarket, pharmacy, boat_ramp, dump_point, ev_charging, beach, or brewery.","enum":["supermarket","pharmacy","boat_ramp","dump_point","ev_charging","beach","brewery"],"type":"string"}},"required":["topic","max_distance_km"],"type":"object"},"type":"array"}},"type":"object"},"type":"array"},"booking_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"When true, restricts to parks bookable on Total Parks."},"feature_ids":{"description":"Property feature IDs that candidates must satisfy.","items":{"type":"integer"},"type":"array"},"highlight_ids":{"description":"Curated property highlight IDs that candidates must satisfy. Use stable highlight slugs when the traveller asks for known curated signals such as campfire-friendly, swimming-pool, resort-style-pool, beach-access, or pet-friendly.","items":{"type":"string"},"type":"array"},"local_proximity":{"description":"Confirmed current off-site topic/distance requirements. Every entry is required (AND semantics). Use this for explicit 'near', 'close', or 'within X km' venue needs, not on-property amenities, coastal vibe, or walking/driving claims.","items":{"description":"One confirmed off-site topic required within a straight-line bound.","properties":{"max_distance_km":{"description":"Required maximum straight-line distance in kilometres. REST and GUI callers and explicit MCP arguments must provide a bound; the controlled MCP natural-language adapter may fill an audited topic default for clear 'near' or 'close' wording.","exclusiveMinimum":0,"type":"number"},"topic":{"description":"Allowlisted off-site topic: supermarket, pharmacy, boat_ramp, dump_point, ev_charging, beach, or brewery.","enum":["supermarket","pharmacy","boat_ramp","dump_point","ev_charging","beach","brewery"],"type":"string"}},"required":["topic","max_distance_km"],"type":"object"},"type":"array"},"management_ids":{"description":"Optional management or chain IDs to include.","items":{"type":"integer"},"type":"array"},"min_google_rating":{"anyOf":[{"maximum":5,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Optional explicit minimum cached Google star rating. Properties with a lower or missing rating do not satisfy this hard filter."},"option_facets":{"description":"Canonical room/site option facts requested by the traveller, e.g. powered, ensuite, drive_through, slab, accessible, spa, pet_friendly, family. Search annotates and tiers by scoped room-type evidence rather than treating these as park-level amenity checkboxes. Do not leave requested room/site option words only in vibe.query: copy every explicit option requirement here. For powered-site requests include option_facets=['powered'] and also set intent.equipment.power_required=true when using tp_search_stays.","items":{"description":"Traveller-facing inventory-option facts at room/site scope.","enum":["powered","unpowered","ensuite","drive_through","slab","tent_only","accessible","spa","pet_friendly","family","pet_fee_applies","no_pet_fee","declaration_required"],"type":"string"},"type":"array"},"pet_friendly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Property-level pet-friendly filter. For dog-friendly or pet-friendly discovery/stay searches, set this true as a search filter and also put the declared travelling pet facts in intent.pet when using tp_search_stays. Phase B hard pet checks use the capability graph and room-type truth before claiming fit."},"region_ids":{"description":"Canonical tourism-region IDs to include with exact, OR-within-dimension matching against Property.region (for example, nsw-north-coast). Regions are distinct from state filters.","items":{"type":"string"},"maxItems":57,"type":"array"},"setting":{"anyOf":[{"enum":["beachside","riverside","lakeside","bushland","mountain","rural","town_centre","city_fringe","coastal","outback"],"type":"string"},{"type":"null"}],"default":null,"description":"Canonical enrichment setting, e.g. beachside or bushland."},"states":{"description":"Uppercase Australian state names aligned with map geobuf data.","items":{"type":"string"},"type":"array"},"traveller_appeal":{"description":"Traveller segment hints from the enrichment taxonomy.","items":{"enum":["grey_nomads","families","couples","groups","fishers","hikers","pet_owners","big_rig_tourers"],"type":"string"},"type":"array"}},"type":"object"},{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"default":null},"geo":{"anyOf":[{"discriminator":{"propertyName":"type"},"oneOf":[{"description":"Server-resolved place, region, POI, or park-name query.","properties":{"query":{"description":"Place, region, POI, or park name to resolve server-side.","maxLength":200,"minLength":1,"type":"string"},"radius_km":{"anyOf":[{"maximum":500,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Optional radius around the resolved anchor in kilometres."},"type":{"const":"place","default":"place","type":"string"}},"required":["query"],"type":"object"},{"description":"Pre-resolved point geometry from a trusted client.","properties":{"lat":{"description":"Latitude in WGS84.","maximum":90,"minimum":-90,"type":"number"},"lon":{"description":"Longitude in WGS84.","maximum":180,"minimum":-180,"type":"number"},"radius_km":{"anyOf":[{"maximum":500,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Optional radius around the point in kilometres."},"type":{"const":"point","default":"point","type":"string"}},"required":["lat","lon"],"type":"object"},{"description":"Pre-resolved rectangular viewport or region bounds.","properties":{"east":{"maximum":180,"minimum":-180,"type":"number"},"north":{"maximum":90,"minimum":-90,"type":"number"},"south":{"maximum":90,"minimum":-90,"type":"number"},"type":{"const":"bbox","default":"bbox","type":"string"},"west":{"maximum":180,"minimum":-180,"type":"number"}},"required":["west","south","east","north"],"type":"object"},{"description":"Pre-resolved polygon ring in WGS84 `[lon, lat]` coordinates.","properties":{"coordinates":{"description":"Closed polygon ring as `[lon, lat]` coordinate pairs. Corridor geometry is deliberately reserved for Phase C.","items":{"items":{"type":"number"},"type":"array"},"minItems":4,"type":"array"},"type":{"const":"polygon","default":"polygon","type":"string"}},"required":["coordinates"],"type":"object"}]},{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"default":null},"intent":{"anyOf":[{"description":"Dates, guests, pets, and rig intent layered over discovery results.","properties":{"adults":{"default":2,"maximum":20,"minimum":1,"type":"integer"},"check_in":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"Desired check-in date. Must be paired with check_out."},"check_out":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"Desired check-out date. Must be after check_in."},"children":{"default":0,"maximum":20,"minimum":0,"type":"integer"},"equipment":{"anyOf":[{"description":"Backward-compatible wire name for the embedded search rig profile.","properties":{"length_m":{"anyOf":[{"maximum":30,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Rig length in metres."},"power_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether the traveller requires a powered site."},"type":{"anyOf":[{"enum":["caravan","campervan","motorhome","camp_trailer","roof_top_tent","tent","swag","car_ute","fifth_wheeler"],"type":"string"},{"type":"null"}],"default":null,"description":"Canonical equipment type, e.g. caravan or motorhome."},"width_m":{"anyOf":[{"maximum":10,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Optional rig width in metres."}},"type":"object"},{"type":"null"}],"default":null},"flexible_window":{"anyOf":[{"discriminator":{"propertyName":"type"},"oneOf":[{"description":"Check-in dates within ±N days of an anchor date.","properties":{"anchor_date":{"description":"Preferred check-in date.","format":"date","type":"string"},"flex_days":{"default":3,"description":"Number of days either side of anchor_date to search. For phrasing like 'around a date' or 'within a few days either side', explicitly set flex_days=3 instead of relying on the default.","maximum":31,"minimum":0,"type":"integer"},"max_nights":{"anyOf":[{"maximum":90,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of nights to search. When the traveller gives an exact stay length, explicitly set max_nights equal to min_nights instead of relying on the default."},"min_nights":{"default":1,"description":"Minimum number of nights to search inside the flexible window. For an exact stay length such as 'about 4 nights' or 'for three nights', set both min_nights and max_nights to that value.","maximum":90,"minimum":1,"type":"integer"},"type":{"const":"around_date","default":"around_date","type":"string"}},"required":["anchor_date"],"type":"object"},{"description":"Check-in dates anywhere in one calendar month.","properties":{"max_nights":{"anyOf":[{"maximum":90,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of nights to search. When the traveller gives an exact stay length, explicitly set max_nights equal to min_nights instead of relying on the default."},"min_nights":{"default":1,"description":"Minimum number of nights to search inside the flexible window. For an exact stay length such as 'about 4 nights' or 'for three nights', set both min_nights and max_nights to that value.","maximum":90,"minimum":1,"type":"integer"},"month":{"maximum":12,"minimum":1,"type":"integer"},"type":{"const":"calendar_month","default":"calendar_month","type":"string"},"year":{"maximum":2100,"minimum":2024,"type":"integer"}},"required":["year","month"],"type":"object"},{"description":"Check-in dates inside an explicit bounded range.","properties":{"end_date":{"description":"Last acceptable check-in date.","format":"date","type":"string"},"max_nights":{"anyOf":[{"maximum":90,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of nights to search. When the traveller gives an exact stay length, explicitly set max_nights equal to min_nights instead of relying on the default."},"min_nights":{"default":1,"description":"Minimum number of nights to search inside the flexible window. For an exact stay length such as 'about 4 nights' or 'for three nights', set both min_nights and max_nights to that value.","maximum":90,"minimum":1,"type":"integer"},"start_date":{"description":"First acceptable check-in date.","format":"date","type":"string"},"type":{"const":"date_range","default":"date_range","type":"string"}},"required":["start_date","end_date"],"type":"object"},{"description":"Check-in dates inside an Australian tourism season.","properties":{"max_nights":{"anyOf":[{"maximum":90,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of nights to search. When the traveller gives an exact stay length, explicitly set max_nights equal to min_nights instead of relying on the default."},"min_nights":{"default":1,"description":"Minimum number of nights to search inside the flexible window. For an exact stay length such as 'about 4 nights' or 'for three nights', set both min_nights and max_nights to that value.","maximum":90,"minimum":1,"type":"integer"},"season":{"enum":["summer","autumn","winter","spring"],"type":"string"},"type":{"const":"season","default":"season","type":"string"},"year":{"description":"Season start year; summer spans December of this year through February of the following year.","maximum":2100,"minimum":2024,"type":"integer"}},"required":["year","season"],"type":"object"}]},{"type":"null"}],"default":null,"description":"Flexible check-in window for planning-tier search. Mutually exclusive with check_in/check_out."},"infants":{"default":0,"maximum":10,"minimum":0,"type":"integer"},"pet":{"anyOf":[{"description":"Pet intent facts used for planning-tier policy checks.","properties":{"breed":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Guest-supplied breed name or slug when known."},"pet_count":{"anyOf":[{"maximum":6,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of pets travelling."},"pet_size":{"anyOf":[{"enum":["small","medium","large"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional pet size declaration."},"pet_type":{"anyOf":[{"maxLength":50,"type":"string"},{"type":"null"}],"default":null,"description":"Primary pet type, e.g. dog."},"traveling_with_pets":{"default":false,"description":"Whether the traveller is travelling with pets.","type":"boolean"}},"type":"object"},{"type":"null"}],"default":null}},"type":"object"},{"additionalProperties":true,"type":"object"},{"type":"string"}]},"natural_language":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Traveller's original stay-search wording. Fill structured geo, filter, vibe, and intent fields when known, and also pass the traveller's phrasing here so Total Parks can recover deterministic aliases, including controlled off-site near/close/within-km local facts, and use it for vibe ranking. Explicit structured distances remain authoritative. Walking or driving distance requires clarification because stored local distances are straight-line only."},"paging":{"anyOf":[{"description":"Cursor pagination for search results.","properties":{"cursor":{"anyOf":[{"maxLength":512,"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor returned by a previous search response."},"limit":{"default":20,"description":"Maximum number of candidates to return.","maximum":100,"minimum":1,"type":"integer"}},"type":"object"},{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"default":null},"vibe":{"anyOf":[{"description":"Soft preference signals used to rank within the gated candidate set.","properties":{"category_slug":{"anyOf":[{"maxLength":80,"minLength":1,"pattern":"^[a-z0-9][a-z0-9-]*$","type":"string"},{"type":"null"}],"default":null,"description":"Optional editorial vibe/category slug."},"query":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Free-text vibe or inspiration phrase for semantic ranking."},"setting":{"anyOf":[{"enum":["beachside","riverside","lakeside","bushland","mountain","rural","town_centre","city_fringe","coastal","outback"],"type":"string"},{"type":"null"}],"default":null,"description":"Soft setting preference used for ranking, not hard gating."},"traveller_appeal":{"description":"Soft traveller segment preferences used for ranking.","items":{"enum":["grey_nomads","families","couples","groups","fishers","hikers","pet_owners","big_rig_tourers"],"type":"string"},"type":"array"}},"type":"object"},{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"default":null}},"required":["intent"],"type":"object"}after
{"properties":{"filter":{"anyOf":[{"description":"Authoritative structured filters applied before vibe ranking.","properties":{"accessible":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Optional accessibility-oriented filter signal."},"accommodation_kind":{"anyOf":[{"enum":["site","accommodation"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional stay-kind filter: use site for caravan, campervan, motorhome, fifth-wheeler, tent, camping, powered-site, unpowered-site, ensuite-site, slab-site, and drive-through-site requests; use accommodation for cabins, villas, cottages, glamping, and similar roofed stays."},"any_of":{"description":"OR-groups: each group is satisfied when a candidate has any listed feature, highlight, or confirmed local-proximity match. Groups are ANDed together; members within a group are ORed.","items":{"description":"An OR-group of on-property and/or off-site structured facts.\n\nA candidate satisfies the group when it has *any* of the listed feature IDs\nor highlight IDs (overlap, not contains-all), or satisfies any listed local\nproximity constraint. Groups let a single real-world concept represented in\ndifferent source stores — e.g. on-site EV charging or a confirmed charger\nnearby — match without merging those stores.\n\nMultiple groups on a filter are ANDed together; members *within* a group are\nORed.","properties":{"feature_ids":{"description":"Feature IDs; matching any one satisfies this group.","items":{"type":"integer"},"type":"array"},"highlight_ids":{"description":"Highlight IDs; matching any one satisfies this group.","items":{"type":"string"},"type":"array"},"local_proximity":{"description":"Independent off-site topic/distance alternatives; matching any one satisfies this group.","items":{"description":"One confirmed off-site topic required within a straight-line bound.","properties":{"max_distance_km":{"description":"Required maximum straight-line distance in kilometres. REST and GUI callers and explicit MCP arguments must provide a bound; the controlled MCP natural-language adapter may fill an audited topic default for clear 'near' or 'close' wording.","exclusiveMinimum":0,"type":"number"},"topic":{"description":"Allowlisted off-site topic: supermarket, pharmacy, boat_ramp, dump_point, ev_charging, beach, or brewery.","enum":["supermarket","pharmacy","boat_ramp","dump_point","ev_charging","beach","brewery"],"type":"string"}},"required":["topic","max_distance_km"],"type":"object"},"type":"array"}},"type":"object"},"type":"array"},"booking_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"When true, restricts to parks bookable on Total Parks."},"feature_ids":{"description":"Property feature IDs that candidates must satisfy.","items":{"type":"integer"},"type":"array"},"highlight_ids":{"description":"Curated property highlight IDs that candidates must satisfy. Use stable highlight slugs when the traveller asks for known curated signals such as campfire-friendly, swimming-pool, resort-style-pool, beach-access, or pet-friendly.","items":{"type":"string"},"type":"array"},"local_proximity":{"description":"Confirmed current off-site topic/distance requirements. Every entry is required (AND semantics). Use this for explicit 'near', 'close', or 'within X km' venue needs, not on-property amenities, coastal vibe, or walking/driving claims.","items":{"description":"One confirmed off-site topic required within a straight-line bound.","properties":{"max_distance_km":{"description":"Required maximum straight-line distance in kilometres. REST and GUI callers and explicit MCP arguments must provide a bound; the controlled MCP natural-language adapter may fill an audited topic default for clear 'near' or 'close' wording.","exclusiveMinimum":0,"type":"number"},"topic":{"description":"Allowlisted off-site topic: supermarket, pharmacy, boat_ramp, dump_point, ev_charging, beach, or brewery.","enum":["supermarket","pharmacy","boat_ramp","dump_point","ev_charging","beach","brewery"],"type":"string"}},"required":["topic","max_distance_km"],"type":"object"},"type":"array"},"management_ids":{"description":"Optional management or chain IDs to include.","items":{"type":"integer"},"type":"array"},"min_google_rating":{"anyOf":[{"maximum":5,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Optional explicit minimum cached Google star rating. Properties with a lower or missing rating do not satisfy this hard filter."},"option_facets":{"description":"Canonical room/site option facts requested by the traveller, e.g. powered, ensuite, drive_through, slab, accessible, spa, pet_friendly, family. Search annotates and tiers by scoped room-type evidence rather than treating these as park-level amenity checkboxes. Do not leave requested room/site option words only in vibe.query: copy every explicit option requirement here. For powered-site requests include option_facets=['powered'] and also set intent.equipment.power_required=true when using tp_search_stays.","items":{"description":"Traveller-facing inventory-option facts at room/site scope.","enum":["powered","unpowered","ensuite","drive_through","slab","tent_only","accessible","spa","pet_friendly","family","pet_fee_applies","no_pet_fee","declaration_required"],"type":"string"},"type":"array"},"pet_friendly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Property-level pet-friendly filter. For dog-friendly or pet-friendly discovery/stay searches, set this true as a search filter and also put the declared travelling pet facts in intent.pet when using tp_search_stays. Phase B hard pet checks use the capability graph and room-type truth before claiming fit."},"region_ids":{"description":"Canonical tourism-region IDs to include with exact, OR-within-dimension matching against Property.region (for example, nsw-north-coast). Regions are distinct from state filters.","items":{"type":"string"},"maxItems":57,"type":"array"},"setting":{"anyOf":[{"enum":["beachside","riverside","lakeside","bushland","mountain","rural","town_centre","city_fringe","coastal","outback"],"type":"string"},{"type":"null"}],"default":null,"description":"Canonical enrichment setting, e.g. beachside or bushland."},"states":{"description":"Uppercase Australian state names aligned with map geobuf data.","items":{"type":"string"},"type":"array"},"traveller_appeal":{"description":"Traveller segment hints from the enrichment taxonomy.","items":{"enum":["grey_nomads","families","couples","groups","fishers","hikers","pet_owners","big_rig_tourers"],"type":"string"},"type":"array"}},"type":"object"},{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"default":null,"description":"search.v1 hard filters applied before vibe ranking: states, features, highlights, pet_friendly, option_facets, and local_proximity. Discover names via tp_search_filter_options. Example: {\"states\":[\"TASMANIA\"],\"pet_friendly\":true}.","examples":[{"pet_friendly":true,"states":["TASMANIA"]}]},"geo":{"anyOf":[{"discriminator":{"propertyName":"type"},"oneOf":[{"description":"Server-resolved place, region, POI, or park-name query.","properties":{"query":{"description":"Place, region, POI, or park name to resolve server-side.","maxLength":200,"minLength":1,"type":"string"},"radius_km":{"anyOf":[{"maximum":500,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Optional radius around the resolved anchor in kilometres."},"type":{"const":"place","default":"place","type":"string"}},"required":["query"],"type":"object"},{"description":"Pre-resolved point geometry from a trusted client.","properties":{"lat":{"description":"Latitude in WGS84.","maximum":90,"minimum":-90,"type":"number"},"lon":{"description":"Longitude in WGS84.","maximum":180,"minimum":-180,"type":"number"},"radius_km":{"anyOf":[{"maximum":500,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Optional radius around the point in kilometres."},"type":{"const":"point","default":"point","type":"string"}},"required":["lat","lon"],"type":"object"},{"description":"Pre-resolved rectangular viewport or region bounds.","properties":{"east":{"description":"Eastern longitude bound in WGS84.","maximum":180,"minimum":-180,"type":"number"},"north":{"description":"Northern latitude bound in WGS84.","maximum":90,"minimum":-90,"type":"number"},"south":{"description":"Southern latitude bound in WGS84.","maximum":90,"minimum":-90,"type":"number"},"type":{"const":"bbox","default":"bbox","type":"string"},"west":{"description":"Western longitude bound in WGS84.","maximum":180,"minimum":-180,"type":"number"}},"required":["west","south","east","north"],"type":"object"},{"description":"Pre-resolved polygon ring in WGS84 `[lon, lat]` coordinates.","properties":{"coordinates":{"description":"Closed polygon ring as `[lon, lat]` coordinate pairs. Corridor geometry is deliberately reserved for Phase C.","items":{"items":{"type":"number"},"type":"array"},"minItems":4,"type":"array"},"type":{"const":"polygon","default":"polygon","type":"string"}},"required":["coordinates"],"type":"object"}]},{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"default":null,"description":"search.v1 geo gate. Prefer a place object or a place-name string. Do not invent geo.type='state'; use filter.states for a whole Australian state. Example: {\"type\":\"place\",\"query\":\"Aireys Inlet\"}.","examples":[{"query":"Aireys Inlet","type":"place"}]},"intent":{"anyOf":[{"description":"Dates, guests, pets, and rig intent layered over discovery results.","properties":{"adults":{"default":2,"description":"Number of adults in the party. Example: 2.","maximum":20,"minimum":1,"type":"integer"},"check_in":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"Desired check-in date. Must be paired with check_out."},"check_out":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"Desired check-out date. Must be after check_in."},"children":{"default":0,"description":"Number of children in the party, excluding infants.","maximum":20,"minimum":0,"type":"integer"},"equipment":{"anyOf":[{"description":"Backward-compatible wire name for the embedded search rig profile.","properties":{"length_m":{"anyOf":[{"maximum":30,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Rig length in metres."},"power_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Whether the traveller requires a powered site."},"type":{"anyOf":[{"enum":["caravan","campervan","motorhome","camp_trailer","roof_top_tent","tent","swag","car_ute","fifth_wheeler"],"type":"string"},{"type":"null"}],"default":null,"description":"Canonical equipment type, e.g. caravan or motorhome."},"width_m":{"anyOf":[{"maximum":10,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"Optional rig width in metres."}},"type":"object"},{"type":"null"}],"default":null,"description":"Declared rig/equipment for site-fit ranking. Example: {\"type\":\"caravan\",\"length_m\":7.5}."},"flexible_window":{"anyOf":[{"discriminator":{"propertyName":"type"},"oneOf":[{"description":"Check-in dates within ±N days of an anchor date.","properties":{"anchor_date":{"description":"Preferred check-in date.","format":"date","type":"string"},"flex_days":{"default":3,"description":"Number of days either side of anchor_date to search. For phrasing like 'around a date' or 'within a few days either side', explicitly set flex_days=3 instead of relying on the default.","maximum":31,"minimum":0,"type":"integer"},"max_nights":{"anyOf":[{"maximum":90,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of nights to search. When the traveller gives an exact stay length, explicitly set max_nights equal to min_nights instead of relying on the default."},"min_nights":{"default":1,"description":"Minimum number of nights to search inside the flexible window. For an exact stay length such as 'about 4 nights' or 'for three nights', set both min_nights and max_nights to that value.","maximum":90,"minimum":1,"type":"integer"},"type":{"const":"around_date","default":"around_date","type":"string"}},"required":["anchor_date"],"type":"object"},{"description":"Check-in dates anywhere in one calendar month.","properties":{"max_nights":{"anyOf":[{"maximum":90,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of nights to search. When the traveller gives an exact stay length, explicitly set max_nights equal to min_nights instead of relying on the default."},"min_nights":{"default":1,"description":"Minimum number of nights to search inside the flexible window. For an exact stay length such as 'about 4 nights' or 'for three nights', set both min_nights and max_nights to that value.","maximum":90,"minimum":1,"type":"integer"},"month":{"description":"Calendar month number from 1 (January) to 12 (December).","maximum":12,"minimum":1,"type":"integer"},"type":{"const":"calendar_month","default":"calendar_month","type":"string"},"year":{"description":"Calendar year of the month to search, e.g. 2026.","maximum":2100,"minimum":2024,"type":"integer"}},"required":["year","month"],"type":"object"},{"description":"Check-in dates inside an explicit bounded range.","properties":{"end_date":{"description":"Last acceptable check-in date.","format":"date","type":"string"},"max_nights":{"anyOf":[{"maximum":90,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of nights to search. When the traveller gives an exact stay length, explicitly set max_nights equal to min_nights instead of relying on the default."},"min_nights":{"default":1,"description":"Minimum number of nights to search inside the flexible window. For an exact stay length such as 'about 4 nights' or 'for three nights', set both min_nights and max_nights to that value.","maximum":90,"minimum":1,"type":"integer"},"start_date":{"description":"First acceptable check-in date.","format":"date","type":"string"},"type":{"const":"date_range","default":"date_range","type":"string"}},"required":["start_date","end_date"],"type":"object"},{"description":"Check-in dates inside an Australian tourism season.","properties":{"max_nights":{"anyOf":[{"maximum":90,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of nights to search. When the traveller gives an exact stay length, explicitly set max_nights equal to min_nights instead of relying on the default."},"min_nights":{"default":1,"description":"Minimum number of nights to search inside the flexible window. For an exact stay length such as 'about 4 nights' or 'for three nights', set both min_nights and max_nights to that value.","maximum":90,"minimum":1,"type":"integer"},"season":{"enum":["summer","autumn","winter","spring"],"type":"string"},"type":{"const":"season","default":"season","type":"string"},"year":{"description":"Season start year; summer spans December of this year through February of the following year.","maximum":2100,"minimum":2024,"type":"integer"}},"required":["year","season"],"type":"object"}]},{"type":"null"}],"default":null,"description":"Flexible check-in window for planning-tier search. Mutually exclusive with check_in/check_out."},"infants":{"default":0,"description":"Number of infants in the party.","maximum":10,"minimum":0,"type":"integer"},"pet":{"anyOf":[{"description":"Pet intent facts used for planning-tier policy checks.","properties":{"breed":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Guest-supplied breed name or slug when known."},"pet_count":{"anyOf":[{"maximum":6,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of pets travelling."},"pet_size":{"anyOf":[{"enum":["small","medium","large"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional pet size declaration."},"pet_type":{"anyOf":[{"maxLength":50,"type":"string"},{"type":"null"}],"default":null,"description":"Primary pet type, e.g. dog."},"traveling_with_pets":{"default":false,"description":"Whether the traveller is travelling with pets.","type":"boolean"}},"type":"object"},{"type":"null"}],"default":null,"description":"Pet declaration for pet-friendly stay search. Example: {\"traveling_with_pets\":true,\"pet_type\":\"dog\"}."}},"type":"object"},{"additionalProperties":true,"type":"object"},{"type":"string"}],"description":"search.v1 stay intent: check_in/check_out, guests, pets, rig, or flexible_window. Required for tp_search_stays. For month-wide searches use flexible_window instead of probing weekends. Example: {\"check_in\":\"2026-10-03\",\"check_out\":\"2026-10-06\",\"adults\":2}.","examples":[{"adults":2,"check_in":"2026-10-03","check_out":"2026-10-06"}]},"natural_language":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Traveller's original search wording. Fill structured geo, filter, vibe, and intent fields when known, and also pass the traveller's phrasing here so Total Parks can recover deterministic aliases, including controlled off-site near/close/within-km local facts, and use it for vibe ranking. Explicit structured distances remain authoritative. Walking or driving distance requires clarification because stored local distances are straight-line only.","examples":["powered sites near Lakes Entrance with a dump point nearby"]},"paging":{"anyOf":[{"description":"Cursor pagination for search results.","properties":{"cursor":{"anyOf":[{"maxLength":512,"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor returned by a previous search response."},"limit":{"default":20,"description":"Maximum number of candidates to return.","maximum":100,"minimum":1,"type":"integer"}},"type":"object"},{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"default":null,"description":"search.v1 cursor pagination. Example: {\"limit\":20}.","examples":[{"limit":20}]},"vibe":{"anyOf":[{"description":"Soft preference signals used to rank within the gated candidate set.","properties":{"category_slug":{"anyOf":[{"maxLength":80,"minLength":1,"pattern":"^[a-z0-9][a-z0-9-]*$","type":"string"},{"type":"null"}],"default":null,"description":"Optional editorial vibe/category slug."},"query":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Free-text vibe or inspiration phrase for semantic ranking."},"setting":{"anyOf":[{"enum":["beachside","riverside","lakeside","bushland","mountain","rural","town_centre","city_fringe","coastal","outback"],"type":"string"},{"type":"null"}],"default":null,"description":"Soft setting preference used for ranking, not hard gating."},"traveller_appeal":{"description":"Soft traveller segment preferences used for ranking.","items":{"enum":["grey_nomads","families","couples","groups","fishers","hikers","pet_owners","big_rig_tourers"],"type":"string"},"type":"array"}},"type":"object"},{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"default":null,"description":"search.v1 soft ranking signals such as vibe.query or traveller_appeal=['families']. Does not hard-gate candidates. Example: {\"traveller_appeal\":[\"families\"]}.","examples":[{"traveller_appeal":["families"]}]}},"required":["intent"],"type":"object"}