{"openapi":"3.0.3","info":{"title":"ImotPortal advertiser API","version":"1.1.1","description":"Import/upsert your own property listings and export them to partner sites. All API writes require moderation. API.md contains field rules, pagination and synchronization guidance."},"servers":[{"url":"https://imotportal.bg/api/v1"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"ListingInput":{"type":"object","required":["external_id","title","deal","type","price_cents","area_m2","rooms","floor","description","phone"],"properties":{"external_id":{"type":"string","maxLength":100},"title":{"type":"string","minLength":8,"maxLength":160},"deal":{"type":"string","enum":["sale","rent"]},"type":{"type":"string","enum":["apartment","house","land","office","shop","garage"]},"city":{"type":"string"},"district":{"type":"string"},"price_cents":{"type":"integer","minimum":1},"area_m2":{"type":"integer","minimum":1},"rooms":{"type":"integer","minimum":0},"floor":{"type":"integer"},"description":{"type":"string","minLength":30},"phone":{"type":"string"},"status":{"type":"string","enum":["pending","paused","archived"]},"region_code":{"type":"string","description":"NSI region code, e.g. SOF, PDV, VAR"},"settlement_code":{"type":"string","description":"Five-digit EKATTE code, e.g. 68134 for Sofia"},"neighborhood_code":{"type":"string","description":"ID returned by the locations lookup; must belong to the settlement"}},"anyOf":[{"required":["city"]},{"required":["settlement_code"]}]}}},"paths":{"/listings":{"get":{"summary":"List your properties (read scope)","responses":{"200":{"description":"Success"},"401":{"description":"Invalid key"},"403":{"description":"Scope missing"},"404":{"description":"Not found / other owner"},"422":{"description":"Validation failed"},"429":{"description":"Rate limited"}},"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"external_id","in":"query","schema":{"type":"string"}}]},"post":{"summary":"Upsert by external_id (write scope)","responses":{"201":{"description":"Success"},"401":{"description":"Invalid key"},"403":{"description":"Scope missing"},"404":{"description":"Not found / other owner"},"422":{"description":"Validation failed"},"429":{"description":"Rate limited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListingInput"}}}}}},"/listings/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"summary":"Read own property","responses":{"200":{"description":"Success"},"401":{"description":"Invalid key"},"403":{"description":"Scope missing"},"404":{"description":"Not found / other owner"},"422":{"description":"Validation failed"},"429":{"description":"Rate limited"}}},"patch":{"summary":"Partially update own property; re-moderation required","responses":{"200":{"description":"Success"},"401":{"description":"Invalid key"},"403":{"description":"Scope missing"},"404":{"description":"Not found / other owner"},"422":{"description":"Validation failed"},"429":{"description":"Rate limited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Partial fields from ListingInput. Unknown fields are ignored."}}}}},"delete":{"summary":"Archive own property","responses":{"200":{"description":"Success"},"401":{"description":"Invalid key"},"403":{"description":"Scope missing"},"404":{"description":"Not found / other owner"},"422":{"description":"Validation failed"},"429":{"description":"Rate limited"}}}},"/listings/{id}/images":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"post":{"summary":"Upload one image; write scope","responses":{"201":{"description":"Success"},"401":{"description":"Invalid key"},"403":{"description":"Scope missing"},"404":{"description":"Not found / other owner"},"422":{"description":"Validation failed"},"429":{"description":"Rate limited"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["photo"],"properties":{"photo":{"type":"string","format":"binary"}}}}}}}},"/feed":{"get":{"summary":"Export own published listings or incremental changes (export scope)","responses":{"200":{"description":"Success"},"401":{"description":"Invalid key"},"403":{"description":"Scope missing"},"404":{"description":"Not found / other owner"},"422":{"description":"Validation failed"},"429":{"description":"Rate limited"}},"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"since","in":"query","schema":{"type":"integer"}},{"name":"changes","in":"query","schema":{"type":"integer","enum":[0,1]}}]}},"/locations":{"get":{"summary":"Public location lookup: regions, settlements and neighbourhood identifiers","security":[],"parameters":[{"in":"query","name":"region_code","schema":{"type":"string"}},{"in":"query","name":"settlement_code","schema":{"type":"string"}}],"responses":{"200":{"description":"Regions, settlements in a region, or neighbourhoods for a settlement"},"422":{"description":"Invalid location or mismatched parent"}}}}}}