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/bundle_link.yaml
16 $ref: ./definitions/cashup.yaml
18 $ref: ./definitions/checkout.yaml
20 $ref: ./definitions/checkouts.yaml
22 $ref: ./definitions/circ-rule-kind.yaml
24 $ref: ./definitions/city.yaml
26 $ref: ./definitions/error.yaml
28 $ref: ./definitions/fund.yaml
30 $ref: ./definitions/hold.yaml
32 $ref: ./definitions/holds.yaml
34 $ref: ./definitions/ill_backend.yaml
36 $ref: ./definitions/ill_backends.yaml
38 $ref: ./definitions/import_batch_profile.yaml
39 import_batch_profiles:
40 $ref: ./definitions/import_batch_profiles.yaml
42 $ref: ./definitions/import_record_match.yaml
44 $ref: ./definitions/invoice.yaml
46 $ref: ./definitions/item.yaml
48 $ref: ./definitions/item_group.yaml
50 $ref: ./definitions/job.yaml
52 $ref: ./definitions/library.yaml
54 $ref: ./definitions/order.yaml
56 $ref: ./definitions/patron.yaml
57 patron_account_credit:
58 $ref: ./definitions/patron_account_credit.yaml
60 $ref: ./definitions/patron_balance.yaml
61 patron_extended_attribute:
62 $ref: ./definitions/patron_extended_attribute.yaml
64 $ref: ./definitions/quote.yaml
66 $ref: ./definitions/renewal.yaml
68 $ref: ./definitions/renewals.yaml
70 $ref: ./definitions/return_claim.yaml
72 $ref: ./definitions/search_filter.yaml
74 $ref: ./definitions/smtp_server.yaml
76 $ref: ./definitions/suggestion.yaml
78 $ref: ./definitions/transfer_limit.yaml
80 $ref: ./definitions/vendor.yaml
82 /acquisitions/baskets/managers:
83 $ref: paths/acquisitions_baskets.yaml#/~1acquisitions~1baskets~1managers
85 $ref: ./paths/acquisitions_funds.yaml#/~1acquisitions~1funds
86 /acquisitions/funds/owners:
87 $ref: paths/acquisitions_funds.yaml#/~1acquisitions~1funds~1owners
88 /acquisitions/funds/users:
89 $ref: paths/acquisitions_funds.yaml#/~1acquisitions~1funds~1users
91 $ref: ./paths/acquisitions_orders.yaml#/~1acquisitions~1orders
92 "/acquisitions/orders/{order_id}":
93 $ref: "./paths/acquisitions_orders.yaml#/~1acquisitions~1orders~1{order_id}"
94 /acquisitions/vendors:
95 $ref: ./paths/acquisitions_vendors.yaml#/~1acquisitions~1vendors
96 "/acquisitions/vendors/{vendor_id}":
97 $ref: "./paths/acquisitions_vendors.yaml#/~1acquisitions~1vendors~1{vendor_id}"
98 /advanced_editor/macros:
99 $ref: ./paths/advancededitormacros.yaml#/~1advanced_editor~1macros
100 /advanced_editor/macros/shared:
101 $ref: ./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1shared
103 $ref: ./paths/search_filters.yaml#/~1search_filters
104 "/search_filters/{search_filter_id}":
105 $ref: "./paths/search_filters.yaml#/~1search_filters~1{search_filter_id}"
106 "/advanced_editor/macros/shared/{advancededitormacro_id}":
107 $ref: "./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1shared~1{advancededitormacro_id}"
108 "/advanced_editor/macros/{advancededitormacro_id}":
109 $ref: "./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1{advancededitormacro_id}"
110 "/article_requests/{article_request_id}":
111 $ref: "./paths/article_requests.yaml#/~1article_requests~1{article_request_id}"
112 /auth/otp/token_delivery:
113 $ref: paths/auth.yaml#/~1auth~1otp~1token_delivery
114 "/biblios/{biblio_id}":
115 $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}"
116 "/biblios/{biblio_id}/checkouts":
117 $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1checkouts"
118 "/biblios/{biblio_id}/items":
119 $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1items"
120 "/biblios/{biblio_id}/pickup_locations":
121 $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1pickup_locations"
122 "/biblios/{biblio_id}/item_groups":
123 $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups"
124 "/biblios/{biblio_id}/item_groups/{item_group_id}":
125 $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups~1{item_group_id}"
126 "/biblios/{biblio_id}/item_groups/{item_group_id}/items":
127 $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups~1{item_group_id}~1items"
128 "/biblios/{biblio_id}/item_groups/{item_group_id}/items/{item_id}":
129 $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups~1{item_group_id}~1items~1{item_id}"
130 "/cash_registers/{cash_register_id}/cashups":
131 $ref: "./paths/cash_registers.yaml#/~1cash_registers~1{cash_register_id}~1cashups"
132 "/cashups/{cashup_id}":
133 $ref: "./paths/cash_registers.yaml#/~1cashups~1{cashup_id}"
135 $ref: ./paths/checkouts.yaml#/~1checkouts
136 "/checkouts/{checkout_id}":
137 $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}"
138 "/checkouts/{checkout_id}/allows_renewal":
139 $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1allows_renewal"
140 "/checkouts/{checkout_id}/renewals":
141 $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1renewals"
142 "/checkouts/{checkout_id}/renewal":
143 $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1renewal"
144 /circulation-rules/kinds:
145 $ref: ./paths/circulation-rules.yaml#/~1circulation-rules~1kinds
147 $ref: ./paths/cities.yaml#/~1cities
149 $ref: "./paths/cities.yaml#/~1cities~1{city_id}"
150 "/clubs/{club_id}/holds":
151 $ref: "./paths/clubs.yaml#/~1clubs~1{club_id}~1holds"
152 /config/smtp_servers:
153 $ref: ./paths/config_smtp_servers.yaml#/~1config~1smtp_servers
154 "/config/smtp_servers/{smtp_server_id}":
155 $ref: "./paths/config_smtp_servers.yaml#/~1config~1smtp_servers~1{smtp_server_id}"
157 $ref: ./paths/holds.yaml#/~1holds
159 $ref: "./paths/holds.yaml#/~1holds~1{hold_id}"
160 "/holds/{hold_id}/pickup_location":
161 $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1pickup_location"
162 "/holds/{hold_id}/pickup_locations":
163 $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1pickup_locations"
164 "/holds/{hold_id}/priority":
165 $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1priority"
166 "/holds/{hold_id}/suspension":
167 $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1suspension"
169 $ref: ./paths/ill_backends.yaml#/~1ill_backends
170 "/ill_backends/{ill_backend_id}":
171 $ref: "./paths/ill_backends.yaml#/~1ill_backends~1{ill_backend_id}"
173 $ref: ./paths/illrequests.yaml#/~1illrequests
174 "/import_batches/{import_batch_id}/records/{import_record_id}/matches/chosen":
175 $ref: "./paths/import_batches.yaml#/~1import_batches~1{import_batch_id}~1records~1{import_record_id}~1matches~1chosen"
176 /import_batch_profiles:
177 $ref: ./paths/import_batch_profiles.yaml#/~1import_batch_profiles
178 "/import_batch_profiles/{import_batch_profile_id}":
179 $ref: "./paths/import_batch_profiles.yaml#/~1import_batch_profiles~1{import_batch_profile_id}"
181 $ref: ./paths/items.yaml#/~1items
183 $ref: "./paths/items.yaml#/~1items~1{item_id}"
184 "/items/{item_id}/bundled_items":
185 $ref: ./paths/items.yaml#/~1items~1{item_id}~1bundled_items
186 "/items/{item_id}/bundled_items/{bundled_item_id}":
187 $ref: ./paths/items.yaml#/~1items~1{item_id}~1bundled_items~1{bundled_item_id}
188 "/items/{item_id}/pickup_locations":
189 $ref: "./paths/items.yaml#/~1items~1{item_id}~1pickup_locations"
191 $ref: ./paths/jobs.yaml#/~1jobs
193 $ref: "./paths/jobs.yaml#/~1jobs~1{job_id}"
195 $ref: ./paths/libraries.yaml#/~1libraries
196 "/libraries/{library_id}":
197 $ref: "./paths/libraries.yaml#/~1libraries~1{library_id}"
199 $ref: ./paths/oauth.yaml#/~1oauth~1token
201 $ref: ./paths/patrons.yaml#/~1patrons
202 "/patrons/{patron_id}":
203 $ref: "./paths/patrons.yaml#/~1patrons~1{patron_id}"
204 "/patrons/{patron_id}/account":
205 $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account"
206 "/patrons/{patron_id}/account/credits":
207 $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account~1credits"
208 "/patrons/{patron_id}/extended_attributes":
209 $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes"
210 "/patrons/{patron_id}/extended_attributes/{extended_attribute_id}":
211 $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes~1{extended_attribute_id}"
212 "/patrons/{patron_id}/holds":
213 $ref: "./paths/patrons_holds.yaml#/~1patrons~1{patron_id}~1holds"
214 "/patrons/{patron_id}/password":
215 $ref: "./paths/patrons_password.yaml#/~1patrons~1{patron_id}~1password"
216 "/patrons/{patron_id}/password/expiration_date":
217 $ref: "./paths/patrons_password.yaml#/~1patrons~1{patron_id}~1password~1expiration_date"
218 "/public/biblios/{biblio_id}":
219 $ref: "./paths/biblios.yaml#/~1public~1biblios~1{biblio_id}"
220 "/public/biblios/{biblio_id}/items":
221 $ref: "./paths/biblios.yaml#/~1public~1biblios~1{biblio_id}~1items"
222 "/public/biblios/{biblio_id}/ratings":
223 $ref: "./paths/biblios.yaml#/~1public~1biblios~1{biblio_id}~1ratings"
225 $ref: ./paths/libraries.yaml#/~1public~1libraries
226 "/public/libraries/{library_id}":
227 $ref: "./paths/libraries.yaml#/~1public~1libraries~1{library_id}"
228 "/public/patrons/{patron_id}/article_requests/{article_request_id}":
229 $ref: "./paths/article_requests.yaml#/~1public~1patrons~1{patron_id}~1article_requests~1{article_request_id}"
230 "/public/patrons/{patron_id}/guarantors/can_see_charges":
231 $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1guarantors~1can_see_charges"
232 "/public/patrons/{patron_id}/guarantors/can_see_checkouts":
233 $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1guarantors~1can_see_checkouts"
234 "/public/patrons/{patron_id}/password":
235 $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1password"
237 $ref: ./paths/quotes.yaml#/~1quotes
238 "/quotes/{quote_id}":
239 $ref: "./paths/quotes.yaml#/~1quotes~1{quote_id}"
241 $ref: ./paths/return_claims.yaml#/~1return_claims
242 "/return_claims/{claim_id}":
243 $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}"
244 "/return_claims/{claim_id}/notes":
245 $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}~1notes"
246 "/return_claims/{claim_id}/resolve":
247 $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}~1resolve"
248 "/rotas/{rota_id}/stages/{stage_id}/position":
249 $ref: "./paths/rotas.yaml#/~1rotas~1{rota_id}~1stages~1{stage_id}~1position"
251 $ref: ./paths/suggestions.yaml#/~1suggestions
252 "/suggestions/{suggestion_id}":
253 $ref: "./paths/suggestions.yaml#/~1suggestions~1{suggestion_id}"
254 /suggestions/managers:
255 $ref: paths/suggestions.yaml#/~1suggestions~1managers
257 $ref: ./paths/transfer_limits.yaml#/~1transfer_limits
258 /transfer_limits/batch:
259 $ref: ./paths/transfer_limits.yaml#/~1transfer_limits~1batch
260 "/transfer_limits/{limit_id}":
261 $ref: "./paths/transfer_limits.yaml#/~1transfer_limits~1{limit_id}"
263 advancededitormacro_id_pp:
264 description: Advanced editor macro internal identifier
266 name: advancededitormacro_id
270 description: Record internal identifier
275 candidate_match_id_pp:
276 description: Internal import record match identifier
278 name: candidate_match_id
282 description: Cash register internal identifier
284 name: cash_register_id
288 description: Cashup internal identifier
294 description: Internal checkout identifier
300 description: City internal identifier
306 description: Internal club identifier
318 description: Internal hold identifier
323 import_batch_profile_id_pp:
324 description: Internal profile identifier
326 name: import_batch_profile_id
330 description: Internal import record identifier
332 name: import_record_id
336 description: Internal item identifier
342 description: Job internal identifier
348 description: Internal library identifier
354 description: Matching criteria
365 collectionFormat: csv
366 description: Sorting criteria
374 description: Internal order identifier
380 description: "Page number, for paginated object listing"
386 description: Internal patron identifier
392 description: Internal patron identifier
397 description: "Page size, for paginated object listing"
403 description: Query filter sent through request"s body
410 description: Query filter sent as a request header
416 description: Query filter sent as a request parameter
423 collectionFormat: multi
425 description: Quote internal identifier
431 description: Request id header
433 name: x-koha-request-id
437 name: search_filter_id
439 description: Search filter internal identifier
443 description: Item was seen flag
449 description: SMTP server internal identifier
455 description: Internal suggestion identifier
460 transfer_limit_id_pp:
461 description: Internal transfer limit identifier
467 description: Vendor id
477 url: http://www.gnu.org/licenses/gpl.txt
479 name: Koha Development Team
480 url: https://koha-community.org/
484 This API is documented in **OpenAPI format**.
488 The API supports the following authentication mechanisms
490 * HTTP Basic authentication
491 * OAuth2 (client credentials grant)
494 Both _Basic authentication_ and the _OAuth2_ flow, need to be enabled
495 by system preferences.
499 The API uses standard HTTP status codes to indicate the success or failure
500 of the API call. The body of the response will be JSON in the following format:
504 "error": "Current settings prevent the passed due date to be applied",
505 "error_code": "invalid_due_date"
509 Note: Some routes might offer additional attributes in their error responses but that"s
510 subject to change and thus not documented.
512 ## Filtering responses
514 The API allows for some advanced response filtering using a JSON based query syntax. The
515 query can be added to the requests:
517 * as a query parameter `q=`
518 * in the request body
519 * in a special header `x-koha-query`
521 For simple field equality matches we can use `{ "fieldname": "value" }` where the fieldname
522 matches one of the fields as described in the particular endpoints response object.
524 We can refine that with more complex matching clauses by nesting a the clause into the
525 object; `{ "fieldname": { "clause": "value" } }`.
527 Available matching clauses include ">", "<", ">=", "<=", "-like", and "-not_like".
529 We can filter on multiple fields by adding them to the JSON respresentation. Adding at `HASH`
530 level will result in an "AND" query, whilst combinding them in an `ARRAY` wilth result in an
531 "OR" query: `{ "field1": "value2", "field2": "value2" }` will filter the response to only those
532 results with both field1 containing value2 AND field2 containing value2 for example.
534 Additionally, if you are requesting related data be embedded into the response one can query
535 on the related data using dot notation in the field names.
539 The following request would return any patron with firstname "Henry" and lastname "Acevedo";
541 `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": "Acevedo", "firstname": "Henry" }"`
543 The following request would return any patron whose lastname begins with "Ace";
545 `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": { "-like": "Ace%" }"`
547 The following request would return any patron whose lastname is "Acevedo" OR "Bernardo"
549 `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": [ "Acevedo", "Bernardo" ] }"`
551 The following request embeds the related patron extended attributes data and filters on it.
553 `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" }'`
559 This optional header allows the api consumer to request additional related data
560 to be returned in the api response. It also allows for cross referencing in the
561 queries as described above. It accepts a comma delimited list of relation names.
563 Relations may on occasion also support dot delimited nesting to allow traversal.
567 This optional header should be passed to give your api request a library
568 context; If it is not included in the request, then the request context
569 will default to using your api comsumer"s assigned home library.
571 - description: "Handle two factor authentication flows\n"
573 x-displayName: Two factor authentication
574 - description: "Manage article requests\n"
575 name: article_requests
576 x-displayName: Article requests
577 - description: "Manage baskets for the acquisitions module\n"
579 x-displayName: Baskets
580 - description: "Manage bibliographic records\n"
582 x-displayName: Biblios
583 - description: "Manage cash register cashups\n"
585 x-displayName: Cashups
586 - description: "Manage checkouts\n"
588 x-displayName: Checkouts
589 - description: "Manage circulation rules\n"
590 name: circulation_rules
591 x-displayName: Circulation rules
592 - description: "Manage cities\n"
594 x-displayName: Cities
595 - description: "Manage patron clubs\n"
598 - description: "Manage funds for the acquisitions module\n"
601 - description: "Manage holds\n"
604 - description: "Manage ILL module backends\n"
606 x-displayName: ILL backends
607 - description: "Manage ILL requests\n"
609 x-displayName: ILL requests
610 - description: "Manage import batches\n"
612 x-display-name: Import batches
613 - description: "Manage item groups\n"
615 x-displayName: Item groups
616 - description: "Manage items\n"
619 - description: "Manage jobs\n"
622 - description: "Manage libraries\n"
624 x-displayName: Libraries
625 - description: "Manage macros\n"
627 x-displayName: Macros
628 - description: "Manage acquisition orders\n"
630 x-displayName: Orders
631 - description: "Handle OAuth flows\n"
634 - description: "Manage patrons\n"
636 x-displayName: Patrons
637 - description: "Manage quotes\n"
639 x-displayName: Quotes
640 - description: "Manage return claims\n"
642 x-displayName: Return claims
643 - description: "Manage rotas\n"
646 - description: "Manage SMTP servers configurations\n"
648 x-displayName: SMTP servers
649 - description: "Manage transfer limits\n"
651 x-displayName: Transfer limits
652 - description: "Manage purchase suggestions\n"
654 x-displayName: Purchase suggestions
655 - description: "Manage vendors for the acquisitions module\n"
657 x-displayName: Vendors
658 - description: "Manage batch import profiles\n"
659 name: batch_import_profiles
660 x-displayName: Batch import profiles