🏡 index : quine-global/quintodrome.git

{
  "openapi": "3.0.3",
  "info": {
    "title": "Navidrome API",
    "version": "1.0.0",
    "description": "Navidrome API v1. Spec-first, additive within v1. Clients discover implemented\ncapability modules through `GET /server` and never sniff versions.\n\nEnums are open: new values may be added to any enum within v1. Clients must\naccept values they do not recognise instead of failing.\n\nEvery operation declares `x-stability-level`: `alpha` operations may change or\ndisappear without notice, `beta` and `stable` operations only change additively.\nA level is only ever raised, never lowered.\n\n`HEAD` is accepted wherever `GET` is. A `405` response lists the allowed methods\nin its `Allow` header.\n",
    "license": {
      "name": "GPL-3.0",
      "url": "https://www.gnu.org/licenses/gpl-3.0.html"
    }
  },
  "servers": [
    {
      "url": "/api/v1"
    }
  ],
  "tags": [
    {
      "name": "server",
      "description": "Server discovery and the published OpenAPI document."
    }
  ],
  "paths": {
    "/server": {
      "get": {
        "operationId": "getServerInfo",
        "x-module": "core",
        "x-stability-level": "alpha",
        "tags": [
          "server"
        ],
        "summary": "Describe the server",
        "description": "Returns the public server description. No authentication required.\nAuthenticated requests will additionally receive the implemented capability modules\nonce authentication is available.\n",
        "responses": {
          "200": {
            "description": "Server description.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServerInfo"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "getOpenAPISpecJSON",
        "x-module": "core",
        "x-stability-level": "alpha",
        "tags": [
          "server"
        ],
        "summary": "Get the OpenAPI document (JSON)",
        "description": "The bundled OpenAPI document of the running server version. Supports ETag revalidation.",
        "responses": {
          "200": {
            "description": "The OpenAPI document.",
            "headers": {
              "ETag": {
                "$ref": "#/components/headers/ETag"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "OpenAPI 3.0 document."
                }
              }
            }
          },
          "304": {
            "$ref": "#/components/responses/NotModified"
          }
        }
      }
    },
    "/openapi.yaml": {
      "get": {
        "operationId": "getOpenAPISpecYAML",
        "x-module": "core",
        "x-stability-level": "alpha",
        "tags": [
          "server"
        ],
        "summary": "Get the OpenAPI document (YAML)",
        "description": "The bundled OpenAPI document of the running server version. Supports ETag revalidation.",
        "responses": {
          "200": {
            "description": "The OpenAPI document.",
            "headers": {
              "ETag": {
                "$ref": "#/components/headers/ETag"
              }
            },
            "content": {
              "application/yaml": {
                "schema": {
                  "type": "object",
                  "description": "OpenAPI 3.0 document."
                }
              }
            }
          },
          "304": {
            "$ref": "#/components/responses/NotModified"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Short-lived access token minted from a device grant. Not yet applied to any operation."
      }
    },
    "schemas": {
      "ServerInfo": {
        "type": "object",
        "description": "Public server description. Everything an add-server screen needs before login.",
        "required": [
          "name",
          "serverVersion",
          "specVersion",
          "setupRequired",
          "loginMethods"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Human-readable server product name."
          },
          "serverVersion": {
            "type": "string",
            "description": "Version of the running server build."
          },
          "specVersion": {
            "type": "string",
            "description": "Version of the OpenAPI document this server implements."
          },
          "setupRequired": {
            "type": "boolean",
            "description": "True until the first admin user has been created."
          },
          "loginMethods": {
            "type": "array",
            "description": "Login methods this server accepts. New methods may be added; clients ignore values they do not recognise.",
            "items": {
              "type": "string",
              "enum": [
                "password"
              ]
            }
          }
        }
      },
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details, returned for every 4xx and 5xx response.",
        "required": [
          "title",
          "status",
          "code"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "URI reference identifying the problem type. Omitted while the problem carries no semantics\nbeyond its HTTP status code, which RFC 9457 defines as `about:blank`. Problems with their\nown semantics get their own URI; switch on `code` instead.\n"
          },
          "title": {
            "type": "string",
            "description": "Short human-readable summary, the same for all occurrences of this problem type."
          },
          "status": {
            "type": "integer",
            "description": "HTTP status code of this response."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation specific to this occurrence. Omitted for internal errors."
          },
          "code": {
            "type": "string",
            "description": "Machine-readable error code, and the value clients switch on. New codes may be added.",
            "enum": [
              "validation",
              "unauthorized",
              "forbidden",
              "not_found",
              "method_not_allowed",
              "unavailable",
              "internal"
            ]
          },
          "errors": {
            "type": "array",
            "description": "Per-field failures. Present only when `code` is `validation`.",
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            }
          }
        }
      },
      "ValidationError": {
        "type": "object",
        "description": "One field-level validation failure.",
        "required": [
          "field",
          "message"
        ],
        "properties": {
          "field": {
            "type": "string",
            "description": "Name of the offending query parameter, path parameter, or body field (dotted for nested)."
          },
          "message": {
            "type": "string",
            "description": "Why the value was rejected."
          }
        }
      }
    },
    "responses": {
      "InternalError": {
        "description": "Unexpected server failure. Details are in the server log.",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            }
          }
        }
      },
      "NotModified": {
        "description": "Not modified.",
        "headers": {
          "ETag": {
            "$ref": "#/components/headers/ETag"
          }
        }
      }
    },
    "headers": {
      "ETag": {
        "description": "Entity tag for `If-None-Match` revalidation.",
        "schema": {
          "type": "string"
        }
      }
    }
  }
}