---
"/biblios":
  post:
    x-mojo-to: Biblios#add
    operationId: addBiblio
    tags:
      - biblios
    summary: Add biblio
    description: |
      Add a bibliographic record to Koha. An optional `x-framework-id`
      may be passed to specify the cataloguing framework to be used (instead
      of the default).

      The request body is expected to contain a MARC record in the format specified in
      the `Content-type` header you pass. Possible values for this header and the corresponding
      record formats expected are listed below:

      * application/marcxml+xml: MARCXML
      * application/marc-in-json: MARC-in-JSON
      * application/marc: Raw USMARC binary data
    parameters:
      - $ref: "../swagger.yaml#/parameters/framework_id_header"
      - $ref: "../swagger.yaml#/parameters/marc_schema_header"
      - $ref: "../swagger.yaml#/parameters/confirm_not_duplicate_header"
      - $ref: "../swagger.yaml#/parameters/record_source_id_header"
    produces:
      - application/json
    responses:
      "200":
        description: A biblio
      "400":
        description: |
          Bad request. Possible `error_code` attribute values:

            * `record_creation_failed`: An error occurred during record creation. The cause could not be determined.
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "406":
        description: Not acceptable
        schema:
          type: array
          description: Accepted content-types
          items:
            type: string
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
    x-koha-authorization:
      permissions:
        editcatalogue: edit_catalogue
  get:
    x-mojo-to: Biblios#list
    operationId: listBiblio
    tags:
      - biblios
    summary: List biblios
    parameters:
      - $ref: "../swagger.yaml#/parameters/page"
      - $ref: "../swagger.yaml#/parameters/per_page"
      - $ref: "../swagger.yaml#/parameters/match"
      - $ref: "../swagger.yaml#/parameters/order_by"
      - $ref: "../swagger.yaml#/parameters/q_param"
      - $ref: "../swagger.yaml#/parameters/q_body"
      - $ref: "../swagger.yaml#/parameters/request_id_header"
    produces:
      - application/json
      - application/marcxml+xml
      - application/marc-in-json
      - application/marc
      - text/plain
    responses:
      "200":
        description: A list of biblios
      "400":
        description: |
          Bad request. Possible `error_code` attribute values:

            * `invalid_query`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Bibliographic record not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "406":
        description: Not acceptable
        schema:
          type: array
          description: Accepted content-types
          items:
            type: string
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
    x-koha-authorization:
      permissions:
        catalogue: "1"
"/biblios/{biblio_id}":
  get:
    x-mojo-to: Biblios#get
    operationId: getBiblio
    tags:
      - biblios
    summary: Get biblio
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
    produces:
      - application/json
      - application/marcxml+xml
      - application/marc-in-json
      - application/marc
      - text/plain
    responses:
      "200":
        description: A biblio
      "400":
        description: Bad request
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Bibliographic record not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "406":
        description: Not acceptable
        schema:
          type: array
          description: Accepted content-types
          items:
            type: string
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
    x-koha-authorization:
      permissions:
        catalogue: "1"
  delete:
    x-mojo-to: Biblios#delete
    operationId: deleteBiblio
    tags:
      - biblios
    summary: Delete biblio
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
    produces:
      - application/json
    responses:
      "204":
        description: Biblio deleted
        schema:
          type: string
      "400":
        description: Bad request
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Bibliographic record not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "409":
        description: Unable to perform action on biblio
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "500":
        description: Internal error
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
    x-koha-authorization:
      permissions:
        editcatalogue: edit_catalogue
  put:
    x-mojo-to: Biblios#update
    operationId: updateBiblio
    tags:
      - biblios
    summary: Update biblio
    description: |
      Updates a bibliographic record to Koha. An optional `x-framework-id`
      may be passed, to specify the cataloguing framework to be used (instead
      of the default).

      The request body is expected to contain a MARC record in the format specified by
      the `Content-type` header passed. Possible values for this headers and the corresponding
      record formats expected are listed below:

      * application/marcxml+xml: MARCXML
      * application/marc-in-json: MARC-in-JSON
      * application/marc: Raw USMARC binary data
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
      - $ref: "../swagger.yaml#/parameters/framework_id_header"
      - $ref: "../swagger.yaml#/parameters/marc_schema_header"
      - $ref: "../swagger.yaml#/parameters/confirm_not_duplicate_header"
    produces:
      - application/json
    responses:
      "200":
        description: A biblio
      "400":
        description: Bad request
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Bibliographic record not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "406":
        description: Not acceptable
        schema:
          type: array
          description: Accepted content-types
          items:
            type: string
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
    x-koha-authorization:
      permissions:
        editcatalogue: edit_catalogue
"/biblios/{biblio_id}/bookings":
  get:
    x-mojo-to: Biblios#get_bookings
    operationId: getBiblioBookings
    tags:
      - bookings
    summary: Get bookings for a biblio
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
      - $ref: "../swagger.yaml#/parameters/match"
      - $ref: "../swagger.yaml#/parameters/order_by"
      - $ref: "../swagger.yaml#/parameters/page"
      - $ref: "../swagger.yaml#/parameters/per_page"
      - $ref: "../swagger.yaml#/parameters/q_param"
      - $ref: "../swagger.yaml#/parameters/q_body"
      - name: x-koha-embed
        in: header
        required: false
        description: Embed list sent as a request header
        type: array
        items:
          type: string
          enum:
            - item
            - patron
            - pickup_library
        collectionFormat: csv
    consumes:
      - application/json
    produces:
      - application/json
    responses:
      "200":
        description: A list of the bookings attached to the record
        schema:
          type: array
          items:
            $ref: ../swagger.yaml#/definitions/booking
      "400":
        description: |
          Bad request. Possible `error_code` attribute values:

            * `invalid_query`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: ../swagger.yaml#/definitions/error
      "403":
        description: Access forbidden
        schema:
          $ref: ../swagger.yaml#/definitions/error
      "404":
        description: Bibliographic record not found
        schema:
          $ref: ../swagger.yaml#/definitions/error
      "406":
        description: Not acceptable
        schema:
          type: array
          description: Accepted content-types
          items:
            type: string
      "500":
        description: Internal server error
        schema:
          $ref: ../swagger.yaml#/definitions/error
      "503":
        description: Under maintenance
        schema:
          $ref: ../swagger.yaml#/definitions/error
    x-koha-authorization:
      permissions:
        circulate: "manage_bookings"
"/biblios/{biblio_id}/checkouts":
  get:
    x-mojo-to: Biblios#get_checkouts
    operationId: listBiblioCheckouts
    tags:
      - checkouts
    summary: List checkouts for a biblio
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
      - $ref: "../swagger.yaml#/parameters/page"
      - $ref: "../swagger.yaml#/parameters/per_page"
      - $ref: "../swagger.yaml#/parameters/match"
      - $ref: "../swagger.yaml#/parameters/order_by"
      - $ref: "../swagger.yaml#/parameters/q_param"
      - $ref: "../swagger.yaml#/parameters/q_body"
      - $ref: "../swagger.yaml#/parameters/request_id_header"
      - name: x-koha-embed
        in: header
        required: false
        description: Embed list sent as a request header
        type: array
        items:
          type: string
          enum:
            - issuer
            - item
            - patron
            - library
        collectionFormat: csv
      - name: checked_in
        in: query
        description:
          By default, current checkouts are returned, when this is true then
          checked in checkouts are returned as result.
        type: boolean
    produces:
      - application/json
    responses:
      "200":
        description: A list of checkouts
        schema:
          $ref: "../swagger.yaml#/definitions/checkouts"
      "400":
        description: |
          Bad request. Possible `error_code` attribute values:

            * `invalid_query`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Bibliographic record not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
    x-koha-authorization:
      permissions:
        - circulate: circulate_remaining_permissions
        - circulate: manage_bookings
"/biblios/{biblio_id}/items":
  get:
    x-mojo-to: Biblios#get_items
    operationId: getBiblioItems
    tags:
      - biblios
    summary: Get items for a biblio
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
      - name: x-koha-embed
        in: header
        required: false
        description: Embed list sent as a request header
        type: array
        items:
          type: string
          enum:
            - +strings
            - _status
            - home_library
            - holding_library
            - biblio.title
            - checkout
            - checkout.patron
            - transfer
            - transfer+strings
            - first_hold
            - first_hold+strings
            - first_hold.patron
            - first_hold.desk
            - recall
            - recall+strings
            - recall.patron
            - item_type
            - in_bundle
            - bundle_host
            - bundle_host.biblio
            - bundle_items_lost+count
            - bundle_items_not_lost+count
            - course_item.course_reserves.course
            - analytics_count
            - cover_image_ids
            - item_group_item.item_group.description
            - serial_item.serial
            - return_claims
            - effective_bookable
        collectionFormat: csv
      - $ref: "../swagger.yaml#/parameters/match"
      - $ref: "../swagger.yaml#/parameters/order_by"
      - $ref: "../swagger.yaml#/parameters/page"
      - $ref: "../swagger.yaml#/parameters/per_page"
      - $ref: "../swagger.yaml#/parameters/q_param"
      - $ref: "../swagger.yaml#/parameters/q_body"
      - $ref: "../swagger.yaml#/parameters/request_id_header"
      - name: bookable
        in: query
        description: Limit to items that are bookable
        required: false
        type: boolean
    consumes:
      - application/json
    produces:
      - application/json
    responses:
      "200":
        description: A list of the items attached to the record
        schema:
          type: array
          items:
            $ref: "../swagger.yaml#/definitions/item"
      "400":
        description: |
          Bad request. Possible `error_code` attribute values:

            * `invalid_query`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Bibliographic record not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "406":
        description: Not acceptable
        schema:
          type: array
          description: Accepted content-types
          items:
            type: string
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
    x-koha-authorization:
      permissions:
        catalogue: "1"
  post:
    x-mojo-to: Biblios#add_item
    operationId: addBiblioItem
    tags:
      - biblios
    summary: Add an item for a biblio
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
      - name: body
        in: body
        description: A JSON object containing information about the new item
        required: true
        schema:
          $ref: "../swagger.yaml#/definitions/item"
    produces:
      - application/json
    responses:
      "201":
        description: Item added
        schema:
          $ref: "../swagger.yaml#/definitions/item"
      "400":
        description: Bad request
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "409":
        description: Conflict
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
    x-koha-authorization:
      permissions:
        editcatalogue: edit_items
"/biblios/{biblio_id}/items/{item_id}":
  put:
    x-mojo-to: Biblios#update_item
    operationId: updateBiblioItem
    tags:
      - biblios
    summary: Update an item for a biblio
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
      - $ref: "../swagger.yaml#/parameters/item_id_pp"
      - name: body
        in: body
        description: A JSON object containing information about the item
        required: true
        schema:
          $ref: "../swagger.yaml#/definitions/item"
    produces:
      - application/json
    responses:
      "200":
        description: Item updated
        schema:
          $ref: "../swagger.yaml#/definitions/item"
      "400":
        description: Bad request
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "409":
        description: Conflict
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
    x-koha-authorization:
      permissions:
        editcatalogue: edit_items
"/biblios/{biblio_id}/pickup_locations":
  get:
    x-mojo-to: Biblios#pickup_locations
    operationId: getBiblioPickupLocations
    tags:
      - biblios
    summary: Get valid pickup locations for a biblio
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
      - name: patron_id
        in: query
        description: Internal patron identifier
        required: true
        type: integer
      - $ref: "../swagger.yaml#/parameters/match"
      - $ref: "../swagger.yaml#/parameters/order_by"
      - $ref: "../swagger.yaml#/parameters/page"
      - $ref: "../swagger.yaml#/parameters/per_page"
      - $ref: "../swagger.yaml#/parameters/q_param"
      - $ref: "../swagger.yaml#/parameters/q_body"
    consumes:
      - application/json
    produces:
      - application/json
    responses:
      "200":
        description: Biblio pickup locations
        schema:
          type: array
          items:
            $ref: "../swagger.yaml#/definitions/library"
      "400":
        description: |
          Bad request. Possible `error_code` attribute values:

            * `invalid_query`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Bibliographic record not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
    x-koha-authorization:
      permissions:
        reserveforothers: place_holds
"/public/biblios/{biblio_id}":
  get:
    x-mojo-to: Biblios#get_public
    operationId: getBiblioPublic
    tags:
      - biblios
    summary: Get biblio (public)
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
    produces:
      - application/marcxml+xml
      - application/marc-in-json
      - application/marc
      - text/plain
    responses:
      "200":
        description: A biblio
      "400":
        description: Bad request
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Bibliographic record not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "406":
        description: Not acceptable
        schema:
          type: array
          description: Accepted content-types
          items:
            type: string
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
"/public/biblios/{biblio_id}/items":
  get:
    x-mojo-to: Biblios#get_items_public
    operationId: getBiblioItemsPublic
    tags:
      - biblios
      - items
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
      - $ref: "../swagger.yaml#/parameters/match"
      - $ref: "../swagger.yaml#/parameters/order_by"
      - $ref: "../swagger.yaml#/parameters/page"
      - $ref: "../swagger.yaml#/parameters/per_page"
      - $ref: "../swagger.yaml#/parameters/q_param"
      - $ref: "../swagger.yaml#/parameters/q_body"
      - name: x-koha-embed
        in: header
        required: false
        description: Embed list sent as a request header
        type: array
        items:
          type: string
          enum:
            - +strings
        collectionFormat: csv
    consumes:
      - application/json
    produces:
      - application/json
    responses:
      "200":
        description: A list of the items attached to the record
        schema:
          type: array
          items:
            $ref: "../swagger.yaml#/definitions/item"
      "400":
        description: |
          Bad request. Possible `error_code` attribute values:

            * `invalid_query`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Bibliographic record not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "406":
        description: Not acceptable
        schema:
          type: array
          description: Accepted content-types
          items:
            type: string
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
"/public/biblios/{biblio_id}/ratings":
  post:
    x-mojo-to: Biblios#set_rating
    operationId: setBiblioRating
    tags:
      - biblios
    summary: set biblio rating (public)
    parameters:
      - $ref: "../swagger.yaml#/parameters/biblio_id_pp"
      - name: body
        in: body
        description: A JSON object containing rating information
        schema:
          type: object
          properties:
            rating:
              description: the rating
              type:
                - integer
                - "null"
          required:
            - rating
          additionalProperties: false
    produces:
      - application/json
    responses:
      "200":
        description: Rating set
        schema:
          type: object
          properties:
            rating:
              description: user's rating
              type:
                - number
                - "null"
            average:
              description: average rating
              type: number
            count:
              description: number of ratings
              type: integer
          additionalProperties: false
      "400":
        description: Bad request
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "401":
        description: Authentication required
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "403":
        description: Access forbidden
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "404":
        description: Bibliographic record not found
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "500":
        description: |
          Internal server error. Possible `error_code` attribute values:

          * `internal_server_error`
        schema:
          $ref: "../swagger.yaml#/definitions/error"
      "503":
        description: Under maintenance
        schema:
          $ref: "../swagger.yaml#/definitions/error"
