{"openapi":"3.1.0","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/projects/":{"get":{"tags":["Projects"],"summary":"List Projects","description":"Lists all available projects.\n\nReturns:\n    A list of all available projects.","operationId":"list_projects_api_projects__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Project"},"type":"array","title":"Response List Projects Api Projects  Get"}}}}}}},"/api/projects/{name}/versions/":{"get":{"tags":["Projects"],"summary":"List Project Versions","description":"Lists all versions of a project.\n\nArgs:\n    name: The name of the project.\n\nReturns:\n    A list of all versions of a project.","operationId":"list_project_versions_api_projects__name__versions__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response List Project Versions Api Projects  Name  Versions  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{name}/versions/{version}":{"get":{"tags":["Projects"],"summary":"Get Project Versions","description":"Returns the requested project version.\n\nArgs:\n    name: The name of the project.\n    version: The requested version.\n\nReturns:\n    The requested project version.","operationId":"get_project_versions_api_projects__name__versions__version__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Get Project Versions Api Projects  Name  Versions  Version  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Projects"],"summary":"Upload Project Version","description":"Accepts and processes an uploaded project documentation.\n\nArgs:\n    name: The project name.\n    version: The project version.\n    file: The documentation zip file.\n\nReturns:\n    A message that the documentation has been uploaded successfully.","operationId":"upload_project_version_api_projects__name__versions__version__post","security":[{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_project_version_api_projects__name__versions__version__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/project_categories/":{"get":{"tags":["Project Categories"],"summary":"List Project Categories","description":"Lists all available project categories.\n\nReturns:\n    A list of all available project categories.","operationId":"list_project_categories_api_project_categories__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProjectCategory"},"type":"array","title":"Response List Project Categories Api Project Categories  Get"}}}}}}},"/api/version/":{"get":{"tags":["Version"],"summary":"Get App Version Route","description":"Returns the version of the app.\n\nReturns:\n    The app version.","operationId":"get_app_version_route_api_version__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Get App Version Route Api Version  Get"}}}}}}},"/api/plugins/footer/":{"get":{"tags":["Plugins.footer"],"summary":"Get Plugin Config","description":"Returns the plugin configuration and active state.\n\nReturns:\n    The plugin configuration.","operationId":"get_plugin_config_api_plugins_footer__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FooterPlugin"}}}}}}},"/api/plugins/orama/":{"get":{"tags":["Plugins.orama"],"summary":"Get Plugin Config","description":"Returns the plugin configuration and active state.\n\nReturns:\n    The plugin configuration.","operationId":"get_plugin_config_api_plugins_orama__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OramaPlugin"}}}}}}},"/api/plugins/site/":{"get":{"tags":["Plugins.site"],"summary":"Get Plugin Config","description":"Returns the plugin configuration and active state.\n\nReturns:\n    The plugin configuration.","operationId":"get_plugin_config_api_plugins_site__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SitePlugin"}}}}}}},"/api/plugins/theme/":{"get":{"tags":["Plugins.theme"],"summary":"Get Plugin Config","description":"Returns the plugin configuration and active state.\n\nReturns:\n    The plugin configuration.","operationId":"get_plugin_config_api_plugins_theme__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemePlugin"}}}}}}},"/api/plugins/":{"get":{"summary":"Get Plugins","description":"Get all loaded plugins.\n\nReturns:\n    A list of loaded plugin names.","operationId":"get_plugins_api_plugins__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response Get Plugins Api Plugins  Get"}}}}}}},"/llms.txt":{"get":{"tags":["Agent discovery"],"summary":"Get Llms Txt","description":"Serves the ``llms.txt`` index of everything currently published.\n\nArgs:\n    request: The incoming request, which is what knows the public base URL to link to.\n\nReturns:\n    The rendered ``llms.txt``.","operationId":"get_llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/sitemap.xml":{"get":{"tags":["Agent discovery"],"summary":"Get Sitemap Xml","description":"Serves the ``sitemap.xml`` listing the entry point of every published project.\n\nArgs:\n    request: The incoming request, which is what knows the public base URL to link to.\n\nReturns:\n    The rendered ``sitemap.xml``.","operationId":"get_sitemap_xml_sitemap_xml_get","responses":{"200":{"description":"Successful Response"}}}},"/robots.txt":{"get":{"tags":["Agent discovery"],"summary":"Get Robots Txt","description":"Serves ``robots.txt``, which points at ``llms.txt`` and at ``sitemap.xml``.\n\nArgs:\n    request: The incoming request, which is what knows the public base URL to link to.\n\nReturns:\n    The rendered ``robots.txt``.","operationId":"get_robots_txt_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/{project_name}/{version}/objects.inv":{"get":{"summary":"Serve Sphinx Objects Inventory","description":"Serves the objects.inv sphinx file for intersphinx mappings.\n\nArgs:\n    project_name: The requested project name.\n    version: The requested project version.\n\nRaises:\n    ProjectInventoryNotFound: If the project version doesn't contain an objects.inv file.\n\nReturns:\n    FileResponse: The objects.inv file.","operationId":"serve_sphinx_objects_inventory__project_name___version__objects_inv_get","parameters":[{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/static/projects/{project_name}/latest/{file_path}":{"get":{"summary":"Redirect Latest To Published Version","description":"Redirects a ``latest`` static address to the newest published version of the project.\n\nRedirecting rather than serving the file under the ``latest`` address is what keeps relative links\ninside the page working: the browser resolves them against the address it ended up on, which has\nto be the resolved version for them to stay inside it.\n\nArgs:\n    project_name: The requested project name.\n    file_path: The path of the requested file within the published version.\n\nReturns:\n    A temporary redirect to the same file under the resolved version. Temporary, because which\n    version ``latest`` names changes with every upload.","operationId":"redirect_latest_to_published_version_static_projects__project_name__latest__file_path__get","parameters":[{"name":"project_name","in":"path","required":true,"schema":{"type":"string","title":"Project Name"}},{"name":"file_path","in":"path","required":true,"schema":{"type":"string","title":"File Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{file_path}":{"get":{"summary":"Serve Ui And Assets","description":"Serves the web UI and the static assets (JS bundles, ...) as a last fallback for all non-matched requests.\n\nThe UI is returned for anything it has a route for, and for everything else too -- but under a\n404, so that a reader still gets vdoc's own not-found page while a crawler, an agent or a link\nchecker is told the truth. Answering 200 for every path made this the last route that never\nfails, which left `/robots.txt` and every typo looking like a published document.\n\nWhat it answers a documentation page with is an empty shell until scripts run, so the response\ncarries a `Link` header naming the static address of that same page. That is the one pointer an\nautomated client gets without having been told to look in `/robots.txt` or `/llms.txt` first --\nit arrives in the answer to the address a person would have pasted.\n\nArgs:\n    file_path (str): The requested file path.\n\nReturns:\n    FileResponse: The requested asset file if existing, otherwise the index.html.","operationId":"serve_ui_and_assets__file_path__get","parameters":[{"name":"file_path","in":"path","required":true,"schema":{"type":"string","title":"File Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_upload_project_version_api_projects__name__versions__version__post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_project_version_api_projects__name__versions__version__post"},"FooterLink":{"properties":{"title":{"type":"string","title":"Title"},"href":{"type":"string","minLength":1,"format":"uri","title":"Href"},"icon":{"type":"string","enum":["email","support","public","bugs","github","home"],"title":"Icon"},"target":{"type":"string","enum":["_blank","_self","_parent","_top"],"title":"Target","default":"_blank"}},"type":"object","required":["title","href","icon"],"title":"FooterLink","description":"Pydantic model for a footer link."},"FooterLinkGroup":{"properties":{"title":{"type":"string","title":"Title"},"links":{"items":{"$ref":"#/components/schemas/FooterLink"},"type":"array","title":"Links"}},"type":"object","required":["title","links"],"title":"FooterLinkGroup","description":"Pydantic model for a footer link group."},"FooterPlugin":{"properties":{"name":{"type":"string","enum":["theme","orama","footer","site"],"title":"Name","default":"footer"},"links":{"items":{"$ref":"#/components/schemas/FooterLinkGroup"},"type":"array","title":"Links"},"copyright":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Copyright"},"active":{"type":"boolean","title":"Active","description":"Check if the plugin is active.\n\nReturns:\n    True if the plugin is active, False otherwise.","readOnly":true}},"type":"object","required":["active"],"title":"FooterPlugin","description":"Footer plugin model for vdoc."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"OramaDictionary":{"properties":{"search_placeholder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Placeholder"},"chat_placeholder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Placeholder"},"no_results_found":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"No Results Found"},"no_results_found_for":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"No Results Found For"},"suggestions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Suggestions"},"see_all":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"See All"},"add_more":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Add More"},"clear_chat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clear Chat"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"disclaimer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disclaimer"},"start_your_search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Your Search"},"init_error_search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Init Error Search"},"init_error_chat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Init Error Chat"},"chat_button_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Button Label"},"search_button_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Button Label"}},"type":"object","title":"OramaDictionary","description":"Custom text dictionary for localization."},"OramaPlugin":{"properties":{"name":{"type":"string","enum":["theme","orama","footer","site"],"title":"Name","default":"orama"},"endpoint":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}],"title":"Endpoint"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"disable_chat":{"type":"boolean","title":"Disable Chat","default":false},"facet_property":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Facet Property"},"dictionary":{"anyOf":[{"$ref":"#/components/schemas/OramaDictionary"},{"type":"null"}]},"active":{"type":"boolean","title":"Active","description":"Check if the plugin is active.\n\nReturns:\n    True if the plugin is active, False otherwise.","readOnly":true}},"type":"object","required":["active"],"title":"OramaPlugin","description":"Orama plugin model for vdoc."},"Project":{"properties":{"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name","description":"Returns the display name of the project if configured, otherwise the project name.\n\nReturns:\n    str: The project display name.","readOnly":true},"category_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Category Id","description":"Returns the category ID of the project if configured, otherwise None.\n\nReturns:\n    int | None: The optional project category ID.","readOnly":true}},"type":"object","required":["name","display_name","category_id"],"title":"Project","description":"Pydantic model for a project."},"ProjectCategory":{"properties":{"id":{"type":"integer","minimum":0.0,"title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"ProjectCategory","description":"Pydantic model for a project category."},"SitePlugin":{"properties":{"name":{"type":"string","enum":["theme","orama","footer","site"],"title":"Name","default":"site"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"long_description":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Long Description"},"show_on_landing_page":{"type":"boolean","title":"Show On Landing Page","default":true},"active":{"type":"boolean","title":"Active","description":"Check if the plugin is active.\n\nReturns:\n    True if the plugin is active, False otherwise.","readOnly":true}},"type":"object","required":["active"],"title":"SitePlugin","description":"Site plugin model for vdoc.\n\nWhat this instance of vdoc is, in its own words. vdoc itself cannot know: it is a generic\ndocumentation host, and the same build serves whoever deploys it.\n\nThe values are for both audiences at once. The landing page introduces itself with them, and\n``llms.txt`` uses them as its heading, its summary and the markdown below it, so a reader and an\nagent are told the same thing about where they have arrived."},"ThemePalette":{"properties":{"primary":{"anyOf":[{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"},{"type":"null"}],"title":"Primary"},"divider":{"anyOf":[{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"},{"type":"null"}],"title":"Divider"},"background_default":{"anyOf":[{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"},{"type":"null"}],"title":"Background Default"},"background_paper":{"anyOf":[{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"},{"type":"null"}],"title":"Background Paper"}},"type":"object","title":"ThemePalette","description":"The palette values a deployment may set, per color mode.\n\nThe names are the frontend's own palette slots, so there is nothing to translate between this and\nwhat is handed to the theme. Every value is optional, and ``None`` means \"leave the framework's own\ndefault alone\" -- which is what keeps vdoc unbranded until somebody says otherwise.\n\nAdding another value is a field here and one line in the frontend's theme builder."},"ThemePlugin":{"properties":{"name":{"type":"string","enum":["theme","orama","footer","site"],"title":"Name","default":"theme"},"light":{"$ref":"#/components/schemas/ThemeSettings","default":{"logo_url":"https://logos.vorausrobotik.com/v_rgb.png","logo_url_small":"https://logos.vorausrobotik.com/v_rgb.png","palette":{}}},"dark":{"$ref":"#/components/schemas/ThemeSettings","default":{"logo_url":"https://logos.vorausrobotik.com/v_rgb.png","logo_url_small":"https://logos.vorausrobotik.com/v_rgb.png","palette":{}}},"border_radius":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Border Radius"},"flat_cards":{"type":"boolean","title":"Flat Cards","default":false},"active":{"type":"boolean","title":"Active","description":"Check if the plugin is active.\n\nReturns:\n    True if the plugin is active, False otherwise.","readOnly":true}},"type":"object","required":["active"],"title":"ThemePlugin","description":"Theme plugin model for vdoc."},"ThemeSettings":{"properties":{"logo_url":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}],"title":"Logo Url","default":"https://logos.vorausrobotik.com/v_rgb.png"},"logo_url_small":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}],"title":"Logo Url Small","default":"https://logos.vorausrobotik.com/v_rgb.png"},"palette":{"$ref":"#/components/schemas/ThemePalette","default":{}}},"type":"object","title":"ThemeSettings","description":"Mode-based settings for the theme plugin."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBasic":{"type":"http","scheme":"basic"}}}}