AI-ready public form APIs
TDS Lead Submission APIs
These endpoints let AI assistants and integration partners estimate internal door pricing and submit customer-approved enquiries to Technical Door Solutions.
Endpoints
/api/internal-doors/estimateInternal Door Price Estimate
Use before collecting personal data. Returns deterministic indicative supply-only price, lead time and validation status for OC Slimline configurations.
/api/internal-doors/recommendInternal Door Configuration Recommendation
Use when comparing valid configurations for the same opening. Returns ranked alternatives, savings and practical tradeoffs without collecting personal data.
/api/contactGeneral Contact Enquiry
Use for showroom, service, technical or general enquiries that are not clearly an internal glazed doors or security doors quote.
/api/quote/internal-doorsInternal Glazed Doors Quote
Use for OC Slimline internal steel glazed doors, partitions, retrofit doors and residential/commercial internal glazing enquiries.
/api/quote/security-doorsSecurity Doors Quote
Use for RC-rated, fire-rated, bullet-resistant, blast-resistant, louvre, detention, bank-designated and specialist security doors.
Agent Rules
- Only submit personal data after the user explicitly asks to contact TDS or request a quote.
- Use
POST /api/internal-doors/estimatefor price and lead-time checks before collecting contact details. - Use
POST /api/internal-doors/recommendwhen the user wants to compare possible OC Slimline configurations for the same opening. - Use text descriptions for drawings, photos, architectural plans and reference images unless the user has provided a public or time-limited URL.
- Do not upload binary files to these endpoints. If file URLs are available, pass them as
attachments. - Set
sourceto identify the agent platform, for examplechatgpt,perplexityorcustom-agent. - Keep quote project descriptions under 2500 characters and contact messages under 1500 characters. Attachment descriptions: up to 400 characters.
- Merchant and manufacturer feeds are product feeds for Google services, not lead-submission endpoints.
Internal Door Estimate Example
POST https://www.tdsltd.ie/api/internal-doors/estimate
Content-Type: application/json
{
"doors": [
{
"doorType": "Single",
"doorTypeKey": "SINGLE_HINGED",
"opWidth": "900",
"opHeight": "2100"
}
]
}This endpoint does not submit a lead and does not require customer name, email or phone. If dimensions are outside the selected door type limits, read recovery.suggestions and present those options to the user.
Internal Door Recommendation Example
POST https://www.tdsltd.ie/api/internal-doors/recommend
Content-Type: application/json
{
"opening": { "widthMm": 1250, "heightMm": 2100 },
"selectedDoor": {
"doorType": "Double",
"doorTypeKey": "DOUBLE_HINGED"
},
"preferences": {
"needsFullWidthAccess": false,
"budgetSensitive": true
}
}This endpoint compares technically valid layouts for the same opening. If recommendedOptionId is present, explain the recommended option and its tradeoffs before asking the user whether to keep or change the configuration.
Estimate Response Example
{
"priceEstimate": 1652,
"leadTimeWeeks": 10,
"currency": "EUR",
"doorsCount": 1,
"valid": true,
"validationIssue": null,
"recovery": null
}Quote Request Example
POST https://www.tdsltd.ie/api/quote/internal-doors
Content-Type: application/json
{
"source": "chatgpt",
"customer": {
"name": "Sarah Mitchell",
"email": "sarah@example.com",
"phone": "+353 1 234 5678"
},
"project": {
"message": "Customer wants a black internal glazed single door and has architectural plans available."
},
"doors": [
{ "doorType": "Single Door", "opWidth": "1200", "opHeight": "2100" }
],
"attachments": [
{
"url": "https://example.com/temporary-plan-photo.jpg",
"type": "architectural_plan_photo",
"description": "Photo of plan supplied by customer"
}
]
}Contact Request Example
POST https://www.tdsltd.ie/api/contact
Content-Type: application/json
{
"source": "custom-agent",
"customer": {
"name": "John Smith",
"email": "john@example.com"
},
"message": "Customer would like advice on whether security doors or internal glazing are suitable for their project."
}Response
{
"success": true,
"id": "FirestoreDocumentId",
"collection": "internalDoorsLead",
"message": "Quote request received. TDS will review the enquiry and contact the customer."
}Rate Limits And Errors
Public use is limited to 10 requests per minute per IP. Approved API-key traffic can use 100 requests per hour. Maximum JSON payload size is 100 KB.
Bad Request
Missing required fields, invalid email, invalid phone, or malformed JSON.
Spam Rejected
Honeypot or simple content scoring rejected the submission.
Duplicate Submission
The same enquiry was submitted too recently.
Payload Too Large
JSON body exceeds 100 KB.
Too Many Requests
Rate limit exceeded. Read Retry-After before trying again.
Service Unavailable
Backend Firestore service is not configured or temporarily unavailable.