{"openapi":"3.1.0","info":{"title":"slidekit API","version":"1.1.0","description":"Upload Markdown, get back one fully self-contained Slidev HTML deck."},"servers":[{"url":"/"}],"paths":{"/":{"get":{"summary":"Service descriptor (links to /render, /openapi.json, /llms.txt)","responses":{"200":{"description":"JSON service descriptor","content":{"application/json":{}}}}}},"/themes":{"get":{"summary":"List available themes","responses":{"200":{"description":"Theme names","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}}}},"/health":{"get":{"summary":"Liveness probe (process is up)","responses":{"200":{"description":"Always \"ok\" while the process is alive","content":{"text/plain":{"schema":{"type":"string","example":"ok"}}}}}}},"/ready":{"get":{"summary":"Readiness probe (accepting work)","responses":{"200":{"description":"Ready","content":{"application/json":{}}},"503":{"description":"Draining (graceful shutdown in progress)","content":{"application/json":{}}}}}},"/metrics":{"get":{"summary":"Prometheus metrics","responses":{"200":{"description":"Metrics in Prometheus text format","content":{"text/plain":{}}}}}},"/render":{"post":{"summary":"Render Markdown -> one fully self-contained Slidev HTML deck (CSS+JS+fonts inline, presenter mode, offline)","responses":{"200":{"description":"Self-contained HTML deck (attachment when download=1)","content":{"text/html":{}}},"400":{"description":"Empty Markdown","content":{"text/plain":{}}},"401":{"description":"Missing/invalid API key (when auth enabled)","content":{"text/plain":{}}},"413":{"description":"Body too large","content":{"text/plain":{}}},"429":{"description":"Rate limit exceeded","content":{"text/plain":{}}},"500":{"description":"Build failed","content":{"text/plain":{}}},"503":{"description":"Build queue full","content":{"text/plain":{}}},"504":{"description":"Build timed out","content":{"text/plain":{}}}},"parameters":[{"name":"theme","in":"query","required":false,"description":"Theme name (see GET /themes). Unknown values fall back to the default theme.","schema":{"type":"string","enum":["editorial","neutral"],"default":"neutral"}},{"name":"title","in":"query","required":false,"description":"Deck title -> <title> + og:title/twitter:title + download filename.","schema":{"type":"string"}},{"name":"author","in":"query","required":false,"description":"meta[name=author].","schema":{"type":"string"}},{"name":"tags","in":"query","required":false,"description":"Comma-separated -> meta[name=keywords].","schema":{"type":"string"}},{"name":"description","in":"query","required":false,"description":"meta description + og/twitter description.","schema":{"type":"string"}},{"name":"image","in":"query","required":false,"description":"Social image URL -> og:image/twitter:image.","schema":{"type":"string","format":"uri"}},{"name":"download","in":"query","required":false,"description":"When \"1\", responds with Content-Disposition: attachment.","schema":{"type":"string","enum":["1"]}}],"requestBody":{"required":true,"description":"Raw Slidev Markdown (text/markdown) or a multipart/form-data file field (file/markdown/md).","content":{"text/markdown":{"schema":{"type":"string"}},"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"security":[{"apiKey":[]},{"bearerAuth":[]}]}},"/openapi.json":{"get":{"summary":"This OpenAPI 3.1 document","responses":{"200":{"description":"OpenAPI spec","content":{"application/json":{}}}}}},"/llms.txt":{"get":{"summary":"LLM docs index (llmstxt.org format)","responses":{"200":{"description":"Markdown index of the documentation","content":{"text/plain":{}}}}}},"/llms-full.txt":{"get":{"summary":"Full LLM documentation inlined in one file","responses":{"200":{"description":"Complete documentation","content":{"text/plain":{}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"},"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}