{"openapi":"3.1.1","info":{"title":"Linkvue public documentation API","version":"1.0.0","description":"Read-only discovery and documentation. Creator account automation is provided through the OAuth-protected MCP server, not these REST operations.","contact":{"url":"https://linkvue.uk/contact"}},"servers":[{"url":"https://linkvue.uk"}],"externalDocs":{"description":"Linkvue MCP, authentication, onboarding and rate limits","url":"https://linkvue.uk/docs"},"security":[],"paths":{"/api/agent":{"get":{"operationId":"getLinkvueService","summary":"Read Linkvue service metadata","description":"Find the documentation, OpenAPI and public and authenticated MCP endpoint URLs. Requires no credentials.","responses":{"200":{"description":"Successful read-only response.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceInfo"}}}},"404":{"description":"Resource not found.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Method not allowed.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Request allowance exhausted.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/agent/resources":{"get":{"operationId":"listLinkvueResources","summary":"List Linkvue documentation resources","description":"List the public documentation resources and their canonical URIs and MIME types.","responses":{"200":{"description":"Successful read-only response.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["resources"],"properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/Resource"}}},"additionalProperties":false}}}},"404":{"description":"Resource not found.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Method not allowed.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Request allowance exhausted.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/agent/resources/{name}":{"get":{"operationId":"readLinkvueResource","summary":"Read a Linkvue documentation resource","description":"Read the complete text of a named public resource. Unknown resource names return a structured 404.","parameters":[{"name":"name","in":"path","required":true,"description":"The public resource name returned by the resource list.","schema":{"type":"string","enum":["docs","instructions","openapi"]}}],"responses":{"200":{"description":"Successful read-only response.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceContent"}}}},"404":{"description":"Resource not found.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Method not allowed.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Request allowance exhausted.","headers":{"RateLimit":{"description":"RateLimit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"RateLimit-Policy for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"RateLimit-Limit for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Remaining":{"description":"RateLimit-Remaining for the current request allowance; time values are seconds.","schema":{"type":"string"}},"RateLimit-Reset":{"description":"RateLimit-Reset for the current request allowance; time values are seconds.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"ServiceInfo":{"type":"object","required":["name","description","documentation","openapi","mcp","accountMcp","authentication"],"properties":{"name":{"type":"string","description":"Linkvue name.","examples":["Linkvue"]},"description":{"type":"string","description":"Linkvue description.","examples":["Link in bio pages and authorized creator automation."]},"documentation":{"type":"string","description":"Linkvue documentation.","format":"uri","examples":["https://linkvue.uk/docs"]},"openapi":{"type":"string","description":"Linkvue openapi.","format":"uri","examples":["https://linkvue.uk/openapi.json"]},"mcp":{"type":"string","description":"Linkvue mcp.","format":"uri","examples":["https://linkvue.uk/mcp"]},"accountMcp":{"type":"string","description":"Linkvue accountMcp.","format":"uri","examples":["https://mcp.linkvue.uk/mcp"]},"authentication":{"type":"string","description":"How public and account access differ.","examples":["Public documentation requires no credentials. Account tools require OAuth and permitted account access."]}},"additionalProperties":false},"Resource":{"type":"object","required":["name","uri","mimeType","description"],"properties":{"name":{"type":"string","enum":["docs","instructions","openapi"]},"uri":{"type":"string","format":"uri"},"mimeType":{"type":"string","enum":["text/markdown","application/json"]},"description":{"type":"string","minLength":1}},"additionalProperties":false},"ResourceContent":{"type":"object","required":["uri","mimeType","text"],"properties":{"uri":{"type":"string","format":"uri"},"mimeType":{"type":"string","enum":["text/markdown","application/json"]},"text":{"type":"string","minLength":1}},"additionalProperties":false},"Problem":{"type":"object","required":["type","title","status","code","detail","resolution"],"properties":{"type":{"type":"string","format":"uri","const":"about:blank"},"title":{"type":"string"},"status":{"type":"integer","minimum":400,"maximum":599},"code":{"type":"string"},"detail":{"type":"string"},"resolution":{"type":"string"}},"additionalProperties":false}}}}