{"openapi":"3.1.0","info":{"title":"Sanket Patel Portfolio API","version":"1.0.0","description":"Public, human-reviewed portfolio data and contact surface. GET resources are public. OAuth scope names are published for least-privilege clients, but this site does not currently issue access tokens.","contact":{"name":"Sanket Patel","email":"sanpatel323@gmail.com","url":"https://www.sanketpatel.online"}},"servers":[{"url":"https://www.sanketpatel.online","description":"Production site"}],"externalDocs":{"description":"Developer portal","url":"https://www.sanketpatel.online/developers"},"paths":{"/api/markdown":{"get":{"operationId":"getPortfolioMarkdown","summary":"Read the portfolio as Markdown","description":"Request with Accept: text/markdown for the complete portfolio.","responses":{"200":{"description":"Markdown portfolio","content":{"text/markdown":{"schema":{"type":"string"}}}}},"security":[]}},"/api/contact":{"post":{"operationId":"submitContactInquiry","summary":"Submit a contact inquiry","description":"Sends a message for human review. Do not use for unsolicited bulk messages.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","email","subject","message"],"properties":{"name":{"type":"string","minLength":2},"email":{"type":"string","format":"email"},"subject":{"type":"string","minLength":2},"message":{"type":"string","minLength":10}}}}}},"responses":{"200":{"description":"Inquiry accepted for delivery"},"400":{"description":"Invalid request"},"429":{"description":"Rate limited"},"500":{"description":"Delivery failed"}},"security":[]}},"/mcp":{"post":{"operationId":"mcpStreamableHttp","summary":"MCP Streamable HTTP endpoint","description":"JSON-RPC 2.0 endpoint exposing read-only portfolio tools.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"JSON-RPC response"}},"security":[]}}},"components":{"securitySchemes":{"oauth2":{"type":"oauth2","description":"Reserved OAuth 2.0 scope vocabulary. Authorization and token endpoints are published as non-functional 501 responses; portfolio reads remain public.","flows":{"authorizationCode":{"authorizationUrl":"https://www.sanketpatel.online/oauth/authorize","tokenUrl":"https://www.sanketpatel.online/oauth/token","scopes":{"profile:read":"Read the public professional profile and experience.","projects:read":"Read public project summaries and technology details.","contact:submit":"Submit a contact inquiry for human review."}}}}}}}