{"openapi":"3.1.0","info":{"title":"Lean Tech public API","version":"1.0.0","summary":"Programmatic access to Lean Tech (leantech.mu)","description":"Lean Tech is a web-engineering studio (a Lean Search venture) in Mauritius. This API lets agents and integrations submit a project enquiry — the programmatic twin of the contact form. No authentication is required. Requests are rate-limited per client (RateLimit-* headers on every response; Retry-After on 429). Site content is also machine-readable: every page serves markdown via `Accept: text/markdown` or a `.md` URL suffix, and /llms.txt describes when to use Lean Tech.","contact":{"name":"Lean Tech","url":"https://leantech.mu","email":"hello@leantech.mu"}},"servers":[{"url":"https://leantech.mu"}],"paths":{"/api/contact":{"post":{"operationId":"submitContactEnquiry","summary":"Submit a project enquiry","description":"Validates and stores a contact enquiry, then notifies the Lean Tech team by email. Use it to start a conversation about a website, platform or automation build on behalf of a user. The team replies to the given email address within one business day. Rate limit: 10 requests per hour per client. Bot protection: when enabled, requests must carry either a Bearer API key (contact hello@leantech.mu to obtain one for agent use) or a Cloudflare Turnstile token in `turnstileToken`; without protection configured the endpoint is open.","tags":["contact"],"security":[{},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnquiryInput"},"example":{"name":"Jane Doe","email":"jane@example.com","type":"A lead generation site","brief":"We need a bilingual site for our Mauritius hotel, integrated with our booking engine."}}}},"responses":{"201":{"description":"Enquiry received.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnquiryAccepted"}}}},"400":{"description":"Validation failed (missing name, invalid email, or non-JSON body).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnquiryRejected"}}}},"401":{"description":"Bot protection is enabled and no valid API key or Turnstile token was supplied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded. Honour Retry-After before retrying.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error — email hello@leantech.mu instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"schemas":{"EnquiryInput":{"type":"object","required":["name","email"],"properties":{"name":{"type":"string","maxLength":120,"description":"The enquirer's name."},"email":{"type":"string","format":"email","maxLength":200,"description":"Reply-to address — the team answers here."},"type":{"type":"string","enum":["A showcase site","A lead generation site","An eCommerce / booking build","A platform or automation","Not sure yet"],"description":"What kind of build the enquiry is about."},"brief":{"type":"string","maxLength":5000,"description":"Free-text project brief: goals, scope, timelines, links."},"turnstileToken":{"type":"string","description":"Cloudflare Turnstile token, required when bot protection is enabled and no API key is sent. Browser callers get this from the widget; agents should use an API key instead."}}},"EnquiryAccepted":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"message":{"type":"string"}}},"EnquiryRejected":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"errors":{"type":"object","description":"Field-keyed validation messages.","additionalProperties":{"type":"string"}}}},"ErrorResponse":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"string"}}}},"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"Agent API key issued by Lean Tech (email hello@leantech.mu). Send as `Authorization: Bearer <key>`."}},"headers":{"RateLimit-Limit":{"description":"Requests allowed per window (10 per hour).","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}}}