🏡 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
    capability modules through `GET /server` and never sniff versions.

    Enums are open: new values may be added to any enum within v1. Clients must
    accept values they do not recognise instead of failing.

    Every operation declares `x-stability-level`: `alpha` operations may change or
    disappear without notice, `beta` and `stable` operations only change additively.
    A level is only ever raised, never lowered.

    `HEAD` is accepted wherever `GET` is. A `405` response lists the allowed methods
    in its `Allow` header.
  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.
        Authenticated requests will additionally receive the implemented capability modules
        once authentication is available.
      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
            beyond its HTTP status code, which RFC 9457 defines as `about:blank`. Problems with their
            own semantics get their own URI; switch on `code` instead.
        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