{"openapi":"3.1.0","info":{"title":"seanmaraj.com Public API","version":"1.0.0","description":"The unauthenticated public API surface for seanmaraj.com. Currently a single contact intake endpoint that routes to email.","contact":{"name":"Sean Maraj","email":"sean@seanmaraj.com","url":"https://www.seanmaraj.com"},"license":{"name":"Proprietary"}},"servers":[{"url":"https://www.seanmaraj.com"}],"paths":{"/api/contact":{"post":{"summary":"Submit a contact intake from any of the engagement, advisory, sprint, or speaking forms.","operationId":"submitContact","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequest"}}}},"responses":{"202":{"description":"Accepted. Reply usually inside 48 hours from a human.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactResponse"}}}},"400":{"description":"Validation error."},"429":{"description":"Rate-limited."}}}}},"components":{"schemas":{"ContactRequest":{"type":"object","required":["intake","name","email","message"],"properties":{"intake":{"type":"string","enum":["fractional","sprint","advisory","speaking","general"],"description":"Which engagement shape the request applies to."},"name":{"type":"string","minLength":1,"maxLength":200},"email":{"type":"string","format":"email"},"company":{"type":"string","maxLength":200},"role":{"type":"string","maxLength":200},"message":{"type":"string","minLength":1,"maxLength":5000},"metadata":{"type":"object","additionalProperties":true,"description":"Free-form per-intake fields (LinkedIn, stage, headcount, budget, etc.)."}}},"ContactResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"id":{"type":"string","description":"Server-side intake ID for follow-up."}}}}}}