6 $ref: ./definitions/account_line.yaml
8 $ref: ./definitions/advancededitormacro.yaml
10 $ref: ./definitions/allows_renewal.yaml
12 $ref: ./definitions/basket.yaml
14 $ref: ./definitions/cashup.yaml
16 $ref: ./definitions/checkout.yaml
18 $ref: ./definitions/checkouts.yaml
20 $ref: ./definitions/circ-rule-kind.yaml
22 $ref: ./definitions/city.yaml
24 $ref: ./definitions/error.yaml
26 $ref: ./definitions/fund.yaml
28 $ref: ./definitions/hold.yaml
30 $ref: ./definitions/holds.yaml
32 $ref: ./definitions/ill_backend.yaml
34 $ref: ./definitions/ill_backends.yaml
36 $ref: ./definitions/import_batch_profile.yaml
37 import_batch_profiles:
38 $ref: ./definitions/import_batch_profiles.yaml
40 $ref: ./definitions/import_record_match.yaml
42 $ref: ./definitions/invoice.yaml
44 $ref: ./definitions/item.yaml
46 $ref: ./definitions/library.yaml
48 $ref: ./definitions/order.yaml
50 $ref: ./definitions/patron.yaml
51 patron_account_credit:
52 $ref: ./definitions/patron_account_credit.yaml
54 $ref: ./definitions/patron_balance.yaml
55 patron_extended_attribute:
56 $ref: ./definitions/patron_extended_attribute.yaml
58 $ref: ./definitions/quote.yaml
60 $ref: ./definitions/return_claim.yaml
62 $ref: ./definitions/smtp_server.yaml
64 $ref: ./definitions/suggestion.yaml
66 $ref: ./definitions/transfer_limit.yaml
68 $ref: ./definitions/vendor.yaml
70 /acquisitions/baskets/managers:
71 $ref: paths/acquisitions_baskets.yaml#/~1acquisitions~1baskets~1managers
73 $ref: ./paths/acquisitions_funds.yaml#/~1acquisitions~1funds
74 /acquisitions/funds/owners:
75 $ref: paths/acquisitions_funds.yaml#/~1acquisitions~1funds~1owners
76 /acquisitions/funds/users:
77 $ref: paths/acquisitions_funds.yaml#/~1acquisitions~1funds~1users
79 $ref: ./paths/acquisitions_orders.yaml#/~1acquisitions~1orders
80 "/acquisitions/orders/{order_id}":
81 $ref: "./paths/acquisitions_orders.yaml#/~1acquisitions~1orders~1{order_id}"
82 /acquisitions/vendors:
83 $ref: ./paths/acquisitions_vendors.yaml#/~1acquisitions~1vendors
84 "/acquisitions/vendors/{vendor_id}":
85 $ref: "./paths/acquisitions_vendors.yaml#/~1acquisitions~1vendors~1{vendor_id}"
86 /advanced_editor/macros:
87 $ref: ./paths/advancededitormacros.yaml#/~1advanced_editor~1macros
88 /advanced_editor/macros/shared:
89 $ref: ./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1shared
90 "/advanced_editor/macros/shared/{advancededitormacro_id}":
91 $ref: "./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1shared~1{advancededitormacro_id}"
92 "/advanced_editor/macros/{advancededitormacro_id}":
93 $ref: "./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1{advancededitormacro_id}"
94 "/article_requests/{article_request_id}":
95 $ref: "./paths/article_requests.yaml#/~1article_requests~1{article_request_id}"
96 "/biblios/{biblio_id}":
97 $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}"
98 "/biblios/{biblio_id}/checkouts":
99 $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1checkouts"
100 "/biblios/{biblio_id}/items":
101 $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1items"
102 "/biblios/{biblio_id}/pickup_locations":
103 $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1pickup_locations"
104 "/cash_registers/{cash_register_id}/cashups":
105 $ref: "./paths/cash_registers.yaml#/~1cash_registers~1{cash_register_id}~1cashups"
106 "/cashups/{cashup_id}":
107 $ref: "./paths/cash_registers.yaml#/~1cashups~1{cashup_id}"
109 $ref: ./paths/checkouts.yaml#/~1checkouts
110 "/checkouts/{checkout_id}":
111 $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}"
112 "/checkouts/{checkout_id}/allows_renewal":
113 $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1allows_renewal"
114 "/checkouts/{checkout_id}/renewal":
115 $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1renewal"
116 /circulation-rules/kinds:
117 $ref: ./paths/circulation-rules.yaml#/~1circulation-rules~1kinds
119 $ref: ./paths/cities.yaml#/~1cities
121 $ref: "./paths/cities.yaml#/~1cities~1{city_id}"
122 "/clubs/{club_id}/holds":
123 $ref: "./paths/clubs.yaml#/~1clubs~1{club_id}~1holds"
124 /config/smtp_servers:
125 $ref: ./paths/config_smtp_servers.yaml#/~1config~1smtp_servers
126 "/config/smtp_servers/{smtp_server_id}":
127 $ref: "./paths/config_smtp_servers.yaml#/~1config~1smtp_servers~1{smtp_server_id}"
129 $ref: ./paths/holds.yaml#/~1holds
131 $ref: "./paths/holds.yaml#/~1holds~1{hold_id}"
132 "/holds/{hold_id}/pickup_location":
133 $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1pickup_location"
134 "/holds/{hold_id}/pickup_locations":
135 $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1pickup_locations"
136 "/holds/{hold_id}/priority":
137 $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1priority"
138 "/holds/{hold_id}/suspension":
139 $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1suspension"
141 $ref: ./paths/ill_backends.yaml#/~1ill_backends
142 "/ill_backends/{ill_backend_id}":
143 $ref: "./paths/ill_backends.yaml#/~1ill_backends~1{ill_backend_id}"
145 $ref: ./paths/illrequests.yaml#/~1illrequests
146 "/import/{import_batch_id}/records/{import_record_id}/matches/chosen":
147 $ref: "./paths/import_record_matches.yaml#/~1import~1{import_batch_id}~1records~1{import_record_id}~1matches~1chosen"
148 /import_batch_profiles:
149 $ref: ./paths/import_batch_profiles.yaml#/~1import_batch_profiles
150 "/import_batch_profiles/{import_batch_profile_id}":
151 $ref: "./paths/import_batch_profiles.yaml#/~1import_batch_profiles~1{import_batch_profile_id}"
153 $ref: ./paths/items.yaml#/~1items
155 $ref: "./paths/items.yaml#/~1items~1{item_id}"
156 "/items/{item_id}/pickup_locations":
157 $ref: "./paths/items.yaml#/~1items~1{item_id}~1pickup_locations"
159 $ref: ./paths/libraries.yaml#/~1libraries
160 "/libraries/{library_id}":
161 $ref: "./paths/libraries.yaml#/~1libraries~1{library_id}"
163 $ref: ./paths/oauth.yaml#/~1oauth~1token
165 $ref: ./paths/patrons.yaml#/~1patrons
166 "/patrons/{patron_id}":
167 $ref: "./paths/patrons.yaml#/~1patrons~1{patron_id}"
168 "/patrons/{patron_id}/account":
169 $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account"
170 "/patrons/{patron_id}/account/credits":
171 $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account~1credits"
172 "/patrons/{patron_id}/extended_attributes":
173 $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes"
174 "/patrons/{patron_id}/extended_attributes/{extended_attribute_id}":
175 $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes~1{extended_attribute_id}"
176 "/patrons/{patron_id}/holds":
177 $ref: "./paths/patrons_holds.yaml#/~1patrons~1{patron_id}~1holds"
178 "/patrons/{patron_id}/password":
179 $ref: "./paths/patrons_password.yaml#/~1patrons~1{patron_id}~1password"
180 "/patrons/{patron_id}/password/expiration_date":
181 $ref: "./paths/patrons_password.yaml#/~1patrons~1{patron_id}~1password~1expiration_date"
182 "/public/biblios/{biblio_id}":
183 $ref: "./paths/biblios.yaml#/~1public~1biblios~1{biblio_id}"
184 "/public/biblios/{biblio_id}/items":
185 $ref: "./paths/biblios.yaml#/~1public~1biblios~1{biblio_id}~1items"
187 $ref: ./paths/libraries.yaml#/~1public~1libraries
188 "/public/libraries/{library_id}":
189 $ref: "./paths/libraries.yaml#/~1public~1libraries~1{library_id}"
190 "/public/patrons/{patron_id}/article_requests/{article_request_id}":
191 $ref: "./paths/article_requests.yaml#/~1public~1patrons~1{patron_id}~1article_requests~1{article_request_id}"
192 "/public/patrons/{patron_id}/guarantors/can_see_charges":
193 $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1guarantors~1can_see_charges"
194 "/public/patrons/{patron_id}/guarantors/can_see_checkouts":
195 $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1guarantors~1can_see_checkouts"
196 "/public/patrons/{patron_id}/password":
197 $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1password"
199 $ref: ./paths/quotes.yaml#/~1quotes
200 "/quotes/{quote_id}":
201 $ref: "./paths/quotes.yaml#/~1quotes~1{quote_id}"
203 $ref: ./paths/return_claims.yaml#/~1return_claims
204 "/return_claims/{claim_id}":
205 $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}"
206 "/return_claims/{claim_id}/notes":
207 $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}~1notes"
208 "/return_claims/{claim_id}/resolve":
209 $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}~1resolve"
210 "/rotas/{rota_id}/stages/{stage_id}/position":
211 $ref: "./paths/rotas.yaml#/~1rotas~1{rota_id}~1stages~1{stage_id}~1position"
213 $ref: ./paths/suggestions.yaml#/~1suggestions
214 "/suggestions/{suggestion_id}":
215 $ref: "./paths/suggestions.yaml#/~1suggestions~1{suggestion_id}"
216 /suggestions/managers:
217 $ref: paths/suggestions.yaml#/~1suggestions~1managers
219 $ref: ./paths/transfer_limits.yaml#/~1transfer_limits
220 /transfer_limits/batch:
221 $ref: ./paths/transfer_limits.yaml#/~1transfer_limits~1batch
222 "/transfer_limits/{limit_id}":
223 $ref: "./paths/transfer_limits.yaml#/~1transfer_limits~1{limit_id}"
225 advancededitormacro_id_pp:
226 description: Advanced editor macro internal identifier
228 name: advancededitormacro_id
232 description: Record internal identifier
237 candidate_match_id_pp:
238 description: Internal import record match identifier
240 name: candidate_match_id
244 description: Cash register internal identifier
246 name: cash_register_id
250 description: Cashup internal identifier
256 description: Internal checkout identifier
262 description: City internal identifier
268 description: Internal club identifier
280 description: Internal hold identifier
285 import_batch_profile_id_pp:
286 description: Internal profile identifier
288 name: import_batch_profile_id
292 description: Internal import record identifier
294 name: import_record_id
298 description: Internal item identifier
304 description: Internal library identifier
310 description: Matching criteria
321 collectionFormat: csv
322 description: Sorting criteria
330 description: Internal order identifier
336 description: "Page number, for paginated object listing"
342 description: Internal patron identifier
348 description: Internal patron identifier
353 description: "Page size, for paginated object listing"
359 description: Query filter sent through request"s body
366 description: Query filter sent as a request header
372 description: Query filter sent as a request parameter
379 collectionFormat: multi
381 description: Quote internal identifier
387 description: Request id header
389 name: x-koha-request-id
393 description: Item was seen flag
399 description: SMTP server internal identifier
405 description: Internal suggestion identifier
410 transfer_limit_id_pp:
411 description: Internal transfer limit identifier
417 description: Vendor id
427 url: http://www.gnu.org/licenses/gpl.txt
429 name: Koha Development Team
430 url: https://koha-community.org/
434 This API is documented in **OpenAPI format**.
438 The API supports the following authentication mechanisms
440 * HTTP Basic authentication
441 * OAuth2 (client credentials grant)
444 Both _Basic authentication_ and the _OAuth2_ flow, need to be enabled
445 by system preferences.
449 The API uses standard HTTP status codes to indicate the success or failure
450 of the API call. The body of the response will be JSON in the following format:
454 "error": "Current settings prevent the passed due date to be applied",
455 "error_code": "invalid_due_date"
459 Note: Some routes might offer additional attributes in their error responses but that"s
460 subject to change and thus not documented.
462 ## Filtering responses
464 The API allows for some advanced response filtering using a JSON based query syntax. The
465 query can be added to the requests:
467 * as a query parameter `q=`
468 * in the request body
469 * in a special header `x-koha-query`
471 For simple field equality matches we can use `{ "fieldname": "value" }` where the fieldname
472 matches one of the fields as described in the particular endpoints response object.
474 We can refine that with more complex matching clauses by nesting a the clause into the
475 object; `{ "fieldname": { "clause": "value" } }`.
477 Available matching clauses include ">", "<", ">=", "<=", "-like", and "-not_like".
479 We can filter on multiple fields by adding them to the JSON respresentation. Adding at `HASH`
480 level will result in an "AND" query, whilst combinding them in an `ARRAY` wilth result in an
481 "OR" query: `{ "field1": "value2", "field2": "value2" }` will filter the response to only those
482 results with both field1 containing value2 AND field2 containing value2 for example.
484 Additionally, if you are requesting related data be embedded into the response one can query
485 on the related data using dot notation in the field names.
489 The following request would return any patron with firstname "Henry" and lastname "Acevedo";
491 `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": "Acevedo", "firstname": "Henry" }"`
493 The following request would return any patron whose lastname begins with "Ace";
495 `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": { "-like": "Ace%" }"`
497 The following request would return any patron whose lastname is "Acevedo" OR "Bernardo"
499 `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": [ "Acevedo", "Bernardo" ] }"`
501 The following request embeds the related patron extended attributes data and filters on it.
503 `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" }'`
509 This optional header allows the api consumer to request additional related data
510 to be returned in the api response. It also allows for cross referencing in the
511 queries as described above. It accepts a comma delimited list of relation names.
513 Relations may on occasion also support dot delimited nesting to allow traversal.
517 This optional header should be passed to give your api request a library
518 context; If it is not included in the request, then the request context
519 will default to using your api comsumer"s assigned home library.
521 - description: "Manage article requests\n"
522 name: article_requests
523 x-displayName: Article requests
524 - description: "Manage bibliographic records\n"
526 x-displayName: Biblios
527 - description: "Manage cash register cashups\n"
529 x-displayName: Cashups
530 - description: "Manage checkouts\n"
532 x-displayName: Checkouts
533 - description: "Manage circulation rules\n"
534 name: circulation_rules
535 x-displayName: Circulation rules
536 - description: "Manage cities\n"
538 x-displayName: Cities
539 - description: "Manage patron clubs\n"
542 - description: "Manage funds for the acquisitions module\n"
545 - description: "Manage holds\n"
548 - description: "Manage ILL module backends\n"
550 x-displayName: ILL backends
551 - description: "Manage ILL requests\n"
553 x-displayName: ILL requests
554 - description: "Manage import batches\n"
556 x-display-name: Import batches
557 - description: "Manage items\n"
560 - description: "Manage libraries\n"
562 x-displayName: Libraries
563 - description: "Manage macros\n"
565 x-displayName: Macros
566 - description: "Manage acquisition orders\n"
568 x-displayName: Orders
569 - description: "Handle OAuth flows\n"
572 - description: "Manage patrons\n"
574 x-displayName: Patrons
575 - description: "Manage quotes\n"
577 x-displayName: Quotes
578 - description: "Manage return claims\n"
580 x-displayName: Return claims
581 - description: "Manage rotas\n"
584 - description: "Manage SMTP servers configurations\n"
586 x-displayName: SMTP servers
587 - description: "Manage transfer limits\n"
589 x-displayName: Transfer limits
590 - description: "Manage purchase suggestions\n"
592 x-displayName: Purchase suggestions
593 - description: "Manage vendors for the acquisitions module\n"
595 x-displayName: Vendors
596 - description: "Manage batch import profiles\n"
597 name: batch_import_profiles
598 x-displayName: Batch import profiles