{"openapi":"3.1.1","info":{"title":"Karrinyup Dental Centre Public Information API","version":"1.0.0","description":"Read-only access to already-public clinic contact details, service summaries and local website search. No authentication is required. No patient data, diagnosis, appointment availability, booking or form submission is available. Do not send personal or health information in queries. Errors use RFC 9457 application/problem+json with stable code and actionable resolution extensions.","contact":{"name":"Karrinyup Dental Centre","url":"https://karrinyupdental.com.au/contact-us/","email":"info@karrinyupdental.com.au"}},"servers":[{"url":"https://karrinyupdental.vercel.app"}],"security":[],"externalDocs":{"description":"Integration guide and limitations","url":"https://karrinyupdental.vercel.app/developers/"},"paths":{"/api/v1/clinic":{"get":{"operationId":"getPublicClinicInfo","summary":"Get public clinic contact information","description":"Read published address, telephone, email and opening hours. Confirm changes and availability with the clinic. Accepts no query parameters. Also supports HEAD without a response body.","security":[],"parameters":[],"responses":{"200":{"description":"Public website information returned successfully. HEAD returns these headers without a body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Clinic"},"example":{"name":"Karrinyup Dental Centre","telephone":"(08) 9341 6233","email":"info@karrinyupdental.com.au","address":"Unit 5/57 Burroughs Road, Karrinyup WA 6018","openingHours":{"mondayToFriday":"08:00–18:00","saturday":"08:00–17:00","sunday":"Closed","timeZone":"Australia/Perth"},"source":"https://karrinyupdental.com.au/contact-us/","note":"Published contact details and hours; confirm changes and appointment availability with the clinic."}}}},"400":{"description":"Invalid or duplicate query arguments. Correct the parameters using the resolution field.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"about:blank","title":"Bad Request","status":400,"detail":"Invalid or duplicate query arguments. Correct the parameters using the resolution field.","instance":"/api/v1/search","code":"INVALID_ARGUMENTS","resolution":"See /openapi.json for valid public endpoints and parameters, or /developers/ for examples."}}}},"404":{"description":"The public API endpoint or service does not exist.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"about:blank","title":"Not Found","status":404,"detail":"The public API endpoint or service does not exist.","instance":"/api/v1/search","code":"NOT_FOUND","resolution":"See /openapi.json for valid public endpoints and parameters, or /developers/ for examples."}}}},"405":{"description":"This API supports GET and HEAD only. No writes are available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"about:blank","title":"Method Not Allowed","status":405,"detail":"This API supports GET and HEAD only. No writes are available.","instance":"/api/v1/search","code":"METHOD_NOT_ALLOWED","resolution":"Use GET or HEAD. This API has no write operations."}}}}}}},"/api/v1/services":{"get":{"operationId":"getPublicServiceInfo","summary":"List services or get one public service summary","description":"Omit path to list public dental service summaries. Supply an exact local service page path to retrieve one summary. A valid but absent service returns 404. Educational information is not individual diagnosis or treatment advice. Also supports HEAD.","security":[],"parameters":[{"name":"path","in":"query","required":false,"description":"Exact local dental service path ending in /. Omit to list all services.","schema":{"type":"string","maxLength":160,"pattern":"^\\/(?:general-dentistry|cosmetic-dentistry|restorative-dentistry|sleep-dentistry|dental-implants|orthodontics|emergency-dentist|childrens-dentist)(?:\\/[^/]+)?\\/$"},"example":"/general-dentistry/scale-and-clean/"}],"responses":{"200":{"description":"Public website information returned successfully. HEAD returns these headers without a body.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PublicSummary"},{"$ref":"#/components/schemas/ServiceList"}]},"example":{"title":"Scale and Clean Karrinyup | Professional Teeth Cleaning and Gum Health Services","description":"Regular scale and clean appointments are important for maintaining good oral health and preventing gum disease. At Karrinyup Dental Centre, our experienced hygienists provide professional teeth cleaning and gum health services to keep your smile healthy and bright. Book an appointment today.","url":"https://karrinyupdental.com.au/general-dentistry/scale-and-clean/"}}}},"400":{"description":"Invalid or duplicate query arguments. Correct the parameters using the resolution field.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"about:blank","title":"Bad Request","status":400,"detail":"Invalid or duplicate query arguments. Correct the parameters using the resolution field.","instance":"/api/v1/search","code":"INVALID_ARGUMENTS","resolution":"See /openapi.json for valid public endpoints and parameters, or /developers/ for examples."}}}},"404":{"description":"The public API endpoint or service does not exist.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"about:blank","title":"Not Found","status":404,"detail":"The public API endpoint or service does not exist.","instance":"/api/v1/search","code":"NOT_FOUND","resolution":"See /openapi.json for valid public endpoints and parameters, or /developers/ for examples."}}}},"405":{"description":"This API supports GET and HEAD only. No writes are available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"about:blank","title":"Method Not Allowed","status":405,"detail":"This API supports GET and HEAD only. No writes are available.","instance":"/api/v1/search","code":"METHOD_NOT_ALLOWED","resolution":"Use GET or HEAD. This API has no write operations."}}}}}}},"/api/v1/search":{"get":{"operationId":"searchPublicClinicContent","summary":"Search the public website index","description":"Search only the clinic’s local public content index. Returns at most 9 short summaries and canonical source links. Empty queries, unknown or duplicate parameters and invalid limits return 400. Do not include personal or health information. Also supports HEAD.","security":[],"parameters":[{"name":"q","in":"query","required":true,"description":"Public-information search phrase, 1–200 characters after trimming.","schema":{"type":"string","minLength":1,"maxLength":200},"example":"scale and clean"},{"name":"limit","in":"query","required":false,"description":"Maximum number of summaries to return, from 1 to 9. Defaults to 5.","schema":{"default":5,"type":"integer","minimum":1,"maximum":9},"example":3}],"responses":{"200":{"description":"Public website information returned successfully. HEAD returns these headers without a body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"},"example":{"results":[{"title":"Scale and Clean Karrinyup | Professional Teeth Cleaning and Gum Health Services","description":"Regular scale and clean appointments are important for maintaining good oral health and preventing gum disease. At Karrinyup Dental Centre, our experienced hygienists provide professional teeth cleaning and gum health services to keep your smile healthy and bright. Book an appointment today.","url":"https://karrinyupdental.com.au/general-dentistry/scale-and-clean/"}],"total":11}}}},"400":{"description":"Invalid or duplicate query arguments. Correct the parameters using the resolution field.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"about:blank","title":"Bad Request","status":400,"detail":"Invalid or duplicate query arguments. Correct the parameters using the resolution field.","instance":"/api/v1/search","code":"INVALID_ARGUMENTS","resolution":"See /openapi.json for valid public endpoints and parameters, or /developers/ for examples."}}}},"404":{"description":"The public API endpoint or service does not exist.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"about:blank","title":"Not Found","status":404,"detail":"The public API endpoint or service does not exist.","instance":"/api/v1/search","code":"NOT_FOUND","resolution":"See /openapi.json for valid public endpoints and parameters, or /developers/ for examples."}}}},"405":{"description":"This API supports GET and HEAD only. No writes are available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"about:blank","title":"Method Not Allowed","status":405,"detail":"This API supports GET and HEAD only. No writes are available.","instance":"/api/v1/search","code":"METHOD_NOT_ALLOWED","resolution":"Use GET or HEAD. This API has no write operations."}}}}}}}},"components":{"schemas":{"Clinic":{"type":"object","properties":{"name":{"type":"string"},"telephone":{"type":"string"},"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"address":{"type":"string"},"openingHours":{"type":"object","properties":{"mondayToFriday":{"type":"string"},"saturday":{"type":"string"},"sunday":{"type":"string"},"timeZone":{"type":"string"}},"required":["mondayToFriday","saturday","sunday","timeZone"],"additionalProperties":false},"source":{"type":"string","format":"uri"},"note":{"type":"string"}},"required":["name","telephone","email","address","openingHours","source","note"],"additionalProperties":false},"PublicSummary":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string","maxLength":1000},"url":{"type":"string","format":"uri"}},"required":["title","description","url"],"additionalProperties":false},"ServiceList":{"type":"object","properties":{"services":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string","maxLength":1000},"url":{"type":"string","format":"uri"}},"required":["title","description","url"],"additionalProperties":false}}},"required":["services"],"additionalProperties":false},"SearchResult":{"type":"object","properties":{"results":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string","maxLength":1000},"url":{"type":"string","format":"uri"}},"required":["title","description","url"],"additionalProperties":false}},"total":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["results","total"],"additionalProperties":false},"Problem":{"type":"object","properties":{"type":{"type":"string","const":"about:blank"},"title":{"type":"string"},"status":{"type":"integer","minimum":400,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","enum":["INVALID_ARGUMENTS","NOT_FOUND","METHOD_NOT_ALLOWED"]},"resolution":{"type":"string"}},"required":["type","title","status","detail","instance","code","resolution"],"additionalProperties":false}}}}