{"openapi":"3.1.0","info":{"title":"Speaking Bricks public property API","summary":"Authorised open listings in Portugal: search, records, availability, evidence and contact route.","description":"No login. Every answer is rights-checked and says which professional role reported each check and when; unknown checks stay unknown. Client identities are never published. Buyer requirements and closed-market listings need a verified professional token through the professional MCP server.","version":"1.0.0"},"servers":[{"url":"https://speakingbricks.eu"}],"paths":{"/v1/property-searches":{"post":{"tags":["Public AI access"],"summary":"Search authorised open listings","description":"Filters for sale listings in Portugal; returns ranked matches with met, unmet and unknown facts.","operationId":"property_searches_v1_property_searches_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/database-queries":{"post":{"tags":["Public AI access"],"summary":"Query open listings with structured requirements","operationId":"database_queries_v1_database_queries_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/properties/{listing_id}":{"get":{"tags":["Public AI access"],"summary":"Read one open listing record","operationId":"property_record_v1_properties__listing_id__get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/properties/{listing_id}/availability":{"get":{"tags":["Public AI access"],"summary":"Last recorded availability confirmation","operationId":"property_availability_v1_properties__listing_id__availability_get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/properties/{listing_id}/evidence":{"get":{"tags":["Public AI access"],"summary":"Attributed checks and unknowns","operationId":"property_evidence_v1_properties__listing_id__evidence_get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/properties/{listing_id}/contact-route":{"get":{"tags":["Public AI access"],"summary":"How to reach the responsible agency","operationId":"property_contact_route_v1_properties__listing_id__contact_route_get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property-comparisons":{"post":{"tags":["Public AI access"],"summary":"Compare two to four open listings","operationId":"property_comparisons_v1_property_comparisons_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comparison"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/public-sync/snapshot.jsonl":{"get":{"summary":"Snapshot","operationId":"snapshot_v1_public_sync_snapshot_jsonl_get","parameters":[{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/public-sync/changes":{"get":{"summary":"Changes","operationId":"changes_v1_public_sync_changes_get","parameters":[{"name":"after","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/public-sync/key.json":{"get":{"summary":"Key","operationId":"key_v1_public_sync_key_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/public-sync/schema.json":{"get":{"summary":"Schema","operationId":"schema_v1_public_sync_schema_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"Comparison":{"properties":{"listing_ids":{"items":{"type":"string"},"type":"array","maxItems":4,"minItems":2,"title":"Listing Ids"}},"additionalProperties":false,"type":"object","required":["listing_ids"],"title":"Comparison"},"DatabaseQuery":{"properties":{"requirements":{"$ref":"#/components/schemas/Requirements"},"result_limit":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Result Limit","default":5},"record_classes":{"items":{"type":"string"},"type":"array","title":"Record Classes"}},"additionalProperties":false,"type":"object","title":"DatabaseQuery"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HardConstraints":{"properties":{"locations":{"items":{"type":"string"},"type":"array","maxItems":3,"title":"Locations","description":"Portuguese municipalities, e.g. Cascais"},"max_price":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}]},"min_price":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}]},"min_bedrooms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Bedrooms"},"typologies":{"items":{"type":"string"},"type":"array","title":"Typologies","description":"Portuguese typology such as T2 or T3"},"property_types":{"items":{"type":"string"},"type":"array","title":"Property Types"},"must_have":{"items":{"type":"string"},"type":"array","title":"Must Have","description":"Features that must be reported, e.g. garden"},"readiness_min":{"additionalProperties":{"type":"string","enum":["collected","validated"]},"type":"object","title":"Readiness Min"}},"additionalProperties":false,"type":"object","title":"HardConstraints"},"Money":{"properties":{"amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount"},"currency":{"type":"string","const":"EUR","title":"Currency","default":"EUR"}},"additionalProperties":false,"type":"object","required":["amount"],"title":"Money"},"Preference":{"properties":{"key":{"type":"string","title":"Key"},"importance":{"type":"string","enum":["low","medium","high"],"title":"Importance","default":"medium"}},"additionalProperties":false,"type":"object","required":["key"],"title":"Preference"},"PropertySearch":{"properties":{"municipalities":{"items":{"type":"string"},"type":"array","maxItems":3,"title":"Municipalities"},"max_price_eur":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Price Eur"},"min_price_eur":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Price Eur"},"min_bedrooms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Bedrooms"},"typologies":{"items":{"type":"string"},"type":"array","title":"Typologies"},"property_types":{"items":{"type":"string"},"type":"array","title":"Property Types"},"must_have":{"items":{"type":"string"},"type":"array","title":"Must Have"},"preferences":{"items":{"type":"string"},"type":"array","title":"Preferences"},"readiness_min":{"additionalProperties":{"type":"string"},"type":"object","title":"Readiness Min"},"buyer_requirement_id":{"type":"null","title":"Buyer Requirement Id"},"limit":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Limit","default":20}},"additionalProperties":false,"type":"object","title":"PropertySearch","description":"Filters for authorised open listings; buyer requirements need a professional token."},"Requirements":{"properties":{"transaction_type":{"type":"string","const":"purchase","title":"Transaction Type","default":"purchase"},"hard_constraints":{"$ref":"#/components/schemas/HardConstraints"},"preferences":{"items":{"$ref":"#/components/schemas/Preference"},"type":"array","title":"Preferences"}},"additionalProperties":false,"type":"object","title":"Requirements"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}