{"openapi":"3.1.0","info":{"title":"Andorra Listings API","version":"1.0.0","description":"Every home for sale or rent in Andorra, consolidated across the portals and agencies that publish it.\n\nAuthenticate with an API key from your account page: `Authorization: Bearer al_live_…`.\n\nPlans: free (30/min, 100/day, 25 rows/request); starter (60/min, 10,000/month, 100 rows/request); pro (120/min, 100,000/month, 100 rows/request); enterprise (600/min, unlimited, 500 rows/request).\n\nTerms: https://andorralistings.com/en/developers/terms. In short, adverts belong to the sites that publish them: show the source and link to the source URL, do not republish the data in bulk or resell it. Pricing: https://andorralistings.com/en/developers/pricing.","contact":{"email":"support@andorralistings.com"},"termsOfService":"https://andorralistings.com/en/developers/terms"},"servers":[{"url":"https://api.andorralistings.com/v1"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"Your API key."}},"schemas":{"PropertySummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","description":"The property page on andorralistings.com."},"title":{"type":"string"},"operation":{"type":"string","enum":["sale","rent","seasonal_rent"]},"type":{"type":"string","enum":["flat","penthouse","duplex","studio","loft","house","chalet","townhouse","farmhouse","room","land","parking","commercial","office","industrial","building","storage","other"]},"parish":{"type":"string","enum":["andorra_la_vella","canillo","encamp","escaldes_engordany","la_massana","ordino","sant_julia_de_loria"],"nullable":true},"town":{"type":"string","nullable":true},"price":{"type":"object","properties":{"min":{"type":"integer","nullable":true,"description":"Lowest current price across sources, in euros."},"max":{"type":"integer","nullable":true},"currency":{"type":"string","example":"EUR"},"period":{"type":"string","nullable":true,"enum":["month",null],"description":"\"month\" for rentals, null for sales."}}},"surface_m2":{"type":"number","nullable":true},"plot_m2":{"type":"number","nullable":true},"rooms":{"type":"integer","nullable":true},"bathrooms":{"type":"integer","nullable":true},"features":{"type":"array","items":{"type":"string"}},"cover_image_url":{"type":"string","nullable":true},"location":{"type":"object","nullable":true,"properties":{"lat":{"type":"number"},"lng":{"type":"number"},"precision":{"type":"string","enum":["exact","street","town","parish","none"]}}},"status":{"type":"string","enum":["active","delisted"]},"source_count":{"type":"integer","description":"Sites currently showing this property."},"first_seen_at":{"type":"string","format":"date-time"},"last_seen_at":{"type":"string","format":"date-time","nullable":true},"updated_at":{"type":"string","format":"date-time"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per minute on your plan."},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-Quota-Remaining":{"schema":{"type":"string"},"description":"Requests left in the day (free plan) or month (paid plans), or \"unlimited\"."},"X-Quota-Reset":{"schema":{"type":"string","format":"date-time"}},"X-Api-Plan":{"schema":{"type":"string"}}},"responses":{"Unauthorized":{"description":"Missing or unknown key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"RateLimited":{"description":"Per-minute rate or plan quota exceeded; see Retry-After.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"PlanRequired":{"description":"The endpoint needs a higher plan.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}},"paths":{"/properties":{"get":{"summary":"Search properties","description":"The site search for machines. Without `type`, homes only (land, parking and premises are excluded).","parameters":[{"name":"op","in":"query","schema":{"type":"string","enum":["sale","rent","seasonal_rent"],"default":"sale"}},{"name":"type","in":"query","schema":{"type":"string"},"description":"Comma-separated list of flat, penthouse, duplex, studio, loft, house, chalet, townhouse, farmhouse, room, land, parking, commercial, office, industrial, building, storage, other."},{"name":"parish","in":"query","schema":{"type":"string"},"description":"Comma-separated list of andorra_la_vella, canillo, encamp, escaldes_engordany, la_massana, ordino, sant_julia_de_loria."},{"name":"minPrice","in":"query","schema":{"type":"integer"}},{"name":"maxPrice","in":"query","schema":{"type":"integer"}},{"name":"minRooms","in":"query","schema":{"type":"integer"}},{"name":"minSurface","in":"query","schema":{"type":"integer"}},{"name":"bbox","in":"query","schema":{"type":"string"},"description":"west,south,east,north in WGS84."},{"name":"sort","in":"query","schema":{"type":"string","enum":["newest","price_asc","price_desc","surface_desc"],"default":"newest"}},{"name":"limit","in":"query","schema":{"type":"integer","default":25},"description":"Capped by your plan."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"From meta.next_cursor; newest sort only."},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"For the price and surface sorts."}],"responses":{"200":{"description":"Matching properties.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per minute on your plan."},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-Quota-Remaining":{"schema":{"type":"string"},"description":"Requests left in the day (free plan) or month (paid plans), or \"unlimited\"."},"X-Quota-Reset":{"schema":{"type":"string","format":"date-time"}},"X-Api-Plan":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PropertySummary"}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"sort":{"type":"string"},"next_cursor":{"type":"string","nullable":true},"next_page":{"type":"integer","nullable":true}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/properties/{id}":{"get":{"summary":"One property with its source listings","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The property, its photos, and one entry per site that lists it (URL, agency, reference, description, photos; price history on the Pro plan).","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per minute on your plan."},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-Quota-Remaining":{"schema":{"type":"string"},"description":"Requests left in the day (free plan) or month (paid plans), or \"unlimited\"."},"X-Quota-Reset":{"schema":{"type":"string","format":"date-time"}},"X-Api-Plan":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/PropertySummary"},{"type":"object","properties":{"description":{"type":"string","nullable":true},"image_urls":{"type":"array","items":{"type":"string"}},"listings":{"type":"array","items":{"type":"object"}}}}]},"attribution":{"type":"string"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"No such property.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/changes":{"get":{"summary":"Changes since a moment (Starter and up)","description":"Properties created, updated or delisted after `since`, oldest first. Poll with the `updated_at` of the last row as the next `since`; `meta.next_since` is set when there is more.","parameters":[{"name":"since","in":"query","required":true,"schema":{"type":"string","format":"date-time"},"description":"At most 31 days ago."},{"name":"limit","in":"query","schema":{"type":"integer","default":100}}],"responses":{"200":{"description":"Changed properties, each with a `change` of created, updated or delisted.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per minute on your plan."},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-Quota-Remaining":{"schema":{"type":"string"},"description":"Requests left in the day (free plan) or month (paid plans), or \"unlimited\"."},"X-Quota-Reset":{"schema":{"type":"string","format":"date-time"}},"X-Api-Plan":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/PropertySummary"},{"type":"object","properties":{"change":{"type":"string","enum":["created","updated","delisted"]}}}]}},"meta":{"type":"object","properties":{"since":{"type":"string"},"limit":{"type":"integer"},"next_since":{"type":"string","nullable":true}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/PlanRequired"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/stats":{"get":{"summary":"Market statistics (Pro and up)","parameters":[{"name":"op","in":"query","schema":{"type":"string","enum":["sale","rent","seasonal_rent"],"default":"sale"}}],"responses":{"200":{"description":"Active homes per parish and type with median and mean price, median price per m² and median size.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per minute on your plan."},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-Quota-Remaining":{"schema":{"type":"string"},"description":"Requests left in the day (free plan) or month (paid plans), or \"unlimited\"."},"X-Quota-Reset":{"schema":{"type":"string","format":"date-time"}},"X-Api-Plan":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/PlanRequired"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/parishes":{"get":{"summary":"The seven parishes with centroid and known towns","responses":{"200":{"description":"Reference data.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per minute on your plan."},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-Quota-Remaining":{"schema":{"type":"string"},"description":"Requests left in the day (free plan) or month (paid plans), or \"unlimited\"."},"X-Quota-Reset":{"schema":{"type":"string","format":"date-time"}},"X-Api-Plan":{"schema":{"type":"string"}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/towns":{"get":{"summary":"Towns and neighbourhoods with parish and centroid","responses":{"200":{"description":"Reference data.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per minute on your plan."},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-Quota-Remaining":{"schema":{"type":"string"},"description":"Requests left in the day (free plan) or month (paid plans), or \"unlimited\"."},"X-Quota-Reset":{"schema":{"type":"string","format":"date-time"}},"X-Api-Plan":{"schema":{"type":"string"}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}}}}