{"openapi":"3.0.3","info":{"title":"TDS Lead Submission API","version":"1.0.0","description":"Public AI-ready APIs for submitting TDS contact and quote enquiries. Agents must have user consent before sending personal data."},"servers":[{"url":"https://www.tdsltd.ie"}],"paths":{"/api/contact":{"post":{"operationId":"submitContactEnquiry","summary":"Submit a general contact enquiry","description":"Creates a contact request for TDS. Use when the user wants TDS to contact them but the enquiry is not specific to internal glazed doors or security doors.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequest"}}}},"responses":{"200":{"description":"Enquiry accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionResponse"}}}},"400":{"description":"Invalid request"},"429":{"description":"Rate limit exceeded"}}}},"/api/quote/internal-doors":{"post":{"operationId":"submitInternalDoorsQuote","summary":"Submit an OC Slimline internal glazed doors quote request","description":"Creates a quote request for internal steel glazed doors. Agents can provide text requirements and optional attachment/reference URLs when available.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}}},"responses":{"200":{"description":"Quote request accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionResponse"}}}},"400":{"description":"Invalid request"},"429":{"description":"Rate limit exceeded"}}}},"/api/quote/security-doors":{"post":{"operationId":"submitSecurityDoorsQuote","summary":"Submit a security doors quote request","description":"Creates a quote request for high-security, RC-rated, fire-rated, bullet-resistant, blast-resistant or specialist security doors.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}}},"responses":{"200":{"description":"Quote request accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionResponse"}}}},"400":{"description":"Invalid request"},"429":{"description":"Rate limit exceeded"}}}}},"components":{"schemas":{"Customer":{"type":"object","required":["name","email"],"properties":{"name":{"type":"string","minLength":3},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"company":{"type":"string"}}},"Attachment":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"type":{"type":"string","example":"architectural_plan_photo"},"description":{"type":"string"},"expiresAt":{"type":"string","description":"Optional date/time when the external file link expires."}}},"Door":{"type":"object","properties":{"doorType":{"type":"string","example":"Single Door"},"opWidth":{"type":"string","example":"1200"},"opHeight":{"type":"string","example":"2100"}}},"QuoteRequest":{"type":"object","required":["customer"],"properties":{"source":{"type":"string","example":"chatgpt"},"sourceId":{"type":"string"},"customer":{"$ref":"#/components/schemas/Customer"},"project":{"type":"object","properties":{"message":{"type":"string","description":"Natural-language project requirements."},"fromPage":{"type":"string","format":"uri"}}},"product":{"type":"string"},"comments":{"type":"string"},"doors":{"type":"array","items":{"$ref":"#/components/schemas/Door"},"maxItems":20},"supplyAndInstall":{"type":"boolean"},"eirCode":{"type":"string"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"},"maxItems":10}}},"ContactRequest":{"type":"object","required":["customer","message"],"properties":{"source":{"type":"string","example":"chatgpt"},"sourceId":{"type":"string"},"customer":{"$ref":"#/components/schemas/Customer"},"message":{"type":"string","minLength":5}}},"SubmissionResponse":{"type":"object","properties":{"success":{"type":"boolean"},"id":{"type":"string"},"collection":{"type":"string"},"message":{"type":"string"}}}}}}