{"openapi":"3.1.0","info":{"title":"estate.sh Public API","version":"1.0.0","description":"Read-only Georgia property listing API. Use with attribution. Contact api@estate.sh for heavy usage.","contact":{"email":"api@estate.sh"}},"servers":[{"url":"https://estate.sh/api/v1"}],"paths":{"/properties":{"get":{"summary":"List current properties","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"Page number."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"Page size. Maximum 100 for list mode."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor returned by a previous request."},{"name":"sort","in":"query","required":false,"schema":{"type":"string"},"description":"updated_desc, best_deal, price_asc, price_desc, or area_desc."},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Text or normalized location search."},{"name":"city","in":"query","required":false,"schema":{"type":"string"},"description":"City filter. Repeat for multiple cities."},{"name":"district","in":"query","required":false,"schema":{"type":"string"},"description":"District filter."},{"name":"neighborhood","in":"query","required":false,"schema":{"type":"string"},"description":"Neighborhood filter."},{"name":"deal","in":"query","required":false,"schema":{"type":"string"},"description":"buy, rent, daily_rent, or lease."},{"name":"property_kind","in":"query","required":false,"schema":{"type":"string"},"description":"apartment, house, country_house, land, commercial, hotel, or residential."},{"name":"source","in":"query","required":false,"schema":{"type":"string"},"description":"Source name."},{"name":"min_price","in":"query","required":false,"schema":{"type":"number"},"description":"Minimum GEL price."},{"name":"max_price","in":"query","required":false,"schema":{"type":"number"},"description":"Maximum GEL price."},{"name":"min_area","in":"query","required":false,"schema":{"type":"number"},"description":"Minimum square metres."},{"name":"max_area","in":"query","required":false,"schema":{"type":"number"},"description":"Maximum square metres."},{"name":"min_ppm","in":"query","required":false,"schema":{"type":"number"},"description":"Minimum GEL per square metre."},{"name":"max_ppm","in":"query","required":false,"schema":{"type":"number"},"description":"Maximum GEL per square metre."}],"responses":{"200":{"description":"Property list response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyList"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Back off before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error."}}}},"/properties/{id}":{"get":{"summary":"Get one property by estate.sh ID","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"context","in":"query","required":false,"schema":{"type":"string"},"description":"Set to 0 to omit comparable context."}],"responses":{"200":{"description":"Property detail response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyDetail"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Back off before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error."}}}},"/options":{"get":{"summary":"Get location filter options","parameters":[{"name":"city","in":"query","required":false,"schema":{"type":"string"},"description":"City filter."},{"name":"district","in":"query","required":false,"schema":{"type":"string"},"description":"District filter."}],"responses":{"200":{"description":"Location options response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptionsResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Back off before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error."}}}},"/suggestions":{"get":{"summary":"Get location suggestions","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Search query."}],"responses":{"200":{"description":"Suggestion response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestionsResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Back off before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error."}}}},"/rates":{"get":{"summary":"Get GEL-based exchange rates","responses":{"200":{"description":"Exchange-rate response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatesResponse"}}}},"404":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Back off before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error."}}}}},"components":{"schemas":{"PropertyList":{"type":"object","required":["page","limit","total","has_more","items"],"properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"total":{"type":["integer","null"]},"has_more":{"type":"boolean"},"next_cursor":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Property"}}}},"PropertyDetail":{"allOf":[{"$ref":"#/components/schemas/Property"},{"type":"object","properties":{"context":{"type":"object","properties":{"score_label":{"type":"string"},"deal":{"type":"string"},"comps":{"type":"array","items":{"$ref":"#/components/schemas/Property"}}}}}}]},"Property":{"type":"object","description":"Public allowlisted property fields. Raw source payloads, owner names, contact phone numbers, cadastral codes, and internal fields are not exposed.","required":["id","source","source_id","source_listing_url"],"properties":{"id":{"type":"integer"},"source":{"type":"string"},"source_id":{"type":"string"},"source_listing_url":{"type":"string","format":"uri"},"title":{"type":"string"},"title_en":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"city_en":{"type":"string"},"district":{"type":"string"},"district_en":{"type":"string"},"neighborhood":{"type":"string"},"neighborhood_en":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"location_accuracy":{"type":"string"},"location_radius_meters":{"type":"number"},"area":{"type":"number"},"rooms":{"type":"number"},"bedrooms":{"type":"number"},"floor":{"type":"number"},"total_floors":{"type":"number"},"bathrooms":{"type":"number"},"condition":{"type":"string"},"renovation":{"type":"string"},"building_type":{"type":"string"},"agency_name":{"type":"string"},"view_count":{"type":"number"},"price_gel":{"type":"number"},"price_usd":{"type":"number"},"price_per_m2":{"type":"number"},"local_median_price_per_m2":{"type":"number"},"local_comparable_count":{"type":"number"},"local_value_ratio":{"type":"number"},"local_value_tone":{"type":"string"},"deal":{"type":"string"},"property_type":{"type":"string"},"property_kind":{"type":"string"},"property_type_label":{"type":"string"},"furnished":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"image":{"type":"string","format":"uri"},"images":{"type":"array","items":{"type":"string","format":"uri"}}}},"OptionsResponse":{"type":"object","properties":{"cities":{"type":"array","items":{"$ref":"#/components/schemas/OptionRow"}},"districts":{"type":"array","items":{"$ref":"#/components/schemas/OptionRow"}},"neighborhoods":{"type":"array","items":{"$ref":"#/components/schemas/OptionRow"}}}},"OptionRow":{"type":"object","required":["value","label","count"],"properties":{"value":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer"}}},"SuggestionsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","required":["value","label"],"properties":{"value":{"type":"string"},"label":{"type":"string"}}}}}},"RatesResponse":{"type":"object","required":["base","rates"],"properties":{"base":{"type":"string","enum":["GEL"]},"rates":{"type":"object","additionalProperties":{"type":"number"}},"time_last_update_utc":{"type":"string"},"provider":{"type":"string"},"warning":{"type":"string"}}},"Error":{"type":"object","properties":{"error":{"type":"string"}}}}}}