{"openapi":"3.1.0","info":{"title":"Catalog Access Trevi — prepared HTTP","version":"0.2.0"},"paths":{"/capabilities":{"get":{"operationId":"list_capabilities_get","description":"List read-only Trevi capabilities and local restrictions. Recent-search admission required for entity reads.","parameters":[],"responses":{"200":{"description":"Shared success envelope.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"data":{"type":"object"},"warnings":{"type":"array","items":{"type":"string"}},"reuse_max_age_seconds":{"const":30},"error":{"type":"object","additionalProperties":false,"properties":{"code":{"enum":["invalid_input","denied","removed","stale","limit_exceeded","invalid_source","source_unavailable","internal"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["ok"],"oneOf":[{"properties":{"ok":{"const":true}},"required":["data","warnings","reuse_max_age_seconds"]},{"properties":{"ok":{"const":false}},"required":["error"]}]}}}},"default":{"description":"Shared error envelope.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"data":{"type":"object"},"warnings":{"type":"array","items":{"type":"string"}},"reuse_max_age_seconds":{"const":30},"error":{"type":"object","additionalProperties":false,"properties":{"code":{"enum":["invalid_input","denied","removed","stale","limit_exceeded","invalid_source","source_unavailable","internal"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["ok"],"oneOf":[{"properties":{"ok":{"const":true}},"required":["data","warnings","reuse_max_age_seconds"]},{"properties":{"ok":{"const":false}},"required":["error"]}]}}}}}}},"/search":{"get":{"operationId":"search_entities_get","description":"Search Rome apartment purchases. Keep provisional Camere rows unconfirmed. Recent-search admission required for entity reads.","parameters":[{"name":"city","in":"query","required":true,"schema":{"const":"Rome"}},{"name":"type","in":"query","required":true,"schema":{"const":"apartment"}},{"name":"purchase","in":"query","required":true,"schema":{"const":true}},{"name":"max_price_eur","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"maximum":10000000}},{"name":"min_bedrooms","in":"query","required":true,"schema":{"type":"integer","minimum":1,"maximum":20}},{"name":"terrace","in":"query","required":true,"schema":{"const":true}},{"name":"page","in":"query","schema":{"type":"integer","const":1}}],"responses":{"200":{"description":"Shared success envelope.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"data":{"type":"object"},"warnings":{"type":"array","items":{"type":"string"}},"reuse_max_age_seconds":{"const":30},"error":{"type":"object","additionalProperties":false,"properties":{"code":{"enum":["invalid_input","denied","removed","stale","limit_exceeded","invalid_source","source_unavailable","internal"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["ok"],"oneOf":[{"properties":{"ok":{"const":true}},"required":["data","warnings","reuse_max_age_seconds"]},{"properties":{"ok":{"const":false}},"required":["error"]}]}}}},"default":{"description":"Shared error envelope.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"data":{"type":"object"},"warnings":{"type":"array","items":{"type":"string"}},"reuse_max_age_seconds":{"const":30},"error":{"type":"object","additionalProperties":false,"properties":{"code":{"enum":["invalid_input","denied","removed","stale","limit_exceeded","invalid_source","source_unavailable","internal"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["ok"],"oneOf":[{"properties":{"ok":{"const":true}},"required":["data","warnings","reuse_max_age_seconds"]},{"properties":{"ok":{"const":false}},"required":["error"]}]}}}}}}},"/entities/{source_id}":{"get":{"operationId":"get_entity_get","description":"Read one source property and optional main-photo URL; never fetch image bytes. Recent-search admission required for entity reads.","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"include_photo","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Shared success envelope.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"data":{"type":"object"},"warnings":{"type":"array","items":{"type":"string"}},"reuse_max_age_seconds":{"const":30},"error":{"type":"object","additionalProperties":false,"properties":{"code":{"enum":["invalid_input","denied","removed","stale","limit_exceeded","invalid_source","source_unavailable","internal"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["ok"],"oneOf":[{"properties":{"ok":{"const":true}},"required":["data","warnings","reuse_max_age_seconds"]},{"properties":{"ok":{"const":false}},"required":["error"]}]}}}},"default":{"description":"Shared error envelope.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean"},"data":{"type":"object"},"warnings":{"type":"array","items":{"type":"string"}},"reuse_max_age_seconds":{"const":30},"error":{"type":"object","additionalProperties":false,"properties":{"code":{"enum":["invalid_input","denied","removed","stale","limit_exceeded","invalid_source","source_unavailable","internal"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["ok"],"oneOf":[{"properties":{"ok":{"const":true}},"required":["data","warnings","reuse_max_age_seconds"]},{"properties":{"ok":{"const":false}},"required":["error"]}]}}}}}}}},"servers":[{"url":"/"}]}