{"openapi":"3.0.3","info":{"title":"Open Property API","version":"0.1.0"},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{}},"paths":{"/v1/resolve_entity":{"post":{"operationId":"resolve_entity","summary":"Resolve a property","tags":["tools"],"description":"Find the canonical entity for a property, unit or building the user named. Call it first. Pass the name, alias, ID or listing ID as query. Returns status, entity, candidates and the publication_id for later calls. On ambiguous_entity, stop and ask the user to choose a candidate. Not for facts, procedures or source text.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":1500,"description":"Property name, alias, ID or channel listing ID as the user wrote it."},"kind":{"description":"unit: match only an exact accommodation-unit ID, name or alias. Use it on the first lookup of a declared unit-catalog workflow, not as a retry after ambiguity.","type":"string","enum":["unit"]},"include_fixture":{"type":"boolean","default":false,"description":"Include labelled local test records."},"publication_id":{"type":"string","minLength":1,"maxLength":100,"description":"publication_id from the first result."},"org":{"type":"string","minLength":1,"maxLength":128,"description":"Organization or operator ID to read. Omit to read every operator you have access to."}},"required":["query"],"additionalProperties":false}}}},"responses":{"200":{"description":"A context packet. Every claim and passage cites evidence; unknowns stay explicit.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"supported, partial, uncertain, conflicted, ambiguous_entity, insufficient_evidence, source_unavailable or requires_live_lookup."},"publication_id":{"description":"Pass this back as publication_id on later calls. Absent only when candidates span operators.","type":"string"},"source_publication_id":{"type":"string"},"operator_id":{"type":"string"},"entity":{"nullable":true,"type":"object","properties":{},"additionalProperties":{}},"candidates":{"type":"array","items":{}},"claims":{"type":"array","items":{"type":"object","properties":{"confidence":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["reviewed","computed"]},"score":{"type":"number","minimum":0,"maximum":1},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","score","basis","version","uncalibrated"],"additionalProperties":false},{"type":"object","properties":{"method":{"type":"string","enum":["none"]},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","basis","version","uncalibrated"],"additionalProperties":false}]}},"additionalProperties":{}}},"relationships":{"type":"array","items":{}},"evidence":{"type":"array","items":{}},"passages":{"type":"array","items":{}},"unknowns":{"type":"array","items":{}},"required_live_lookups":{"type":"array","items":{}},"live_source_hint":{"description":"Only with requires_live_lookup: the system that answers the question. The MCP does not query it.","type":"string","enum":["pms","key_log","task_queue","accounting"]},"coverage":{"type":"array","items":{}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"truncated":{"type":"boolean"},"information_needs":{"type":"array","items":{}},"unanswered":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","enum":["no_evidence","conflict","below_confidence_floor"]},"gap_key":{"type":"string","pattern":"^gap:[a-f0-9]{64}$"},"need":{"type":"string","minLength":1},"entity_id":{"nullable":true,"type":"string","minLength":1}},"required":["reason","gap_key","need","entity_id"],"additionalProperties":false}},"coverage_summary":{"type":"object","properties":{},"additionalProperties":{}},"continuation":{"description":"Present when truncated: call the same tool again with continuation.arguments for the next page.","type":"object","properties":{},"additionalProperties":{}},"question":{"type":"string"},"detail":{"type":"string"},"context_manifest":{"type":"object","properties":{},"additionalProperties":{}},"resolution":{"type":"object","properties":{},"additionalProperties":{}},"matched_identifiers":{"type":"array","items":{}},"relationship_scope":{"type":"object","properties":{},"additionalProperties":{}},"passage_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"passages_truncated":{"type":"boolean"},"relationship_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"relationships_truncated":{"type":"boolean"},"required_context":{"type":"array","items":{}},"required_context_blocked":{"type":"array","items":{}},"unavailable_operators":{"type":"array","items":{"type":"string"}},"trace":{"type":"array","items":{}},"interpretation_basis":{"type":"string"},"retrieval":{"type":"object","properties":{},"additionalProperties":{}},"gaps":{"type":"array","items":{}},"coverage_manifest":{"type":"object","properties":{},"additionalProperties":{}}},"required":["status","entity","candidates","claims","relationships","evidence","passages","unknowns","required_live_lookups","coverage","total","truncated","information_needs","coverage_summary"],"additionalProperties":false,"description":"A context packet. Every claim and passage cites evidence; unknowns stay explicit."}}}},"default":{"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false}},"required":["status","error"],"additionalProperties":false,"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed."}}}}}}},"/v1/get_property_context":{"post":{"operationId":"get_property_context","summary":"Property facts and constraints","tags":["tools"],"description":"Facts and operating constraints of one resolved property or unit, such as parking, check-in time or pets, with dated evidence, conflicts and gaps. Pass the resolved ID as entity, and query or needs to narrow it. Returns claims, evidence, unknowns and status. needs=[guest_conversations] with no query lists past guest conversations in order. They show what guests wrote, not policy. The internal team chat need lists the operator's team chat the same way. It shows what the team wrote to each other, never what a guest wrote. Not for procedures; use get_policy.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"entity":{"type":"string","minLength":1,"maxLength":1500,"description":"Resolved canonical entity ID."},"query":{"type":"string","minLength":1,"maxLength":1500,"description":"Question or search terms, in English, German, Italian, Spanish or French."},"needs":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","enum":["guest_conversations","amenities","room_layout","work_items","property_constraints","utility_restoration","parking","detector","maintenance_access","ota_communication_owner","onsite_resolution_owner","reservation_responsibility","handover","recurrence","quote","approval","completion","cost_total","heating_capability","heating_interruption","area_sqm","bathrooms","bedrooms","sleeping_capacity","kitchen","non_smoking","wifi_available","washing_machine","sauna","pets","check_in_out","deposit","cancellation","fees","minimum_stay","quiet_hours","registration","accessibility","location","languages","guest_access","process_booking_intake","process_pre_arrival","process_access_keys","process_check_in","process_mid_stay_issues","process_check_out","process_turnover","process_inspection_damage","process_maintenance","process_restocking","process_reviews","process_owner_reporting","process_guest_registration","process_seasonal","process_emergencies","who_to_call","purchase_approval","guest_relocation","refund_approval","staff_conversations"]},"uniqueItems":true,"description":"Registered need IDs to answer, as listed in this schema. Omit to infer them from query."},"detail":{"type":"string","enum":["brief","full"],"default":"brief","description":"brief: evidence once, no room/bed containment. full: the whole relationship neighborhood."},"include_fixture":{"type":"boolean","default":false,"description":"Include labelled local test records."},"publication_id":{"type":"string","minLength":1,"maxLength":100,"description":"publication_id from the first result."},"offset":{"type":"integer","minimum":0,"maximum":10000,"default":0,"description":"Claim cursor from a continuation."},"passage_offset":{"type":"integer","minimum":0,"maximum":10000,"description":"Passage cursor from a continuation; defaults to offset."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Page size. Omit to keep the reply small; set it to accept a larger reply."},"confidence_floor":{"type":"number","minimum":0,"maximum":1,"description":"Least confidence score the best claim needs. A reply whose best claim scores lower is uncertain."},"mode":{"type":"string","enum":["fast","slow_ok"],"default":"slow_ok","description":"fast: retrieval stops after 500 ms with a retryable timeout. slow_ok: it may take up to 2000 ms."},"deadline_ms":{"type":"integer","minimum":1,"maximum":2000,"description":"Retrieval time limit in milliseconds. It only shortens the mode's limit."}},"required":["entity"],"additionalProperties":false}}}},"responses":{"200":{"description":"A context packet. Every claim and passage cites evidence; unknowns stay explicit.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"supported, partial, uncertain, conflicted, ambiguous_entity, insufficient_evidence, source_unavailable or requires_live_lookup."},"publication_id":{"description":"Pass this back as publication_id on later calls. Absent only when candidates span operators.","type":"string"},"source_publication_id":{"type":"string"},"operator_id":{"type":"string"},"entity":{"nullable":true,"type":"object","properties":{},"additionalProperties":{}},"candidates":{"type":"array","items":{}},"claims":{"type":"array","items":{"type":"object","properties":{"confidence":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["reviewed","computed"]},"score":{"type":"number","minimum":0,"maximum":1},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","score","basis","version","uncalibrated"],"additionalProperties":false},{"type":"object","properties":{"method":{"type":"string","enum":["none"]},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","basis","version","uncalibrated"],"additionalProperties":false}]}},"additionalProperties":{}}},"relationships":{"type":"array","items":{}},"evidence":{"type":"array","items":{}},"passages":{"type":"array","items":{}},"unknowns":{"type":"array","items":{}},"required_live_lookups":{"type":"array","items":{}},"live_source_hint":{"description":"Only with requires_live_lookup: the system that answers the question. The MCP does not query it.","type":"string","enum":["pms","key_log","task_queue","accounting"]},"coverage":{"type":"array","items":{}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"truncated":{"type":"boolean"},"information_needs":{"type":"array","items":{}},"unanswered":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","enum":["no_evidence","conflict","below_confidence_floor"]},"gap_key":{"type":"string","pattern":"^gap:[a-f0-9]{64}$"},"need":{"type":"string","minLength":1},"entity_id":{"nullable":true,"type":"string","minLength":1}},"required":["reason","gap_key","need","entity_id"],"additionalProperties":false}},"coverage_summary":{"type":"object","properties":{},"additionalProperties":{}},"continuation":{"description":"Present when truncated: call the same tool again with continuation.arguments for the next page.","type":"object","properties":{},"additionalProperties":{}},"question":{"type":"string"},"detail":{"type":"string"},"context_manifest":{"type":"object","properties":{},"additionalProperties":{}},"resolution":{"type":"object","properties":{},"additionalProperties":{}},"matched_identifiers":{"type":"array","items":{}},"relationship_scope":{"type":"object","properties":{},"additionalProperties":{}},"passage_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"passages_truncated":{"type":"boolean"},"relationship_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"relationships_truncated":{"type":"boolean"},"required_context":{"type":"array","items":{}},"required_context_blocked":{"type":"array","items":{}},"unavailable_operators":{"type":"array","items":{"type":"string"}},"trace":{"type":"array","items":{}},"interpretation_basis":{"type":"string"},"retrieval":{"type":"object","properties":{},"additionalProperties":{}},"gaps":{"type":"array","items":{}},"coverage_manifest":{"type":"object","properties":{},"additionalProperties":{}}},"required":["status","entity","candidates","claims","relationships","evidence","passages","unknowns","required_live_lookups","coverage","total","truncated","information_needs","coverage_summary"],"additionalProperties":false,"description":"A context packet. Every claim and passage cites evidence; unknowns stay explicit."}}}},"default":{"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false}},"required":["status","error"],"additionalProperties":false,"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed."}}}}}}},"/v1/get_policy":{"post":{"operationId":"get_policy","summary":"Procedures and policies","tags":["tools"],"description":"Documented procedures, roles, responsibilities and exceptions. Use it for what to do in a situation and who handles it. Pass query, plus entity for one property, or omit entity to search operator-wide. For who_to_call, pass one resolved unit or group as entity and an incident_type. Returns claims with evidence, and who_to_call rows with roles, order, declared availability and opaque refs. Not for current availability or guest anecdotes. Not for exact source wording; use search_docs.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"entity":{"type":"string","minLength":1,"maxLength":1500,"description":"Resolved canonical entity ID. Required for who_to_call; otherwise omit for operator-wide procedures."},"query":{"type":"string","minLength":1,"maxLength":1500,"description":"Question or search terms, in English, German, Italian, Spanish or French."},"needs":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","enum":["guest_conversations","amenities","room_layout","work_items","property_constraints","utility_restoration","parking","detector","maintenance_access","ota_communication_owner","onsite_resolution_owner","reservation_responsibility","handover","recurrence","quote","approval","completion","cost_total","heating_capability","heating_interruption","area_sqm","bathrooms","bedrooms","sleeping_capacity","kitchen","non_smoking","wifi_available","washing_machine","sauna","pets","check_in_out","deposit","cancellation","fees","minimum_stay","quiet_hours","registration","accessibility","location","languages","guest_access","process_booking_intake","process_pre_arrival","process_access_keys","process_check_in","process_mid_stay_issues","process_check_out","process_turnover","process_inspection_damage","process_maintenance","process_restocking","process_reviews","process_owner_reporting","process_guest_registration","process_seasonal","process_emergencies","who_to_call","purchase_approval","guest_relocation","refund_approval","staff_conversations"]},"uniqueItems":true,"description":"Registered need IDs to answer, as listed in this schema. Omit to infer them from query."},"detail":{"type":"string","enum":["brief","full"],"default":"brief","description":"brief: evidence once, no room/bed containment. full: the whole relationship neighborhood."},"include_fixture":{"type":"boolean","default":false,"description":"Include labelled local test records."},"publication_id":{"type":"string","minLength":1,"maxLength":100,"description":"publication_id from the first result."},"offset":{"type":"integer","minimum":0,"maximum":10000,"default":0,"description":"Claim cursor from a continuation."},"passage_offset":{"type":"integer","minimum":0,"maximum":10000,"description":"Passage cursor from a continuation; defaults to offset."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Page size. Omit to keep the reply small; set it to accept a larger reply."},"confidence_floor":{"type":"number","minimum":0,"maximum":1,"description":"Least confidence score the best claim needs. A reply whose best claim scores lower is uncertain."},"mode":{"type":"string","enum":["fast","slow_ok"],"default":"slow_ok","description":"fast: retrieval stops after 500 ms with a retryable timeout. slow_ok: it may take up to 2000 ms."},"deadline_ms":{"type":"integer","minimum":1,"maximum":2000,"description":"Retrieval time limit in milliseconds. It only shortens the mode's limit."},"incident_type":{"description":"Exact roster incident key for who_to_call, such as broken_boiler. Otherwise the question must name one recorded incident type.","type":"string","maxLength":80,"pattern":"^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$"},"org":{"type":"string","minLength":1,"maxLength":128,"description":"Organization or operator ID to read. Omit to read every operator you have access to."}},"required":["query"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"supported, partial, uncertain, conflicted, ambiguous_entity, insufficient_evidence, source_unavailable or requires_live_lookup."},"publication_id":{"description":"Pass this back as publication_id on later calls. Absent only when candidates span operators.","type":"string"},"source_publication_id":{"type":"string"},"operator_id":{"type":"string"},"entity":{"nullable":true,"type":"object","properties":{},"additionalProperties":{}},"candidates":{"type":"array","items":{}},"claims":{"type":"array","items":{"type":"object","properties":{"confidence":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["reviewed","computed"]},"score":{"type":"number","minimum":0,"maximum":1},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","score","basis","version","uncalibrated"],"additionalProperties":false},{"type":"object","properties":{"method":{"type":"string","enum":["none"]},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","basis","version","uncalibrated"],"additionalProperties":false}]}},"additionalProperties":{}}},"relationships":{"type":"array","items":{}},"evidence":{"type":"array","items":{}},"passages":{"type":"array","items":{}},"unknowns":{"type":"array","items":{}},"required_live_lookups":{"type":"array","items":{}},"live_source_hint":{"description":"Only with requires_live_lookup: the system that answers the question. The MCP does not query it.","type":"string","enum":["pms","key_log","task_queue","accounting"]},"coverage":{"type":"array","items":{}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"truncated":{"type":"boolean"},"information_needs":{"type":"array","items":{}},"unanswered":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","enum":["no_evidence","conflict","below_confidence_floor"]},"gap_key":{"type":"string","pattern":"^gap:[a-f0-9]{64}$"},"need":{"type":"string","minLength":1},"entity_id":{"nullable":true,"type":"string","minLength":1}},"required":["reason","gap_key","need","entity_id"],"additionalProperties":false}},"coverage_summary":{"type":"object","properties":{},"additionalProperties":{}},"continuation":{"description":"Present when truncated: call the same tool again with continuation.arguments for the next page.","type":"object","properties":{},"additionalProperties":{}},"question":{"type":"string"},"detail":{"type":"string"},"context_manifest":{"type":"object","properties":{},"additionalProperties":{}},"resolution":{"type":"object","properties":{},"additionalProperties":{}},"matched_identifiers":{"type":"array","items":{}},"relationship_scope":{"type":"object","properties":{},"additionalProperties":{}},"passage_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"passages_truncated":{"type":"boolean"},"relationship_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"relationships_truncated":{"type":"boolean"},"required_context":{"type":"array","items":{}},"required_context_blocked":{"type":"array","items":{}},"unavailable_operators":{"type":"array","items":{"type":"string"}},"trace":{"type":"array","items":{}},"interpretation_basis":{"type":"string"},"retrieval":{"type":"object","properties":{},"additionalProperties":{}},"gaps":{"type":"array","items":{}},"coverage_manifest":{"type":"object","properties":{},"additionalProperties":{}},"who_to_call":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"role":{"type":"string","minLength":1,"maxLength":200},"order":{"type":"integer","minimum":1,"maximum":1000},"availability_window":{"type":"string","minLength":1,"maxLength":200},"contact_ref":{"type":"string","pattern":"^ref_[a-f0-9]{32}$"}},"required":["role","order","availability_window","contact_ref"],"additionalProperties":false}}},"required":["status","entity","candidates","claims","relationships","evidence","passages","unknowns","required_live_lookups","coverage","total","truncated","information_needs","coverage_summary"],"additionalProperties":false}}}},"default":{"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false}},"required":["status","error"],"additionalProperties":false,"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed."}}}}}}},"/v1/search_docs":{"post":{"operationId":"search_docs","summary":"Search source text","tags":["tools"],"description":"Full-text search of imported source passages, evidence and claims. Use it to quote a source's exact wording or find where it says something, or with query alone to find the record behind an unmatched label. Pass query, and entity to stay within one property. Returns passages, claims and evidence that match the query. Not for procedure, rule or fact questions; use get_policy or get_property_context. Guest and team chat passages are not policy. Team chat passages are what the operator's team wrote, never guest words.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"entity":{"type":"string","minLength":1,"maxLength":1500,"description":"Resolved canonical entity ID. Omit to search every eligible source."},"query":{"type":"string","minLength":1,"maxLength":1500,"description":"Question or search terms, in English, German, Italian, Spanish or French."},"needs":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","enum":["guest_conversations","amenities","room_layout","work_items","property_constraints","utility_restoration","parking","detector","maintenance_access","ota_communication_owner","onsite_resolution_owner","reservation_responsibility","handover","recurrence","quote","approval","completion","cost_total","heating_capability","heating_interruption","area_sqm","bathrooms","bedrooms","sleeping_capacity","kitchen","non_smoking","wifi_available","washing_machine","sauna","pets","check_in_out","deposit","cancellation","fees","minimum_stay","quiet_hours","registration","accessibility","location","languages","guest_access","process_booking_intake","process_pre_arrival","process_access_keys","process_check_in","process_mid_stay_issues","process_check_out","process_turnover","process_inspection_damage","process_maintenance","process_restocking","process_reviews","process_owner_reporting","process_guest_registration","process_seasonal","process_emergencies","who_to_call","purchase_approval","guest_relocation","refund_approval","staff_conversations"]},"uniqueItems":true,"description":"Registered need IDs to answer, as listed in this schema. Omit to infer them from query."},"detail":{"type":"string","enum":["brief","full"],"default":"brief","description":"brief: evidence once, no room/bed containment. full: the whole relationship neighborhood."},"include_fixture":{"type":"boolean","default":false,"description":"Include labelled local test records."},"publication_id":{"type":"string","minLength":1,"maxLength":100,"description":"publication_id from the first result."},"offset":{"type":"integer","minimum":0,"maximum":10000,"default":0,"description":"Claim cursor from a continuation."},"passage_offset":{"type":"integer","minimum":0,"maximum":10000,"description":"Passage cursor from a continuation; defaults to offset."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Page size. Omit to keep the reply small; set it to accept a larger reply."},"confidence_floor":{"type":"number","minimum":0,"maximum":1,"description":"Least confidence score the best claim needs. A reply whose best claim scores lower is uncertain."},"mode":{"type":"string","enum":["fast","slow_ok"],"default":"slow_ok","description":"fast: retrieval stops after 500 ms with a retryable timeout. slow_ok: it may take up to 2000 ms."},"deadline_ms":{"type":"integer","minimum":1,"maximum":2000,"description":"Retrieval time limit in milliseconds. It only shortens the mode's limit."},"org":{"type":"string","minLength":1,"maxLength":128,"description":"Organization or operator ID to read. Omit to read every operator you have access to."}},"required":["query"],"additionalProperties":false}}}},"responses":{"200":{"description":"A context packet. Every claim and passage cites evidence; unknowns stay explicit.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"supported, partial, uncertain, conflicted, ambiguous_entity, insufficient_evidence, source_unavailable or requires_live_lookup."},"publication_id":{"description":"Pass this back as publication_id on later calls. Absent only when candidates span operators.","type":"string"},"source_publication_id":{"type":"string"},"operator_id":{"type":"string"},"entity":{"nullable":true,"type":"object","properties":{},"additionalProperties":{}},"candidates":{"type":"array","items":{}},"claims":{"type":"array","items":{"type":"object","properties":{"confidence":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["reviewed","computed"]},"score":{"type":"number","minimum":0,"maximum":1},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","score","basis","version","uncalibrated"],"additionalProperties":false},{"type":"object","properties":{"method":{"type":"string","enum":["none"]},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","basis","version","uncalibrated"],"additionalProperties":false}]}},"additionalProperties":{}}},"relationships":{"type":"array","items":{}},"evidence":{"type":"array","items":{}},"passages":{"type":"array","items":{}},"unknowns":{"type":"array","items":{}},"required_live_lookups":{"type":"array","items":{}},"live_source_hint":{"description":"Only with requires_live_lookup: the system that answers the question. The MCP does not query it.","type":"string","enum":["pms","key_log","task_queue","accounting"]},"coverage":{"type":"array","items":{}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"truncated":{"type":"boolean"},"information_needs":{"type":"array","items":{}},"unanswered":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","enum":["no_evidence","conflict","below_confidence_floor"]},"gap_key":{"type":"string","pattern":"^gap:[a-f0-9]{64}$"},"need":{"type":"string","minLength":1},"entity_id":{"nullable":true,"type":"string","minLength":1}},"required":["reason","gap_key","need","entity_id"],"additionalProperties":false}},"coverage_summary":{"type":"object","properties":{},"additionalProperties":{}},"continuation":{"description":"Present when truncated: call the same tool again with continuation.arguments for the next page.","type":"object","properties":{},"additionalProperties":{}},"question":{"type":"string"},"detail":{"type":"string"},"context_manifest":{"type":"object","properties":{},"additionalProperties":{}},"resolution":{"type":"object","properties":{},"additionalProperties":{}},"matched_identifiers":{"type":"array","items":{}},"relationship_scope":{"type":"object","properties":{},"additionalProperties":{}},"passage_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"passages_truncated":{"type":"boolean"},"relationship_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"relationships_truncated":{"type":"boolean"},"required_context":{"type":"array","items":{}},"required_context_blocked":{"type":"array","items":{}},"unavailable_operators":{"type":"array","items":{"type":"string"}},"trace":{"type":"array","items":{}},"interpretation_basis":{"type":"string"},"retrieval":{"type":"object","properties":{},"additionalProperties":{}},"gaps":{"type":"array","items":{}},"coverage_manifest":{"type":"object","properties":{},"additionalProperties":{}}},"required":["status","entity","candidates","claims","relationships","evidence","passages","unknowns","required_live_lookups","coverage","total","truncated","information_needs","coverage_summary"],"additionalProperties":false,"description":"A context packet. Every claim and passage cites evidence; unknowns stay explicit."}}}},"default":{"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false}},"required":["status","error"],"additionalProperties":false,"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed."}}}}}}},"/v1/get_history":{"post":{"operationId":"get_history","summary":"Property history","tags":["tools"],"description":"Past events, work requests, price quotes and approvals for one resolved entity, with dated evidence. Use it for what happened before. Pass the resolved ID as entity, and query to narrow it. Returns claims, passages and evidence. A past work request does not show that work is open or done. Not for current state. Not for procedures; use get_policy.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"entity":{"type":"string","minLength":1,"maxLength":1500,"description":"Resolved canonical entity ID."},"query":{"type":"string","minLength":1,"maxLength":1500,"description":"Question or search terms, in English, German, Italian, Spanish or French."},"needs":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"string","enum":["guest_conversations","amenities","room_layout","work_items","property_constraints","utility_restoration","parking","detector","maintenance_access","ota_communication_owner","onsite_resolution_owner","reservation_responsibility","handover","recurrence","quote","approval","completion","cost_total","heating_capability","heating_interruption","area_sqm","bathrooms","bedrooms","sleeping_capacity","kitchen","non_smoking","wifi_available","washing_machine","sauna","pets","check_in_out","deposit","cancellation","fees","minimum_stay","quiet_hours","registration","accessibility","location","languages","guest_access","process_booking_intake","process_pre_arrival","process_access_keys","process_check_in","process_mid_stay_issues","process_check_out","process_turnover","process_inspection_damage","process_maintenance","process_restocking","process_reviews","process_owner_reporting","process_guest_registration","process_seasonal","process_emergencies","who_to_call","purchase_approval","guest_relocation","refund_approval","staff_conversations"]},"uniqueItems":true,"description":"Registered need IDs to answer, as listed in this schema. Omit to infer them from query."},"detail":{"type":"string","enum":["brief","full"],"default":"brief","description":"brief: evidence once, no room/bed containment. full: the whole relationship neighborhood."},"include_fixture":{"type":"boolean","default":false,"description":"Include labelled local test records."},"publication_id":{"type":"string","minLength":1,"maxLength":100,"description":"publication_id from the first result."},"offset":{"type":"integer","minimum":0,"maximum":10000,"default":0,"description":"Claim cursor from a continuation."},"passage_offset":{"type":"integer","minimum":0,"maximum":10000,"description":"Passage cursor from a continuation; defaults to offset."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Page size. Omit to keep the reply small; set it to accept a larger reply."},"confidence_floor":{"type":"number","minimum":0,"maximum":1,"description":"Least confidence score the best claim needs. A reply whose best claim scores lower is uncertain."},"mode":{"type":"string","enum":["fast","slow_ok"],"default":"slow_ok","description":"fast: retrieval stops after 500 ms with a retryable timeout. slow_ok: it may take up to 2000 ms."},"deadline_ms":{"type":"integer","minimum":1,"maximum":2000,"description":"Retrieval time limit in milliseconds. It only shortens the mode's limit."}},"required":["entity"],"additionalProperties":false}}}},"responses":{"200":{"description":"A context packet. Every claim and passage cites evidence; unknowns stay explicit.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"supported, partial, uncertain, conflicted, ambiguous_entity, insufficient_evidence, source_unavailable or requires_live_lookup."},"publication_id":{"description":"Pass this back as publication_id on later calls. Absent only when candidates span operators.","type":"string"},"source_publication_id":{"type":"string"},"operator_id":{"type":"string"},"entity":{"nullable":true,"type":"object","properties":{},"additionalProperties":{}},"candidates":{"type":"array","items":{}},"claims":{"type":"array","items":{"type":"object","properties":{"confidence":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["reviewed","computed"]},"score":{"type":"number","minimum":0,"maximum":1},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","score","basis","version","uncalibrated"],"additionalProperties":false},{"type":"object","properties":{"method":{"type":"string","enum":["none"]},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","basis","version","uncalibrated"],"additionalProperties":false}]}},"additionalProperties":{}}},"relationships":{"type":"array","items":{}},"evidence":{"type":"array","items":{}},"passages":{"type":"array","items":{}},"unknowns":{"type":"array","items":{}},"required_live_lookups":{"type":"array","items":{}},"live_source_hint":{"description":"Only with requires_live_lookup: the system that answers the question. The MCP does not query it.","type":"string","enum":["pms","key_log","task_queue","accounting"]},"coverage":{"type":"array","items":{}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"truncated":{"type":"boolean"},"information_needs":{"type":"array","items":{}},"unanswered":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","enum":["no_evidence","conflict","below_confidence_floor"]},"gap_key":{"type":"string","pattern":"^gap:[a-f0-9]{64}$"},"need":{"type":"string","minLength":1},"entity_id":{"nullable":true,"type":"string","minLength":1}},"required":["reason","gap_key","need","entity_id"],"additionalProperties":false}},"coverage_summary":{"type":"object","properties":{},"additionalProperties":{}},"continuation":{"description":"Present when truncated: call the same tool again with continuation.arguments for the next page.","type":"object","properties":{},"additionalProperties":{}},"question":{"type":"string"},"detail":{"type":"string"},"context_manifest":{"type":"object","properties":{},"additionalProperties":{}},"resolution":{"type":"object","properties":{},"additionalProperties":{}},"matched_identifiers":{"type":"array","items":{}},"relationship_scope":{"type":"object","properties":{},"additionalProperties":{}},"passage_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"passages_truncated":{"type":"boolean"},"relationship_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"relationships_truncated":{"type":"boolean"},"required_context":{"type":"array","items":{}},"required_context_blocked":{"type":"array","items":{}},"unavailable_operators":{"type":"array","items":{"type":"string"}},"trace":{"type":"array","items":{}},"interpretation_basis":{"type":"string"},"retrieval":{"type":"object","properties":{},"additionalProperties":{}},"gaps":{"type":"array","items":{}},"coverage_manifest":{"type":"object","properties":{},"additionalProperties":{}}},"required":["status","entity","candidates","claims","relationships","evidence","passages","unknowns","required_live_lookups","coverage","total","truncated","information_needs","coverage_summary"],"additionalProperties":false,"description":"A context packet. Every claim and passage cites evidence; unknowns stay explicit."}}}},"default":{"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false}},"required":["status","error"],"additionalProperties":false,"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed."}}}}}}},"/v1/get_ontology":{"post":{"operationId":"get_ontology","summary":"Open Property ontology","tags":["tools"],"description":"The versioned Open Property schema: entity types, predicates, relationships and evidence rules. Takes no arguments. Returns entity_types, predicates, relationships and rules. Use it to look up a predicate or entity type. Not for property data.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"The versioned Open Property schema.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"ontology_version":{"type":"string"},"namespace":{"type":"string"},"prefixes":{"type":"object","properties":{},"additionalProperties":{}},"entity_types":{"type":"object","properties":{},"additionalProperties":{}},"record_types":{"type":"array","items":{}},"predicates":{"type":"object","properties":{},"additionalProperties":{}},"relationships":{"type":"object","properties":{},"additionalProperties":{}},"relationship_aliases":{"type":"object","properties":{},"additionalProperties":{}},"predicate_aliases":{"type":"object","properties":{},"additionalProperties":{}},"entity_type_aliases":{"type":"object","properties":{},"additionalProperties":{}},"extensions":{"type":"array","items":{}},"evidence_statuses":{"type":"object","properties":{},"additionalProperties":{}},"validity_states":{"type":"object","properties":{},"additionalProperties":{}},"graph_edges":{"type":"object","properties":{},"additionalProperties":{}},"rules":{"type":"array","items":{}}},"required":["status","ontology_version","namespace","prefixes","entity_types","record_types","predicates","relationships","relationship_aliases","graph_edges","rules"],"additionalProperties":false,"description":"The versioned Open Property schema."}}}},"default":{"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false}},"required":["status","error"],"additionalProperties":false,"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed."}}}}}}},"/v1/get_property_graph":{"post":{"operationId":"get_property_graph","summary":"Property graph page","tags":["tools"],"description":"One page of a resolved entity's typed graph: its own assertions, one-hop relationships or passages. Use it for structure, such as a unit's rooms and beds. Pass entity, publication_id and section. For rooms and beds, start with section=relationships, then call again with a containment's follow arguments. Returns nodes, edges, evidence and a continuation. Not for question answering; use get_property_context.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"entity":{"type":"string","minLength":1,"maxLength":1500,"description":"Resolved canonical property, unit or building ID."},"publication_id":{"type":"string","minLength":1,"maxLength":100,"description":"publication_id from the first result."},"view_id":{"type":"string","minLength":1,"maxLength":100,"description":"Copy from the returned continuation."},"section":{"type":"string","enum":["assertions","relationships","passages"]},"path":{"description":"Up to two containment relationship IDs from the root, as in follow arguments.","minItems":0,"maxItems":2,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"predicate":{"type":"string","minLength":1,"maxLength":200,"description":"Exact assertion predicate, such as bathrooms."},"offset":{"type":"integer","minimum":0,"maximum":100000},"limit":{"type":"integer","minimum":1,"maximum":20},"include_fixture":{"type":"boolean","default":false,"description":"Include labelled local test records."}},"required":["entity","publication_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"One page of typed graph nodes and edges, with the evidence every record cites.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"ontology_version":{"type":"string"},"prefixes":{"type":"object","properties":{},"additionalProperties":{}},"publication_id":{"type":"string"},"source_publication_id":{"type":"string"},"view_id":{"type":"string","description":"Copy into view_id when following continuation."},"entity_id":{"type":"string"},"focus_entity_id":{"type":"string"},"section":{"type":"string"},"path":{"type":"array","items":{}},"nodes":{"type":"array","items":{"type":"object","properties":{"source_record":{"type":"object","properties":{"confidence":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["reviewed","computed"]},"score":{"type":"number","minimum":0,"maximum":1},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","score","basis","version","uncalibrated"],"additionalProperties":false},{"type":"object","properties":{"method":{"type":"string","enum":["none"]},"basis":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":700}},"version":{"type":"string","minLength":1,"maxLength":100},"uncalibrated":{"type":"boolean"}},"required":["method","basis","version","uncalibrated"],"additionalProperties":false}]}},"additionalProperties":{}}},"additionalProperties":{}}},"edges":{"type":"array","items":{}},"evidence":{"type":"array","items":{}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"returned":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"truncated":{"type":"boolean"},"required_context":{"type":"array","items":{}},"required_context_blocked":{"type":"array","items":{}},"continuation":{"type":"object","properties":{},"additionalProperties":{}}},"required":["status","ontology_version","prefixes","publication_id","view_id","entity_id","focus_entity_id","section","path","nodes","edges","evidence","total","returned","truncated"],"additionalProperties":false,"description":"One page of typed graph nodes and edges, with the evidence every record cites."}}}},"default":{"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false}},"required":["status","error"],"additionalProperties":false,"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed."}}}}}}},"/v1/get_process_coverage":{"post":{"operationId":"get_process_coverage","summary":"Process coverage","tags":["tools"],"description":"Which reference processes and steps, from reservation intake to check-out, turnover and maintenance, have evidence for a resolved entity: confirmed, documented, observed, inferred or unknown. Pass entity, and process to list that process's records. Returns processes, gaps and evidence IDs. Observed and inferred steps are unconfirmed. Not for what a procedure says; use get_policy.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"entity":{"type":"string","minLength":1,"maxLength":1500,"description":"Resolved canonical entity ID."},"process":{"description":"One catalog process key, such as turnover, for its steps' records and evidence.","type":"string","enum":["booking_intake","pre_arrival","access_keys","check_in","mid_stay_issues","check_out","turnover","inspection_damage","maintenance","restocking","reviews","owner_reporting","guest_registration","seasonal","handover","emergencies"]},"publication_id":{"type":"string","minLength":1,"maxLength":100,"description":"publication_id from the first result."},"include_fixture":{"type":"boolean","default":false,"description":"Include labelled local test records."},"offset":{"description":"Record cursor.","type":"integer","minimum":0,"maximum":10000},"limit":{"description":"Process records per page. Omit to keep the reply small.","type":"integer","minimum":1,"maximum":20}},"required":["entity"],"additionalProperties":false}}}},"responses":{"200":{"description":"Catalog process coverage for one entity: each step's strongest evidence status and the records behind it.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"publication_id":{"type":"string"},"source_publication_id":{"type":"string"},"entity":{"type":"object","properties":{},"additionalProperties":{}},"catalog":{"type":"object","properties":{},"additionalProperties":{}},"summary":{"type":"object","properties":{},"additionalProperties":{}},"processes":{"type":"array","items":{}},"gaps":{"type":"array","items":{}},"routes":{"type":"object","properties":{},"additionalProperties":{}},"process_records":{"type":"array","items":{}},"process_record_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"evidence":{"type":"array","items":{}},"evidence_truncated":{"type":"boolean"},"truncated":{"type":"boolean"},"continuation":{"type":"object","properties":{},"additionalProperties":{}},"note":{"type":"string"}},"required":["status","publication_id","entity","catalog","summary","processes","gaps","routes"],"additionalProperties":false,"description":"Catalog process coverage for one entity: each step's strongest evidence status and the records behind it."}}}},"default":{"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false}},"required":["status","error"],"additionalProperties":false,"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed."}}}}}}},"/v1/get_request_status":{"post":{"operationId":"get_request_status","summary":"Request status","tags":["tools"],"description":"Read one durable request by its gap_id: open, asked, answered, published or closed. Returns status, action, need and, once published or closed, the publication_id and claim_id that resolved it. Not for search or lists.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"gap_id":{"type":"string","maxLength":105,"pattern":"^[a-z][a-z0-9_-]{0,63}:gap:[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$","description":"Scoped gap_id returned by a local request action."}},"required":["gap_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["open","asked","answered","published","closed"]},"gap_id":{"type":"string","maxLength":105,"pattern":"^[a-z][a-z0-9_-]{0,63}:gap:[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"},"gap_key":{"type":"string","pattern":"^gap:[a-f0-9]{64}$"},"action":{"type":"string","enum":["request_verification","report_incident"]},"reason":{"type":"string","enum":["no_evidence","conflict"]},"need":{"type":"string","enum":["unrecognized_request","guest_conversations","amenities","room_layout","work_items","property_constraints","utility_restoration","parking","detector","maintenance_access","ota_communication_owner","onsite_resolution_owner","reservation_responsibility","handover","recurrence","quote","approval","completion","cost_total","heating_capability","heating_interruption","area_sqm","bathrooms","bedrooms","sleeping_capacity","kitchen","non_smoking","wifi_available","washing_machine","sauna","pets","check_in_out","deposit","cancellation","fees","minimum_stay","quiet_hours","registration","accessibility","location","languages","guest_access","process_booking_intake","process_pre_arrival","process_access_keys","process_check_in","process_mid_stay_issues","process_check_out","process_turnover","process_inspection_damage","process_maintenance","process_restocking","process_reviews","process_owner_reporting","process_guest_registration","process_seasonal","process_emergencies","who_to_call","purchase_approval","guest_relocation","refund_approval","staff_conversations"]},"entity_id":{"nullable":true,"type":"string","minLength":1,"maxLength":700},"opened_publication_id":{"type":"string","minLength":1,"maxLength":100},"publication_id":{"nullable":true,"type":"string","minLength":1,"maxLength":100},"claim_id":{"nullable":true,"type":"string","minLength":1,"maxLength":700},"source_publication_id":{"type":"string","minLength":1,"maxLength":100}},"required":["status","gap_id","gap_key","action","reason","need","entity_id","opened_publication_id","publication_id","claim_id"],"additionalProperties":false}}}},"default":{"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false}},"required":["status","error"],"additionalProperties":false,"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed."}}}}}}},"/v1/aggregate_requests":{"post":{"operationId":"aggregate_requests","summary":"Topic counts per unit","tags":["tools"],"description":"Count requests on one topic, such as cancellation, per unit, from passages published with that topic label. Pass topic, and scope as the operator ID for the whole portfolio or a resolved region, city, building or unit ID. Pass since and until to bound the period. Repeats of one request, such as the blocks of a thread or one message on several pages, count once as an episode. Returns counts per unit with evidence_ids, total and completeness, the labeled share of the scope's passages. Unlabeled passages may hold more requests. Not for what one request says; use search_docs.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z][a-z0-9_]*$","description":"Topic label to count, such as cancellation."},"scope":{"type":"string","minLength":1,"maxLength":700,"description":"Operator ID for the whole portfolio, or a resolved region, city, building or unit ID."},"since":{"type":"string","maxLength":40,"description":"Count passages from this ISO date or zoned date-time on. With since or until, undated passages are left out."},"until":{"type":"string","maxLength":40,"description":"Count passages before this ISO date or zoned date-time."}},"required":["topic","scope"],"additionalProperties":false}}}},"responses":{"200":{"description":"Topic episodes per unit over one scope, with the denominator they come from.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["supported","partial","insufficient_evidence"]},"publication_id":{"type":"string"},"source_publication_id":{"type":"string"},"topic":{"type":"string"},"scope":{"type":"object","properties":{"id":{"type":"string"},"level":{"type":"string","enum":["unit","building","city","region","org"]}},"required":["id","level"],"additionalProperties":false},"episodes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Episodes across the scope."},"counts":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"unit_id":{"type":"string"},"name":{"type":"string"},"episodes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"passages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Labeled passages behind the episodes, repeats included."},"evidence_ids":{"type":"array","items":{"type":"string"},"description":"One source ID per episode, earliest first."}},"required":["unit_id","name","episodes","passages","evidence_ids"],"additionalProperties":false},"description":"Units with at least one episode, most episodes first."},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Units with at least one episode."},"truncated":{"type":"boolean"},"evidence_truncated":{"type":"boolean","description":"True when the 120-ID limit left some episodes without an ID."},"denominator":{"type":"object","properties":{"units":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Units in scope."},"passages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Their passages in the window."},"labeled_passages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Those passages with any topic label."}},"required":["units","passages","labeled_passages"],"additionalProperties":false},"completeness":{"type":"number","minimum":0,"maximum":1,"description":"labeled_passages over passages; 0 when there are none."}},"required":["status","publication_id","topic","scope","episodes","counts","total","truncated","evidence_truncated","denominator","completeness"],"additionalProperties":false,"description":"Topic episodes per unit over one scope, with the denominator they come from."}}}},"default":{"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false}},"required":["status","error"],"additionalProperties":false,"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed."}}}}}}},"/v1/sources/{id}":{"get":{"operationId":"get_source","summary":"Evidence source","tags":["sources"],"description":"One evidence source by exact ID, with its excerpt, when a granted operator may show it now.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":700},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"source":{"type":"object","properties":{},"additionalProperties":{}}},"required":["status","source"],"additionalProperties":{}}}}},"default":{"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false}},"required":["status","error"],"additionalProperties":false,"description":"Every failure: a stable code, a message naming the fix, and whether a retry can succeed."}}}}}}}},"servers":[{"url":"https://mcp.axelrod.live"}],"security":[{"bearer":[]}]}