{"openapi":"3.1.0","info":{"title":"Yannis developer resources API","summary":"Public read API for Yannis on yannis.dev","description":"Yannis is a Stockholm-based full-stack developer building web, mobile, and commerce software with TypeScript, React, and Node.js. This OpenAPI document lists the public Yannis developer resources: HTML trust pages, markdown twins, llms.txt, API status, MCP, and contact. API clients can pin version 1 with the Yannis-API-Version header. No public endpoint is deprecated today; if a version is scheduled to retire, yannis.dev will document the replacement and send a Sunset response header at least 90 days before removal.","version":"1.0.0","contact":{"name":"Yannis","email":"hello@yannis.dev","url":"https://yannis.dev"},"license":{"name":"Personal site content","url":"https://yannis.dev/privacy"}},"servers":[{"url":"https://yannis.dev","description":"Yannis canonical origin"}],"x-yannis-api-version":"1","x-versioning-policy":"Current public API version is 1. Clients may send Yannis-API-Version: 1; responses echo the active version.","x-deprecation-policy":"Breaking API versions remain available for at least 90 days after a documented Sunset date. No endpoint is deprecated today.","x-rate-limit-policy":{"policy":"public","quota":60,"windowSeconds":60,"remainingExample":59,"headers":["RateLimit-Policy","RateLimit","RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset"]},"tags":[{"name":"profile","description":"Human-readable profile pages"},{"name":"agents","description":"Machine-readable Yannis developer resources"},{"name":"status","description":"Read-only API status and policy metadata"},{"name":"mcp","description":"Model Context Protocol"}],"components":{"parameters":{"ApiVersion":{"name":"Yannis-API-Version","in":"header","required":false,"description":"Optional version pin for yannis.dev public API clients. Current supported value: 1.","schema":{"type":"string","enum":["1"]}}},"headers":{"ApiVersion":{"description":"Current yannis.dev public API version. Clients may send the same value in Yannis-API-Version.","schema":{"type":"string","enum":["1"]}},"RateLimitPolicy":{"description":"Quota policy using IETF RateLimit syntax. Example: \"public\";q=60;w=60.","schema":{"type":"string"}},"RateLimit":{"description":"Current quota hint using IETF RateLimit syntax. Example: \"public\";r=59;t=60.","schema":{"type":"string"}},"RateLimitLimit":{"description":"Compatibility header: maximum requests allowed in the window.","schema":{"type":"integer","minimum":0,"example":60}},"RateLimitRemaining":{"description":"Compatibility header: remaining requests in the current window.","schema":{"type":"integer","minimum":0,"example":59}},"RateLimitReset":{"description":"Compatibility header: seconds until the current window resets.","schema":{"type":"integer","minimum":0,"example":60}},"RetryAfter":{"description":"Seconds to wait before retrying after HTTP 429.","schema":{"type":"integer","minimum":0,"example":60}},"Sunset":{"description":"Present only when an endpoint or version has a scheduled retirement date. Value is an HTTP-date.","schema":{"type":"string","example":"Wed, 31 Dec 2026 23:59:59 GMT"}}},"schemas":{"ProblemDetails":{"type":"object","description":"RFC 9457 problem details with yannis.dev extension members for agents.","required":["type","title","status","detail","instance","code","hint"],"properties":{"type":{"type":"string","format":"uri-reference","description":"Problem type URI. Dereferences to yannis.dev developer error docs."},"title":{"type":"string","description":"Stable human-readable summary."},"status":{"type":"integer","minimum":100,"maximum":599,"description":"HTTP status code."},"detail":{"type":"string","description":"Occurrence-specific recovery detail."},"instance":{"type":"string","format":"uri-reference","description":"Path or URI for this occurrence."},"code":{"type":"string","description":"Stable machine-readable code.","examples":["api.not_found","http.method_not_allowed","rate_limit.exceeded"]},"hint":{"type":"string","description":"Actionable remediation hint for agents."}},"additionalProperties":true},"ApiStatus":{"type":"object","required":["status","name","origin","apiVersion","resources","rateLimit","deprecation"],"properties":{"status":{"type":"string","const":"ok"},"name":{"type":"string"},"origin":{"type":"string","format":"uri"},"apiVersion":{"type":"string","enum":["1"]},"contact":{"type":"string","format":"email"},"resources":{"type":"object","additionalProperties":{"type":"string","format":"uri"}},"rateLimit":{"type":"object","required":["policy","quota","windowSeconds","headers"],"properties":{"policy":{"type":"string","const":"public"},"quota":{"type":"integer","example":60},"windowSeconds":{"type":"integer","example":60},"headers":{"type":"array","items":{"type":"string"}}}},"deprecation":{"type":"object","required":["policy","currentVersion","deprecated"],"properties":{"policy":{"type":"string"},"currentVersion":{"type":"string","enum":["1"]},"deprecated":{"type":"boolean","const":false}}}}},"JsonRpcRequest":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"integer"},{"type":"null"}]},"method":{"type":"string"},"params":{"type":"object"}},"additionalProperties":true},"JsonRpcResponse":{"type":"object","required":["jsonrpc"],"properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"integer"},{"type":"null"}]},"result":{"type":"object"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{"type":"object","additionalProperties":true}}}},"additionalProperties":true}}},"paths":{"/":{"get":{"tags":["profile"],"operationId":"getHomepage","summary":"Yannis homepage","description":"Server-rendered homepage with an H1 and full profile text.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"HTML page","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is not available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/plain":{"schema":{"type":"string"}}}}}}},"/about":{"get":{"operationId":"get_about","summary":"About Yannis","description":"Yannis grew up in Antibes and lives in Stockholm.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"HTML page","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is not available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/plain":{"schema":{"type":"string"}}}}}}},"/contact":{"get":{"operationId":"get_contact","summary":"Contact Yannis","description":"Contact Yannis at hello@yannis.dev. Full-stack developer in Stockholm. LinkedIn and GitHub are public.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"HTML page","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is not available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/plain":{"schema":{"type":"string"}}}}}}},"/privacy":{"get":{"operationId":"get_privacy","summary":"Privacy","description":"How yannis.dev handles information.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"HTML page","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is not available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/plain":{"schema":{"type":"string"}}}}}}},"/developers":{"get":{"operationId":"get_developers","summary":"Yannis developer resources","description":"OpenAPI, markdown, and MCP endpoints for yannis.dev.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"HTML page","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is not available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/plain":{"schema":{"type":"string"}}}}}}},"/developers/auth":{"get":{"operationId":"get_developers_auth","summary":"Yannis auth","description":"Public pages on yannis.dev do not require login or API keys.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"HTML page","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is not available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/plain":{"schema":{"type":"string"}}}}}}},"/developers/errors":{"get":{"operationId":"get_developers_errors","summary":"Yannis JSON errors","description":"RFC 9457 problem details used by the yannis.dev public API.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"HTML page","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is not available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/plain":{"schema":{"type":"string"}}}}}}},"/developers/versioning":{"get":{"operationId":"get_developers_versioning","summary":"Yannis API versioning","description":"Version and deprecation policy for the yannis.dev public API.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"HTML page","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is not available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/plain":{"schema":{"type":"string"}}}}}}},"/developers/rate-limits":{"get":{"operationId":"get_developers_rate_limits","summary":"Yannis rate limits","description":"RateLimit response headers for yannis.dev public API clients.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"HTML page","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is not available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/plain":{"schema":{"type":"string"}}}}}}},"/developers/webhooks":{"get":{"operationId":"get_developers_webhooks","summary":"Yannis webhooks","description":"yannis.dev does not send or receive webhooks.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"HTML page","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is not available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/plain":{"schema":{"type":"string"}}}}}}},"/developers/mcp":{"get":{"operationId":"get_developers_mcp","summary":"Yannis MCP","description":"How to connect to the yannis.dev MCP server over Streamable HTTP.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"HTML page","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is not available.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/plain":{"schema":{"type":"string"}}}}}}},"/index.md":{"get":{"tags":["agents"],"operationId":"getHomepageMarkdown","summary":"Homepage markdown twin","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"Markdown","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"Bad request represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not found represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"Method not allowed represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit exceeded. Retry-After takes precedence over RateLimit hints.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"Unexpected server error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"default":{"description":"Error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/llms.txt":{"get":{"tags":["agents"],"operationId":"getLlmsTxt","summary":"llms.txt agent index","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"llms.txt","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"Bad request represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not found represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"Method not allowed represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit exceeded. Retry-After takes precedence over RateLimit hints.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"Unexpected server error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"default":{"description":"Error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/llms-full.txt":{"get":{"tags":["agents"],"operationId":"getLlmsFullTxt","summary":"Full llms.txt plus homepage markdown","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"llms-full.txt","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"Bad request represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not found represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"Method not allowed represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit exceeded. Retry-After takes precedence over RateLimit hints.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"Unexpected server error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"default":{"description":"Error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/openapi.json":{"get":{"tags":["agents"],"operationId":"getOpenApi","summary":"Yannis OpenAPI spec","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"OpenAPI 3.1 document","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not found represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"Method not allowed represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit exceeded. Retry-After takes precedence over RateLimit hints.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"Unexpected server error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"default":{"description":"Error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/status.json":{"get":{"tags":["status"],"operationId":"getApiStatus","summary":"Yannis API status","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"Read-only status, API version, rate-limit policy, and discovery links.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiStatus"}}}},"400":{"description":"Bad request represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not found represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"Method not allowed represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit exceeded. Retry-After takes precedence over RateLimit hints.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"Unexpected server error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"default":{"description":"Error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/.well-known/mcp.json":{"get":{"tags":["mcp"],"operationId":"getMcpServerCard","summary":"Yannis MCP server card","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"Canonical MCP Server Card for yannis.dev.","headers":{},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not found represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"Method not allowed represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit exceeded. Retry-After takes precedence over RateLimit hints.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"Unexpected server error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"default":{"description":"Error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/.well-known/mcp/manifest.json":{"get":{"tags":["mcp"],"operationId":"getMcpEndpointManifest","summary":"MCP endpoint manifest","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"responses":{"200":{"description":"Endpoint list","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not found represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"Method not allowed represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit exceeded. Retry-After takes precedence over RateLimit hints.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"Unexpected server error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"default":{"description":"Error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/mcp":{"post":{"tags":["mcp"],"operationId":"postMcp","summary":"Yannis MCP Streamable HTTP endpoint","description":"JSON-RPC 2.0 MCP messages. Public, read-only tools.","parameters":[{"$ref":"#/components/parameters/ApiVersion"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcRequest"}}}},"responses":{"200":{"description":"JSON-RPC response","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}},"202":{"description":"Notification accepted","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}}},"400":{"description":"Bad HTTP/MCP request represented either as problem details or a JSON-RPC error.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}},"403":{"description":"Forbidden request represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"JSON-RPC method not found for modern MCP clients.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}},"405":{"description":"Method not allowed represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit exceeded. Retry-After takes precedence over RateLimit hints.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"Unexpected server error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"default":{"description":"Error represented as RFC 9457 problem details.","headers":{"Yannis-API-Version":{"$ref":"#/components/headers/ApiVersion"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Sunset":{"$ref":"#/components/headers/Sunset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}}}}