{"openapi":"3.1.0","info":{"title":"Seyhun Akyurek Portfolio API — Seyhun Akyurek Developer Resources","description":"Public, read-only API for Seyhun Akyurek's portfolio — AI projects, site profile, offers, and MCP tool surface. All endpoints are GET unless noted; no auth required for these reads.\n\nVersioning: URL path versioning via /api/v1/* (canonical) plus unversioned aliases /api/webmcp/* for backwards compat. Clients may also send `API-Version: v1` or `Accept: application/vnd.seyhun.v1+json` — server echoes `API-Version: v1`. Deprecation is signaled via `Deprecation: true` + `Sunset` (RFC 8594) + `Link: <url>; rel=\"sunset\"` headers at least 180 days before removal. No breaking change without a version bump. Rate limits: 100 req/60s per IP (see RateLimit-* headers + Retry-After on 429; docs at /developers#rate-limits). For agent registration/auth flows see /auth.md. Discover the full surface via /.well-known/api-catalog and /llms.txt.","version":"1.0.0","contact":{"name":"Seyhun Akyurek","url":"https://seyhunakyurek.com"},"license":{"name":"MIT"}},"servers":[{"url":"https://seyhunakyurek.com","description":"Production (unversioned alias)"},{"url":"https://seyhunakyurek.com/api/v1","description":"Production — versioned root (v1 canonical)"}],"tags":[{"name":"seyhunakyurek","description":"Seyhun Akyurek portfolio — discoverable by name per Ora Developer Resource guidance"},{"name":"projects","description":"AI projects catalog (Seyhun Akyurek)"},{"name":"portfolio","description":"Site profile, offers, search (Seyhun Akyurek)"},{"name":"agent","description":"Agent discovery & MCP (Seyhun Akyurek)"}],"paths":{"/":{"get":{"tags":["portfolio","seyhunakyurek"],"summary":"Homepage — Seyhun Akyurek AI Architect & Delivery Lead","description":"Server-rendered HTML homepage with content-negotiated Markdown at Accept: text/markdown (Vary: Accept). Supports RateLimit headers and API-Version echo.","operationId":"getHomepage","responses":{"200":{"description":"HTML or Markdown depending on Accept","headers":{"RateLimit-Limit":{"schema":{"type":"string"},"description":"Requests allowed per window (RFC RateLimit)"},"RateLimit-Remaining":{"schema":{"type":"string"},"description":"Remaining requests in window"},"RateLimit-Reset":{"schema":{"type":"string"},"description":"Seconds until window resets"},"API-Version":{"schema":{"type":"string"},"description":"Echoed API version (v1)"}},"content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"Seyhun Akyurek"},"role":{"type":"string","example":"AI Architect & Delivery Lead — Regulated Industries"},"url":{"type":"string","format":"uri","example":"https://seyhunakyurek.com"},"description":{"type":"string"}}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/llms.txt":{"get":{"tags":["portfolio","seyhunakyurek"],"summary":"LLM-facing profile — Seyhun Akyurek","operationId":"getLlmsTxt","responses":{"200":{"description":"text/plain profile","headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}}},"content":{"text/plain":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object","properties":{"profile":{"type":"string","description":"LLM profile text (llms.txt contents)"},"url":{"type":"string","format":"uri","example":"https://seyhunakyurek.com/llms.txt"}}}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/openapi.json":{"get":{"tags":["seyhunakyurek","agent"],"summary":"OpenAPI specification — Seyhun Akyurek portfolio","operationId":"getOpenApiJson","responses":{"200":{"description":"OpenAPI JSON","headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"API-Version":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"OpenAPI 3.1 spec root object"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/openapi.json":{"get":{"tags":["seyhunakyurek","agent"],"summary":"OpenAPI specification alias — Seyhun Akyurek portfolio","operationId":"getOpenApiJsonAlias","responses":{"200":{"description":"OpenAPI JSON (alias)","headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"API-Version":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"OpenAPI 3.1 spec root object (alias)"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/developers":{"get":{"tags":["seyhunakyurek","agent"],"summary":"Developer documentation hub — Seyhun Akyurek","description":"Human + agent docs: API docs, OpenAPI spec, auth, webhooks, MCP server catalog for Seyhun Akyurek portfolio. Includes rate-limit and versioning policy.","operationId":"getDevelopers","responses":{"200":{"description":"HTML","headers":{"RateLimit-Limit":{"schema":{"type":"string"}}},"content":{"text/html":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object","properties":{"docsUrl":{"type":"string","format":"uri","example":"https://seyhunakyurek.com/developers"},"openapi":{"type":"string","format":"uri","example":"https://seyhunakyurek.com/openapi.json"},"mcpUrl":{"type":"string","format":"uri","example":"https://seyhunakyurek.com/api/mcp"},"rateLimit":{"type":"object","properties":{"limit":{"type":"integer","example":100},"windowSeconds":{"type":"integer","example":60},"headers":{"type":"array","items":{"type":"string"},"example":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","Retry-After"]}}},"versioning":{"type":"object","properties":{"canonical":{"type":"string","example":"/api/v1"},"aliases":{"type":"array","items":{"type":"string"},"example":["/api/webmcp"]},"deprecationHeaders":{"type":"array","items":{"type":"string"},"example":["Deprecation","Sunset","Link rel=sunset"]}}}}}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/.well-known/api-catalog":{"get":{"tags":["agent","seyhunakyurek"],"summary":"RFC 8288 API catalog linkset — Seyhun Akyurek","operationId":"getApiCatalog","responses":{"200":{"description":"linkset JSON","headers":{"RateLimit-Limit":{"schema":{"type":"string"}}},"content":{"application/linkset+json":{"schema":{"type":"object","properties":{"linkset":{"type":"array","items":{"type":"object","properties":{"anchor":{"type":"string","format":"uri"},"links":{"type":"array","items":{"type":"object"}}}}}}}},"application/json":{"schema":{"type":"object","properties":{"linkset":{"type":"array","items":{"type":"object"}}}}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/.well-known/agent-card.json":{"get":{"tags":["agent"],"summary":"A2A agent card","operationId":"getAgentCard","responses":{"200":{"description":"JSON","headers":{"RateLimit-Limit":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"Seyhun Akyurek"},"version":{"type":"string","example":"1.0.0"},"description":{"type":"string"},"supportedInterfaces":{"type":"array","items":{"type":"object"}}}}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/.well-known/mcp/server-card.json":{"get":{"tags":["agent","seyhunakyurek"],"summary":"MCP server card — Seyhun Akyurek","operationId":"getMcpServerCard","responses":{"200":{"description":"MCP server card JSON","headers":{"RateLimit-Limit":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"serverInfo":{"type":"object","properties":{"name":{"type":"string","example":"seyhunakyurek-portfolio"},"version":{"type":"string","example":"1.0.0"},"description":{"type":"string"}}},"transport":{"type":"object"},"capabilities":{"type":"object"}}}}}}}}},"/.well-known/mcp.json":{"get":{"tags":["agent","seyhunakyurek"],"summary":"MCP manifest — Seyhun Akyurek (standard)","description":"Standard MCP manifest at /.well-known/mcp.json — Streamable HTTP transport at /api/mcp.","operationId":"getMcpManifest","responses":{"200":{"description":"MCP manifest JSON","headers":{"RateLimit-Limit":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"seyhunakyurek-portfolio"},"version":{"type":"string","example":"1.0.0"},"mcp":{"type":"object","properties":{"endpoint":{"type":"string","format":"uri","example":"https://seyhunakyurek.com/api/mcp"},"transport":{"type":"string","example":"streamable-http"},"protocolVersion":{"type":"string","example":"2024-11-05"}}}}}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/webmcp/projects":{"get":{"tags":["projects","seyhunakyurek"],"summary":"List Seyhun Akyurek AI projects (slim) — alias (v1)","description":"Unversioned alias of /api/v1/webmcp/projects. Clients should prefer /api/v1/... with API-Version header. RateLimit headers included; 429 returns Retry-After.","operationId":"listProjects","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by category e.g. Enterprise Automation, Banking & Financial AI"},{"name":"API-Version","in":"header","required":false,"schema":{"type":"string","enum":["v1"]},"description":"API version header — v1. Echoed in response."}],"responses":{"200":{"description":"Project list","headers":{"RateLimit-Limit":{"schema":{"type":"string"},"description":"Max requests per window"},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"API-Version":{"schema":{"type":"string","example":"v1"}}},"content":{"application/json":{"schema":{"type":"object","required":["count","total","projects","categories"],"properties":{"count":{"type":"integer","example":37},"total":{"type":"integer","example":37},"projects":{"type":"array","items":{"type":"object","required":["slug","title","category","href"],"properties":{"slug":{"type":"string","example":"pact"},"title":{"type":"string","example":"Pact"},"subtitle":{"type":"string"},"category":{"type":"string","example":"Enterprise Automation"},"description":{"type":"string"},"href":{"type":"string","example":"/projects/pact"}}}},"categories":{"type":"array","items":{"type":"string"},"example":["Enterprise Automation"]}}},"example":{"count":37,"total":37,"projects":[{"slug":"pact","title":"Pact","category":"Enterprise Automation","href":"/projects/pact"}],"categories":["Enterprise Automation","Banking & Financial AI"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/api/v1/webmcp/projects":{"get":{"tags":["projects","seyhunakyurek"],"summary":"List Seyhun Akyurek AI projects (slim) — v1 canonical","description":"Canonical versioned endpoint. Versioned via URL /api/v1. RateLimit + Retry-After on 429; Sunset/Deprecation headers on deprecated versions.","operationId":"listProjectsV1","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by category e.g. Enterprise Automation, Banking & Financial AI"},{"name":"API-Version","in":"header","required":false,"schema":{"type":"string","enum":["v1"]},"description":"API version header — v1. Echoed in response."}],"responses":{"200":{"description":"Project list v1","headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"API-Version":{"schema":{"type":"string","example":"v1"}},"Sunset":{"schema":{"type":"string","format":"date-time"},"description":"Sunset date for this version (RFC 8594)"}},"content":{"application/json":{"schema":{"type":"object","required":["count","total","projects","categories"],"properties":{"count":{"type":"integer"},"total":{"type":"integer"},"version":{"type":"string","example":"v1"},"projects":{"type":"array","items":{"type":"object","required":["slug","title","category","href"],"properties":{"slug":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string"},"category":{"type":"string"},"description":{"type":"string"},"href":{"type":"string"}}}},"categories":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/api/webmcp/projects/{slug}":{"get":{"tags":["projects","seyhunakyurek"],"summary":"Get Seyhun Akyurek project by slug — alias (v1)","description":"Unversioned alias of /api/v1/webmcp/projects/{slug}. Prefer versioned path.","operationId":"getProjectBySlug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Project slug e.g. pact, corridor"},{"name":"API-Version","in":"header","required":false,"schema":{"type":"string","enum":["v1"]},"description":"API version header"}],"responses":{"200":{"description":"Full AIProject object","headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"API-Version":{"schema":{"type":"string","example":"v1"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIProject"}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/api/v1/webmcp/projects/{slug}":{"get":{"tags":["projects","seyhunakyurek"],"summary":"Get Seyhun Akyurek project by slug — v1 canonical","description":"Canonical versioned project fetch. Versioned via URL /api/v1 + API-Version header echo.","operationId":"getProjectBySlugV1","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Project slug e.g. pact, corridor"},{"name":"API-Version","in":"header","required":false,"schema":{"type":"string","enum":["v1"]},"description":"API version header"}],"responses":{"200":{"description":"Full AIProject object v1","headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}},"API-Version":{"schema":{"type":"string","example":"v1"}},"Sunset":{"schema":{"type":"string","format":"date-time"},"description":"Sunset date for v1"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIProject"}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/api/mcp":{"get":{"tags":["agent","seyhunakyurek"],"summary":"MCP server discovery (Streamable HTTP) — Seyhun Akyurek","description":"Discovery endpoint for the Streamable HTTP MCP server. RateLimit headers included.","operationId":"getMcpDiscovery","responses":{"200":{"description":"MCP discovery payload","headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"API-Version":{"schema":{"type":"string","example":"v1"}}},"content":{"application/json":{"schema":{"type":"object","required":["protocolVersion","serverInfo"],"properties":{"protocolVersion":{"type":"string","example":"2024-11-05"},"serverInfo":{"type":"object","properties":{"name":{"type":"string","example":"seyhunakyurek-portfolio"},"version":{"type":"string","example":"1.0.0"}}},"capabilities":{"type":"object","description":"MCP capabilities object"},"tools":{"type":"array","items":{"type":"object"},"description":"List of tool descriptors"}}}}}},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["agent","seyhunakyurek"],"summary":"MCP JSON-RPC (tools/list, tools/call, initialize) — Seyhun Akyurek","description":"POST JSON-RPC to the MCP server. RateLimit + Retry-After on 429; returns typed JSON-RPC result.","operationId":"postMcpRpc","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["method"],"properties":{"jsonrpc":{"type":"string","example":"2.0"},"id":{"type":["string","integer","null"]},"method":{"type":"string","example":"tools/list"},"params":{"type":"object"}}}}}},"responses":{"200":{"description":"JSON-RPC result","headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc"],"properties":{"jsonrpc":{"type":"string","example":"2.0"},"id":{"type":["string","integer","null"]},"result":{"type":"object","description":"JSON-RPC result payload"},"error":{"$ref":"#/components/schemas/Error"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/auth.md":{"get":{"tags":["agent","seyhunakyurek"],"summary":"Agent auth skill — WorkOS Agent Auth — Seyhun Akyurek","operationId":"getAuthMd","responses":{"200":{"description":"text/markdown skill","content":{"text/markdown":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object","properties":{"skillUrl":{"type":"string","format":"uri","example":"https://seyhunakyurek.com/auth.md"},"discovery":{"type":"string","format":"uri","example":"https://seyhunakyurek.com/.well-known/oauth-protected-resource"},"scopes":{"type":"array","items":{"type":"string"},"example":["read:portfolio"]}}}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","example":"NOT_FOUND"},"message":{"type":"string","description":"Human-readable summary","example":"Project 'unknown' not found"},"hint":{"type":"string","description":"Resolution hint for agents/humans","example":"Call GET /api/webmcp/projects to list valid slugs."},"details":{"type":"object","description":"Optional structured details"},"docs":{"type":"string","format":"uri","example":"https://seyhunakyurek.com/developers#error-handling"},"openapi":{"type":"string","format":"uri","example":"https://seyhunakyurek.com/openapi.json"}}}}},"AIProject":{"type":"object","required":["slug","title","category","href"],"properties":{"slug":{"type":"string","example":"pact"},"title":{"type":"string","example":"Pact"},"subtitle":{"type":"string","example":"Contract Intelligence"},"description":{"type":"string","example":"AI contract analysis with RAG and multi-agent orchestration."},"category":{"type":"string","example":"Enterprise Automation"},"color":{"type":"string","example":"blue"},"status":{"type":"string","enum":["Active","Coming Soon"],"example":"Active"},"techStack":{"type":"array","items":{"type":"string"},"example":["Azure OpenAI","Python"]},"metrics":{"type":"object","description":"Project impact metrics"},"href":{"type":"string","example":"/projects/pact"}}},"ProjectList":{"type":"object","required":["count","total","projects","categories"],"properties":{"count":{"type":"integer"},"total":{"type":"integer"},"projects":{"type":"array","items":{"$ref":"#/components/schemas/AIProject"}},"categories":{"type":"array","items":{"type":"string"}}}}},"responses":{"BadRequest":{"description":"Bad request — structured JSON error (RFC 9457 style)","headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}},"RateLimit-Reset":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Not found — structured JSON error","headers":{"RateLimit-Limit":{"schema":{"type":"string"}},"RateLimit-Remaining":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"Too many requests — RateLimit headers + Retry-After; structured JSON error","headers":{"RateLimit-Limit":{"schema":{"type":"string","example":"100"}},"RateLimit-Remaining":{"schema":{"type":"string","example":"0"}},"RateLimit-Reset":{"schema":{"type":"string","example":"60"}},"Retry-After":{"schema":{"type":"string","example":"60"},"description":"Seconds to wait before retry"},"API-Version":{"schema":{"type":"string","example":"v1"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ServerError":{"description":"Server error — structured JSON error","headers":{"RateLimit-Limit":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":{"ApiVersionHeader":{"name":"API-Version","in":"header","required":false,"schema":{"type":"string","enum":["v1"],"default":"v1"},"description":"API version header. v1 is current. Server echoes version via API-Version response header."}}}}