{"openapi":"3.1.0","info":{"title":"PropFixly Resolution API","version":"0.2.0-internal-alpha","description":"Controlled maintenance request and decision-recording API. No automated dispatch, payment, accepted SLA, OAuth consent, or independent physical verification."},"servers":[{"url":"https://api.propfixly.com"}],"paths":{"/health":{"get":{"operationId":"health","security":[],"responses":{"200":{"description":"Process health only; not proof of database access","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/readiness":{"get":{"operationId":"readiness","security":[{"operatorAuth":[]}],"responses":{"200":{"description":"Authenticated database and lifecycle RPC readiness","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/properties":{"get":{"operationId":"listProperties","security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"in":"query","name":"offset","schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}}],"responses":{"200":{"description":"Only properties authorized for this connection","content":{"application/json":{"schema":{"type":"object","properties":{"properties":{"type":"array","items":{"type":"object"}},"next_offset":{"type":["integer","null"]}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/resolutions":{"post":{"operationId":"createResolution","security":[{"bearerAuth":[]}],"description":"Submit a request for manual review. No contractor dispatch, spending, or accepted SLA.","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Stable ASCII key for this action. Retry the same normalized request/key; changed payloads return 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"property_id":{"type":"string","format":"uuid"},"owner_id":{"type":["string","null"],"format":"uuid"},"unit_id":{"type":["string","null"],"format":"uuid"},"tenant_contact_id":{"type":["string","null"],"format":"uuid"},"problem":{"oneOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"object","properties":{"description":{"type":"string","minLength":1,"maxLength":4000},"category":{"type":"string","minLength":1,"maxLength":80},"subcategory":{"type":"string","minLength":1,"maxLength":80},"symptoms":{"type":"object"}},"required":["description"],"additionalProperties":false}]},"urgency":{"type":"string","enum":["low","medium","high","emergency"],"default":"medium"},"constraints":{"type":"object","properties":{"max_spend_cents":{"type":"integer","minimum":0,"maximum":2147483647,"description":"USD cents; requested hard cap is cumulative across recorded execution attempts."},"access_window":{"type":"string","minLength":1,"maxLength":500},"deadline_at":{"type":"string","format":"date-time"},"replacement_requires_approval":{"type":"boolean"}},"required":[],"additionalProperties":false},"authorization_policy":{"type":"object","properties":{"approval_required_above_cents":{"type":"integer","minimum":0,"maximum":2147483647,"description":"USD cents; requested hard cap is cumulative across recorded execution attempts."}},"required":[],"additionalProperties":false},"sla":{"type":"object","properties":{"target_resolution_at":{"type":"string","format":"date-time"}},"required":[],"additionalProperties":false},"source":{"type":"object","properties":{"system":{"type":"string","minLength":1,"maxLength":80},"reference":{"type":"string","minLength":1,"maxLength":200}},"required":[],"additionalProperties":false},"test_mode":{"type":"boolean","default":false}},"required":["property_id","problem"],"additionalProperties":false}}}},"responses":{"200":{"description":"Idempotent replay with current resolution snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"resolution":{"$ref":"#/components/schemas/Resolution"},"request_id":{"type":"string"},"replayed":{"type":"boolean"}},"required":["resolution"]}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"resolution":{"$ref":"#/components/schemas/Resolution"},"request_id":{"type":"string"},"replayed":{"type":"boolean"}},"required":["resolution"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}},"get":{"operationId":"listResolutions","security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"in":"query","name":"offset","schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}},{"in":"query","name":"test_mode","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Scoped queue; synthetic tests excluded by default","content":{"application/json":{"schema":{"type":"object","properties":{"resolutions":{"type":"array","items":{"type":"object"}},"next_offset":{"type":["integer","null"]}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/resolutions/{resolution_id}":{"get":{"operationId":"getResolution","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"resolution_id","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Current resolution snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"resolution":{"$ref":"#/components/schemas/Resolution"},"request_id":{"type":"string"},"replayed":{"type":"boolean"}},"required":["resolution"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/resolutions/{resolution_id}/events":{"get":{"operationId":"getResolutionEvents","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"resolution_id","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"query","name":"after_version","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"At most 100 ordered API events; use next_after_version to continue","content":{"application/json":{"schema":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object"}},"next_after_version":{"type":"integer"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/clients":{"post":{"operationId":"createClient","security":[{"operatorAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"property_ids":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string","format":"uuid"}},"expires_in_days":{"type":"integer","minimum":1,"maximum":90,"default":7}},"required":["name","property_ids"],"additionalProperties":false}}}},"responses":{"201":{"description":"Scoped client token returned once; do not log it","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/clients/{client_id}/revoke":{"post":{"operationId":"revokeClient","security":[{"operatorAuth":[]}],"parameters":[{"in":"path","name":"client_id","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Client revoked","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/resolutions/{resolution_id}/diagnose":{"post":{"operationId":"diagnose","description":"Record diagnosis. Operator-only; no dispatch.","security":[{"operatorAuth":[]}],"parameters":[{"in":"path","name":"resolution_id","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Stable ASCII key for this action. Retry the same normalized request/key; changed payloads return 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expected_version":{"type":"integer","minimum":1},"summary":{"type":"string","minLength":1,"maxLength":4000},"recommended_next_action":{"type":"string","minLength":1,"maxLength":4000},"confidence":{"type":"number","minimum":0,"maximum":1}},"required":["expected_version","summary","recommended_next_action"],"additionalProperties":false}}}},"responses":{"200":{"description":"Recorded operation and current snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"object"},"resolution":{"$ref":"#/components/schemas/Resolution"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/resolutions/{resolution_id}/quote":{"post":{"operationId":"quote","description":"Select a new quote and require fresh approval.","security":[{"operatorAuth":[]}],"parameters":[{"in":"path","name":"resolution_id","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Stable ASCII key for this action. Retry the same normalized request/key; changed payloads return 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expected_version":{"type":"integer","minimum":1},"description":{"type":"string","minLength":1,"maxLength":4000},"amount_cents":{"type":"integer","minimum":0,"maximum":2147483647,"description":"USD cents; requested hard cap is cumulative across recorded execution attempts."}},"required":["expected_version","description","amount_cents"],"additionalProperties":false}}}},"responses":{"200":{"description":"Recorded operation and current snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"object"},"resolution":{"$ref":"#/components/schemas/Resolution"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/resolutions/{resolution_id}/approve":{"post":{"operationId":"approve","description":"Record the reference to actual human authorization for the selected quote within the remaining cumulative cap. No charge or dispatch.","security":[{"operatorAuth":[]}],"parameters":[{"in":"path","name":"resolution_id","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Stable ASCII key for this action. Retry the same normalized request/key; changed payloads return 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expected_version":{"type":"integer","minimum":1},"quote_id":{"type":"string","format":"uuid"},"amount_cents":{"type":"integer","minimum":0,"maximum":2147483647,"description":"USD cents; requested hard cap is cumulative across recorded execution attempts."},"approval_reference":{"type":"string","minLength":1,"maxLength":1000}},"required":["expected_version","quote_id","amount_cents","approval_reference"],"additionalProperties":false}}}},"responses":{"200":{"description":"Recorded operation and current snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"object"},"resolution":{"$ref":"#/components/schemas/Resolution"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/resolutions/{resolution_id}/record-execution":{"post":{"operationId":"record_execution","description":"Record an externally arranged appointment/start/completion. scheduled_start is required for scheduled. A completion report is not a verified result.","security":[{"operatorAuth":[]}],"parameters":[{"in":"path","name":"resolution_id","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Stable ASCII key for this action. Retry the same normalized request/key; changed payloads return 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expected_version":{"type":"integer","minimum":1},"status":{"type":"string","enum":["scheduled","in_progress","completed"]},"reference":{"type":"string","minLength":1,"maxLength":1000},"scheduled_start":{"type":"string","format":"date-time"}},"required":["expected_version","status","reference"],"additionalProperties":false}}}},"responses":{"200":{"description":"Recorded operation and current snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"object"},"resolution":{"$ref":"#/components/schemas/Resolution"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/resolutions/{resolution_id}/evidence":{"post":{"operationId":"evidence","description":"Register a consented HTTPS evidence reference. No remote URL fetch or independent authentication is performed.","security":[{"operatorAuth":[]}],"parameters":[{"in":"path","name":"resolution_id","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Stable ASCII key for this action. Retry the same normalized request/key; changed payloads return 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expected_version":{"type":"integer","minimum":1},"media_type":{"type":"string","enum":["image","video","document"]},"media_url":{"type":"string","format":"uri","pattern":"^https://"},"stage":{"type":"string","enum":["before","diagnosis","during","after","invoice","other"]},"description":{"type":"string","minLength":1,"maxLength":4000},"consent_status":{"type":"string","const":"granted"},"final_test":{"type":"boolean"}},"required":["expected_version","media_type","media_url","stage","description","consent_status"],"additionalProperties":false}}}},"responses":{"200":{"description":"Recorded operation and current snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"object"},"resolution":{"$ref":"#/components/schemas/Resolution"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/resolutions/{resolution_id}/verify":{"post":{"operationId":"verify","description":"Record operator verification after reported work completion. Requires same-resolution final-test evidence.","security":[{"operatorAuth":[]}],"parameters":[{"in":"path","name":"resolution_id","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Stable ASCII key for this action. Retry the same normalized request/key; changed payloads return 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expected_version":{"type":"integer","minimum":1},"resolved":{"type":"boolean"},"root_cause":{"type":"string","minLength":1,"maxLength":4000},"repair_performed":{"type":"string","minLength":1,"maxLength":4000},"verification_reference":{"type":"string","minLength":1,"maxLength":1000},"evidence_ids":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","format":"uuid"}}},"required":["expected_version","resolved","root_cause","repair_performed","verification_reference","evidence_ids"],"additionalProperties":false}}}},"responses":{"200":{"description":"Recorded operation and current snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"object"},"resolution":{"$ref":"#/components/schemas/Resolution"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/resolutions/{resolution_id}/cancel":{"post":{"operationId":"cancel","description":"Cancel before execution, otherwise request human cancellation follow-up. Available to the scoped client; no refund.","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"resolution_id","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Stable ASCII key for this action. Retry the same normalized request/key; changed payloads return 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expected_version":{"type":"integer","minimum":1},"reason":{"type":"string","minLength":1,"maxLength":1000}},"required":["expected_version","reason"],"additionalProperties":false}}}},"responses":{"200":{"description":"Recorded operation and current snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"object"},"resolution":{"$ref":"#/components/schemas/Resolution"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/v1/resolutions/{resolution_id}/confirm-cancel":{"post":{"operationId":"confirm_cancel","description":"Operator records confirmation that external work was stopped. No refund and no automatic release of reserved budget.","security":[{"operatorAuth":[]}],"parameters":[{"in":"path","name":"resolution_id","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Stable ASCII key for this action. Retry the same normalized request/key; changed payloads return 409."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expected_version":{"type":"integer","minimum":1},"confirmation_reference":{"type":"string","minLength":1,"maxLength":1000}},"required":["expected_version","confirmation_reference"],"additionalProperties":false}}}},"responses":{"200":{"description":"Recorded operation and current snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"object"},"resolution":{"$ref":"#/components/schemas/Resolution"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"403":{"description":"Operator authority required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Not found or not authorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"409":{"description":"Version, idempotency, budget, or lifecycle conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"422":{"description":"Invalid references or unsupported test property","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Dependency unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"A property-scoped client token; operator credential also accepted on REST only."},"operatorAuth":{"type":"http","scheme":"bearer","description":"Server-side operator credential. Never place it in an agent or browser."}},"schemas":{"Resolution":{"type":"object","required":["resolution_id","status","version","test_mode","property","issue","constraints","diagnosis","scope","estimate","authorization","sla","execution","evidence","verified_result"],"properties":{"resolution_id":{"type":"string","format":"uuid"},"status":{"type":"string","minLength":1,"maxLength":80},"version":{"type":"integer","minimum":1},"test_mode":{"type":"boolean"},"property":{"type":["object","null"]},"issue":{"type":"object"},"constraints":{"type":"object"},"diagnosis":{"type":"object"},"scope":{"type":"object"},"estimate":{"type":["object","null"]},"authorization":{"type":"object","description":"Requested policy plus operator-recorded decision; automatic spending is disabled."},"sla":{"type":"object","description":"Requested constraints only; accepted is null and guaranteed is false."},"execution":{"type":["object","null"],"description":"Recorded external execution, not a dispatch instruction."},"evidence":{"type":"array","items":{"type":"object"}},"verified_result":{"type":["object","null"],"description":"Operator-recorded verification attestation. Not independent automated inspection."}}},"CreateResolution":{"type":"object","properties":{"property_id":{"type":"string","format":"uuid"},"owner_id":{"type":["string","null"],"format":"uuid"},"unit_id":{"type":["string","null"],"format":"uuid"},"tenant_contact_id":{"type":["string","null"],"format":"uuid"},"problem":{"oneOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"object","properties":{"description":{"type":"string","minLength":1,"maxLength":4000},"category":{"type":"string","minLength":1,"maxLength":80},"subcategory":{"type":"string","minLength":1,"maxLength":80},"symptoms":{"type":"object"}},"required":["description"],"additionalProperties":false}]},"urgency":{"type":"string","enum":["low","medium","high","emergency"],"default":"medium"},"constraints":{"type":"object","properties":{"max_spend_cents":{"type":"integer","minimum":0,"maximum":2147483647,"description":"USD cents; requested hard cap is cumulative across recorded execution attempts."},"access_window":{"type":"string","minLength":1,"maxLength":500},"deadline_at":{"type":"string","format":"date-time"},"replacement_requires_approval":{"type":"boolean"}},"required":[],"additionalProperties":false},"authorization_policy":{"type":"object","properties":{"approval_required_above_cents":{"type":"integer","minimum":0,"maximum":2147483647,"description":"USD cents; requested hard cap is cumulative across recorded execution attempts."}},"required":[],"additionalProperties":false},"sla":{"type":"object","properties":{"target_resolution_at":{"type":"string","format":"date-time"}},"required":[],"additionalProperties":false},"source":{"type":"object","properties":{"system":{"type":"string","minLength":1,"maxLength":80},"reference":{"type":"string","minLength":1,"maxLength":200}},"required":[],"additionalProperties":false},"test_mode":{"type":"boolean","default":false}},"required":["property_id","problem"],"additionalProperties":false},"Error":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"}},"required":["error"]}}}}