openapi: 3.0.0

servers:
  - url: https://example.com
    description: Local server

info:
  title: Custom Metadata Provider
  version: 0.1.0
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT

security:
  - api_key: []

paths:
  /search:
    get:
      description: Search for books
      operationId: search
      summary: Search for books
      security:
        - api_key: []

      parameters:
        - name: query
          in: query
          required: true
          schema:
            type: string
        - name: author
          in: query
          required: false
          schema:
            type: string

      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  matches:
                    type: array
                    items:
                      $ref: "#/components/schemas/BookMetadata"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
        "500":
          description: Internal Server Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
components:
  securitySchemes:
    api_key:
      type: apiKey
      name: AUTHORIZATION
      in: header

  schemas:
    BookMetadata:
      type: object
      required:
        - title
      properties:
        title:
          type: string
        subtitle:
          type: string
        author:
          type: string
        narrator:
          type: string
        publisher:
          type: string
        publishedYear:
          type: string
        description:
          type: string
        cover:
          type: string
          description: URL to the cover image
        isbn:
          type: string
          format: isbn
        asin:
          type: string
          format: asin
        genres:
          type: array
          items:
            type: string
        tags:
          type: array
          items:
            type: string
        series:
          type: array
          items:
            $ref: "#/components/schemas/SeriesMetadata"
        language:
          type: string
        duration:
          type: integer
          format: int64
          description: Duration in seconds

    SeriesMetadata:
      type: object
      required:
        - series
      properties:
        series:
          type: string
        sequence:
          type: string