openapi: 3.0.3 info: contact: name: Koha Development Team url: https://koha-community.org/ description: "## Background\n\nThe API supports two sets of endpoints, one targetted at library staff and the other at at library users.\n\nThose endpoints under the `/public` path are aimed at delivering functionality tailored to library users and offer\na more restricted set of functions, overrides and data in thier responses for data privacy and library policy\nreasons. Many of these endpoints do not require authentication for fetching public data, though an authenticated\nsession will expose additional options and allow users to see more data where it is part of their own record.\n\nAll other endpoints are targetted at the staff interface level and allow for additional functionality and a more\nunrestricted view of data. These endpoints, however, have a level of redaction built in for resources that the\napi consumer should not have access to. For example, user data for users who do not belong to the same library\nor library group of your api user will be reduced to just minimum neccesary for a valid response. Object keys will\nbe consistent for all responses, but their values may be removed depending on access.\n\n## Authentication\n\nThe API supports the following authentication mechanisms\n\n* HTTP Basic authentication\n* OAuth2 (client credentials grant)\n* Cookie-based\n\nBoth _Basic authentication_ and the _OAuth2_ flow, need to be enabled\nby system preferences.\n\n## Authorization\n\nThe API uses existing user profiles to restrict access to resources based on user permissions and the library the\nAPI user is assigned to. This may result, at times, in resources being returned in a redacted form with all keys\npresent but sensative values nulled.\n\nWe do not yet support OAuth Scopes or the Authorization Code grant flow.\n\n## Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure\nof the API call. The body of the response will be JSON in the following format:\n\n```\n{\n \"error\": \"Current settings prevent the passed due date to be applied\",\n \"error_code\": \"invalid_due_date\"\n}\n```\n\nNote: Some routes might offer additional attributes in their error responses but that\"s\nsubject to change and thus not documented.\n\n## Filtering responses\n\nThe API allows for some advanced response filtering using a JSON based query syntax. The\nquery can be added to the requests:\n\n* as a query parameter `q=`\n* in the request body\n\nFor simple field equality matches we can use `{ \"fieldname\": \"value\" }` where the fieldname\nmatches one of the fields as described in the particular endpoints response object.\n\nWe can refine that with more complex matching clauses by nesting a the clause into the\nobject; `{ \"fieldname\": { \"clause\": \"value\" } }`.\n\nAvailable matching clauses include `=`, `!=`, `<`, `>`, `<=`, `>=` and `-not`. We also support `-like`\nand `-not_like` string comparisons with `%` used to denote wildcards, thus you can pass\n`{ \"fieldname\": { \"-like\": \"value%\" } }` to do a 'starts with' string match for example.\n\nWe can filter on multiple fields by adding them to the JSON respresentation. Adding at `HASH`\nlevel will result in an \"AND\" query, whilst combinding them in an `ARRAY` will result in an\n\"OR\" query: `{ \"field1\": \"value2\", \"field2\": \"value2\" }` will filter the response to only those\nresults with both field1 containing value2 AND field2 containing value2 for example.\n\nThere is a collection of special operators also available to you, including:\n\n* `-in` - Expects an array of values to perform an OR match against\n* `-not_in` - Expects an array of values to perform a NOR match against\n* `-between` - Expects two values which the value of the field is expected to fall between\n* `-not_between` - Expects two values which the value of the field is expected to fall outside of\n* `-ident` - Expects a second field name to match the two field values against\n* `-regexp` - Expects a perl compatible regular expression for which the value should match\n\nLogic and nesting is also supported and you may use `-and` and `-or` to change the logic of an ARRAY\nor HASH as described above.\n\nAdditionally, if you are requesting related data be embedded into the response one can query\non the related data using dot notation in the field names.\n\n### Examples\n\nThe following request would return any patron with firstname \"Henry\" and lastname \"Acevedo\";\n\n`curl -u koha:koha --request GET \"http://127.0.0.1:8081/api/v1/patrons/\" --data-raw '{ \"surname\": \"Acevedo\", \"firstname\": \"Henry\" }'`\n\nThe following request would return any patron whose lastname begins with \"Ace\";\n\n`curl -u koha:koha --request GET \"http://127.0.0.1:8081/api/v1/patrons/\" --data-raw '{ \"surname\": { \"-like\": \"Ace%\" }'`\n\nThe following request would return any patron whose lastname is \"Acevedo\" OR \"Bernardo\"\n\n`curl -u koha:koha --request GET \"http://127.0.0.1:8081/api/v1/patrons/\" --data-raw '{ \"surname\": [ \"Acevedo\", \"Bernardo\" ] }'`\n\nThe following request embeds the related patron extended attributes data and filters on it.\n\n`curl -u koha:koha =--request GET 'http://127.0.0.1:8081/api/v1/patrons/' --header 'x-koha-embed: extended_attributes' --data-raw '{ \"extended_attributes.code\": \"internet\", \"extended_attributes.attribute\": \"1\" }'`\n\n## Special headers\n\n### x-koha-embed\n\nThis optional header allows the api consumer to request additional related data\nto be returned in the api response. It also allows for cross referencing in the\nqueries as described above. It accepts a comma delimited list of relation names.\n\nRelations may on occasion also support dot delimited nesting to allow traversal.\n\n### x-koha-library\n\nThis optional header should be passed to give your api request a library\ncontext; If it is not included in the request, then the request context\nwill default to using your api comsumer\"s assigned home library.\n" license: name: GPL v3, url: http://www.gnu.org/licenses/gpl.txt title: Koha REST 2fa suggestions API version: '1' servers: - url: https://libserv.iitk.ac.in/api/v1 description: PKK Library Koha REST API (production) tags: - description: 'Manage purchase suggestions ' name: suggestions x-displayName: Purchase suggestions paths: /suggestions: get: tags: - suggestions summary: List purchase suggestions description: This resource returns a list of purchase suggestions operationId: listSuggestions parameters: - name: _match in: query required: false description: Matching criteria schema: type: string enum: - contains - exact - starts_with - ends_with - name: _order_by in: query required: false description: Sorting criteria schema: type: array items: type: string - name: _page in: query required: false description: Page number, for paginated object listing schema: type: integer - name: _per_page in: query required: false description: Page size, for paginated object listing schema: type: integer - name: q in: query required: false description: Query filter sent as a request parameter style: form explode: true schema: type: array items: type: string - name: x-koha-request-id in: header required: false description: Request id header schema: type: integer requestBody: required: false content: application/json: schema: type: object description: Query filter sent through request"s body responses: '200': description: A list of suggestions content: application/json: schema: items: $ref: '#/components/schemas/suggestion_yaml' type: array '400': description: "Bad request. Possible `error_code` attribute values:\n\n * `invalid_query`\n" content: application/json: schema: $ref: '#/components/schemas/error_yaml' '401': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '403': description: Access forbidden content: application/json: schema: $ref: '#/components/schemas/error_yaml' '404': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '500': description: 'Internal server error. Possible `error_code` attribute values: * `internal_server_error` ' content: application/json: schema: $ref: '#/components/schemas/error_yaml' '501': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '503': description: Under maintenance content: application/json: schema: $ref: '#/components/schemas/error_yaml' post: tags: - suggestions summary: Add a purchase suggestion description: This resource accepts a new purchase suggestion and creates it operationId: addSuggestions parameters: - name: x-koha-override in: header required: false description: Overrides list sent as a request header schema: type: array items: enum: - any - max_total - max_pending type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/suggestion_yaml' description: A JSON object containing informations about the new suggestion responses: '201': description: Suggestion added content: application/json: schema: $ref: '#/components/schemas/suggestion_yaml' '400': description: 'Bad request. Possible `error_code` attribute values: * `max_total_reached` * `max_pending_reached` ' content: application/json: schema: $ref: '#/components/schemas/error_yaml' '401': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '403': description: Access forbidden content: application/json: schema: $ref: '#/components/schemas/error_yaml' '404': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '500': description: 'Internal server error. Possible `error_code` attribute values: * `internal_server_error` ' content: application/json: schema: $ref: '#/components/schemas/error_yaml' '501': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '503': description: Under maintenance content: application/json: schema: $ref: '#/components/schemas/error_yaml' /suggestions/managers: get: tags: - suggestions summary: List possibe managers for suggestions description: This resource returns a list of patron allowed to be a manager for suggestions operationId: listSuggestionsManagers parameters: - name: _match in: query required: false description: Matching criteria schema: type: string enum: - contains - exact - starts_with - ends_with - name: _order_by in: query required: false description: Sorting criteria schema: type: array items: type: string - name: _page in: query required: false description: Page number, for paginated object listing schema: type: integer - name: _per_page in: query required: false description: Page size, for paginated object listing schema: type: integer - name: q in: query required: false description: Query filter sent as a request parameter style: form explode: true schema: type: array items: type: string - name: x-koha-embed in: header required: false description: Embed list sent as a request header schema: type: array items: enum: - extended_attributes type: string requestBody: required: false content: application/json: schema: type: object description: Query filter sent through request"s body responses: '200': description: A list of suggestions' managers content: application/json: schema: items: $ref: '#/components/schemas/patron_yaml' type: array '400': description: "Bad request. Possible `error_code` attribute values:\n\n * `invalid_query`\n" content: application/json: schema: $ref: '#/components/schemas/error_yaml' '401': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '403': description: Access forbidden content: application/json: schema: $ref: '#/components/schemas/error_yaml' '404': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '500': description: 'Internal server error. Possible `error_code` attribute values: * `internal_server_error` ' content: application/json: schema: $ref: '#/components/schemas/error_yaml' '501': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '503': description: Under maintenance content: application/json: schema: $ref: '#/components/schemas/error_yaml' /suggestions/{suggestion_id}: delete: tags: - suggestions summary: Delete purchase suggestion description: This resource deletes an existing purchase suggestion operationId: deleteSuggestion parameters: - name: suggestion_id in: path required: true description: Internal suggestion identifier schema: type: integer responses: '204': description: Suggestion deleted content: application/json: schema: type: string '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/error_yaml' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/error_yaml' '403': description: Access forbidden content: application/json: schema: $ref: '#/components/schemas/error_yaml' '404': description: Suggestion not found content: application/json: schema: $ref: '#/components/schemas/error_yaml' '500': description: 'Internal server error. Possible `error_code` attribute values: * `internal_server_error` ' content: application/json: schema: $ref: '#/components/schemas/error_yaml' '501': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '503': description: Under maintenance content: application/json: schema: $ref: '#/components/schemas/error_yaml' get: tags: - suggestions summary: Get purchase suggestion description: This resource gives access to a specific purchase suggestion operationId: getSuggestion parameters: - name: suggestion_id in: path required: true description: Internal suggestion identifier schema: type: integer responses: '200': description: A suggestion content: application/json: schema: $ref: '#/components/schemas/suggestion_yaml' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/error_yaml' '401': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '403': description: Access forbidden content: application/json: schema: $ref: '#/components/schemas/error_yaml' '404': description: Suggestion not found content: application/json: schema: $ref: '#/components/schemas/error_yaml' '500': description: 'Internal server error. Possible `error_code` attribute values: * `internal_server_error` ' content: application/json: schema: $ref: '#/components/schemas/error_yaml' '501': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '503': description: Under maintenance content: application/json: schema: $ref: '#/components/schemas/error_yaml' put: tags: - suggestions summary: Update purchase suggestion description: This resource allows updating an existing purchase suggestion operationId: updateSuggestion parameters: - name: suggestion_id in: path required: true description: Internal suggestion identifier schema: type: integer requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/suggestion_yaml' description: A JSON object containing informations about the new hold responses: '200': description: A suggestion content: application/json: schema: $ref: '#/components/schemas/suggestion_yaml' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/error_yaml' '401': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '403': description: Access forbidden content: application/json: schema: $ref: '#/components/schemas/error_yaml' '404': description: Suggestion not found content: application/json: schema: $ref: '#/components/schemas/error_yaml' '500': description: 'Internal server error. Possible `error_code` attribute values: * `internal_server_error` ' content: application/json: schema: $ref: '#/components/schemas/error_yaml' '501': description: Default response. content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '503': description: Under maintenance content: application/json: schema: $ref: '#/components/schemas/error_yaml' components: schemas: error_yaml: additionalProperties: true properties: error: description: Error message type: string error_code: description: Error code type: string type: object patron_yaml: additionalProperties: false properties: _strings: description: A list of stringified coded values type: - object - 'null' account_balance: description: Balance of the patron's account type: - number - 'null' address: description: first address line of patron's primary address type: - string - 'null' address2: description: second address line of patron's primary address type: - string - 'null' altaddress_address: description: first address line of patron's alternate address type: - string - 'null' altaddress_address2: description: second address line of patron's alternate address type: - string - 'null' altaddress_city: description: city or town of patron's alternate address type: - string - 'null' altaddress_country: description: country of patron's alternate address type: - string - 'null' altaddress_email: description: email address for patron's alternate address type: - string - 'null' altaddress_notes: description: a note related to patron's alternate address type: - string - 'null' altaddress_phone: description: phone number for patron's alternate address type: - string - 'null' altaddress_postal_code: description: zip or postal code of patron's alternate address type: - string - 'null' altaddress_state: description: state or province of patron's alternate address type: - string - 'null' altaddress_street_number: description: street number of patron's alternate address type: - string - 'null' altaddress_street_type: description: street type of patron's alternate address type: - string - 'null' altcontact_address: description: the first address line for the alternate contact for the patron type: - string - 'null' altcontact_address2: description: the second address line for the alternate contact for the patron type: - string - 'null' altcontact_city: description: the city for the alternate contact for the patron type: - string - 'null' altcontact_country: description: the country for the alternate contact for the patron type: - string - 'null' altcontact_firstname: description: first name of alternate contact for the patron type: - string - 'null' altcontact_phone: description: the phone number for the alternate contact for the patron type: - string - 'null' altcontact_postal_code: description: the zipcode for the alternate contact for the patron type: - string - 'null' altcontact_state: description: the state for the alternate contact for the patron type: - string - 'null' altcontact_surname: description: surname or last name of the alternate contact for the patron type: - string - 'null' anonymized: description: If the patron has been anonymized readOnly: true type: boolean autorenew_checkouts: description: indicate whether auto-renewal is allowed for patron type: boolean cardnumber: description: library assigned user identifier type: - string - 'null' category_id: description: Internal identifier for the patron's category type: string check_previous_checkout: description: produce a warning for this patron if this item has previously been checked out to this patron if 'yes', not if 'no', defer to category setting if 'inherit' type: string checkouts_count: description: Number of checkouts type: - integer - 'null' city: description: city or town of patron's primary address type: - string - 'null' country: description: country of patron's primary address type: - string - 'null' date_enrolled: description: date the patron was added to Koha format: date type: - string - 'null' date_of_birth: description: patron's date of birth format: date type: - string - 'null' date_renewed: description: date the patron's card was last renewed format: date type: - string - 'null' email: description: primary email address for patron's primary address type: - string - 'null' expiry_date: description: date the patron's card is set to expire format: date type: - string - 'null' extended_attributes: description: patron's extended attributes items: $ref: '#/components/schemas/patron_extended_attribute_yaml' type: array fax: description: fax number for patron's primary address type: - string - 'null' firstname: description: patron's first name type: - string - 'null' gender: description: patron's gender type: - string - 'null' incorrect_address: description: set to 1 if library marked this patron as having an unconfirmed address type: - boolean - 'null' initials: description: initials of the patron type: - string - 'null' lang: description: lang to use to send notices to this patron type: string last_seen: description: last time a patron has been seen (connected at the OPAC or staff interface) format: date-time type: - string - 'null' library: description: Library of the patron type: - object - 'null' library_id: description: Internal identifier for the patron's home library type: string login_attempts: description: number of failed login attemps type: - integer - 'null' middle_name: description: patron's middle name type: - string - 'null' mobile: description: the other phone number for patron's primary address type: - string - 'null' opac_notes: description: a note on the patron's account visible in OPAC and staff interface type: - string - 'null' other_name: description: any other names associated with the patron type: - string - 'null' overdrive_auth_token: description: persist OverDrive auth token type: - string - 'null' overdues_count: description: Number of overdued checkouts type: - integer - 'null' patron_card_lost: description: set to 1 if library marked this patron as having lost his card type: - boolean - 'null' patron_id: description: Internal patron identifier type: integer phone: description: primary phone number for patron's primary address type: - string - 'null' postal_code: description: zip or postal code of patron's primary address type: - string - 'null' privacy: description: patron's privacy settings related to their checkout history type: integer privacy_guarantor_checkouts: description: controls if relatives can see this patron's checkouts type: integer privacy_guarantor_fines: description: controls if relatives can see this patron's fines type: boolean pronouns: description: pronouns of the patron type: - string - 'null' protected: description: Protected status of the patron type: - boolean relationship_type: description: used for children to include the relationship to their guarantor type: - string - 'null' restricted: description: If any restriction applies to the patron readOnly: true type: boolean secondary_email: description: secondary email address for patron's primary address type: - string - 'null' secondary_phone: description: secondary phone number for patron's primary address type: - string - 'null' sms_number: description: the mobile phone number where the patron would like to receive notices (if SMS turned on) type: - string - 'null' sms_provider_id: description: the provider of the mobile phone number defined in smsalertnumber type: - integer - 'null' staff_notes: description: a note on the patron's account type: - string - 'null' state: description: state or province of patron's primary address type: - string - 'null' statistics_1: description: a field that can be used for any information unique to the library type: - string - 'null' statistics_2: description: a field that can be used for any information unique to the library type: - string - 'null' street_number: description: street number of patron's primary address type: - string - 'null' street_type: description: street type of patron's primary address type: - string - 'null' surname: description: patron's last name type: - string - 'null' title: description: patron's title type: - string - 'null' updated_on: description: time of last change could be useful for synchronization with external systems (among others) format: date-time type: string userid: description: patron's login type: - string - 'null' required: - surname - library_id - category_id type: object patron_extended_attribute_yaml: additionalProperties: false properties: extended_attribute_id: description: Internal ID for the extended attribute type: integer type: description: Extended attribute type type: string value: description: Extended attribute value type: - string - 'null' required: - type - value type: object suggestion_yaml: additionalProperties: false properties: accepted_by: description: patron_id for the librarian who accepted the suggestion, foreign key linking to the borrowers table type: - integer - 'null' accepted_date: description: date the suggestion was marked as accepted format: date type: - string - 'null' archived: description: archived (processed) suggestion type: - boolean - 'null' author: description: author of the suggested item type: - string - 'null' biblio_id: description: foreign key linking the suggestion to the biblio table after the suggestion has been ordered type: - integer - 'null' budget_id: description: foreign key linking the suggested budget to the aqbudgets table type: - integer - 'null' collection_title: description: collection name for the suggested item type: - string - 'null' copyright_date: description: copyright date of the suggested item type: - integer - 'null' currency: description: suggested currency for the suggested price type: - string - 'null' isbn: description: isbn of the suggested item type: - string - 'null' item_price: description: suggested price type: - number - 'null' item_type: description: suggested item type type: - string - 'null' last_status_change_by: description: patron the suggestion was last modified by type: - integer - 'null' last_status_change_date: description: date the suggestion was last modified format: date type: - string - 'null' library_id: description: foreign key linking the suggested branch to the branches table type: - string - 'null' managed_by: description: patron_id for the librarian managing the suggestion, foreign key linking to the borrowers table type: - integer - 'null' managed_date: description: date the suggestion was updated format: date type: - string - 'null' note: description: note entered on the suggestion type: - string - 'null' patron_reason: description: reason for making the suggestion type: - string - 'null' publication_place: description: publication place of the suggested item type: - string - 'null' publication_year: description: year of publication type: - string - 'null' publisher_code: description: publisher of the suggested item type: - string - 'null' quantity: description: suggested quantity to be purchased type: - string - 'null' reason: description: reason for accepting or rejecting the suggestion type: - string - 'null' rejected_by: description: patron_id for the librarian who rejected the suggestion, foreign key linking to the borrowers table type: - integer - 'null' rejected_date: description: date the suggestion was marked as rejected format: date type: - string - 'null' staff_note: description: non-public note entered on the suggestion type: - string - 'null' status: description: 'Suggestion status. Possible values are: * `ASKED` * `CHECKED` * `ACCEPTED` * `REJECTED` * `ORDERED` * `AVAILABLE` * Values from the `SUGGEST_STATUS` av category ' type: string suggested_by: description: patron_id for the person making the suggestion, foreign key linking to the borrowers table type: - integer - 'null' suggestion_date: description: the suggestion was submitted format: date type: string suggestion_id: description: unique identifier assigned automatically by Koha readOnly: true type: integer timestamp: description: timestamp of date created format: date-time type: - string - 'null' title: description: title of the suggested item type: - string - 'null' total_price: description: suggested total cost (price*quantity updated for currency) type: - string - 'null' volume_desc: description: volume description type: - string - 'null' type: object DefaultResponse: properties: errors: items: properties: message: type: string path: type: string required: - message type: object type: array required: - errors type: object