{"openapi":"3.1.0","info":{"title":"The Third Way Company Lead Capture API","version":"1.0.0","summary":"Backs the \"email me the report\" offers on the free tools at thethirdwaycompany.com/tools.","description":"Accepts a visitor email plus the tool result they asked us to send them, after an explicit single opt-in naming the purpose. Every submission must carry a Cloudflare Turnstile token minted during a real browser visit, and the capture form only renders after a tool result does — so the tools themselves stay ungated. Like the contact API, this endpoint is published for completeness, not for agents to POST against.","contact":{"name":"The Third Way Company","url":"https://thethirdwaycompany.com","email":"hello@thethirdwaycompany.com"}},"servers":[{"url":"https://thethirdwaycompany.com"}],"externalDocs":{"description":"Human-readable API documentation","url":"https://thethirdwaycompany.com/docs#lead-api"},"paths":{"/api/lead":{"post":{"summary":"Request a tool report by email, or subscribe from the tools newsletter slot","operationId":"submitLead","description":"Validates the payload (including an explicit consent flag), verifies the Turnstile token with Cloudflare, appends the lead to the operator CSV, and notifies our inbox by email. Honeypot and timing checks absorb bot submissions with a plausible success response, so a 200 does not guarantee delivery.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadSubmission"}}}},"responses":{"200":{"description":"Accepted (or absorbed as a bot — the response is identical by design).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}},"400":{"description":"Invalid payload, missing consent, or Turnstile verification failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many submissions from one address (10 per hour).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server not configured to deliver mail; the error body points at the hello@ inbox.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Delivery to our inbox failed; the error body points at the hello@ inbox.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"LeadSubmission":{"type":"object","required":["email","source","summary","consent","renderedAt","turnstileToken"],"properties":{"email":{"type":"string","format":"email","maxLength":254},"source":{"type":"string","description":"Which tool the report comes from, or \"newsletter\" for the tools-footer signup.","enum":["agent-ready","shadow-ai-check","skills-gap","ai-policy-generator","ai-savings-calculator","ai-work-mix","newsletter"]},"summary":{"type":"string","minLength":1,"maxLength":12000,"description":"The tool result as markdown at the moment the visitor asked for it."},"consent":{"type":"boolean","enum":[true],"description":"Explicit single opt-in captured at the point of request. The checkbox starts unticked and names the exact purpose."},"website":{"type":"string","description":"Honeypot field. Humans never see it; non-empty values are treated as bots."},"renderedAt":{"type":"integer","description":"Unix epoch milliseconds at which the capture form rendered; submissions under ~3 seconds are treated as bots."},"turnstileToken":{"type":"string","description":"Cloudflare Turnstile widget token from a real browser visit to a tools page."}}},"Error":{"type":"object","properties":{"error":{"type":"string"}},"additionalProperties":true}}}}