{"openapi":"3.1.0","info":{"title":"Amianto.info Public API","version":"1.0.0","description":"Public read-only API for the global asbestos services directory. Retrieve cities, countries, and professional service listings. All responses are JSON. Rate limits apply per IP address.","contact":{"name":"Amianto.info Support","url":"https://amianto.info/en/contact","email":"hello@amianto.info"},"license":{"name":"Proprietary","url":"https://amianto.info/en/terms"}},"servers":[{"url":"https://amianto.info","description":"Production"}],"security":[],"paths":{"/api/cities/search":{"get":{"operationId":"searchCities","summary":"Search cities by name","description":"Autocomplete city search powered by geocoding. Returns matching cities with coordinates, region, and country. Rate limited to 30 requests per minute per IP.","tags":["Cities"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search query (city name or partial name)","schema":{"type":"string","minLength":1}},{"name":"country","in":"query","required":false,"description":"ISO 3166-1 alpha-2 country code filter (e.g. \"GB\", \"ES\", \"FR\")","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"lang","in":"query","required":false,"description":"Language for results","schema":{"type":"string","enum":["en","es","fr"],"default":"en"}}],"responses":{"200":{"description":"List of matching cities","content":{"application/json":{"schema":{"type":"object","required":["cities"],"properties":{"cities":{"type":"array","items":{"$ref":"#/components/schemas/City"}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/api/countries/search":{"get":{"operationId":"searchCountries","summary":"Search countries by name","description":"Returns countries matching the query string. Useful for filtering the directory by country.","tags":["Countries"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search query (country name, min 2 characters)","schema":{"type":"string","minLength":2}}],"responses":{"200":{"description":"List of matching countries","content":{"application/json":{"schema":{"type":"object","required":["countries"],"properties":{"countries":{"type":"array","items":{"$ref":"#/components/schemas/Country"}}}}}}}}}},"/api/services/professionals":{"get":{"operationId":"listProfessionals","summary":"List professionals for a service","description":"Returns verified, active professional companies that provide the specified service. Includes company details, contact info, and location.","tags":["Professionals"],"parameters":[{"name":"serviceId","in":"query","required":true,"description":"UUID of the service to filter professionals by","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"List of professionals","content":{"application/json":{"schema":{"type":"object","required":["professionals"],"properties":{"professionals":{"type":"array","items":{"$ref":"#/components/schemas/Professional"}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/sitemap":{"get":{"operationId":"getSitemapIndex","summary":"XML sitemap index","description":"Returns the sitemap index in XML format listing all sitemap partitions.","tags":["Discovery"],"responses":{"200":{"description":"Sitemap index XML","content":{"application/xml":{"schema":{"type":"string"}}}}}}},"/llms.txt":{"get":{"operationId":"getLlmsTxt","summary":"Machine-readable site description for LLM assistants","description":"Returns a Markdown-formatted description of the site content, following the llmstxt.org convention.","tags":["Discovery"],"responses":{"200":{"description":"LLM-friendly site description in plain text / Markdown","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"City":{"type":"object","description":"A city with geographic coordinates","properties":{"id":{"type":"string","description":"Unique city identifier"},"name":{"type":"string","description":"City name"},"region":{"type":"string","nullable":true,"description":"State, province or region"},"country":{"type":"string","description":"Country name"},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 code"},"population":{"type":"integer","nullable":true,"description":"City population"},"latitude":{"type":"number","format":"double","description":"Latitude"},"longitude":{"type":"number","format":"double","description":"Longitude"}},"required":["id","name","country","countryCode","latitude","longitude"]},"Country":{"type":"object","description":"A country in the directory","properties":{"code":{"type":"string","description":"ISO 3166-1 alpha-2 code"},"name":{"type":"string","description":"Country name"}},"required":["code","name"]},"Professional":{"type":"object","description":"A verified asbestos professional company","properties":{"id":{"type":"string","format":"uuid","description":"Unique company ID"},"company_name":{"type":"string","description":"Company name"},"slug":{"type":"string","description":"URL-safe slug"},"description":{"type":"string","nullable":true,"description":"Company description"},"phone":{"type":"string","nullable":true,"description":"Contact phone number"},"website":{"type":"string","nullable":true,"format":"uri","description":"Company website URL"},"email":{"type":"string","nullable":true,"format":"email","description":"Contact email"},"city":{"type":"string","nullable":true,"description":"City and country (e.g. \"London, United Kingdom\")"},"rating":{"type":"number","nullable":true,"description":"Average rating (1-5)"},"review_count":{"type":"integer","nullable":true,"description":"Number of reviews"}},"required":["id","company_name","slug"]},"ApiError":{"type":"object","description":"Standard error response","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"object","nullable":true,"description":"Field-level validation errors when applicable","additionalProperties":{"type":"array","items":{"type":"string"}}}},"required":["error"]}},"responses":{"BadRequest":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"TooManyRequests":{"description":"Rate limit exceeded","headers":{"Retry-After":{"description":"Seconds until the rate limit resets","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"InternalError":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key for authenticated access. Public read-only endpoints listed here do not require authentication. Authenticated endpoints (admin, dashboard, write operations) are not listed in this spec."}}},"tags":[{"name":"Cities","description":"City search and geocoding"},{"name":"Countries","description":"Country lookup"},{"name":"Professionals","description":"Professional company listings"},{"name":"Discovery","description":"Site discovery and metadata files"}],"externalDocs":{"description":"Developer documentation","url":"https://amianto.info/en/developers"}}